ボクココ

個人開発に関するテックブログ

プログラミングを学んだあとは設計を学ぼう

ども、@kimihomです。

最近はRailsはプログラミング言語ではないなどと言われ色々と盛り上がっている。まぁそもそもあれは言語ではなくフレームワークだが。。 プログラミングに関してはRubyなりPythonなりを勉強していただければ良い。本やネットサービスでたくさん学べる場所はあるはずだ。ただ、その次となるといきなり何もなくなる。まるでそれらを習得すればなんでもできるようになる、とでも言わんばかりに。

次に必要なステップは、実のところ経験が必要になってくる部分が大きい。プログラミングさえできれば、どんなに詰まっても何とかそれなりに形のあるモノが作れる。開発の過程であらゆる障壁にぶつかり、自分の無知さを痛感することだろう。プログラミング中に起きるその"障壁"こそ、あなたを次のレベルへ連れて行ってくれるチャンスだ。つまり、その実装の壁にどれだけぶち当たったかで次のあなたの成長が決まる。

それはなぜか。

「こういう時はこういうエラーが原因だろうな」とか、「こういう実装をする前にどういうことを注意しないといけないか」とか「そもそもどの技術を使うべきか」とかがわかってくるからだ。これらを体系的に書いた本はあるにはあるが、実際に経験しないと全くもって理解できないだろう。ああいう本は、実際に経験した人が"ああ、確かにそういうことあるよね"と共感するためにある本である。

いきなり設計しろなんてできるわけがない

わかったふりしたプログラマーの先輩が素人プログラマーに対して「まずは設計しろ」というかもしれない。それは熟練した先輩ならできるかもしれないが、初心者にはあまりにも酷である。これから実装しようとする機能にどんなリスクや問題が抱えているのか、経験がなければ予測は必ず曖昧になる。

それで初心者が設計したところで、曖昧だらけの設計になるに決まっている。それに対して、厳しくコメントするような何もわかっていない先輩がいる。それで設計について教わったところで、実際に経験もしたことない初心者プログラマーが聞いたところで訳がわからないに決まっている。初心者に設計をさせることは誰もハッピーにならない。

設計は経験でしか得られないものなのか。

答えはYesだと考えている。だからこそ、あなたがプログラミングを学んだ次のレベルに行きたいのなら、プログラミング言語を使って何かを作りまくることだ。そこであらゆる壁にぶち当たるだろう。それをできれば教えてもらうのではなく、自分で解決してほしい。時間をかければかけるほど、あなたに自信が付き、次の壁のチャレンジを楽しめるようになる。

設計ができるようになると、プログラミングのスピートが何倍も早くなる。壁をあらかじめ予測することができ、なんでも思い通りに作れるようになる。そんな理想の状態を目指してほしい。

私は前職では大企業のサービス開発部門にいた。まだ未熟だった私は、次やるプロジェクトの技術が決まったら、それをまず自分で土日とかで勉強しつつ、それを実際に使って何かを作ってみたりした。そうすることで実際の仕事でのプロジェクトで起こりうるリスクを事前に予測することができるようになった。新技術をいきなり仕事でやってしまうと、スケジュール通りの開発ができなくなり、大変効率の悪い開発プロジェクトとなる。

もうお分りいただけたかと思うが、プログラミングを学んだあなたが次にやること、それは"とにかく作りまくる。そして壁にぶち当たりまくる"ということだ。壁にぶち当たった時あなたはそれに時間を費やすことができるか。それが嫌で何もしないか。プログラマーの技量はそういったことで決まってくる。