<< Prev Page Next Page >>

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


プログラマーになりたい学生さんに学んでおいてほしいTop7

僕は今39歳で、大学1年のときになんとなく学校のX-Window端末でWindows 95発売前のインターネット(Mosaicとかchimeraとかいうブラウザでなー)に出会って以降、なんやかんやでずっとコンピュータ触ってきて今もプログラマの仕事してます。めっちゃ楽でもないけど、それほどブラックじゃない感じで妻子を養って生活してますよ。

自分の経験と、会社に入ってくる若い人に色々教えたりする経験を総合的に考えて、プログラマになりたい中高生、大学生に学校でたっぷり時間使って学べるうちに学んでおいたらいいことがあるので書いてみます。

最初に:プログラマってピンからキリまですごい差があるんよね


本当によく言われることですが、プログラマの能力によって、生産性は10倍とも100倍とも言われます。これは一面では嘘ですが一面では本当です。

誰が書いても大して変わりないプログラムを作る場合、上等なプログラマでも下手なプログラマでも、出来上がる時間はそんなに変わりません。せいぜい1.5倍〜5倍ぐらい(!)の差です。

世の中のプログラマが書いてるプログラムの何%〜何十%は、そういうプログラムです。Webアプリでいったら所詮はRDBにデータ登録して表示するだけみたいなのがもう山ほどあって、そんなのは細かい出来の差はあれど、基本的には誰でも作れます。

しかし、下手なプログラマではいくら時間があっても出来ないが、上等なプログラマなら1週間とか数日で出来てしまうようなプログラムもあります。この場合の生産性の差は無限倍ということになります(数学的にアレな表現)。

たとえばiPhoneが登場してiOSアプリが求められるようになった直後は、上等なプログラマじゃないと複雑なアプリが作れませんでした。それからしばらく時間が経って、開発ツールがこなれてきて、Web上の情報が出揃ってくると、徐々に、下手なプログラマでもそこそこのアプリが作れるようになるため、「誰でも作れる」プログラムの割合が増えました。まだまだ過渡期ですが。

また、たとえば大量に存在するテキストファイルの中から任意の単語を含むものを高速に検索するという要件があって、そういうことをするプログラムを作るのは一握りの上等なプログラマにしかできませんでした。世の中にそれを求める人が多いことがわかったので、たくさんの上等なプログラマがアプリケーションやライブラリを用意してくれて、今では下手なプログラマでもそれを利用してなんとかかんとか仕事をこなせています。

この現実に対して、賢いつもりで「なるほど、要するにそんなに頑張って上等なプログラマにならなくても、少し待ってればなんとかなるんだから頑張る必要なんかないね」と考えてしまうのもある意味真実ですが、そっちの道はブラックとか、IT土方とか、そういうのに近づく可能性が高い方向性です。

一方、「頑張って上等なプログラマになれば時節にかかわらず常に必要とされて、クリエイティブな仕事ができるってことだね」と考えるのは、ある程度金銭的に恵まれる可能性が高い方向性です。

なぜなら、大きな傾向としては、高い報酬は希少な能力に対して支払われるからです。ぶっちゃけ、だれでも出来る仕事は安いのです。下手な(安い)プログラマの需要もそれなりにあるので、食いっぱぐれずにはいられるとは思いますが。

そんなわけで前置きが長くなりましたが、できたら上等なほうになりたい学生さんに、そこそこ上等なほうじゃないかと勝手に思い上がっている僕が勝手におすすめする「学生のうちにできること」Top7の発表です!

1位:英語


英語大事だわー。だいたいからして全てのプログラミング言語は英語ベースだし(ぴゅう太とかなでしことか言うなややこしいから)。ちょっとわけわからんエラー出た時は結局QiitaよりStack Overflowが頼りになるし。もっとわからんときでもソース読んだらなんとかなるし。

別にTOEIC800点必要とかそんな難しい話じゃないです。簡単な文章をスラスラ読める必要があるってことです。そんな難しい文法は出てこないし、ある程度慣れたら大体一定の単語しか出てこないし。中学から大学まで、学校で習う程度のことを真面目にこなしとけばいいってだけです。

おかしいなー、なんであんなにも英語読めないんだろう…。「なんかエラーになりました」じゃなくて、すぐ目の前の画面にエラーメッセージ書いてあるやん!英語見た瞬間に見なかったことにするみたいなのダメ、ゼッタイ。

2位:数学


