対象読者
- プログラミング初学者
- プログラミングスキルが伸び悩んでいる方
結論
作りたいアプリを持てば、その作成に必要な勉強を自然とするようになり、プログラミングスキルを向上させることができる。
根拠
私の社会人になってから経験から上記の結論を得た。詳細は後述する。
作りたいWebアプリができた
新人研修や業務では、Excel VBAやbash, tcl/tk, fortran90などを勉強していた。他にも流体力学や数値計算についても学ぶ必要があった。そんな中、勉強した内容をまとられるような、知識の依存関係を管理するアプリを自分で作りたいと思うようになった。いつでもどこからでも使えて、ユーザーの規模もスケールするWebアプリとして、これを作成したいと思うようになった。
このアプリを作るためにはどうすればいいのだろうか
そもそも、Webアプリってどうやって作ればいいのか知らなかった(業務がWebと関係ないので知らないのは当たり前なのだが)。HTMLやCSSはかじっていたが、まるで分からない。他にも分からないことだらけだった。
- データを登録したり、画面に動きを付けたりするのはどうするのか
- 操作性がよい画面ってどんなものか
- 今までの開発経験とは比にならないような大規模なコーディングになりそうだが、その規模に耐えられる綺麗なコードってどうやって書くのか
- 開発ってどうやって進めていくのか
- 知識の依存関係をコードで¥どう表現するのか
- …
このような疑問を持てたことが私の飛躍の原点となった。疑問を解決したいモチベーションが上がり、自然に勉強するようになった。
ググって勉強
新人時代は勤務中に勉強できる時間が大量にあったので、Webの勉強をした。なるほど、
- Webアプリはサーバーサイドとクライアントサイドで構成されているのか。
- サーバーサイドではPHP, Ruby, Python, Javaとか色んな言語が選択肢にあるのか。
- クライアントサイドはJavaScript一択なのか。JavaとJavaScriptは無関係なのか、紛らわしい。
- …
自分のPCで開発環境を準備した(XAMPP)。その環境でのサーバーサイド言語がたまたまPHPだったので、まずはPHPとJavaScriptだけ勉強し、簡単なWebアプリを作ってみて、全体の流れを大まかに見た。そして壁にぶつかった。
- 機能を増やすと、コードが汚くなる
- オブジェクト指向が分からない
モジュール化や設計、コーディング作法について理解を深める必要が出てきた。オブジェクト指向はモジュール化、設計にも関係するため、まずはここを押さえようとググったが、記事ごとに意見が異なったり、謎の用語が大量に現れたりで混迷を極めた。ググっての勉強に限界が訪れた。
本で勉強
文法の勉強はネット上だけでも十分可能だった。しかし、文法は方言でしかない。いくつかの言語を勉強すれば、未知の言語に対しても、適宜ググれば、ある程度はコードは書けるようになる。問題は以下のような言語に依存しない、より普遍的なスキルだ。
- 文法以前の美しいコードの書き方
- プログラミングパラダイム(手続き型、オブジェクト指向、関数型)
- 開発手法(ウォーターフォール、アジャイル)
このあたりを押さえるのは、玉石混交で断片的なWeb上の記事では困難だった。そこで、とあるエンジニアにおすすめの書籍ランキングに載っていた本を買い漁り、書籍での学習にシフトした。
書籍では、一貫した体系的内容が学べるため、ネット上で右往左往するよりも効率的に知識を積み重ねることができた。
一番混迷を極めたオブジェクト指向についても、メリットや設計の定石(デザインパターン)を一通り学習した。これで私もイかしたプログラマになったぞ!、と思った矢先、学習した知識が実践レベルでは使えない程度の理解だったことが発覚していく。
本で得た知識を実践で体得
本で学んだことによって、私はオブジェクト指向信者と化していた。
クラスによってグローバル変数をまとめることで、コードの見通しが良くなった。継承で重複を排除できた。
完璧だ。そう思っていたのもつかの間であった。コード規模が大きくなってくると、見通しが悪くなってきたのだ。
- 関連が低いグローバル変数や関数をまとめただけのクラス
- 単に再利用するためだけの無節操な継承
ここに来て初めてクラスは単にまとめるだけのものではなく、役割という単位で分割すべきものであり、その役割の協調の方法がデザインパターンであることを初めて理解できた。
このように、実践の中での試行錯誤の経験を得て、はじめて本の知識を血肉にできた。
筆者の経歴
現在
私は入社5年目である。少なくとも同期の中では一番高いスキルを持っていると自負している。その根拠は以下だ。
- 先輩が書くコードの欠陥を見抜くことができる
- オブジェクト指向について自分ほど理解している人が周りにいない
- 客先にて、「君ほどプログラミングができる人材を確保することは難しい」と言われた
まだまだ勉強すべき技術は無数にあるが、まずまずのスキルは身につけられたかな、と思う。現在に至るまでのバックグラウンドは以下だ。
学生時代 ~プログラミング知識ゼロ~
私は学部卒であり、専攻は情報系ではなかった。C言語の授業は受けたが、課題をコピペで提出する体たらくだった。独学でHTMLやCSSを勉強し、簡単なWebサイトをローカルで実行した経験はあった。しかし、HTMLやCSSには制御構文もなく、プログラミング言語とは呼べない代物であり、プログラミングについては未知のまま卒業した。
社会人 ~低スキルな職場~
数学・物理が好きだったことと、今後IT系が強いという予測から数値シミュレーションを行う会社に入社。
業務は既製品のソフトを用いた手作業が主だ。その手作業や定型業務の効率化がプログラミングの目的だったので、200行もいかないようなコードが主だった。そのため、
- コードは小規模
- 場当たり的な個人開発
- モジュール化はなく、再利用性は皆無
であり、周りのプログラミングスキルは低かった。なので、スキルを高めるには、自助努力が必要だった。そんな中、私がいかにして独学でプログラミングスキルを高められたかを以下で追う。
まとめ
ここまで私のプログラミング独学の流れを見てきた。技術書を読んだり、プライベートを割いて勉強するには相当なコストが必要だ。この負荷に負けずに自発的に学び続けられたのも、一重に自分でアプリを作りたい、という目標があったからに他ならない。
本記事がこれからプログラミングスキルを高めていきたい方の参考になれば幸いだ。
コメント