ホームお問い合わせプロフィール未経験→就職転職合格率年収の相場ブラック企業判別定時帰りする方法

プログラミングの『センス』を磨くコツ

2016年10月18日に投稿 → に更新 勉強法 アフィリエイトリンクを含みます

プログラミングのセンスを磨くコツ「センスとは何か?」を考えていくと、「センスの良さって何か?」に行き着きます。

例えば、新入社員が入ってきてプログラミングを教えた際に、すぐ理解して覚えるようであれば、

「君センスがいいね!」

となります。よって、センスが良いとは「理解力がある、飲み込みが早い」ということです。

では「どういう人が理解力があって、飲み込みが早いか」というと「抽象化能力が高い人」です。

初めて見たもの、初めて教わったものを何か理解するには過去見たものとの共通点を見つけて「これって、過去学んだ”あれ”みたいなものだよな」と理解するのが人間の基本的な認知です。

そんな観点から考えた「プログラミングのセンスを磨くコツ」を紹介します。

抽象化の例え話

例えば、喫茶店に行ってコーヒーを出された場合、コーヒーカップに入っている黒い液体がコーヒーだとわかりますよね?

これには抽象化能力が使われています。

まず、コーヒーカップを過去に見たことがあって、液体を入れる物であることがわかっている必要があります。

過去にコーヒーカップをたくさん見て、それらを抽象化して捉え、共通点を抽出しています。この知識を持ってる状態で喫茶店に入ったから、ウェイトレスがテーブルに置いた物体がコーヒーカップであることを認識できたのです。

変な言い方ですが、この人はコーヒーを理解するセンスがあるということです。これと同じでプログラミングの知識も過去の知識を抽象化して新たな知識を理解する人が「センスのある人」ということになります。

ですから、プログラミングを理解するための知識を増やし、それらを抽象化すれば、新たな技術を学ぶ時のセンスが良くなるわけです。

抽象化した知識を増やす方法

具体的に何をすればいいかというと、プログラミング言語を学べばいいんです。

「鶏が先か?卵が先か?」みたいな話ですが、プログラミング言語をいくつも学んだ人が新たなプログラミング言語を学ぶ時には「あぁ、この構文はあの言語でいうところのあれだな!」みたいな理解ができるようになります。

例えば、Javaをやったことある人がRubyを学ぶ際にclassという構文を見た際に「Javaのclassと同じようなものだな」と理解することができます。

たくさんのプログラミング言語を学ぶと、いくつものプログラミング言語の知識から抽象化した「プログラミング言語ってこういうものだ」という認識が生まれます。

コーヒーカップを何度も見たことがあるから、初めて入った喫茶店で出された物体がコーヒーカップだと認識できるのと同じです。

Javaをやって、JavaScriptをやって、PHP、Rubyとやっていくうちに「プログラミング言語っていうのはだいたいがifで条件分岐して、for, whileで繰り返すものなんだな」というのがわかります。

オブジェクト指向言語だったら、「classやメソッドがあって、publicやprivateなどのアクセス制限があるんだな」という抽象化した知識が生まれます。

その知識を持ってる状態でSwift, Scala, Goのような新たな言語を初めて見ても、なんとなく構文の意味が理解できるんです。

つまり、複数のプログラミング言語を学んだ人が新たな言語を学ぶ時には「プログラミングのセンスがいい」状態になります。

「それって、プログラミングのセンスというよりは、プログラミング言語を学ぶセンスじゃないか?」と思われたかもしれませんが、そうではありません。

プログラミング言語とはマシン語の表現バリエーションである

プログラミング言語をいくつも学ぶということは、マシン語をどう表現するかを学ぶことでもあります。

手続き型言語はマシン語を手続きの集まりとして表現しています。

オブジェクト指向言語はマシン語をオブジェクト間の相互メッセージとして表現しています。

関数型言語ならマシン語を関数の連鎖反応として表現しています。

様々な言語を学ぶとプログラミング言語=コンピュータの情報処理を抽象化して表現する方法であることが理解できます。これがプログラミング言語の本質なんです。

ですから、言語を学ぶときだけでなく、コードを書くときにもその抽象化した知識を用いて最適な表現を選ぶことができます。

例えば、関数型言語を学ぶとオブジェクト指向言語を使う際にも、高階関数を使ったロジックが浮かびやすくなります。

様々な言語を学ぶことで、自分がコードを書く際の発想のバリエーションが増えるのです。これが「センスのいいプログラマー」なのです。

ということで、プログラミングのセンスを磨くには「多くのプログラミング言語を学んでみる」のがいいと思います!