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

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

もくじ

プログラミング

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

検証

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

そのほか

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


プログラミング言語

『プログラミングの基礎 (Computer Science Library)』

プログラミングの基礎をOCamlで解説。特定のプログラミング「言語」の基礎を教える本は多くあれど、「プログラミングの基礎」を語る本は少ない。この本は数少ないその一冊だろう。プログラミングを始める人にまず薦められる本だ。丁寧で、プログラミング初心者にもってこい。全部で270ページあるのだが、175ページめ引用「本の半ばを過ぎたところで最初の完動プログラムを作ることができました。皆さんはすでに立派なプログラミングの中級者です。」とある。なにっ?唐突に中級者になれるのだ(笑)しかし、笑ったけど、ほんとにそうかもしれないと思う。なぜなら、この本は関数型言語の機能を使ったり、デザインレシピという道具を使ったりして、プログラミングの作り方の基本がしっかり身につけられるようになっている。この本を読んだ読者からすると、多くのプログラマがあまりに基本を身に着けていないことに気づくだろう。プログラミング言語の入門書を何冊か読んだだけのビギナーより、この本の読者のほうが数段上の力がある、とぼくには思える。そして、第24章「まとめ -プログラミングとは-」の264ページも引用。「本書を読み終えた皆さんはプログラミングの上級者であるばかりでなく、すでにOCamlの上級者でもあります。」プログラミングの基礎を勉強しているはずが、いきなり上級者になって、しかもOCamlの上級者になってしまった!wwwww。ドラゴンボールの亀仙人の修行か!(笑)ちょっと大げさだけど、すごくいい本なんだ。ぼくがだれかにプログラミングを教えるとしたら、この本を使うだろう。もっと早くこの本が出版され、学生時代に読んでいたら、と思う。ぜひ、みんなに読んでもらいたい。もっと早くこの本が出版され、学生時代に読んでいたら、と思う。ぜひ、みんなに読んでもらいたい。
プログラミング言語研究への誘い
「職人プログラマ」と「ソフトウェアの専門家」の差とは?
百年の言語 --- The Hundred-Year Language
プログラミング言語に力の差はあるのか?
言語の世界
Ruby作者まつもとゆきひろによる
どう書く?org
お題をいろんな言語で実装して、投稿するサイト
The Computer Language Benchmarks Game
プログラミング言語の性能比較。
TIOBE Software: Tiobe Index
プログラミング言語ランキング。検索エンジンの検索数から算出。
僕やはてながPerlを選ぶ理由 2005-05-18 - naoyaのはてなダイアリー
引用「そんな僕の物作りの過程においては、コンパイラにやたらと怒られたり、変数の型を気にしたり、変数に入れるオブジェクトが何者だったりするかをいちいち意識しなければならない静的型付けの言語は性に合わなかったんですね。一方で簡単なことは簡単に、難しいことでもそれなりにできる Perl という言語は、僕のやり方に合っていたし、なんとなく"Hackしている"という気分にも浸ることができたんです。」。ちょっと動的型付け、静的型付けって問題かは、わからないな。Haskellでもハックしてる気になれるけどなあ。
プログラミング言語ヒエラルキー

関数型言語、関数型プログラミング

なぜ関数プログラミングは重要か
「関数型言語」に関するFAQ形式の一般的説明(on demandに加筆修正します) - Qiita
東北大学の住井先生による関数型言語の解説。
関数型言語 - 関数型プログラミング言語の定義&実装の仕方の例 - Qiita
同じく住井先生。
なぜ次に学ぶ言語は関数型であるべきか
Ocamlで具体的に説明されています。これだけではない気もする。
『関数プログラミングの楽しみ』
まだ読んでないけど、時間をつくって読みたいな。
関数プログラミングへの招待
書評など、日本語のページでは珍しく豊富なページ。
関数型言語の技術マップ
Ladder of Functional Programming 〜関数型プログラミングのレベル分け〜
私はAdvanced Beginnerぐらいかな。
関数型言語を独学で勉強している学生です への答
遅延評価ってなんなのさ
函数プログラミングのエッセンスと考え方
Functional Jobs // Dream Jobs for Functional Programmers
関数型言語プログラマのための求職情報。関数型言語って範囲で共有している知識(ラムダ?)があるから、こういうサイトができる。それはすばらしいことだと思う。
ATSプログラミング入門
TBD。依存型とか関係ありそう。
Try F#: Learn
ブラウザ上で、F#を実行し、学習できるよう。
ニコニコ生放送の配信基盤改善
Erlangの話。
Lambda calculus in JS syntax
JavaScript で Lisp の処理系 (と REPL) を実装してみた - mooz deceives you
JavaScriptで読む「ラムダ計算基礎文法最速マスター」 - 貳佰伍拾陸夜日記
MiSPLi
small lisp implementation written in javascript
The Implementation of Functional Programming Languages - Microsoft Research
Simon Peyton Joneによる著作のPDF。