プログラマに数学は必要ある、ないという議論がありますが、数学の点数取れてる人のほうがプログラマに向いてると思います。微分積分が常に必要ってわけじゃないです(機械学習を自分で実装とか言うときはガチで必要です)。でも文字をたくさん使ったような数式にアレルギーが出るようだと必要な勉強ができないです。
目的関数
f(x) = cTx,  c:n×1, x:n×1   (1)
を、制約条件
Ax ≦ b,  A:m×n,x:n×1,b:m×1   (2)
のもとで最大にする
とか言われて「うえぇぇ」ってなってるようだと線形計画法の教科書も読めない。

あと、数学の証明問題を解く手順は難しいプログラムを書く手順と似ています。抽象化、具象化の考え方もプログラミングに大いに関係があります。数列の一般解を求めるみたいな問題はプログラミングそのものです。また、ゲーム会社で「上等な」プログラマになりたいなら線形代数や幾何学なんかはそのまま必須でしょう。

結局数学は全部つながってるので、中学高校のうちから真面目に勉強しといて損はないです。

3位:国語


プログラミングは文章みたいなものだ、という人は多いです。文章を書くセンス、読み解くセンスは結構大事です。

長い文章を構成するときと、長いプログラムを書くときで、使う脳の部位は似ています。

あとどの職業でも同じですが、特にプログラマの場合、相手にとってわけのわからんものを何とかして説明するという機会が多いです。そのときに日本語の運用能力が高くないといたずらに時間ばかりかかります。

お客さんや上司が、誰にでもわかりやすい文章で求めるものを説明してくれるとは限りません。難解な文章を読み解く力もあったほうがいいです。

誰かに助けを求めるにも、まず自分の状況を説明するための論理的な文章を作らないといけません。文章大事。

4位:人づきあい


プログラマはコンピュータに言うことを聞かせる職業ですが、一人では仕事できません。プログラムは本質的に誰か人間のためのものである以上、お客さんなり、同僚なり、誰とも知らないユーザーなり、必ず他の人間と関わります。

他人と関わったときに不快感を与える人よりは、機嫌よくさせられる人のほうが必要とされるし、必要とされれば成長もするわけです。プログラマに限ったことではありませんが。

5位:プログラミング


プログラマになりたいならプログラムを書けばいい。当たり前ですね。ただ、授業で習う程度のことは会社の新人研修であっという間にカバーされてしまうので…。学校で習う以外で、興味の赴くままに、何かを作りまくるのはとても有効です。え、それほど興味ない?じゃあプログラマになろうと思わなければいいよね。

自分で作ったものを発表するというのをたくさんやるというのは、上等なプログラマに至る一つの大きな方法です。やっぱり人に見せるとなったら緊張感が違うので。また上手く行けば上に書いたようなことを全部すっ飛ばしてオンリーワンになれるかもしれない。

ただ「これはいいぞ!」と思って作っても世の中的にはそうでもない、となる可能性は高いわけで、それだけで一発当てるのを目標にしなくてもいいかなとは思います。

6位:美術、デザイン


プログラムは人間のためのものです。それも、非プログラマのためのものがほとんどです。ユーザーインターフェイスにはデザインが必要です。デザインは実はかなりの割合が理屈で構成されています。色の理屈、形の理屈。

今のところ、プログラマとデザイナは別の職業です。しかし、両者の組み合わせで一つの製品を作るという機会がとても多いので、とても綿密に協力しあわなければいけません。その時、デザイナの使う理屈がわからないとうまく協力できません。

社会に出てから独学するよりは、大学の自由選択科目とかで何単位かとっておくと、結構効きます。

7位:何らかの得意分野


最初に書いたとおり、だれでも出来る仕事は安いです。逆に、出来る人が少ない仕事は高くなる可能性があります(必ず高いとは限らないけど)。

スーパー難しいプログラムは確かに出来る人が少ないですが、それ以外にも出来る人が少ない仕事があります。それはコンピュータ以外の知識との組み合わせです。

たとえば大学の心理学の研究にコンピュータを使いたい先生がいた場合、できれば心理学がきちんとわかるプログラマに作って欲しいと思うわけです。

僕は大学時代に熱力学やら燃料電池やらの専門でしたが、熱力学がちゃんとわかるプログラマって少ないので、たまたまそういう仕事に当たった時はとても有難がられてその後もずっとご指名状態です。

真面目に専門分野に打ち込むことは無駄にならないと思います。


以上です。あー長かった。



テーマ:プログラミング - ジャンル:コンピュータ

この記事に対するコメント

この記事に対するコメントの投稿



管理者にだけ表示を許可する

この記事に対するトラックバック

トラックバックURL
http://tockri.blog78.fc2.com/tb.php/288-746fef4e
この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。