プログラマが体験するべき○つのこと

大事なのは、いくつ地雷を踏んだか、だ。地雷を踏んだ数だけ強く慣れる。真に必要なのは、独力での問題解決能力。Python2系でsjisのHTMLをlxmlでスクレーピングすると、地雷を7つぐらい同時に踏めるからおすすめだ。

僕もまあそれなりに手を出しているのだけど、他の人も抑えるべきだと思った概念は、次のものだ。

Haskellにおける入出力IOと副作用の概念
HaskellのMaybe, またはScalaのOption型
Scalaのtrait
Node.jsの非同期Promiseパターン
C#のgetter/setter/readonly/async等の型アノテーション

本題にはあんまり興味がなかったんだけどこの部分がおもしろかったのでイッチョカミしたい。

成功体験の共有とまではいかないけど、こういう「これはやってよかったなー」と密かに思っているおすすめの話題はみんなそれぞれありそう。

自分なりに書き出してみたけど上記のmizchiさんの例が何々言語のこういう機能っていう具体的なものにたいして俺のはずいぶん抽象的な感じになった。

タイトルは「プログラマが知るべき97のこと」と「子どもが体験するべき50の危険なこと」の合成です。

プログラマが知るべき97のこと

プログラマが知るべき97のこと

子どもが体験するべき50の危険なこと (Make: Japan Books)

子どもが体験するべき50の危険なこと (Make: Japan Books)

ウェブアプリケーション以外のGUIアプリケーションの開発手法に触れる

プログラミング一般の話やソフトウェア開発の抽象的な話をしている時に「サーバーサイドが――」というような言葉が出てしまう人は思考がウェブアプリケーション開発の考え方に支配されている。

状態に左右される他のGUIアプリケーション環境を体験することで、ウェブアプリケーションフレームワークMVCアーキテクチャはかなり癖があることがわかる。

クライアントサイドMVCフレームワークのような次世代ウェブアプリケーションの考えにいかせると思う。

せっかく今からやるならモダーンなGUIアプリケーションツールキットがよくて、そうなると僕のおすすめは当然iOS,Android,Windows Phopneのモバイルアプリケーションです。3つともどんどん進化してる。

常用環境以外のデスクトップOSで開発する

この記事に辿りつくようなプログラマの人はOS X利用している人が多そうだけど、Windows 7以降を体験したことがない人やLinuxはもっぱらコマンドラインでの操作のみという人がいたら是非触れてみて欲しい。

あとよく「WindowsはWeb系の開発環境を整えるのが難しい」という話題があるけど、*nixマシンのサーバー上で動かそうとするものをWidnowsでつくろうと思うのならそらやりずらくて当然だろうと思う。まあ逆にWindowsのサーバーにデプロイするシステムをOS XLinuxASP.NET on MONOを一生懸命動かしている人とかいるのかは知らないけど。

ハードウェアをハックする

Raspberry Piとか、Arduinoとか、ジュエルポッドとか。

自分もあんまりできてないのでただの願望だけど。海外通販で買った不思議ケータイをいじって壊したりしていた。

オブジェクト指向プログラミング以外のパラダイムに触れる

Category:プログラミングパラダイム - Wikipedia とかにまとめられている。

自分は

あたりに興味がある。

興味のあるトピックにとりかかるコツは、その技術を使わないと前にすすめないようなシチュエーションを自作自演することだと思う。

関数型プログラミングだ!→よし勉強だ! だとモチベーションがわかないから。喩えば、Emacsに乗り換えて設定ファイルでEmacs Lispを覚えないといけない、とか。

自分の場合はHaskellで拡張するWindows Manager使ってさわりを覚えてた。

デバッガ/IDEをつかう

VimEmacsは依然使っているんだけど、GUIアプリケーションのデバッグやっているうちにデバッガを使うのが普通になってきた。

ウェブアプリケーションの開発でもフロントエンドのJavaScriptデバッグFirebugChrome DevToolsを使っている人は多いと思う。

じゃあサーバーサイドのプリントデバッグしているところもデバッガに置き換えてみるのはどうだろう。

スクリプトレベルならコマンドラインからデバッガを対話しながら操作は余裕なんだけど、モジュールの規模が大きくなってくると専用のGUIサポートを持つIDEを使った方がてっとりばやいと思う。

そういう時はとりあえずJetBrains製品などで試してみるのがいい。

デバッガが有用なのはわかるんだけど、Vim/Emacsから離れられないからどうだろ……派の人も結構いるかもしれない。

ちなみに「Coders at Work」を読むとレジェンドレベルのプログラマのおっさんたちも「IDEとか難しくて使いこなせないからEmacsでプリントデバッグしてるけどこれでいいのかなと不安になる」って言ってた。

Coders at Work プログラミングの技をめぐる探求

Coders at Work プログラミングの技をめぐる探求

英語でググる

https://www.google.co.jp/#hl=en&q=%s をお使いのブラウザのキーワードショートカットなどの機能に割り当てるだけ。

目当てのツールのことを調べたい時などに、数年前に更新された個人ブログ記事とかが出てきがちなんだけど、最初から英語でググれば公式サイトやよく整備されたドキュメントが真っ先に出てくるのが便利。

道具を分解する

/usr/bin/vi /usr/bin/vi

などのコマンドを打った経験はないでしょうか? テレビの中に本当に人間が入ってないか気になったことは?

普段、自分が使っているツールやソフトウェアがどういう原理で動いているのかを自分の目で確かめてみたい。そんな時に有効なのはソースコードが公開されている道具を最初から使うことです。

そんな都合のいいツールを使っていないという場合でも、「このツールを作る為にはどうしたらいいだろう?」という考え方さえ知っておけば大丈夫です。むしろ多くの場合はオープンソースライセンスを持つ代替ツールなどが公開されているので、「体験をする」ということが目的ならそれで間に合うでしょう。

このような考えはamachangさんの勉強が出来ない奴はプログラマになれ!(バカだからできる勉強法) - IT戦記という記事に影響を受けました。

木にのぼる*2

木にのぼることはソフトウェア工学上非常に重要な行動です。木にのぼれない人間がコードで世界を変えることは不可能です。

あなたものぼれそうな木があったら是非チャレンジしてみてください。

公園の樹木は一見のぼれる! と思いやすいけど、社会は厳しいので管理上の都合によってゆるされない場合が多いので。おすすめは山林です。首都圏に住んでいる人はとにかく西へ、西へ行けばいいと思う。


そんじゃーね*3