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

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