はじめに
現在、SI企業に入社して約4年が経過しようとしています。
後輩社員も増えて、テストや設計などのプログラミングがない工程からPJに参加した彼ら(彼女ら)とプログラミングの学習方法について話していてギャップを感じたので、それについて書いていこうと思います。
ここで言う経験者・未経験者っていうのは業務経験ではなく、プログラミングそのものについての習熟度と考えて頂いたほうがわかりやすいかもしれません。
※まるで私の考えている学習方法が=経験者の方法という書き方になっています。
なにか誤りがありましたらご指摘お願いします。
未経験者の考えるプログラミング学習方法
本などを見ながら学習したい
あるいはなにか資格などを取る、研修やスクールに参加しながら学習を進めたいというものです。
共通しているのは学習のカリキュラムを自分以外の誰かに決めてもらいたいということですね。
私の考えるプログラミング学習法
なにかプロダクトを自分で作るというものです。
何かを参考に作るのはいいと思いますが、基本的に学習の道筋を自分で考えていくことになります。
私は基本的に新しいものを設計するのが面倒()なので新しい言語を学習するときも同じような物を作ります。
例えば掲示板とかログイン機能があってDBに登録、削除、更新する処理があれば十分かなと思っています。
更にいうと実用性があるとモチベーションが続きます。
プログラムって結局それ自体は手段なので・・・
VBAを覚えたいと思ったときは手元のファイルを整理するものを作りました。
最近、WEBエンジニアの人が転職するときにポートフォリオを作ってGithubに公開するべきなんて話を聞きますね。
私は今の会社に入社する前からこういったプロダクトを作るという考えはありました。
(当時はPHPを触っていたのでPHPで作りました)
恥ずかしい話ですがポートフォリオを作るとかGithubで公開するというのを知りませんでした。
ポートフォリオって当時聞いてもデザイナーさんとかが持ってるイメージでエンジニアの人もそういうのを作っているのは知りませんでした。
私が感じる未経験者の考える学習方法の問題点
設計力が身につかない問題
毎回同じようなものを作っていたらそこまで設計力は身につかないかもしれません。
でも1つでも自分で1から考えて作り上げたという経験は力になると思いますし、2つ3つと新しいものを作っていくのに必要な能力は設計やプログラミング力ではなくアイディア力だと思います。
なので色々なパターンを作り上げる経験というのは業務の中で身につけていけばいいです。
ただカリキュラムに沿った学習だとテキストに書いてあるデータ入力をしておしまいになってしまう場合が多いように感じます。
テキスト通りに作っていれば臨界値テストや異常系テストにも対応できる作りにはなっていると思います。
ただその各コードの意味をしっかり理解して学習を終えている人がどれくらいいるのでしょうか?
自分で作ったシステムだとじゃあ変な文字入れてみようとかいろいろ思いついてバージョンアップされていくと思います。
作った物自体はテキストなどの中の課題になっているものより良くないものになるかもしれませんが高い経験値が得られると思っています。
プログラミング以外の知識が身につかない問題
プログラミングの学習なんだからそれ以外身につかないでいいだろうってツッコミが来そうですねw
ただ遅かれ早かれ開発環境、サーバ、データベース、バージョン管理など必要になってくる知識だと思います。
なのでそこらへんについても一通り学んで置くのがいいと思います。
例えばProgateなどプラウザ上で動く環境で学習してしまうとそこら編の知識が一切身につきません。
クラスとは?型ってなに?ifってなに?とかそのレベルの人はいいですがいま基本的なプログラミンはできる
そこからレベルアップをしたいという人はテキストに沿った学習では成長は見込めないのではないかと思います。
最後に
上記の話をしたときに後輩さんから言われたのは
何を作ればいいかわからない
です。
仮想サーバの構築がわからないとかならこのサイトを見てやってみてとなるんですがね。
私は作るものは本当に何でもいいと思っています。
MVC的な感じで画面、サーバー処理、DBがあればその難易度、作り込み具合はさほど大きな問題でないと考えています。
何を作ればいいかわからない
この気持がわからないといえば嘘になります。
自分で作ったものに自信なんてないし、恥ずかしさのほうが強いのでGithubなどを知った今でもコードを公開したりはしていません。
ただエンジニアと言う職業はこういう問題点を見つけて修正していくという作業がとにかく多くて大切な仕事だと思っています。
なので何を作るということは大した問題ではないのですが、それを作って試行錯誤していくという経験はとても大切なのではないかと思います。