【随時更新】プログラムが上達するには ― レベルアップのヒント
[ PR ]
(タイトル画像: Martin Terber ― Cockpit Poser)
「プログラムが書けるようになりたい!」 ― このページに辿り着いたあなたは、きっと一度はそう思ったはずです。
しかし、プログラムに関して一つはコンプレックスを持っていませんか?
- 自分にはセンスがない
- 技術が足りない
- 時間がない
- 無理やりさせられた
それでも、プログラマという職業は魅力的です。頭が良さそうで、給料も良い。すこし仕事が大変なだけ。
では、どうすればプログラムが書けるようになるのでしょうか。
<入門>
(1) 1つに言語を決める。
まずは、書き始めることです。考えていては何も進みません。
おすすめは、Processing(プロセシング)です。ほとんどの環境で何もせず動きますし、開発環境も揃っています。何より、楽しい絵が描けるというのが素晴らしいですね。
ここからダウンロードしてダブルクリックすると始まりますよ。
(2) 概念を知る
概念といえば難しそうですが、犬にはシェパードや柴犬があるというのも概念です。
同じように、プログラムの世界にも、言語(Processing、Java、Ruby...)や 文法(変数、ループ、関数、クラス...)のような概念があります。
Processingに関しては、それらのほとんどは『Built with Processing』という本に網羅されています。
出来るだけ多くの概念を知ることが、この次へのステップを楽にします。ただ、ここが一番時間がかかるので、半年〜1年くらいは気長にやりましょう。
ビー・エヌ・エヌ新社
売り上げランキング: 191,238
ソフトバンククリエイティブ
売り上げランキング: 557,102
(3) 作る・壊す・また作る
入門の段階では、とにかく手で覚えることが大事です。例えば、『Built with Processing』に書いてある例を何度も反復して写しましょう。
日本には「写経」という言葉がありますが、何事も理解する前に覚えるのが重要です。
とにかく書いて覚えましょう。そうすると自然に楽しくなり、興味が湧いてきます。
秀和システム
売り上げランキング: 4,665
<初級>
(1) 本を読む
入門から初級へと変化する段階では、基礎的な概念(変数やループなど)は理解しており、簡単なプログラムを見ても抵抗がなくなります。
例えば以下の様なコードです。
void setup(){
size(100,100);
}
void draw(){
background(255,255,255);
fill(255,0,0)
ellipse(10,10,30,30);
}
ここから次の段階へ進むには、より根本的な知識が必要になります。そのためには、さらに新しい本や情報を得て、詳しい知識を得ることが大切です。
例えば、なぜプログラムは動くのか、コンピュータとは何か、メモリとは何か、プログラミングの役割は何か、Processing以外にどのような言語があり、どの分野で活躍しているのか など、広く浅く知っておくことが大切です。
日経BP社
売り上げランキング: 83,892
毎日コミュニケーションズ
売り上げランキング: 543,289
日経ソフトウエア
売り上げランキング: 6,302
(2) プログラムを作り、改変する
初級程度では、簡単プログラムを言われた通り作れるようになる訓練が大切です。
そのためには、例えば解説書を読みながらテトリスのようなゲームを作ってみたり、電卓のような簡単なアプリケーションを作ることが大切です。
技術評論社
売り上げランキング: 54,066
インプレスジャパン
売り上げランキング: 137,322
それを通じて、プログラミングの重要さや面白さが見に染みて分かるようになり、バグに出会うことで、臨機応変な対応が徐々に出来るようになります。
(3) プログラムを披露する
プログラミングは、1人でも楽しいですが、作ったものを披露することでより楽しくなります。
例えば、Scratchやスクイークといった、子供向けのプログラミング環境があります。これを使うと、簡単にプログラムを公開することができます。
プログラムを公開することで、公開(デプロイ)することの難しさを勉強できますし、みんなから幅広い意見をもらうことができるので、開発意欲も上がります。
カットシステム
売り上げランキング: 35,987
<中級>
(1) 別の言語を知る
中級に上がる頃には、まとまったプログラム(100〜1000行程度)が書けるようになり、専門書がなくてもプログラムが出来るようになってきます。
この頃になると、Processingに飽きてくるようになり、他の分野に興味が出てきます。
すると自然に、ProcessingはJava仮想マシンで動いていること、上位互換の言語にJavaというものがあること、OpenGLという描画エンジンを使っていること などに興味が湧いてきます。
その意欲をそのまま活かして、一旦最初の言語は置いといて、いろんな言語や環境に視野を広げてみてはどうでしょうか。(多分この辺りで大きな挫折をすると思います)
ソフトバンククリエイティブ
売り上げランキング: 82,495
工学社
売り上げランキング: 145,798
(2) 汎用言語(+標準フレームワーク)を一つ詳しくなる
実は、最初に紹介したProcessingは画像処理に特化した言語であり、汎用言語ではありません。
そこで、Java・C・C++・C#(・Ruby・Python・JavaScript)の中から、1つ選んで、とにかく詳しく知り、自分のパートナーとするといいと思います。
すると、自然と中級者から上級者にステップアップします。汎用言語があれば何でも作れるので、そのまま仕事にも繋げることもできます。
(3) 様々なパラダイムに出会う
プログラミング言語というのは、 1つの考え方に基いて出来ているわけではなく、様々なケースに特化しているものです。
汎用言語とはいっても、手続き型言語、構造化言語、オブジェクト指向言語、宣言型言語 という1つのベクトルもありますし、他にも、静的型言語・動的型言語、汎用言語・ドメイン特化言語、プロトタイプ型言語、関数型言語 などといった様々な特徴があります。
そのような多様な世界の中から、いくつかピックアップしてその違いを知りましょう。
(4) データベース、Web、ゲーム、組み込みなどの知識を深める
もちろん上級者になるとすれば、プログラム以外にも知識を求められます。
ゲームプログラマになるならば、数学や物理、C++やOpenGL/DirectXの知識は必須でしょうし、Webプログラマになるならば、データベースやJavaScript、HTMLやCSSなどの知識は必須でしょう。
このように、単にプログラム言語学者になるのでなければ、現場では幅広い知識が求められます。
秀和システム
売り上げランキング: 9,250
CQ出版
売り上げランキング: 92,466
(5) コミュニティに参加する
上級者になるには、独りよがりの知識では実践には敵いません。
そこで、プログラマのコミュニティに参加することもときには必要です。
例えば、ZussarやAtndなどで勉強会を探してみると、いろんな人の集いが見つかります。飲み会で親睦を深めるのもいいでしょう。
勉強会が苦手ならば、ハッカソンに参加したり、発表会やコンペに出席するのもいいでしょう。
もちろん、時には踏み入れる勇気も必要です。
インプレスジャパン
売り上げランキング: 91,988
<上級>
(1) 言語やフレームワークを作る
見事上級者になったあなたは、町ではちょっとした有名なプログラマになっていることでしょう。
そこで、ステップアップするには、1つ言語やフレームワークを作ることでレベルアップが図れます。
ゲーム業界では有名なUnityという開発環境がありますが、あれも誰かが作ったものです。もちろん、最初に紹介したProcessingもオープンソースです。
アイディアがわかなければ、GitHubやSourceForge、GoogleCodeを見て勉強しましょう。ときにはコンパイラやバイトコードの知識も必要になりますが、それもステップアップのためです。
秀和システム
売り上げランキング: 409,801
技術評論社
売り上げランキング: 5,189
(2) 社内/社外勉強会に参加したり、転職をする
上級者になると、なかなか技術が上達しないものです。そこで、社内や社外の勉強会などに積極的に参加して、刺激を受けましょう。
就職・転職したり、よりレベルの高い会社を見学したりすることでも、より実践的な知識を学ぶことができます。
オライリージャパン
売り上げランキング: 204,393
マイナビ
売り上げランキング: 108,595
(3) よい道具を使う
レベルが上がってくると、効率も重視されてきます。そこで、良い道具を使いましょう。
例えば、キーボード1つ取っても、Realforce、HHKB など優れた逸品があります。メンブレン式、メカニカル式、静電容量式など、良い道具には必ず理由があります。
特に、エディタは良い物を選びましょう。昔からあるものでは、Vim、Emacs といった、歴代のプログラマが使ってきたものもありますし、TextMate、Sublime Text のように、最近台頭してきたものもあります。
作業効率に直接関わるものですので、吟味して選びましょう。
売り上げランキング: 732
売り上げランキング: 62,724
技術評論社
売り上げランキング: 24,032
(4) コードリーディングをする
作業に没頭していると、なかなか他人のコードを見ることは少ないものです。
最近ではGitHubなどに良質なコードが多数アップされています。特に、ls、cd、curl のようなLinuxのコードを読むと勉強になります。Processingなどのフレームワークを読み解くのもいいでしょう。
フレームワークを利用するときに、中身を理解していなければただのブラックボックスとなり、リスクも伴います。必ず同様のオープンソースを読み、理解することが大切です。
巨人の肩の上に乗ることもたまには必要です。今の作業のヒントになることもきっとあるでしょう。
(5) バイトコードを知る
C++言語のコーダーは、アセンブラを知ることで知識を得ると言います。
同様に、JavaのコーダーもJava仮想マシンバイトコードを知ることで、開発の役に立てる事ができます。
バイトコードを知ることで、Javaに最低限必要な物が何かを知ることに繋がりますし、言語やフレームワークを開発する助けにもなります。
それを支援するツールとして、javap
や、asm、Jasmin といった道具を活用しましょう。GroovyやAspectJなどにもバイトコードの動的変更が使われています。
共立出版
売り上げランキング: 1,380,597
(6) テストを重視する
実際の現場では、アイディアも大事ですが、製品の品質が問われます。品質を向上させるツールが『テスト』です。
有名なものに、xUnit(JUnit、PHPUnit、PyUnit)、RSpec、TestNG、などがあります。
特に、RubyやPythonなどの動的型付け言語では、テストは仕様書となります。型によるチェックが少ないので、最も大事なドキュメントになるのです。
テストを極めると、TDD (Test Driven Development)や、BDD (Behavior Driven Development)を知ることになり、アジャイル開発にも通じます。テストを蔑ろにしないように。
技術評論社
売り上げランキング: 13,894
(7) 英語をスムーズに読める・話せるようにする
高いレベルになるほど、情報源は少なくなってきます。そこで、英語を学習することでStackOverflowやHackers Newsといった海外の情報を吸収し、コミュニケーションを取る事ができるようになります。
英語の学習は1日で上達するものではないので、毎日少しずつ学習しましょう。
良い本を手に入れることでも達成できるレベルは違ってきます。
早く上達したければ、英英辞典を使い、詳しい文法書を持ちましょう。
旺文社
売り上げランキング: 3,740
アルク
売り上げランキング: 10,320
(8) オン・オフを付ける
作業に没頭していると時間を忘れがちで、特に難しいことを考えていると家に帰っても作業をしてしまうものです。
そうすると生活が不摂生になり、体調を崩すことも増えてきます。
そういうときは、思い切って音楽を聞いたり、映画を見て、リフレッシュすることが大切です。
人間何事も休みなくすると辛いものです。自分だけでは難しい時は、家族や仲間に支えてもらいましょう。
もし体調を崩した時は、思い切って会社を休む勇気もときには必要です。
三笠書房
売り上げランキング: 1,015
星和書店
売り上げランキング: 5,810
(9) Lispを知る
多くのプログラマは手続き型言語をベースにした言語を使っています。
新しいアイディアや刺激を得るには、積極的に関数型言語に触れ、メタプログラミングを習得しましょう。
新しいパラダイムを知ることでより技術と知識に深みが出てきます。
その一方で、C言語を極めることも忘れないで下さい。メタプログラミングを極めると同時に、メモリ管理や低レイヤーの知識も必要です。
オーム社
売り上げランキング: 7,266
ピアソンエデュケーション
売り上げランキング: 424,568
(10) 哲学を知る
最後に、過去の偉人たちがどのようにして今を創っていったかを知ることも重要です。
特にUNIXの哲学や、C言語が出来るまで、仮想マシンの経緯など、知ることで得るものは大きいです。
是非、常に好奇心を持つことを忘れずにいたいですね。
オーム社
売り上げランキング: 35,156
オライリージャパン
売り上げランキング: 1,442
アスキー・メディアワークス
売り上げランキング: 28,802
オライリージャパン
売り上げランキング: 238,509
翔泳社
売り上げランキング: 367,634
まとめ
どうでしたか?参考になることが1つでもあれば幸いです。
とにかく、自分を棚に上げてすみません(笑)
今回は、職業プログラマーとして仕事が出来る人のうちで、プロジェクトを主導したり、仕事内容や使っているフレームワークの詳細を理解できる人を上級者と定義しました。
プログラマには暗いイメージがつきまといますが、全体のレベルが上がってくればいつかはTwitterやFacebookのように、高いレベルへと認識が変わることを期待します。
何かわからないことがあれば、いつでもFacebookページに質問を下さい。