新人プログラマに対する注意点?

http://jibun.atmarkit.co.jp/ljibun01/special/bunri/bunri01.html

先に「経験0でもOK」という言葉に騙されて,この業界に入ろうとしている人への忠告.

知識も経験もない人間が必死で頑張ったくらいでどうにかなるような甘い世界ではありません*1デスマーチに放り込まれて使い捨てにされるのがオチです.*2

文系の皆さんへ:プログラム言語は英語よりずっと簡単!
少なくともプログラミング言語は、英語よりもずっと簡単ですよ。一歩一歩確実に進んでいきましょう。

たしかに言語としての複雑さは,自然言語よりプログラミング言語の方が遙かに単純だ.言語自体の習得も同じ.

では「プログラミングが自然言語習得より遙かに簡単か?」ということに関しては正しくない.それらでは求められる性質が全く異なる*3.また言語習得はプログラミング習得の第一歩に過ぎず,それ以外にも求められる技術は無数に存在する.言語仕様とAPI仕様をどれだけ熟知しようとも,それだけではプログラムは満足に書けるようにはならない.

・仕様どおりに作成する
 業務で作成するプログラムには必ず仕様書(設計書)があります。プログラムは必ず仕様書どおりに作らなくてはなりません。極端なことをいえば、たとえ設計書が間違っていてもです。

  1. 実際には仕様書は必ずしも存在しない.
  2. 洩れ,抜け,曖昧さ等のミスが一切ない仕様書は滅多にない.特にシステムが複雑且つ高度になればなるほど仕様書にはミスが含まれやすくなる.間違いを見つけるのも能力の一つ.
  3. 万が一,完璧な仕様書が存在したとしても,それを理解するのは簡単ではない.法律の条文を理解するために最高裁判所判例や解釈を熟知しなければならないのと同様に,仕様書を理解するためには数多くの実装を熟知しなければならない.
  4. 設計書に至ってはさらに悲惨だ.設計書通りに作っても実現できる保障はない.*4 *5
  5. 設計書が間違っている場合は,まず第一にその点について責任追及すべきだ.*6

・良いプログラム=皆が分かりやすいプログラム
 複雑で難解なコードで書かれているプログラムが良いプログラムであるとは限りません。システムは自分1人で作るものではなく、多くのメンバーが集まって作るものです。自分が作ったソースをほかのメンバーが見たとき、分かりやすく記述されていることが重要です(この分かりやすさを「ソースの可読性」と表現します)。

可読性が高いことは良いプログラムに求められる重要な要素だ.これは疑いようがない.

ではそれは即ち「皆が分かりやすいプログラムなのか?」となると,それは必ずしも正しくない.デザインパターンとかOOPなどが,その一つ.それらが使われたコードはそれを知らない人には理解不能な代物だが,それは良いプログラムだ.レベルの低い開発者や管理職にあわせて,これらの技術を使うべき場所で使わないと保守性は一桁以上下がる.*7

  • ドキュメントの作成
  • 対人(コミュニケーション)能力

 これらの事柄は、一般的には文系出身者の方が得意な分野であるといわれています(あくまでも一般的な意見ですよ)。この2点についての心構えにも言及しておきます。

そう思う人っているのかね?

いずれも間違い.文系が得意と言うことは断じてない.と同時に理系でも苦手な人は非常に多い.文系はほぼ100%が苦手だが,理系でも90%以上は苦手な人だろう.そういう意味では目糞鼻糞.

技術文書の作成はいわゆる文系の文書とは全く異なる.優雅さや感情あふれる生き生きとした表現などは一切不要で,華美な装飾や曖昧さを排除し,客観的且つ簡潔で明確なものが好ましい.また技術的なポイントを押さえることも重要で,専門知識のない人には何がポイントかを理解することさえできない.技術の現場で求められるコミュニケーション能力についても同様だ.

実務に入れば、文系・理系の差はほとんどない

ある意味では確かにその通りだ.

文系は100%素人だが,理系にも素人は少なくない.これについては個人差が非常に大きい.

また,たとえ専門家でもそれが評価されることは一切なく,すべて素人と同じく横並び評価される.いずれも完全に使い捨てにされるという意味において平等に扱われる.

*1:竹槍でB29を落とすことにたとえられる.

*2:知識も経験もあっても,使い捨てにされる点は変わらない.

*3:http://d.hatena.ne.jp/JavaBlack/20060331#p1

*4:http://d.hatena.ne.jp/JavaBlack/20050812#p1

*5:http://d.hatena.ne.jp/JavaBlack/20050813#p1

*6:それができない場合も多い.だからデスマーチはなくならない.

*7:文系の人にとっての数学記号がこれに近いかも.高度な数学理論を数式を一切使わずに説明することが,いかに大変であるか想像に難くない.なお数学の難しさは記号の難しさではなく,数学の理論そのものの持つ難しさである.記号を覚えるだけなら英語を覚えるより遙かに簡単で,小学生が地図記号を覚えるのと大差ない.

Googleのインターン.

http://googlejapan.blogspot.com/2006/04/google_17.html

朝は、ミーティングなどがなければ、何時に行かなくてはだめというのもありませんでしたが、朝ご飯の時間だけ、その場で生のフルーツから作ってもらえるスムージーがあって、これを飲むために、結構早めに会社に行っていました。:-) これ、本当においしいんです。

「早起きは三文の得」になるようにして,早起きすることを推奨しているわけか.*1

朝に朝礼を行ったり,それに遅れると人事考課に響くとかにして「早起きしないとペナルティを課す」日本企業とはまるで逆だな.*2

プロジェクトの仕事以外にも、TechTalk という、社内外から人を呼んでの講演会のような感じのものが、毎日のように開催されて、インターンもこれに自由に参加することができます。僕の滞在中には、アラン ケイやラリー ウォールなど有名人の TechTalk もあって、彼らの講演を聞くことができました。

講演のゲストまで桁違いか.

企業内部で開かれる講演会とは思えないな.*3

*1:朝食の段階で社員食堂が開いているのか??美味なことで有名な社食で一日三度のメシが食えるなんて夢のような環境だ.
....こういうことを考えること自体が何かが間違っている気がする. orz

*2:しかも早起きすることが合理的,経営的に判断して何の意味もない,時にはそれが足を引っ張る場合でさえもこれは変わらない.

*3:とはいうものの,下手をするとそのクラスの有名人を根こそぎ引き抜いてるのがGoogleという企業なわけで,Googleの感覚からすると普通のことなのかもしれない.下手をすると,各分野の第一人者でないと社内の人間の方がレベルが高いから,講演が成立しないのかも.私だって,もし「Googleに行って講演してくれ」と頼まれたら,報酬の如何に関わらず丁重にお断りすると思う.並のレベルではさらし者にされるのと変わらない.

Effective C++ 原著第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

メモ.

Effective C++ 原著第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

Effective C++ 原著第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

いったい何年間、第2版が積ん読状態になっているんだろう.