残業プログラマのためのスキルアップリンク集

お知らせ:内容がばらばらになったので、ネットで学ぶソフトウェア工学に一部移しました。

もくじ

プログラミング

プログラミング言語 関数型言語 Haskell Lisp Ocaml ML SICP プログラマ

検証

QuickCheck Coq モデル検査 形式手法 CSP

そのほか

ツール コンテスト 研究室 学会 プログラミング系のブログ
更新ログ オススメ本
『プログラマのためのWEB』に戻る

プログラミング言語

プログラミング言語研究への誘い
「職人プログラマ」と「ソフトウェアの専門家」の差とは?
百年の言語 --- 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
山本和彦さんの説明資料。参考:Mighty and Yesod。Mightyなにかしらんですけど。
Yesod勉強会『HaskellとWeb開発』
田中英行さんの説明資料。
(祝) Yesod 1.0 勉強会
Haskell Advent Calendar 2011
12月1日から25日間、参加者が一人ひとつずつ自身のブログにHaskellネタを書くイベント。Haskell Advent Calendar jp 2010
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
最近MITではSICPは講義から無くなってしまったようですが、Independent Activities Period(IAP)という短期間の講義でSICPの内容が教えられているそうです。参考:濃縮還元オレンジニュース:MITにてSICPのクラスが復活!?|gihyo.jp … 技術評論社
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
国際的なプログラミングコンテスト?