プログラミングの難しさと奥の深さに辟易しているどうも僕です。
今回はプログラミングを覚えたくてXcodeをインストールしつつ、開いても意味不明でそっと閉じてしまう方向けに、自分がどうやってちょっとだけ書けるようになったかを書いていきます。
前提スキル
いくら初心者だといえども、これだけはやれるようになっとけという必要スキルを列挙。
とは言っても、ブログ主の主観だけど。
ブラインドタッチ
キーボードを見ないでキーを打てるくらいじゃないと話にならない。
PCに対する慣れがそれくらい必要。
Excelの関数がある程度使える
Excelのセルの中にIF文やROUNDUP文とかを書き込む事が出来て、正しく使用できる理解力が必要。
プログラミングは基本文字列を書き込むことに終始することになる。
なのでExcelでIF文などをどう使うか理解出来る程度の下地が無いと相当きつい。
Google先生で調べる力
実装したい機能があってもやり方がわからない。
そういう時にGoogle先生を使って答えを導き出す力が必要。
プログラミングが出来る ≠ アプリを作れる
プログラミングとは言っても出来ることは山のようにあるので、どこまで行くとプログラマなんだ?といっても誰も明確な答えは無いと思うんだよね。
医者になりたい!って思っても、歯医者もいれば、内科の先生もいる。
外科、産婦人科、麻酔科、精神科等々、ありとあらゆる種類がある。
それを全部マスターするなんてブラックジャックじゃないと無理。
当然プログラマでも得意とする分野や苦手な分野、そして簡単なプログラミングもあれば難しいプログラミングもある。
HelloWorldは指に絆創膏を貼るくらい簡単だが、Photoshopなどのアプリケーションは心臓外科手術並み。
個人で作ることはほぼ不可能。
実際自分がどれくらいプログラミングが出来るようになりたいっていう線引きが出来ていないと思うんだよね。
腕に包帯を巻ける程度になりたいのか、本格的な外科医師になりたいのかでも難易度がまったく違うし勉強時間も天と地の差がある。
自分が作りたいアプリがあるのかどうか
インスタンス変数とかプロパティとかイニシャライズとか難しいことは置いておいて、まず自分がこういうアプリを作りたいって言う構想があるかどうかでもちがう。
作りたいアプリが無いのに、プログラミングを覚えようとしても無駄。
絶対に覚えられない。
そもそも作りたいものがないのにどうしてプログラミングをしたいのか。
英語を話す機会が無いのに英語を覚えようとしても結局話せるようにはならないのと同じ。
まず、どんなアプリがほしいかを考えよう。
作りたいアプリを書き出す
サーバと通信して通信を同期して云々とか、なんでもいい。
自分が作ってみたいアプリをメモ帳にでも書いてみよう。
実装したい機能はこれ。
iPhone上での画面遷移はこう動くとか、とか実現したい機能を書きだしていく。
作ることが出来る出来ないは別として、それは取っておこう。
初めてのiOSアプリケーションを作ってみる
まず、初めてのiOSアプリケーションを作ってみる。
【Objective-C】XcodeでiPhoneアプリを作る基礎を学ぶ3【『初めてのiOSアプリケーション』その1】 | naonotes.com(ナオノーツ)
これはAppleがObjective-C初心者に向けたドキュメントで、Xcodeの超絶基礎を学ぶことが出来る。
まず、右も左もわからない状態ならこれ。
これを作ると、プログラミングの一端に触れることが出来る。
作成後、実行結果は同じになったが、なぜこの式を書くのかがわからない。
そう思ったはず。
でもそれでいい。
先に理論を知っても一切わからない
ブログ主は最初、理論を学ぼうと参考書を読んでいたが、学校の教科書を読んでるように退屈で眠くて死にそうだった。
しかも、何にも覚えてない。
本を読んでも何がなにやらチンプンカンプンで、ちっともああ!これはこうなってるからなんだ!なんていう知的好奇心をくすぐるものが一切ない。
全くの無駄。
じゃあどうすりゃいいの?
と途方に暮れるのだが、どう書いてくか。
何を書いていいのかもわからない。
そこで最初に作りたいアプリを書きだしたものが生きてくる。
ひたすら機能を削っていく
考えたアプリの中から、ひたすら難しい機能を削っていく。
サーバとの通信→無理
かっこいいグラフィカルな動き→無理
人物名のソート→無理
等々、色々削っていくと非常に単純でどこにでもあるようなアプリの設計図が出来上がるはずだ。
たとえば、いつも自分が仕事使うような、個人情報満載の一覧とか。
連絡先を使うと私用の連絡先と混ざるから一緒にしたくない!とかそういうものでもいい。
自分専用だと割り切って設計してみよう。
ソートや検索機能をつけるとかもすべて削る。
なぜか。
絶対そこで詰まる。
するとどれだけ悩んでも先に進まない。
そして諦める。
あとから実装するんだ!と割り切って先に進めよう。
なるべく毎日少しずつ続ける
1日1時間でもいいし、調子のいいときに沢山時間を使って考えてもいい。
なるべく毎日続けよう。
じゃないとすぐ忘れる。
人間の脳はよく出来ていて、使わないと思ったらすぐにその記憶を脳の片隅に押し込んでしまって思い出せなくなる。
毎日細く長くというのも重要で、その日にわかっていなくても、寝たら記憶が整理されてなぜかしっくりしみこむようにわかっていたりする。
要は慣れが必要なんだよね。
こればかりは時間しか解決出来ない。
しっかり寝て頭にしみこませていくしかない。
綺麗なソースコードを書こうと思わない
右も左もわからないよちよち歩きのプログラマが綺麗なソースコードを書こうと思っても無駄。
綺麗かどうかすらわからないのにそんなものを意識しても始まらない。
それよりも、ボタンを押したら望み通りの処理がされているか、など機能の実装に力を注ごう。
1から10までコードを書くわけではない
プログラミングをするとき、すべてのコードを自分で考えるわけではない。
やさしいプログラマの方々がわざわざソースコードを晒してくれている。
そういうコードをコピペして使わせてもらおう。
どうしてこの機能がこのコードで・・・と思っても、今は考えなくていい。
進んでいくうちに理解できる日が来る。
ありがたく参考書やブログなどを参考にコードを拝借しよう。
アプリを完成させることが大事
プログラムを書くことが目的では無い。
自分のほしい機能が実装されたアプリを作ることが目的。
ここが非常に重要。
これを見失うと続かない。
自分の作ったアプリで自分の仕事や生活が少しでも楽になれば、また次のアプリを作ってみようと思うはず。
参考書のコードを拝借することも悪いことではない。
いずれ解る日が来る。
暇なときに目を通してみると、ああ、なるほど!って思うときが来る。
これはマジ。
ViewDidLoadってなんぞ?って所から、なんでこんな事もわからなかったのか・・・っていう風になる。
これもマジ。
是非いじってなれてみてください。
こんにちは、はじめまして。
Objective-Cを使ってiPhone(又はiPad)のアプリを作ると決めた者です。
心得を読んで、「学生時代にポケコンでベーシックにのめり込んだ時、そんな感じだったなぁ」と浸りながら楽しく読ませて頂きました。
当時のノリで「Objective-C」を初めてみれば出来るだろうと参考書等買い漁って始めたのですが、思うようにいかず・・・学生時代は同士がいて、モノクロ液晶に上から下へ流れる単純なソースという時代だったので、すんなり習得できたのですが、今では取り巻く環境が変わり、WINやMACでのプログラムとなると、オブジェクト、メソッド、クラスなど見慣れない世界が広がりオイテイカレタ感じを痛感しました。
あなたのブログの内容がごく最近のものでしたので、勝手ながら近い状態でがんばってるのかな?と思いコメントさせて頂きました。プロフィールに30代とあったのも理由のひとつですw
私は、作りたいものがハッキリしていない状態ですが、知識と経験を得るために、ありふれたゲームを自分仕様(機能を削ったもの)で作成する予定です。
別の記事も拝見させて頂きます。
作ってますよ。
仕事用のデータベースを作ってたんですが、
先日やっと完成しました。
なかなかの達成感ですw
変数?なにそれ?
って所からだったので、中々大変でしたがやっててよかったです。
ゲームはまだ無理そうですがw
データベース!?すごいと思います。
私はデータベースが作れませんw
でもゲームを作ろうとしてます。。。
とりあえず一発目のゲームは「数独」です
ルールをご存知だと幸いですが、
頭のイメージでは、正方形のテキストフィールドを81個用意して
ナンバーパッドにて入力し、入力が終えたら都度、
縦方向1列 横方向1行 各エリア をチェックしてみたいなこと考えてるのですが、データベース的に整理して処理しないといけないと思ってます。。。
データベース部分について触れて頂けると幸いですが、ひとまず独自に
やんちゃしてみます。
そんなたいそうなものじゃないですけどねw
各組織で微妙に型式云々が変わるところなどを記録しておいて、
携帯端末でみんなで共有すると楽だなと思って作ってみました。
結構ゲームって処理が複雑で作るの大変そうですね。
ちょっと独自なインターフェースがあるものは自分ではまだしんどいですw
実際の業務で役に立つなら中身じゃないと思いますw
かなり突っ込みどころ満載ですが、ひとまず数独できましたw
笑っちゃうくらい無駄で長いソースになりましたけどw
1プレイして、クリアメッセージが出てひとまず動作OKでした。はぁはぁ・・・
ここから
①スッキリしたソースにしてゆく
②問題のデータベース化を図る
③出題の生成アルゴリズムを加える
と、過程を踏んでゆけば、自ずとレベルアップを図れると考えていますが、
たぶん相当先になりそうですorz
ちなみに、管理人さんはデベロッパー登録されてますか?
登録してますよ。
自分で作ったアプリがiPhoneで動いてるのを見ると感動しますし、
モチベーションが滅茶苦茶上がりますw
ソースコードを綺麗に書くのも大事ですけど、
コメントをしっかり書かないとしばらくしてみたときにソースがまったく読めなくて苦労するので、
コメントは書きまくってますw
登録してみます(((o(*゚▽゚*)o)))
コメントは大事ですよね
会社でエクセルのVBAを作りますが
手直しが入った時には覚えてないですw
コメントを書くことによって、頭もスッキリしますね
その時わかってるからどうしてもコメントをぬかしがちになるんで、
なるべく気をつけてます。
それでもわからなくなるときあるんですよねw
すんなり書けたソースだとそうなります。
行き詰るって、思考を右往左往しながら、
無駄に多くコメント入れたりして、息抜きしたりします。
ここが独学の醍醐味でしょうかw
人のソースコードを拝借するときもコメントは必須ですw
読み解こうとすると膨大な時間が必要なので、とりあえずコメントを残して先に進んでますw
拝借+コメ残し あるあるw
自分のレベルを遥かに超えたソースを拝借し、
なんとなく組み合わせて、
なんとなく目的の動きができることもありますねw
ただ、それだとぜんぜん覚えないし成長しないねw
なんか元気もらえました……(笑)
それはよかったです!
自分は30から独学で勉強して、
今はJavaScriptも書いてますので、なせばなんとかなると思います。
慣れです慣れw