*概要 [#e2e01180] -プログラミング言語の比較、ライブラリの俯瞰、開発スタイルについて -カンナにこだわりがある大工、と言うときに、カンナで釘打ったりしない。言語は選んで。 *開発スタイル [#nb8deedf] -紙を使え --紙に設計を書くの大事.集中は紙からやってくる.キーボードからは集中パワーは出てこない --プログラムを書くときに,プログラムを紙で印刷するという方法を思いつかなければならない -デバッグの精神論>http://wise9.jp/archives/7986 *目次 [#g64b74ae] -プログラミング言語 --[[C]] --[[C++]] --[[Objective-C]] --[[Python]] --[[Haskell]] --[[JavaScript]] --[[PHP]] --[[Matlab]] --[[Matlab]] (数式→コードはMATLABのSymbolic Math Toolboxが良いらしい) --[[Maxima]] --[[octave]] -データベース --[[MySQL]] --[[SQLite]] -アルゴリズム --[[プロコン]] --[[整数計画法]] -ライブラリ --[[OpenCV]] --[[OpenGL]] --[[Eigen]] -GPU --[[GPGPU]] -コンパイラ --[[LLVM]] -開発環境 --[[グラフィックコメント]] *情報源 [#w90d7cf3] -Web系 --http://www.w3schools.com/ *速度の比較 [#j1d5902f] -∑kをn_i=1->nで計算,n=10000(O(n^2)の計算) --[[結果>http://akiniwa.hatenablog.jp/entry/2013/09/28/142947]] |C|58ms|1| |Java|181ms|3| |php|3455ms|60| |python|5266ms|90| |Ruby|14548ms|250| -1~1000000000までの数を足しあわせ --[[結果>http://kesin.hatenablog.com/entry/20120306/1331043675]] |C|236ms|1| |octave|464000ms|2000| *開発スタイル [#r26df05f] -オブジェクト指向 -テスト駆動 --原義的にはテストを先に書くことを表す --しかし、テストをあとから書いたとしても効用はある +++コード行数nに対して、テスト項目はO(n)である。コードをm回/時間変更するとすると、単位時間当たりのテスト項目数はO(n*m)である。自動でテストすると、テスト項目数をO(n)に抑えられる。 +++他の人と開発する時に、サンプルの代わりになる -Assert駆動 --きちんとassertを入れながら実装する --if文でチェックするよりスマート。 -valgrind駆動 --valgrindクリーンネスは常に監視すべき |