プログラマになるにはどうすればいいですか?

こんにちは。プログラムをはじめて25年経ったヤマヤタケシです。

ニコ生やってると「プログラマになるにはどうすればいいですか?」と、ちょくちょく聞かれます。

資格はいらないので、自称でOKじゃー!
俺が犯罪を犯したら、山屋健(34)プログラマー(自称)とでも報道してくれたまえ!
本当に自称でいいのですが、質問した人はきっと「職業として、仕事として、収入の糧としての職業プログラマにどうすればなれるのか?」が聞きたいのでしょう。

アドバイスいたします!

職業人としてのプログラマは基本的に普通のサラリーマンに求められる事と同じです。
無遅刻、無欠勤、サービス残業、報告、連絡、相談です。
プログラマとして付け加えるのは、仕様書を見てそれをプログラム言語で書いて問題なくコンピュータで実行させるスキルです。
それができたら派遣会社に登録してください。
どっかの現場に突っ込んでくれることでしょう。

これであなたも立派な職業プログラマです!

プログラマは一般派遣労働者ではなく、特定派遣労働者で法律上の立場が違います。
頭の片隅にでも置いてください。

職業プログラマを志すのであれば「仕様書をみて実現する」というのをやってみればいいのです。
やってみて、向いてなければ他の仕事を当たってください。

よしやろう!と決心しました?

では、最初に作るべきは「電卓」です。
小さい完全なアプリとして、電卓という題材は最高です。
身近ですし、役に立ちます。
絵に個性を持たせるだけでバカ売れです!

実物の電卓を手元に置きましょう。

作ろうとして最初に悩むのは開発環境と実行環境です。
開発環境はMac? Windows? Linux?
実行環境はMac? Windows? FireFox? iPhone? Android? Windows Phone? Tizen? XBOX? Ouya?
使用する言語は? C? C++? C#? D? Java? PHP? Lua? Ruby? Python?
と迷います。
多すぎてどれを選んで良いのかわかりませんね。

そこで、俺だったらこうするなーっていう学習の流れを提案致します!
開発と実行の環境は、Windows、メモ帳、ブラウザのFirefoxです。

1. Googleで、「Javascript 電卓」を検索します。
2. お好みの分かりやすいサイトを選びます。
3. そこのプログラムの例題を実行します。プログラムコードを眺めます。
4. 見ないで作ります。分からないところはカンニングします。
5. 見ないで作れるようになるまで繰り返します。

見ないことには何も進まないなら、最初は写経で良いと思います。
そして、見ないでかけたなら結構な力がついている事でしょう。
最初に解説を読んでも、考えるための材料がないのであまり意味を汲み取れないのです。
小さいけど完全なアプリを脳内に入れておけばそれが幹になります。その後に枝をのばし、葉をつけましょう。
電卓の次は時計に挑戦しましょう。時刻はOSから取得する必要があり、APIを調べる事になります。

時計ができたら、次は妄想を紙に書いて仕様書にして、オリジナルアプリに挑戦!
これができれば妄想が現実になるのです!
呪文でアプリを召還するようなものです。

アプリの内容を紙に書いた物を仕様書と言います。
仕様書は日本語という曖昧言語でかかれており、プログラマはそれを厳格なコンピュータ言語に変換するのです。
仕様書は特別決まった形式がある訳でもなく、パワポでバーン!みたいなものから口頭で、ぽろっと言っただけまで幅広いものです。
なんかもう時と場合によります。
ようするに内容がわかって忘れなければ何でも良いのです。
穴だらけの仕様書にイライラしてはいけません。仕様変更にイライラしてはいけません。
その曖昧さにどれだけ対応できるか、どこまで拾えて実装できるが職業プログラマとしての評価基準なのです。

完璧な仕様書を作るのはかなり大変ですし、完璧な仕様書を書けるお客さんは、翻訳してインドに発注すればいいのです。
完璧な仕様書を落とし込むだけのプログラマの人月単価は安いのです。
所詮自称ですし、コンパイラは無料だし、パソコンは安いし、ネットに情報は死ぬほどあるので、本当に誰でもなれるのです。参入障壁なんてありません。
プログラムの世界はグローバルです。
日本人じゃなくても良いですし、英語がベースなので英語圏の連中は有利です。
実際のところ人件費が安いわ頭がいいわのインド人のプログラマも多いのです。

”マイクロソフトの従業員の34%、IBMの従業員の28%、インテルの17%、ゼロックスの13%がインド人だ。”(引用 http://gendai.ismedia.jp/articles/-/31236

ぞわっとしますけど、それがグローバルです。

日本人が人件費の安い国々の人と競合しないためには、日本語の曖昧な仕様を受け入れて、口頭の思いつきもちゃんとメモって漏らさないようにしましょう。
外国人プログラマとの差別化になります。
幸い日本語は難しいので良い参入障壁になっています。

もう少しプログラムについて書きます。
プログラムを書くというのは、人間の都合と機械の都合の両方を理解して調停する仕事です。
昔のプログラムは機械語、アセンブラという機械の仕組みがむき出しな言語を使うしか選択肢はありませんでした。
CPUの動作原理やレジスタ個数と役割を深く理解しないと実現ができませんでした。
今は先人の叡智により人間の脳の考え方に近い方法で記述できます。Javascriptを書くときにCPUの知識は不要です。コンパイラやインタプリタがCPUの面倒を見てくれます。
本当に、死ぬほど便利なものがインターネットに無料で転がっている時代になりました。

記念すべき最初の一歩を踏み出したその次にすべき事は、膨大な情報を扱うスキルを磨く事です。
アプリを作るために必要な情報は膨大です。アプリの分野によってぜんぜん違います。
電卓を作るのに必要な知識と、シューティングゲームを作るのに必要な知識は全然違います。
しかも、作りたいアプリやシステムや状況によってふさわしいコンピュータ、OS、ライブラリも違います。
それらもそれぞれ膨大な情報の塊です。
それら全部を覚えようとしても膨大すぎて、当たり前のように覚えられません。

だから、むしろ覚えないで作る技こそが必要です。

覚えないで作るためにメモを書き、検索します。
検索に必要な曖昧な知識と、こういうのがあるんじゃない?という連想力、発想力が大事です。
さっき「電卓 javascript」でググったところ、良いサイトがヒットしました。
俺が考えそうな事はもう誰かが考えて、ネットに置いてくれています。
ここに電卓の作りかたはありませんが、電卓を作ったら良いよという指針があります。

ということで、これからプログラマを目指す人は電卓アプリをJavascriptで作ってブラウザで実行しましょう!
そこから先は、ゴール次第です。
ゲーム?WEBサービス?FX自動売買システム?
それぞれにふさわしいコンピュータ、OS、言語、ライブラリ、プラットフォーム、ツールがあります。
死ぬほどコンピュータの世界は広がっているので、目指すところへ一歩一歩進んでください。

この文章が、これからプログラムを始めようと思う人に少しでも役立ったら幸いです。

システムやコンピュータに関する相談に乗ります。
コンサルティング料は1時間5000円です!

そんじゃまた。

軽い気持ちで有名になりたいのでクリックをお願いします!

追記:
そういう自分が電卓を作った事がなかったので、Javascriptで電卓を作りました。
「Javascriptで電卓を作ってみた。ソース付き。」