Haskell

やさしい Haskell 入門 (バージョン98)
WEBで始めるならここか。
『プログラミングHaskell』
ぱらぱら見たらあんまりと思っていたがAmazonで評判がよい。読んでみたい。
プログラミング Haskell 講義スライド
愛知県立大学の情報科学部2年対象の計算機言語論で、『プログラミングHaskell』を教科書で使ってます。日本語のスライドあり。
Learn You a Haskell for Great Good!
なんだか発見した。あとでまたよむ。と思ったら、翻訳がでた。この本は概念を説明してそうでよさそう。しかし、積ん読中。だったが、1回め読了。非常に良い本でした。ぼくの読んだ感想:すごいHaskellたのしく学ぼう!: Miran Lipovačaをもっと早く読めばよかった: プログラミングは眠るのも忘れてすごいH本、1回目読み終わって、よかったから、2回目の復習に入った。: プログラミングは眠るのも忘れて。それと、他のHaskeller(多分有名な人)の書評:「すごいHaskellたのしく学ぼう!」は気配りと楽しさがすごい - keigoiの日記すごいHaskellたのしく学ぼう! - あどけない話がいいかな。あと、ここすごいHaskellたのしく学ぼう!を読んだ - south37の日記たしかに丁寧な本だよね(翻訳も含めて)。間違いもないし、ぼくは非常に丁寧な仕事と見ました、本の構成、内容について。ということで、良本であり、労作であると言いたい。
『すごいHaskellたのしく学ぼう!』
『ふつうのHaskellプログラミング』
わかりやすい入門書。遅延評価などをおさえており、関数型言語の楽しさに入門できる。モナドは説明不足?
『Real World Haskell』
モナドの丁寧な説明があり、理解できた。サポートページ:Real World Haskell - O'Reilly Media。右側にDownload Example Codeがあるよ。p.390とかCode見ないとわからない。けっこう誤植が多いので、正誤表。ただ、例が長すぎて、簡潔な概念の説明がないとも言える。
『Real World Haskell』の草稿
英語の原著の草稿を公開。レビューコメントつき。
Haskellの楽しみ:手続き操作型というパラダイム
モナモナ言わないモナド入門
QAで学ぶMonad - あどけない話
CS240h: Functional Systems in Haskell
スタンフォード大のHaskellの授業。Phantomとか。
DanoMoi と Haskell
Haskellと副作用の話。
Haskell アクション 超入門 - Qiita
Haskellと副作用の話。こんなに解説が乱立するとは。説明がたくさんあるってどういうことだろう。難しいってこと?
副作用の話 - モナドとわたしとコモナド
Haskellと副作用の話。
HaskellのモナドIO - HaHaHa!(old) - haskell
Haskellと副作用の話。ちょっと古い。
Haskellには副作用がないのか? - あどけない話
Haskellと副作用の話。
Haskell の Monad とは言語内DSLのフレームワークである - あどけない話
Haskellと副作用の話。じゃなかったか。。。
Parallel and Concurrent Programming in Haskell
並行、並列プログラミングをHaskellで。オンライン版をフリーで読めるっぽいです。
HRR: Quick start
DB操作系?SQL系のHaskellライブラリらしい。
Extending Query, Relational, Typeful, Composable - khibinoの日記
HRRの説明?
GHC(STG,Cmm,asm) illustrated for hardware persons
Haskellの代表的コンパイラGlasgow Haskell CompilerことGHCのアーキテクチャとか解説。
xmonad | the tiling window manager that rocks
キーボードだけでがんばれるウインドウマネージャーらいいです。BSDとLinuxしかないぽい。
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 web programming A Yesod tutorial
Yesodを支える技術
Haskellが使えるホスティングサービス @ val it: α → α = fun
できる!Template Haskell
Pandoc a universal document converter
Haskellで書かれたドキュメントフォーマットのコンバータ。マークダウン記法からHTMLのスライドショーが作れるのがいいね。texとかにもなるよ。「If you need to convert files from one markup format into another, pandoc is your swiss-army knife.」
Haskell Advent Calendar 2011
12月1日から25日間、参加者が一人ひとつずつ自身のブログにHaskellネタを書くイベント。Haskell Advent Calendar jp 2010
モナドのすべて
Haskell - Wikibooks, collection of open-content textbooks
HaskellでWebアプリを作ってみた Vol.1(ライブラリ使わない編)
Go言語の型宣言をHaskellから理解する
どっぐらいふ・ろぐ
HDBC-sqlite3の使い方など。cabelでインストールする必要もあるよ。
Haskell で OAuth API利用Tweetしてみた - HaskellでTwitterクライアント開発blog(仮)
twitter関係では、OAuthの使い方もコードにべたっと書いてあって、勉強になる。
Conduit で Twitter Streaming API を扱う - KrdLab's blog
Haskellのコード150行で, Twitterに投稿するだけのクライアントを作ったよ - プログラムモグモグ
うえにコードが似てる。あまり参考にしていない。
HaskellでOAuthとTwitter API - kenkov diary
Haskell で OAuth - EAGLE 雑記
作ってみよう Enumerator - http-enumerator で Twitter API ぺろぺろ - ごったく
haskell で twitter の timeline を取得してみる - プログラマのネタ帳
hs-twitterって、ライブラリは結局、使えないぽい。あまり参考にならないか。
haskellでtwitter APIを使う - tsurushuuの日記
古い時代の言語設定を読む例。JSONの扱い方は参考になるかも。
HaskellでJSON Web APIを作ると幸せになれるかもよ - Fujimura
HaskellでTwitterにpostする - yunomuのブログ
Web.Authenticate.OAuthとか使って、エレガントだけど、WEBアプリだったら、どう使うのか、不明。
HaskellでRSSを読み込む
(Haskell) Simple Broadcatcher
これもRSS読む系。
HaskellでFTPクライアント | hippos-lab::blog
本物のプログラマはHaskellを使う - 第39回 一般向けの「Haskell Platform」とインストール・ツールの「ca...:ITpro テキストI/OのUnicode対応
文字化けに悩まされることがあります。未熟じゃ。
windowsでHaskellのIOまわりで日本語を文字化けなく表示させる方法 - プログラミングお勉強きろく
これも文字化け参考めも。
Haskell のお勉強
「まとまった日本語の解説がほとんど無いので、 簡単な解説記事を書いてみました。」とのこと。
CS240h: Functional systems in Haskell
stanford.eduの授業?
EclipseFP
Haskell開発環境のEclipseプラグイン。コンテンツ・アシスト、コンパイルエラー検知。Eclipse自体、最近重いから、つかってない…
Try Haskell! An interactive tutorial in your browser
ブラウザ上でHaskellをちょっといじれる。IE非対応?
Haskell 脳の恐怖
ネタ。

