いろいろやってみるにっき

てきとーに生きている奴の日記

古いエントリのサムネイル画像がリンク切れになってたりするけど、チマチマ修正中


基礎を学ばないプログラマーはただのグラマーか?

そんなわけはないだろ。タイトル全部は見えないので貼っておく。

 

「プログラミング勉強して気付いたけど結局のところ基礎は実際に何か物作る中で覚えていくんだから基礎すっ飛ばして何でも良いから何か作れるようになった方が良いという話」

togetter.com

 

最初のポストはこちら。

こういうこと書く人って本当にJavaか?って疑ってしまう。

出向って書いている人がだいたい出向じゃないように。

shigeo-t.hatenablog.com

 

まずはこれだよ。

 

でも、最初のポストの人が本当に基礎について書いていると仮定する。ずーっと同じような仕事(作業)ならいいけどちょっとでも違う言語とか開発環境に変わっただけで、またかなりさかのぼってやり直しだよ。

 

オレみたいにちょっと動けばいい程度でプログラミングするなら、動くものを作ってみるっていうのは有効。だってちょっと動くものがあればいいんだもん。

 

でも、職業でプログラミングするなら基礎は必要。動かしてみるっていうのもHello Worldレベルよりはちょっと高度なことをコピペから改造して動かすレベルで必要なんだけど、それも基礎の一つ。多くのプログラミング言語の入門書は大体そういう章立てになってる。成功体験も必要だし、それでいくつかの基礎を学ばせることもできるし。

 

でも、言語仕様や基本的な約束事、予約語とかは理解しておく必要がある。

 

オレの場合は幸い基礎をやる余裕があった。大学時代BASIC、FORTRAN、CとやってFORTRANは全然わからなかったけどBASICはほぼ毎日プログラミングしてたし、Cも卒業研究でガッチリやった。
会社に入ってからはPASCALアセンブラは基礎を導入教育でやったし、COBOLコンパイラ屋に配属されCOBOLの構文チェッカーを作る仕事をやったのでCOBOLの言語仕様を全部見た。

お陰様で初見の謎言語をデバッグするというこんな仕事もすぐに結果を出せた。

shigeo-t.hatenablog.com

じゃあ、プリコンパイラかもってことで課長に報告すると、(固定で決めていないという意味で)担当者いないから、お前がプリコンパイラ追えと。しかもそのプリコンパイラ、所属部署で作ったものではなく、親会社の担当部署から担当替えになったものだった。ということで、先輩たちも中身見たことある人がいない\(^o^)/

なにが謎言語なのかは上記エントリにて。

 

その後の仕事でも初見の言語をデバッグするはめになってもデバッグできた。それにRubyPHPPythonVBScriptとかで納品物やツールも作れる。あ、Goもやった。Goで作ったツール納品したねえ。今Go書けって言われても準備に一時間下さいって言うけどw他の言語も同じww

JavaScriptは難しい。なんであんなに罠があるんだ?

 

多くの場合、何本かサンプルになるプログラムを見たりちょっと分からないところの言語仕様を見たりすればすぐに書いたりデバッグしたりできるようになる。ALGOL系言語の基礎を学んだおかげである。

ja.wikipedia.org

ALGOL(アルゴル)は、命令型プログラミング言語ファミリーの1つ。名前「ALGOL」は「アルゴリズム言語」を意味する英語「algorithmic language」に由来する。1950年代中ごろに開発され、多くの言語に影響を及ぼし、ACMや教科書や学術論文などでアルゴリズム記述のデファクトスタンダードとして30年以上使われた。現代の多くの言語が「ALGOL系」あるいは「ALGOL風」(algol-like) とされているという意味で、ほぼ同世代の高水準言語である FORTRANLISPCOBOL に比べて最も成功したと言うこともできる。FORTRANで明らかとなった問題を防ぐよう設計され、BCPL、B、Pascal、Simula、Cといった様々なプログラミング言語に影響を与えた。ALGOLは「begin と end で囲む」という構文によるブロック構造を導入し、制御構造を自在に入れ子(ネスト)にできる初の広まった言語となった。また構文の形式的定義を真剣に検討した最初のプログラミング言語でもあり、"Algol 60 Report"で導入されたバッカス・ナウア記法は、その後のコンピュータ言語等の構文の形式的定義を示す手法として(プログラミング言語だけに限られず)定番の記法となっている。

 

前にも書いたけど、プログラマの机の上を見ればデキるプログラマかそれ以外かは簡単にわかる。

shigeo-t.hatenablog.com

オレは、一緒に働く他部署の人と話がある時は自席には呼ばず、こちらから出向くことにしていた。そうすると、そこの部署の要員の机の上も見れるんで。会話するまでも無くかなり正確にレベルを把握できる。

 

Howなんて今なら検索すればすぐにヒットする。より詳しく・丁寧にということならやはり書籍ということにはなるけど。なんでHow-to本ばかり買うエンジニアが使えない奴かというと、基本を把握することが無いから。少し違う事をやらせようとするだけで、すぐに行き詰まりやがる。基本・基礎を把握していないので、ちょっと違うだけで頭から勉強が必要。Howの。結局、何かを把握することに対して高コストになる。

 

基本を把握していてこその応用。木を見て森を見ずどころか、枝葉を見て森を見ずという奴がこのHow-to本しか持たない技術者。How-to本ではなく基本を把握できる理論本とかリファレンス本を持っている奴は総じて、少し違う事をやらせてもすぐに対応できる。やはり基本を把握しているからだろうな。

 

今は案件によってプログラミング言語が異なるなんてことも、会社や部署によっては当たり前だろうしその都度やり直すくらいなら一回は基礎をきちんと身に付けた方が他言語にもすぐ対応できる。

 

まあ、今JavaならずーーーーっとJavaかもしれないしソルジャーとして長年働く気なら基礎もいらないか。

プログラミングの基礎 <a href=*1" title="プログラミングの基礎 *2" />

*1:Computer Science Library

*2:Computer Science Library

*3:Computer Science Library

お時間あったら、他のエントリもクリックして頂ければ幸いです。