名著「具体と抽象」を読めば、プログラミングセンスが身に付く

こんにちは!

子供向けプログラミング教室kobakoスタッフです。

細谷 功さん著の「具体と抽象」。

この本が本当に名著で、定期的に読み返しています。

この「具体と抽象」を読んだおかげで、

企画センスやコミュニケーションセンス、

しまいにはプログラミングセンスまで、

多角的にいろんな方面でのセンスが向上したなぁと思っています。

ところで・・・

この記事を書いている人はだれ?

子供向けプログラミング教室です!

JavaScriptを使ったゲームプログラミング、ゲーム企画が得意な教室です。

プログラミング教室で実際に使用している、学習成果のある教材をYouTube無料配信しています。

「具体と抽象」

この本についてまずは簡単に説明したいと思います。

簡単に言えば、具体と抽象を往復すれば、思考が整理され、新しいアイディアが浮かぶよっていう話です。

抽象という概念を具体的に説明している

この本が特に優れているのが、「抽象」という、文字通りとっつきにくいワードを、

具体的な事例を踏まえてわかりやすく、正体を明らかにしてくれていることです。

「抽象的」というと、なんだか悪いイメージをお持ちの方も多いのではないでしょうか。

「あなたの話は抽象的でわからない」なんて言われたりしますよね。

ですが、抽象というのは、人間だけが得られる超能力であり、

抽象をうまく扱うことで、とにかく頭が冴えまくるという代物です。

決して悪いものではなく、むしろ、スーパーパワーなのです。

センスが磨かれる

これは僕の持論ですが、

この抽象の扱い方を学ぶと、

センスの良い企画ができるようになったり、

スパッと本質的な話ができるようになったり、

汎用性の高い疎結合なプログラミングができるようになったり、

いろいろなメリットがあります。

AIが到達できない領域

これもまた僕の持論ですが、

抽象化というのは人間だけが持つ超能力です。

近い将来、AIが人間の仕事を奪うなんて言われていますが、

この抽象度の高い仕事は決してAIに奪われることがありません。

企画だったり、デザインだったり、プログラミングだったり。

AIに奪われない職業に就きたければ、今回のこの抽象化は必ず習得した方が良いスキルになります。

プログラミングは抽象と具体の報復である

もともとプログラミングには抽象化という概念がすでに備わっており、抽象との相性がものすごく良い分野ではあります。

ですが、抽象化の能力が乏しいと、

プログラミングも汎用性の低く、保守性の悪い、バグをうみやすいプログラムを書いてしまいがちです。

「具体と抽象」を読めば、

プログラミングスキルとしての抽象化ではなく、

概念として、理念として、哲学として、抽象化の本質からプログラミングスキルを向上させることができます。

関数のキモは引数である

関数は、処理をまとめる機能として考えられることが多いのですが、

関数の本質は引数にあると僕は思っています。

void draw(){
  rect(10, 10, 50, 50);
}

例えば上記の例。

関数drawには引数がありません。

よって、この関数は具体性を増しており、同じことしかできません

void draw(Player player){
  rect(player.x, player.y, 50, 50);
}

例えば上記の例。

関数drawにPlayerの引数が増えました。

Player型のインスタンスを渡せばdrawがよしなに解釈してくれ、抽象度が増しました。

ですが、これもまた抽象度がまだまだ低いのです。

関数drawはPlayer型のインスタンスを用意しなければいけませんからね。

void draw(float x, float y){
  rect(x, y, 50, 50);
}

引数をプリミティブな値に変えました。

プリミティブな値なので、Player型のインスタンスを作る必要がありませんし、

仮にEnemy型のインスタンスと組み合わせてdraw関数を利用することもできます。

関数自体は抽象的にとどめておき、利用する側が具体的に実装するのです。

関数の中身は変わらずに、引数で抽象度があがったと言えます。

ここでは簡単な例として、あまり現実的ではない実装ではありますが、引数による抽象度の違いを紹介しました。

疎結合は抽象度を高めた結果

プログラミングの世界では、疎結合、プログラム同士が付かず離れずの状態が好ましいと言われています。

疎結合に関しては、Gofのデザインパータンなどの先人の知恵が非常に役立ちます。

デザインパターンを見れば、いかに抽象度を高めていこうかという努力の軌跡が垣間見れます。

小規模なアプリ開発や、小規模なチーム開発では疎結合はそれほど重要視されないかも知れませんが、

規模が大きくなるにつれて、この疎結合、抽象化はとても重要な設計となります。

こういった設計哲学についても、

「具体と抽象」からプログラミングとは別の角度で再発見するきっかけになります。

企画センスに応用

プログラミング教室kobakoでは、プログラミングもそうですが、企画力にも重点を置いています。

プログラミングでどう作るかも大切ですが、

プログラミングで何を作るかの方がもっと大切だと私たちは考えています。

企画というのは、簡単そうに見えて、複雑な思考のパズルを解いていくような、非常に忍耐が必要な作業です。

企画という側面でも、プログラミングという側面でも、

「具体と抽象」を意識したアプローチで、講義を行なっていきます。

無料体験へのお申し込みはこちらから!

kobakoのゲームプログラミング教材もYouTubeで無料配信中です!

初回の授業料(体験)は無料です。

※現在はオンライン授業でのみ対応しています。通学型ではありません。

Photo by Andrew George on Unsplash