OCaml

『プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~』
数理科学的バグ撲滅方法論のすすめ
東北大学の住井先生による連載。未読。Ocamlで説明してあるらしいのでここに分類。
Try OCaml
ブラウザ上で、OCamlを実行し、学習できるよう。
Js_of_ocaml
「Js_of_ocaml is a compiler of OCaml bytecode to Javascript. It makes it possible to run Ocaml programs in a Web browser.」
ウェブブラウザで関数型プログラミング! js_of_ocaml
Ocamljs
開発止まっているぽいです。「Ocamljs is a system for compiling OCaml to Javascript.」
ocamljs を使おう : OCamlからJavaScriptへの変換
型付きWebフレームワークで遊んでみた // Speaker Deck
OCamlのWeb FWの話。
OCaml toplevel
Web上のOCaml処理系
Effective ML 9ヶ条

ML

プログラミング言語SML#解説
C言語とのシームレスな連携などが特徴ときいております。
『プログラミング言語 Standard ML入門』
SML#の開発者大堀先生が書かれた本。
『プログラミング言語ML』
むかし読んだが、わかりやすかったと思います。

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を使って説明していあるらしいので、とりあえずここに分類。
マンガで分かるLisp(Manga Guide to Lisp)
ミクちゃんが説明してくれる!
魔法言語 リリカル☆Lisp
ノベルゲーム風のLispチュートリアル。すすんでるな。。。
Web系女子がLispと出会って統計学に目覚めるまでのお話
Schemeプログラマのレベル10

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のオンラインページ。この本は英語ならこのサイトで全文読めます。
『計算機プログラムの構造と解釈』
上記、日本語訳。日本語ページSICP Web Site for the Japanese Editionで、html版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になっているようです。
本当のプログラミング初心者がSICPを読んではいけない三つの理由
いまSICPを読むのは時間の無駄
ほんとかなあ
本の虫: MITがSICPを教えなくなった理由
こちらはSICPの教師によるコメントだから説得力があるがSICPの価値はそれでも価値はあると思う。

