船木俊介「ハッカーズランド」

スーパーソフトウエア東京オフィス代表&キッズラインCTO

なぜプログラミングができないのか

AIやECシステムやアプリなどのシステムを開発しているスーパーソフトウエアでは、最近かなり採用に力を入れていて、エンジニアも続々と増えて社内も賑やかになっています。入社してきた社員にはPHPやRubyなどプログラミング研修をしっかり行っていますが、元々社内には1〜2ヶ月で大きめのシステムを何本も立ち上げるような技術レベルの高いエンジニアも多いため、研修のレベルは一般的なレベルより若干高めかもしれません。

例えば、未経験で入社して2週間で簡単なアプリケーションを基本設計から作れるようになり、4週間後には単体テストまで書いた課題を提出することになります。当然、ライブラリも開発現場で実際によく使うような、認証認可モジュールであったり、デバッグ周りであったりを組み込み、ビジネスレベルで設計開発ができる人材に育成することを目標としています。

特に、単体テストを書くというのは詳細設計の思考ロジックを明らかにすることと同じなので、なんとなく出来た、動いたからいいや、という曖昧さを防ぐ意味でも大切です。

スーパーソフトウエア

プログラミングなんて簡単だから集中してやればすぐ出来るようになる、と思いますが、やはり人によってばらつきはありますね。

これまで教えてきてプログラミングが身につく人、成長スピードが速い人の共通点は何かと考えると、

 

動く楽しさを早く知る

ごくごく基本的なレベルでも文法や関数、変数あたりが分かるのであれば、RubyでもPHPでもそれこそCでも、自分で書いて動かしてみることができるので、やってみて「動いた、楽しい」という感覚を早めに持てるかどうかがカギになってきます。楽しいと思えればそれでいい。もっと学んで出来ることを増やしたい、という好循環サイクルで知識の定着率が飛躍的に上がります。

National Training Laboratoriesの「ラーニングピラミッド」という有名な理論がありますが、能動的になればなるほど学習の定着率が高まるというもので、実践による体験・練習や誰かに教えるという行動は高い学習定着率をもたらす一方で、一番悪いのは単に講義を受けるだけ、書籍を読むだけで分かった気になるような受動的なものです。

なので、プログラミングでも、能動的に学習するようなモチベーション形成を自分自身でできるか、というのがその後を大きく左右してきます。

スーパーソフトウエア

 

暗黙の前提知識を知る

実は、一番早めに覚えておかないといけないのは周辺の前提知識で、Webプログラミングにおいては、リクエストとレスポンス、レスポンスステータスコード、認証、プロトコル、状態遷移、セッション、パラメータ、セキュリティ、リダイレクト、インスタンス、クラスなどなど、挙げだしたらきりがないくらいたくさん前提知識があます。プログラミングをするにあたって知っておかなければ、設計さえできないので一つのアプリケーションをまともに作ることはできないわけです。

こういった用語は出てきた際に覚えていくしかないので、時間があるときにWebで用語を調べていくと学習の下支えになります。

実際の現場でも、例えば、「商品リストだけ401でauthが原因だと思うから、直しておいて」と言われたりします。確かに、何言ってるのか分からないですね。でもエンジニアにしては原因のおおよその検討までつけてくれてるのでとても親切な人です。翻訳すると、「認証があるプログラムで、本来は認証が通っているはずのところが何らかの理由で認証エラーになってしまっている。商品コントローラを確認してどういうリクエストが行われて、なぜ認証が通らないのかを調べて、他のページと同じように通るように直しておいてください」という意味です。特に「原因だと思うから」の部分には、たぶん原因だけど自分でも検証して確認して理解してから責任もって改修しろよ、という言外の意味も含まれています。これをエンジニアが言うと「401直しといて」という機械のような会話になるわけです。

 

ネットを使いまくる

いまプログラミングを学習しているのは生まれたときからネットがある世代が多いはずなので、ネットで調べるという習慣はありますが、調べ方というのは上手い下手が結構分かれます。プログラミングではエラーが出たときに検索することが多いですが、

* エラーメッセージをそのまま検索する(システム固有の情報(クラス名やパスなど)は削って検索する)
* method not foundなどメイン語句で検索する
* 英語でも読む

このいずかでほとんどのエラーは解決できます。やたら悩んで時間を使うより、上手く検索してどうしても不明なところは容赦なく聞く、くらいのスタンスがベストです。

あとは、最初のうちはプログラム構造や効率的なコーディングなど他人の書いたプログラムを真似することでしか吸収できないことが多いので、自分が学習している言語で書かれた他人のコードを見まくる、というのも一気に上達するエッセンスの一つです。

 

これがプログラミング学習の重要な点、早く成長するためのポイントです。こういったポイントを意識しながら集中的に勉強すると一気に身につく、プログラミングは簡単で楽しいものです。

f:id:shunsukefunaki:20180620231642j:plain