« 世間ではファッキン北 | メイン | メモ:.NETでZIP圧縮を行う方法 »

プログラマに必要な素養

自分の下に新人が入ってきて、今、一緒に仕事をさせてもらっている。
前評判は情報系の専門学校を上位順位で卒業したと聞き、本人いわく卒業研究はJavaとStrutsでクラスバリバリのアプリケーションを組んでいたというから、どんなアレゲなやつなんだろうかと期待していたが…やはり新人。まだまだであった。

一本ASPで簡単なプログラムを作らせてコードレビューをしてみたが、

IF (Condition_A) THEN
    Statement_A
ELSEIF (Condition_B) THEN
    Statement_B
ELSEIF (Condition_C) THEN
    Statement_C
ELSE
    Statement_D
END IF

もしくは

SELECT CASE Condition_Value
CASE Condition_A
    Statement_A
CASE Condition_B
    Statement_B
CASE Condition_C
    Statement_C
CASE ELSE
    Statement_D
END SELECT

と書くべきところを、

IF (Condition_A) THEN
    Statement_A
ELSE
    IF (Statement_B) THEN
        Statement_B
    ELSE
        IF (Statement_C) THEN
            Statement_C
        ELSE
            Statement_D
        END IF
    END IF
END IF

などとし、こんな嫌な感じのIF文が10個くらい並んでたり、5レベルくらいネストしてたり。
部分的に違うだけの処理が何個も何個も並んでたり。
変数名がasdfだったり、タブが揃ってなかったり、一貫性がなかったり。

これでは、Javaのクラスとやらも見るまでもなかろう。サブルーチン以前である。
まずは職業プログラマとしてのプログラムの書き方から教える必要があるようだ。


ここで情報系の専門学校(大学でも可)の先生に提案です。

1.
入校後は事務処理系アプリコースと組み込み・ゲーム系アプリコースにクラス分けし、事務処理系アプリの場合はSQLをみっちり教えてください。
SQLは始めはANSI仕様でお願いします。基本を押さえたらOracleやSQLServerの方言を教えて下さい。
OracleGold持っているのにINNER JOINとOUTER JOINの違いも分からないような人間は要りませんので。

2.
Javaだ.NETだと、浮いたテクノロジーを教える前に、カーニハン&プローガーの「ソフトウェア作法」「プログラム書法」の輪読を義務付けてください。
マジックナンバーを定数にできないような人間に、型重視の言語はもったいないです。

3.
論理的思考を学ばせてください。
上記プログラムを直すような場合、そういう考え方ができればリファクタリングできますし、そもそも上記例のような書き方は避けます。
作文や仕様書、論文などを書かせて、国語力を養うのはどうでしょう。

4.
時々はプロの仕事現場や成果物を見せ、変なプライドが芽生えないようにさせてください。
「俺はデキるぜ…何かが。」みたいな、変な自信を持っているヤツが多すぎます。


…うーむ。自分も気を付けなければ。
同業の方、居られましたらご意見お聞かせ下さい。

トラックバック

このエントリーのトラックバックURL:
http://yugen.main.jp/cgi-bin/mt/mt-tb.cgi/50

コメント (6)

iMa:

断じて同業ではないけど^^

不可さんみたいな人が専門学校のティーチャーにジョブチェンジするという逆の発想をしてみる。

イソノ:

激しく同意しますw
(って、俺も人の事言えたもんじゃないけどw)
>OracleGold持っているのにINNER JOINとOUTER JOINの違いも分からないような人間は要りませんので。
さすがに↑にはビックリwww

論理的思考,美的感覚および英語力があれば可読性は高そう.

ちなみにその新人はELSEIFという予約語を知らなかったんだよ(w

俺様:

使えん奴はクビにせれ(´ー`)

カンタンにクビしてもいいですけど、やぱし誰かが何かの手段で育てないと、人が育たないし、人が育たないとギョーカイが育ちませんからねぇ。
プログラマーに限ったことではなくて、どのギョーカイもだいたいそんなような悩みがあると思います。

それにしても、プロの現場や成果を見せるというのは必要ですね。でも学校は技術や知識を供与する場というよりも、やはり利潤を追求する機関になっているような気がします。

>iMa
いやぁ、自分は先生なんてできないです。
今は、人に教えることを勉強させてもらってます。

「教える」って本当に難しい。
むしろ仕事場では「諭す」ことが重要かもしれない。
(「諭す」の方がもっともっと難しいと思うが…)
強いばかりではだめだし、弱いばかりでもだめ。
アメとムチではないけれど、強弱が無いと相手の心が離れてしまいます。
私の背中を見てもらえるような人間になれたら…って思います。
コーチングについて勉強してみようと思う今日この頃。


>優乃
いやぁ、elseif知ってるらしいよ。
昔からelseif無しで通してきたんだって…。
まあ、負け惜しみで言ったのかもしれないけど。

プログラム文書が英語っぽく見えるように努力するだけでもかなり違ってくるでしょうね。
自分はオブジェクト(変数名とか関数名とかの広い意味でのプログラム部品)の名前を付けるのに結構悩むようにしています。

また、ベタでも良いからとにかく書いて、段階的にリファクタリングしてゆきます。
一発で綺麗なの書ければいいんだろうけど、頭悪いんで。
かつての学校の先生も、「プログラムは3回捨ててまともになる」って仰っていたなあ。
近頃は納期短い仕事ばかりで、こういう事がやりにくくなっていますが。
つか、仕事の中のプログラミング作業の比重が下がってきた…。


>PhotoPierre
確かに。誰かが誰かを育てることで、会社…ひいては社会が成り立っているのだと思います。
自分だって一人でココまで来たわけではないのだから、恩返しではないけれど、後に繋げてゆかなければならないなぁなんてぼんやりと考えています。
まあ、目下、1から10まで言うのを減らしてゆく、ひいては自分が楽になるようにすることが先決なのではありますが。

利益追求の件ですが、専門学校の広告には「PHPを覚えてWebプログラマになる」とか「Linuxをマスターしてネットワーク管理者に」なんて、具体的な、かつ旬な名前が並んでおります。
しかし、実際にはPHPが分かったからといってWebのシステムが一本組めるようになるわけではないし、Linuxが分かったところでネットワーク管理なんてできっこない。
確かに、具体的な目標があったほうが良いのですが、そのカリキュラムの中で、PHPやLinuxが無くなっても食ってゆけるような普遍的な知識を教えているのかというと疑問です。

コメントを投稿

About

2006年7月13日 02:15に投稿されたエントリーのページです。

ひとつ前の投稿は「世間ではファッキン北」です。

次の投稿は「メモ:.NETでZIP圧縮を行う方法」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。