残業プログラマのためのスキルアップリンク集
もくじ
プログラミング
プログラミング言語
関数型言語
Haskell
Lisp
Ocaml
ML
SICP
プログラマ
検証
QuickCheck
Coq
モデル検査
形式手法
CSP
そのほか
ツール
コンテスト
研究室
学会
プログラミング系のブログ
更新ログ
オススメ本
プログラミング言語
プログラミング言語研究への誘い 「職人プログラマ」と「ソフトウェアの専門家」の差とは?
百年の言語 --- The Hundred-Year Language プログラミング言語に力の差はあるのか?
どう書く?org お題をいろんな言語で実装して、投稿するサイト
The Computer Language Benchmarks Game プログラミング言語の性能比較。
TIOBE Software: Tiobe Index プログラミング言語ランキング。検索エンジンの検索数から算出。
プログラミング言語ヒエラルキー
関数型言語、関数型プログラミング
なぜ関数プログラミングは重要か
なぜ次に学ぶ言語は関数型であるべきか Ocamlで具体的に説明されています。これだけではない気もする。
『関数プログラミングの楽しみ』 まだ読んでないけど、時間をつくって読みたいな。
関数プログラミングへの招待 書評など、日本語のページでは珍しく豊富なページ。
関数型言語の技術マップ
函数プログラミングのエッセンスと考え方
Haskell
やさしい Haskell 入門 (バージョン98) WEBで始めるならここか。
『プログラミングHaskell』 ぱらぱら見たらあんまりと思っていたがAmazonで評判がよい。読んでみたい。
Learn You a Haskell for Great Good! なんだか発見した。あとでまたよむ。と思ったら、翻訳がでた。
『すごいHaskellたのしく学ぼう!』
『ふつうのHaskellプログラミング』 わかりやすい入門書。遅延評価などをおさえており、関数型言語の楽しさに入門できる。モナドは説明不足?
『Real World Haskell』 モナドの丁寧な説明があり、理解できた。
『Real World Haskell』の草稿 英語の原著の草稿を公開。レビューコメントつき。
モナモナ言わないモナド入門
Haskell-mode for Emacs Emacs用のHaskell開発環境。
本物のプログラマはHaskellを使う
Yesod Web Framework for Haskell ぜんぜんわかっていないけど、Yesodを勉強すると、わからないからこそ、自分のHaskell世界が広がる気がする。
Web アプリケーション・フレームワークYesod
Yesod勉強会『HaskellとWeb開発』 田中英行さんの説明資料。
(祝) Yesod 1.0 勉強会
Haskell Advent Calendar 2011
EclipseFP Haskell開発環境のEclipseプラグイン。コンテンツ・アシスト、コンパイルエラー検知。Eclipse自体、最近重いから、つかってない…
モナドのすべて
Haskell - Wikibooks, collection of open-content textbooks
Haskell のお勉強 「まとまった日本語の解説がほとんど無いので、 簡単な解説記事を書いてみました。」とのこと。
Haskell 脳の恐怖
OCaml
『プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~』
『プログラミングの基礎 (Computer Science Library)』 プログラミングの基礎をOCamlで解説。いい本らしい。
数理科学的バグ撲滅方法論のすすめ 東北大学の住井先生による連載。未読。Ocamlで説明してあるらしいのでここに分類。
Effective ML 9ヶ条
ML
プログラミング言語SML#解説 C言語とのシームレスな連携などが特徴ときいております。
『プログラミング言語 Standard ML入門』 SML#の開発者大堀先生が書かれた本。
『プログラミング言語ML』 むかし読んだが、わかりやすかったと思います。
Lisp
Lisp関連書籍まとめ
On Lisp Lispの解説書です。
Practical Scheme プログラミング言語Schemeの紹介、海外エッセーの翻訳、「普通のやつらの上を行け」等。
Scheme手習い - The Little Schemer -
Let Over Lambda 50 Years of Lisp LISPのマクロってすごいらしい。
『初めての人のためのLISP』 LISP入門の名著。復刊。
Gauche - A Scheme Implementation プログラミング言語Schemeのスクリプト処理系である。R5RS準拠。多バイト文字列を組み込みでサポート。
JAKLD Javaアプリケーション組み込み用のLispドライバ Javaで記述されたSchemeのインタープリタ。湯淺太一先生が作られたようです。
TUTScheme,TUTScheme/Tkの処理系
Lispの名言が凄すぎる 「私が知る中で、書く人がタイピングよりも考える事に費やす時間が長い言語は、SQL, Lisp, Haskellだけだ。 - Philip Greenspun」とあるが、タイピングが多いプログラマほど、肉体労働に近いわけだな、ふむふむ。
How to Design Programs デザインレシピを使った設計方法の説明の本らしいです。電子ブック本文あり。読んでみたい。Lispを使って説明していあるらしいので、とりあえずここに分類。
SICP
Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science) タイトルの頭文字をとってSICPとか、魔術師本と呼ばれてます。ソフトウェアの設計、構成法の本質を学ぶなら、この一冊かもしれない。表示の魔術師の絵がなんとも魅力的。プログラミング言語の説明本はたくさんあるけど、プログラムの部品の作り方、組み合わせてプログラム全体を構成する方法を説明した本は数少ない。この本がまずは決定版ではないだろうか。まだ私も7割がたしか読んでませんが、オススメです。
Welcome to the SICP Web Site (Structure and Interpretation of Computer Programs ) SICPのオンラインページ。この本は英語ならこのサイトで全文読めます。
『計算機プログラムの構造と解釈』 上記、日本語訳。
ぺた語義:京大における Lisp を使ったプログラミング教育 京大でLISPを教えているのは、LISPプログラマを養成するためではないそうです。「プログラミングというのは、単に与えられた問題をコーディングする技術でなく、計算機科学の成果であるさまざまな概念や機能を駆使できる能力である。この意味で、講義で採用しているSICPは、きわめて適切な教科書である。」SICPでLISPの方言であるSchemeで解説しているので、LISPを使っているというわけです。本文では、「SICPは、これらを単に概念として紹介するのではなく、Lispでどのように実現されているかを具体的に解説している。」とあります。Lispってのは、シンプルにいろんなことを実現できるので、仕組みの説明にすごく向いていると思います。この記事は、プロ組ラング言語を理解してだけでは、プログラミングには不足なのだと言っている、いい記事ですね。計算機科学の成果をしっかり学ぶことが大事だという点、同感です。
CS 61A Home Page University of California BerkeleyではSICPの内容をプログラミング言語をPythonに変えて教えてるみたいです。講義ノートもあります。
6.S184 - Zombies drink caffeinated 6.001
6.01 Homepage / Spring 2012 もともとSICPだった講義は内容も改められ、やはりプログラミング言語をPythonになっているようです。
プログラマ
『ハッカーと画家 コンピュータ時代の創造者たち』 プログラマの気骨を語っているエッセイ。おすすめです。
ぼくはこうしてプログラミングを覚えた フェイスブックのエンジニアで史上ベスト3に入るといわれるEvan Priestley氏へのインタビュー。
歴史に残るハッカー10人
マンガ『ビル・ゲイツ物語』:すがやみつるblog
Twitter 社採用面接受験記
QuickCheck
第17回 QuickCheckでデータ駆動型テストを行う - 本物のプログラマはHaskellを使う:ITpro
QuickCheck - Wikipedia, the free encyclopedia Haskell以外でも使えるようです。
HowTo:QuickCheck
QuickCheckも動かす:test-framework - nabeyangの日記
404 Blog Not Found:バカはバカにならない - 書評 - ファジング:ブルートフォースによる脆弱性発見手法 QuickCheckにも言及あります。
The Coq Proof Assistant
The Coq Proof Assistant Coq本家。
Proof General Emacs上のCoqフロントエンド。Generalの顔が怖い!
fm-forum @ ウィキ - Coq参考資料
名古屋大学の講義資料「数理解析・計算機数学 III」 下の方。
Asai Laboratory, Ochanomizu University Coqゼミのコーナーがあります。
プログラミング Coq 絶対にバグのないプログラムの書き方 大学生によるCoqチュートリアル。
Coq Pukiwiki インストールのしかた、とか。
Coq クィックリファレンス 日本語のリファレンス。途中。
Software Foundations TAPLのBenjamin C. Pierceさんの電子ブック。教科書らしい。このコースは以下のことをするとのこと。 「It develop basic concepts of functional programming, logic, operational semantics, lambda-calculus, and static type systems, using the Coq proof assistant.」 読んでみたい。
モデル検査
Spin - Formal Verification ポピュラーなモデル検査器。
The SMV System これまたポピュラーなモデルチェッカー。
LTSA - Labelled Transition System Analyser CSPを先祖にもつFSP記法がまあまあシンプルで好きです。Spinよりさくっと美しく書ける。規模が大きいとなるとSpinのが実用的かも。アップデートがJune 2006で止まっているけど、まあまあ使えるレベルまでいったということかもしれません。
PAT: Process Analysis Toolkit シンガポール発の、モデル検査ツール(シミュレーションとかもできる)。CSPの拡張(グローバル変数相当もサポート)していて、実用的にしているようで興味深い。他にも確率、リアルタイム性に関する検証ができるようだ。
形式手法
B method コード詳細化が特徴。いまでもコード詳細化って重要なのかが興味あるところ。
高信頼ソフトウェア構築技術に関する動向調査 調査報告書 パリ地下鉄14号線の信号システムが「Bメソッドを適用」、「これまでにバグがない」。
CSP
Communicating Sequential Processes (CSP) ホーア(Tony Hoare)による、CSPの教科書の電子版(free)。
WoTUG CSPの応用、普及しているフォーラム。
CSPコンソーシアム 日本のCSPの団体。存在を知らなかった。
PAT: Process Analysis Toolkit シンガポール発の、モデル検査ツール(シミュレーションとかもできる)。CSPの拡張(グローバル変数相当もサポート)していて、実用的にしているようで興味深い。他にも確率、リアルタイム性に関する検証ができるようだ。
ツール
NTEmacs JP エディタ。カスタマイズ可能で、Coq-modeやHaskell mode等サポート。使ってます。
ここ を参考。
color-theme homepage Emacsのテーマがえ。色がえ。
codepad オンラインのコンパイラ、インタープリタ。
Meadow エディタ。もとにしているEmacsが古いので、CoqとかHaskellモードが使えないので使わなくなった。(2011/11/3時点)
プログラミング関係のブログ
sumiiの日記
ヒビルテ
結城浩の日記
keigoiの日記
にわとり小屋でのプログラミング日記
檜山正幸のキマイラ飼育記
大学、研究室
小林・住井研究室 東北大学 型システムなどの手法を利用したプログラム解析の研究
五十嵐 淳さん プログラミング言語の基礎理論、特に、型システム、並行/分散プログラミング言語、型推論、オブジェクト指向言語の型理論など。
Jacques Garrigue : Home Page Label-selective lambda-calculus and Transformation calculusなど
IIJ Innovation Institute [山本 和彦 主幹研究員] Mewを作られた方。Haskellも書かれてます。
学会
ICFP (The International Conference on Functional Programming) 関数型言語の国際学会
International Symposium on Functional and Logic Programming
日本ソフトウェア科学会 プログラミング論研究会 (PPL)
プログラミングコンテスト
Top Coder プログラマのメジャーリーグ。コンペティションに参加すると、レーティングされ、プログラミング能力を証明する。世界中から参加。
ICFP Programming Contest 国際的なプログラミングコンテスト?