シリコンバレー 面接 勉強 2

日経のニュースを見ていると ”生き残りのために子供と一緒にコーディングを学べ”などといったことを言っておられるコメンテーターの記事を見つけたりします。

そんなことだけで良いのか?と思います。 コーディングって? ひょっとしてパイソン、C, C++言語を学んでちょっとしたコーディングをするということなのか? 記事を読んでも皆目わかりません。コメンテータの経歴をみても良くわからない。

以前のBLOGにも書きましたがソフトウエアエンジニアというとコーディングをする人なのか? コーディングに力が入りすぎていないでしょうか?

私は

ーアルゴリズム

ーデータ

ー数学、とりわけ、確率、線形代数、統計、など

ーコンピュータアーキテクチャ。ヘネシー、パターソン教授の教科書(2冊ありますがどちらも)くらいは読破しておく。

をしっかり学生時代(大学院、できれば博士課程まで)に勉強すると良いと思います。線形代数を勉強するとC++のEigen(ライブラリ)におそらく行きつくでしょう。Eigenを使いこなせることが重要にもなります。アルゴリズムを勉強するとMatlabに行きつくかもしれない。Matlabを使えることで広がります。データを勉強すると統計、確率論に行きつくかもしれない。そこからAI(Machine Learning)にたどり着くかもしれない。

社会にでてしまったとしてもエンジニアリングの基礎となるこれら、学生の時にあまり勉強してこなかったとしたら時間をかけて勉強するとよいと思います。

アルゴリズム、例えばソート、幾つくらい知っていますか? ソートならソートでそのパフォーマンスとデータ(使うデータ量)の比較など面接で問われてすぐにはじき出せますか? 

面接をしてもこういった質問に答えられるエンジニアがだんだん少なくなっているようです。パイソンには沢山のパッケージがありそれを使うと簡単にプログラムできるような錯覚をします。パイソンを使うとプログラムの煩雑さは確かにずいぶん改善されます。そんな時代ですからより一層アルゴリズムなどソフトウエアエンジニアリングの根幹、そしてエンジニアリングの根幹である数学がより重要になるはずです。それに加えシステム構築の知識、経験。

一方コンパイラ、ライブラリといったいわゆるソフトウエアエンジニアリングに関わることもとても重要です。私はコンパイラエンジニアの面接で呼ばれることもあります。コンパイラはハードウエアと非常に密に関連しているのです。優秀なコンパイラエンジニアはハードウエアの知識、経験が不可欠なのです。

コーダー(プログラマ)で終わるか、ソフトウエアエンジニアになるか、違いはこういった基礎となる学科をどこまで勉強したかが大きく関係してきます。

これらを修めるのに大学学部ではもう物足りない。修士課程でも実質不足。以前にも書きましたが博士課程を修めたエンジニアの数がドンドン増えているのは理由があるのです。