プログラマ

『ハッカーと画家 コンピュータ時代の創造者たち』
プログラマの気骨を語っているエッセイ。おすすめです。
ぼくはこうしてプログラミングを覚えた
フェイスブックのエンジニアで史上ベスト3に入るといわれるEvan Priestley氏へのインタビュー。
歴史に残るハッカー10人
名前くらいは知っておきたい伝説のプログラマーたち - UEI shi3zの日記
マンガ『ビル・ゲイツ物語』:すがやみつるblog
プログラマの区分 Memoized Recursion
ファンタジーのキャラっぽく分類。おもしろい。
落ちこぼれだった私が、プログラマとして企業を越えて自由に生きる「夢を叶える方法」
fukamachiさんの方法と経緯。プログラムを書き続けたことがポイントな気がする。
Twitter 社採用面接受験記
一度は食べたい至高のプログラマー焼きとん 新宿ささもと - UEI shi3zの日記
若い女はどうか知らんが、おばちゃんプログラマーは重宝する。 | ライフハックちゃんねる弐式
60%の人間はプログラミングの素質がない

QuickCheck

QuickCheckでデータ駆動型テストを行う
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の拡張(グローバル変数相当もサポート)していて、実用的にしているようで興味深い。他にも確率、リアルタイム性に関する検証ができるようだ。

圏論

プログラマのための圏論の基礎(仮題)
圏論によるプログラミングと論理(灘校パソコン研究部 文化祭2013)
2013年 圏論勉強会 資料
スピヴァックの圏論教科書

ツール

NTEmacs JP
エディタ。カスタマイズ可能で、Coq-modeやHaskell mode等サポート。使ってます。ここを参考。gnu-packからインストールしてみた。カスタマイズはこのへんしてます。Emacsで「最近使ったファイル」 ウインドウを最大化したい。EmacsWiki: W Thirty Two Send Sys Command
color-theme homepage
Emacsのテーマがえ。色がえ。
codepad
オンラインのコンパイラ、インタープリタ。
Meadow
エディタ。もとにしているEmacsが古いので、CoqとかHaskellモードが使えないので使わなくなった。(2011/11/3時点)
Happy Hacking Keyboard Professional BT 日本語配列/墨 PD-KB620B
プロならキーボードもこだわろう。仕事で使っている。プライベートでもほしいところ。妻は許すだろうか。。静電容量で省スペース、打鍵感もよい。Bluetoothでゲーブルもない。和田英一先生の言葉です。
アメリカ西部のカウボーイたちは、馬が死ぬと馬はそこに残していくが、どんなに砂漠を歩こうとも、鞍は自分で担いで往く。馬は消耗品であり、鞍は自分の体に馴染んだインタフェースだからだ。いまやパソコンは消耗品であり、キーボードは大切な、生涯使えるインタフェースであることを忘れてはいけない。
Happy Hacking Keyboard | 和田先生関連ページ
Emacsを開発したリチャード・ストールマンも使っている。ノートPCの上におくスタイルは尊師スタイルと呼ばれているらしいwwwRichard Stallman and OLPC
社畜ちゃん台詞メーカー
Infer | A static analyzer for mobile apps | Infer
C言語、Objective-C、Javaの静的検証器。Facebookが買収しOSSになった。Infer Introduction - ::Eldesh a b = LEFT a | RIGHT b]

プログラミング関係のブログ

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
国際的なプログラミングコンテスト?