【相談室】プログラマーになるために大学は不要か?
Twitterの知り合いさんから、以下のような相談がありました。
ちょっとお聞きしたいねんけど、
もし自分の子供が
「エンジニアになりたい!エンジニアに学歴なんか関係ないから
大学行かずに(あるいは中退して)プログラムの勉強して
自力でIT企業の就職目指す!」
的なあるあるを言い出したら、親として何と言う?
若い子は視野が狭いのは当たり前。
どう表現してあげたら何か響くのか?
概念だけや、精神論だけでは響かないのではないか?
との思いもあり、
なるべく具体的に、かつ論理的に、と表現してみたらこんな長文になってしまったので、メモがてら書いてみました。
↓↓↓
(A) 良いプログラマーと評価される点がどういうものか?を考えますと、以下のような点があり、それが世の中にたくさんいるプログラマーの中での差別化要素となってくると考えています。
・システム利用者がどのように操作したくなるか想像できること(業界特性、業務の役割分担、業務の流れ、何を大事にしているか、忙しさ等)
・プログラミングに必要な様々な専門用語のことがさっと理解し、使いこなせること。(在庫回転率、移動平均法、エッジ抽出、ExclusiveOr、最小二乗法、など)
・チーム全体の中で、自分がどう動けば効率的か?を考えられること。
・リーダーなどへの報告や相談が、いいタイミングで、端的に、そして漏れ無く要点をまとめて話できること。
・先に待ってるリスクや、可能性に気づき、先手を打てること。
・どんなプログラミング言語でもすぐに慣れて、スピード早く書けること。
・動作テストの際に、どうすれば漏れ無く効率的なテストができるか、を考えたプログラミングができていること。
・作ったあとに、他の人でもメンテナンスできるような、分かりやすいプログラミング構造や、コメント書きがスピーディーにできること。
・プロジェクトで途中離脱しないような、体調管理、精神管理が健全にできること。
こういった評価ポイントのうち、プログラミングスクールなどで教えてくれることは、1つか2つでしょう。
プログラマーになるとしても、それ以外の上記スキルを身に着けていくことによって、他のプログラマーより重宝され、その結果として経験値もあがり、給与もあがっていくのは目に見えているので、どうすれば上記のような「幅広い知見と視野」が身につくか?
もしくは「身につけるための素養」を習得するか?
を就職前に考えて行動することがオススメです。
(B) また、そもそも、プログラミングというのは一つのスキル&役割であって、その価値は、仕事全体の中で1割程度、ということはご存知でしょうか?
システムかソフトウェアを作る流れとしては、以下のようなたくさんのステップで出来上がってます。
現状の問題点の気付き
→ 解決策の検討
→ 周りの人の(経営者など)意見を集約
→ 具体的な解決手段をシステムとシステム外とを検討
→ 専門家を読んだり調べたりして情報収集
→ 外部会社とWin-Winの関係になれる方法を探す
→ 現実的な費用&労力&スケジュールで実現できる計画を作成
→ 社内の関係者の反発を抑えて合意を得る
→ 経営者に投資体効果を説明しお金を出していただく
→ ブロジェクトに協力してくれる人たちをうまく探し出しやる気を引き出す
→ どんなシステムを作ればいいかの具体的仕様を考える
→ その仕様を実現でき、かつ将来的な変更にも強い設計を考える
→ 複数のプログラマーに効率的に作ってもらえる指示方法を考える
→ プログラマーに指示しコントロールする
→ プログラミングする
→ 動作テストする
→ 利用検証をする
→ データ移行、マニュアル作成、利用者への教育など導入準備をする
→ 作ってからも、、、、(以下略
この流れの中で、プログラマーができる領域は最後の方の数ステップ程度ですよね。
こうなると、経営者がどこに価値を見出し、誰に給与をたくさん払うか? というのは、明らかだと思います。
(C) 価値が少ない領域では、代わりの人はいっぱい用意できますから、駄目だと思われればすぐに交代させられ、そうなると、次にまたチャンスが訪れるのを待つのが大変となります。
プログラマーのイメージとしては、工事現場でちょっとした機械が扱える人、だといえば伝わるでしょうか。
正直、プログラミング自体を習得することは、その他のスキルと比べるとさほど難しくはありません。
ただ、向き不向きがあって、不向きな人には苦痛な仕事でもあるので、自分がプログラマーに向いてるとしたら、それをうまく活用する手は2つあります。
一つは、上記(A)で書いたような、他のプログラマーとは違うスキルを持つこと。
もう一つは、プログラミングというスキルを持ちながらも、(B)のような他ステップをこなす役割を担うこと。
どちらにしても、プログラミング以外のスキルが大事だということがよくわかると思います。
(D) だとすると、そういったスキルをどのようにして身につけるか?
それらが大学に行けば身につくか、というと、そうとも言えません。
ただ、大学にいくことによって、
・たくさんの学問があって、それぞれが社会でどう使われているか、を学べること
・研究や論文、実験など、どうすればうまくできるか、を試行錯誤できること
・たくさんの教科があるなかで、効率よく単位を取るためにはどうすればいいかを考えたりさなきゃいけない
・いろんな種類の人間がきてる中で、どうやって友達を選んで、付き合っていくか、そしてそれが自分のネットワークになりえること
・自分たちだけで企画したイベントや旅行など、うまくこなす術を身につける
・バイトなど、いろんな業界のことを知れるチャンスがある
などなど、時間稼ぎにも見えますが、就職してしまうと、こんなこともできないくらい忙しくなってしまい、こういったことが身につかないままに仕事に没頭されることになる可能性が高いです。
そう考えると、大学進学というのは、良いプログラマーになるための一つの手段として、悪くないかもしれないな、と個人的には思います。
ただし、それ以外の方法を見つけられるならば、大学に行かなくてもいい、というのはそのとおりですし、
大学に行ったとしても、上のような目的を忘れて、単に流されて過ごすだけでは意味がありませんよね。
そういったことを意識したうえで、自分の人生を考えてみてください。
この記事が気に入ったらサポートをしてみませんか?