大事なのは、いくつ地雷を踏んだか、だ。地雷を踏んだ数だけ強く慣れる。真に必要なのは、独力での問題解決能力。Python2系でsjisのHTMLをlxmlでスクレーピングすると、地雷を7つぐらい同時に踏めるからおすすめだ。
僕もまあそれなりに手を出しているのだけど、他の人も抑えるべきだと思った概念は、次のものだ。
Haskellにおける入出力IOと副作用の概念
HaskellのMaybe, またはScalaのOption型
Scalaのtrait
Node.jsの非同期Promiseパターン
C#のgetter/setter/readonly/async等の型アノテーション
本題にはあんまり興味がなかったんだけどこの部分がおもしろかったのでイッチョカミしたい。
成功体験の共有とまではいかないけど、こういう「これはやってよかったなー」と密かに思っているおすすめの話題はみんなそれぞれありそう。
自分なりに書き出してみたけど上記のmizchiさんの例が何々言語のこういう機能っていう具体的なものにたいして俺のはずいぶん抽象的な感じになった。
タイトルは「プログラマが知るべき97のこと」と「子どもが体験するべき50の危険なこと」の合成です。
- 作者: 和田卓人,Kevlin Henney,夏目大
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/12/18
- メディア: 単行本(ソフトカバー)
- 購入: 58人 クリック: 2,107回
- この商品を含むブログ (341件) を見る
子どもが体験するべき50の危険なこと (Make: Japan Books)
- 作者: Gever Tulley,Julie Spiegler,金井哲夫
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/05/26
- メディア: 単行本(ソフトカバー)
- 購入: 19人 クリック: 476回
- この商品を含むブログ (25件) を見る
ウェブアプリケーション以外のGUIアプリケーションの開発手法に触れる
プログラミング一般の話やソフトウェア開発の抽象的な話をしている時に「サーバーサイドが――」というような言葉が出てしまう人は思考がウェブアプリケーション開発の考え方に支配されている。
状態に左右される他のGUIアプリケーション環境を体験することで、ウェブアプリケーションフレームワークのMVCアーキテクチャはかなり癖があることがわかる。
クライアントサイドMVCフレームワークのような次世代ウェブアプリケーションの考えにいかせると思う。
せっかく今からやるならモダーンなGUIアプリケーションツールキットがよくて、そうなると僕のおすすめは当然iOS,Android,Windows Phopneのモバイルアプリケーションです。3つともどんどん進化してる。
常用環境以外のデスクトップOSで開発する
この記事に辿りつくようなプログラマの人はOS X利用している人が多そうだけど、Windows 7以降を体験したことがない人やLinuxはもっぱらコマンドラインでの操作のみという人がいたら是非触れてみて欲しい。
あとよく「WindowsはWeb系の開発環境を整えるのが難しい」という話題があるけど、*nixマシンのサーバー上で動かそうとするものをWidnowsでつくろうと思うのならそらやりずらくて当然だろうと思う。まあ逆にWindowsのサーバーにデプロイするシステムをOS XやLinuxでASP.NET on MONOを一生懸命動かしている人とかいるのかは知らないけど。
ハードウェアをハックする
Raspberry Piとか、Arduinoとか、ジュエルポッドとか。
自分もあんまりできてないのでただの願望だけど。海外通販で買った不思議ケータイをいじって壊したりしていた。
オブジェクト指向プログラミング以外のパラダイムに触れる
Category:プログラミングパラダイム - Wikipedia とかにまとめられている。
自分は
- 関数型プログラミング
- リアクティブ(ファンクショナル)プログラミング *1
- アスペクト指向プログラミング
あたりに興味がある。
興味のあるトピックにとりかかるコツは、その技術を使わないと前にすすめないようなシチュエーションを自作自演することだと思う。
関数型プログラミングだ!→よし勉強だ! だとモチベーションがわかないから。喩えば、Emacsに乗り換えて設定ファイルでEmacs Lispを覚えないといけない、とか。
デバッガ/IDEをつかう
VimやEmacsは依然使っているんだけど、GUIアプリケーションのデバッグやっているうちにデバッガを使うのが普通になってきた。
ウェブアプリケーションの開発でもフロントエンドのJavaScriptのデバッグにFirebugやChrome DevToolsを使っている人は多いと思う。
じゃあサーバーサイドのプリントデバッグしているところもデバッガに置き換えてみるのはどうだろう。
スクリプトレベルならコマンドラインからデバッガを対話しながら操作は余裕なんだけど、モジュールの規模が大きくなってくると専用のGUIサポートを持つIDEを使った方がてっとりばやいと思う。
そういう時はとりあえずJetBrains製品などで試してみるのがいい。
デバッガが有用なのはわかるんだけど、Vim/Emacsから離れられないからどうだろ……派の人も結構いるかもしれない。
ちなみに「Coders at Work」を読むとレジェンドレベルのプログラマのおっさんたちも「IDEとか難しくて使いこなせないからEmacsでプリントデバッグしてるけどこれでいいのかなと不安になる」って言ってた。
Coders at Work プログラミングの技をめぐる探求
- 作者: Peter Seibel,青木靖
- 出版社/メーカー: オーム社
- 発売日: 2011/05/25
- メディア: 単行本(ソフトカバー)
- 購入: 11人 クリック: 360回
- この商品を含むブログ (36件) を見る
英語でググる
https://www.google.co.jp/#hl=en&q=%s をお使いのブラウザのキーワードショートカットなどの機能に割り当てるだけ。
目当てのツールのことを調べたい時などに、数年前に更新された個人ブログ記事とかが出てきがちなんだけど、最初から英語でググれば公式サイトやよく整備されたドキュメントが真っ先に出てくるのが便利。
道具を分解する
/usr/bin/vi /usr/bin/vi
などのコマンドを打った経験はないでしょうか? テレビの中に本当に人間が入ってないか気になったことは?
普段、自分が使っているツールやソフトウェアがどういう原理で動いているのかを自分の目で確かめてみたい。そんな時に有効なのはソースコードが公開されている道具を最初から使うことです。
そんな都合のいいツールを使っていないという場合でも、「このツールを作る為にはどうしたらいいだろう?」という考え方さえ知っておけば大丈夫です。むしろ多くの場合はオープンソースライセンスを持つ代替ツールなどが公開されているので、「体験をする」ということが目的ならそれで間に合うでしょう。
このような考えはamachangさんの勉強が出来ない奴はプログラマになれ!(バカだからできる勉強法) - IT戦記という記事に影響を受けました。