はてなキーワード: Markdownとは
自分は不器用なせいかグラフの手書きが致命的に遅かったので、2年前期の実験で危機感を感じた自分は2年の夏休み中にpythonを覚え、今まで苦労していたグラフのプロットなどをパソコン上で全部自動化しようと考えた。日本語の情報が少ないため(あっても多少古かったりすることが多かった)、情報をかき集めるのに相当苦労したが、夏休みが終わるころにはjupyter notebook(名前通りノートブックのような実行環境でセルごとにコードを実行するという形をとっている)上で統計処理をしたりそのデータを基にグラフをプロットするのはある程度できるようになっていた。
早速2年後期の実験でpythonを試してみたが、その威力は凄まじく、今まで時間のかかっていた作業が劇的に効率化した。pythonのモジュールであるpandas,numpyを使えばデータ列を文字式のように扱えるので(例えば実験データをdataとして、そのデータをすべてcos関数に代入したかったらnumpy.cos(data)と書けばよい、Excelと似たようなものだがこちらは変数として扱っているので使いまわしが容易である)、Excelでちまちま関数をセルに入力して列全体に引き伸ばすという操作もしなくていい。グラフもコマンドで出力するので当然だが今まで苦労していた手書きのプロット作業はなくなった。GUIありきのExcelと違ってコードひとつでグラフの罫線の調整などもかなり簡単にできる。高級言語だけあってコードは組みやすく、実験中に即興でプログラムを組むことも割りとできる。しかもコードさえ組んでしまえばあとは実行するだけで計算、グラフの描画を一気にやってくれるので、実験結果の確認が極めて素早く行えるようになった。しかもjupyter notebookはmarkdown形式の文章を埋め込めてメモ書きも残せるし、mathjaxに対応しているのでlatex形式の数式も途中に挟むことが出来る。最高の環境だと思った。しかし良いことばかりではなかった。
パソコンで全部やろうとする自分を見た一部のTAはなぜか自分にグラフを手書きにしろと要求してきた。自分は反論した。「グラフならパソコンですでに出力できているのになぜわざわざ手書きにする必要があるのか?」これに対するTAの答えはだいたい「平等性を保つため」、「他のみんなは手書きでやっている」、「理解を深めるため」、「他学科は手書き必須だから」というような感じである。自分にとっては、これらすべてが理解できなかった。そもそも手書きにすることによって実験に対する理解がどう深まるというのか?自分はむしろ手書きを徹底的に排除することによって、煩雑な作業をする時間を考える時間に充てた。そのおかげで実験に対する理解は以前と比べ物にならないくらいに深まった。手書きじゃなければ理解が深まらない理由はない。そもそもパソコンのほうが厳密にコードを組まなければならない分だけ理解力を要求されるはずである。「理解を深めるため」といっている本人だって結局その言葉の意味もわからず言っているにすぎない。
「平等性」に関しては全く別のTAから複数回言われた。「パソコンを使って効率化しようとするのはずるい」と言いたいのか、このTAは?pythonだって1ヶ月間死に物狂いで情報をかき集めて覚えたのに、それのどこがずるいというのだろう。平等性を掲げて効率化を否定し、全員に同じ作業を強要させ、「成績」をちらつかせて脅すのはずるくないのか?みんな一緒に抑圧されましょうということか?これを言われたときに感じた何とも言えない吐き気のようなものは今でもうっすらとだが覚えている。正直なところ、プログラミングが出来るというだけでむしろ褒められると思ったのだ。パソコンが使いこなせるほうが印象はいいに決まってると思っていたのも、結局は自分の勘違いだった。
pythonを使い始めてからの2年後期、3年前期を通して4,5回ぐらいTA(全員別の人)に「手書きにしろ」と言われたが、言われるたびに反論するのもいい加減に疲れてきた。なぜ手書きにする必要があるのか、自分は聞かれるたびにこう聞き返した。まともな答えを返したTAは一人もいなかった。大学の先生が担当する実験でPCは駄目なんて言われたことは一度もなかったし、どうもTAが勝手に「手書きにしろ」と言っているだけらしい。「他学科がパソコン禁止だから」とかいう非論理的なルールを鵜呑みにしてそれを適用しようとする姿勢にも無性に腹が立った。
TAがいうには手書きはコピペ防止の意味もあるらしい。本当に手書きにしたらコピペが減るのか?パソコンにしたらコピペが増えるというが、それは果たして本当に「増えた」のだろうか?確かにコピペするのは手書きと違って簡単だが、コピペするやつは手書きだろうがパソコンだろうがコピペする。そもそも自分の頭で文章を書く能力がないからコピペするのであって、パソコンを制限したからコピペがなくなるという理屈はおかしい。そんなにコピペが嫌だったらむしろ最初からコピペをチェックしやすい電子データに限ってしまえばいいと思う。パソコン有りにしてコピペが増えたというのは、手書きレポートでは見逃していた分のコピペがばれて、それで数が増えたように見えたという可能性もある。むしろパソコンだからこそコピペを見破れるのではないだろうか?
自分は、手書きは不正の温床ぐらいに思っている。手書きの場合見かけ上はコピペしたことがばれにくいし、グラフもそれっぽく適当に書いても適当にプロットしたことはほぼばれないし、そもそもアナログデータは機械の検閲にかけにくいためどの程度コピペなのかを判定する労力だって膨大過ぎる(別のTAに話を聞いたところ、採点する側から言わせるとコピペしたこと自体は結構分かるものらしい)。手書きを強制するということは、すなわち不正をごまかす余地を与えているに過ぎない。本気でコピペをなくそうとするならば、いっそのことすべて電子化してしまったほうがよいとすら思う。
pythonを使い始めてから1年経ち、「手書きにしてください」と言われるたびに反論していったが、元々自己主張の弱い引っ込み思案なタイプのために、自己主張してちゃんと言い返すというのは精神的な負担が大きかった。「パソコンではなぜ駄目なのか」を強く主張するたび、ものすごく疲れがたまってしまい、実験がない日でも「なぜこんな当たり前のことをわざわざ言わなければならないんだろう」と思い返してしまうせいでどんどんやる気を無くしていった。
なぜ大学の一部にはパソコンを使わせたがらない空気があるのだろう。この人たちは、手書きが苦手な自分にとっての最後の砦すら壊すつもりなのだろうか。なぜ手書きにこだわるのだろうか。
私はコミットログの書き方に悩む英語の苦手な人間である。実際、似たような人は世の中に結構いるようで、頻出単語を集計したりまとめたものは既にあって役に立つのだけれど、これらはあくまで単語の話であり、具体的な文を構成する過程でやっぱり困る部分がかなりあった。
要するに、どういう時にどういう文が使われているのか、ということを示した例文集が欲しいのである。ググると他にも「例文集があればいいのに」みたいな声はあるくせして、しかし誰も作ろうとしない。何なんだお前ら。それじゃ私が楽できないじゃないか。
ここで挙げているコミットログは全て実際のコミットログからの転載である。当然ながら各コミットログの著作権はそれぞれの書き手にある。いずれも各英文でググれば出てくるし、フェアユースの範囲なら許してくれるだろうと考え名前とプロジェクト名は割愛したが、ここにお詫びと感謝を述べておきたい。
抽出条件だが、参考にできそうなコミットログを多く含んでいそうなリポジトリをGitHubのSTARの多い方からざっと目で見て適当に選び、それぞれ最新コミットから5000件抽出した(あわせて前処理として、コミットログ冒頭のタグ情報は消去した)。
atomのみ5400件抽出していたため、計25400件のコミットログがベースである。このうち、以下の条件に合致するものは参考例にすべきでないとして一律排除した。
こうして残った8540件を眺めながら、適当に切り出したのがこの用例集である。個人的に「うーんこの」と思った表現も、散見される場合は載せた。
ということで、以下用例を羅列していく。
以上の用例をふまえ、今回の参考ログ8540件から先頭の単語を出現回数で並べると次のようになった。
Add | 1149 |
Fix | 1014 |
Update | 584 |
Remove | 566 |
Use | 382 |
Don't | 260 |
Make | 228 |
Move | 178 |
Change | 103 |
Rename | 85 |
Improve | 76 |
Avoid | 68 |
Allow | 65 |
Implement | 60 |
Handle | 58 |
コミットログの基本形はもちろん動詞 + 名詞である。名詞は固有名詞、複数形、不可算名詞が多いが、単数形の場合の冠詞は a が使われるか、あるいは省略される。the はまず使われない。
何かを追加した、という表現では非常に広く Add が使われる。メソッドからテスト、ドキュメントに至るまで大概これでまかなえる。
一方、何かを修正した、という表現では広く Fix が使われる。「何か」は typo や crash といった単語からメソッド名まで幅広い名詞を取るが、動名詞はあまり取らないのと、that節は取らないのでその点は注意が必要である。
Fix は「何かが正しく動くようにした」ことを示し、正しい動作内容が何かを説明しない。そこで正しい動作内容に言及したい場合は Make sure が使われる(こちらはthat節が取れる)。ただし Fix よりもニュアンス的に重い表現と思われ、Fix を使わず Make sure ばかり使うのはちょっとキモいのではないかと思う(Ensure はさらに重い表現っぽい)。
また、Fix は typo 以外でのドキュメント修正に対して使われることは稀である。対して Update はドキュメント、コメント、テストに使われ、本体のコードの修正に対しては使われない。本体コードの修正にあわせてテストも更新したなら Update が使われる。ただ、テスト機構それ自体のバグを修正したなら Fix である。
無駄な何かを単純に除去したなら Remove を使う。これまでのもの(A)から別のもの(B)に切り替えたのであれば Use B instead of A か Change A to B が使われる。新たに何かを利用するようにしたのであれば Use を、利用を取りやめた場合は Don't use を使うことが多い。
何かをしないようにしたなら Don't を、内部実装の効率化なら Make A + 比較級/形容詞 か Improve が使われる。
中身の変更を伴わない単なる名前の変更なら Rename A to B、コードや機能の論理上の場所を移動させたなら Move A to B である。
この辺はリファクタリングと呼ばれる行為と思うが、Refactor というぼんやりした動詞はあまり使われず、このように変更内容の種類に応じて動詞が使い分けられている。
コミットログにはWhyを書くべきだ、というのを何かで見かけたので because とか since を使ったログがどの程度あるかを調べたが、8540件のうち22件だった。基本的に短く、シンプルに、一目で意味が取れるログが好まれる傾向がある。例えば get rid of とか2件しか使われておらず、圧倒的に remove である。
一方で、シンプルな単語だけど開始単語としては使われないものもある。例えば次のような単語である。Expand(9)、Extend(8)、Print(5)、Optimize(5)、Publish(4)、Append(4)、Modify(3)、Manage(2)、Revise(2)、Dump(2)、Insert(2)、Migrate(2)、Enhance(1)、Edit(1) 。いずれもカッコ内は8540件に対する冒頭での登場回数である。結局、より一般的で平易な単語で表せたり、Refactor同様に抽象度が高すぎると使われないのだろう。
8000件もログを見たおかげで、迷いなくコミットメッセージが思いつくようになったのが個人的には今回書いてて最大の収穫だった。たぶんカンニングペーパーを作る行為それ自体が効率のいい学習になるという話と同じだと思う。
このまとめも100以上用例を転載してあるので、それを読むだけでも多少は効果があるんじゃないかと思う。同じようにコミットログ書きたくねぇなぁ英語わっかんねぇなぁと思っている人にとって、何か役に立つところがあれば幸いである。
React.js界隈の人に聞きたい
http://anond.hatelabo.jp/20160521163144
最近某所で、React使うとjQueryは不要だ的なタイトルの記事を書いちゃた気がするので一応反応しときます。長文ごめんね。
えーととりあえず、あのタイトルは実際のところ省略しすぎであり、もちろん本来は「場合によってはjQueryは不要」「jQueryは要らないこともある」と長く書いた方が正確です(本文ではちゃんとReactが万能ではない説明をしてる)。でも多少釣りっぽいタイトルの方が読まれるようなので反省はしていない。
そもそも世の中にそんなにSPAがあるのか
世の中の絶対数は知りませんが、自分の脳内ではもう「ページ遷移しない方がずっと楽に開発できてユーザ体験も向上するのに、敢えてそうしない理由がない」という至極単純な話なので、そこは悩むところではないです。ページを複数作り、<input type="hidden">とかセッション変数とか駆使する面倒ごとは、書かないでいいなら二度と書きたくない。
というか、ちゃんと書かれたSPAは使っていてSPAであることにそもそも気づかないので、「SPAだから使いづらい」という主張はよく分かりません。GitHubやTwitterサイトがSPA的なことをしている故に使いづらいでしょうか。偶然タブを開いてたので調べたらそうだったから紹介しますが、例えばWebpackのドキュメントサイトは(Reactではないけど)SPAで、ブラウザでMarkdownをレンダリングしています( http://webpack.github.io/docs/ )。サーバサイドで動くスクリプトもタスクもゼロ。個人的にはこういう使い方で十分嬉しいです。
何にせよReactのメリットが真に活きるのはある程度の規模以上だと思うので、小規模で導入してjQueryより短くならないことは普通にあります。自分中の閾値としてはJSコードが数百行超えるならもうReact使う。
JSXを使うことに抵抗ないんですか?
んー、要するに「別物であるDartやCoffeeScriptは許すけど、ES6で書く以上はES6外の独自構文を混ぜるのは許さん」という主張だと解釈したのですが、そういうことですか? 正直その主張を聞いたのは初めてです。歴史的にJSXとES6は完全に独立して発明されました。最近になってBabelが両方同時に扱えるようになりましたし、Babelはまさにそういう拡張性を重視しているツールです。それは「ああ便利になったね」というだけの話であり、なぜ「ES6とJSXは混ぜるな危険」となるのかよく分かりません。現にこれが最も標準的で人気の組み合わせです。
「JSXを使うことへの抵抗」ということなら、とにかく見た目にコレがキモいと感じる人が非常に多いのは事実です。現に、JSXより見た目がキモくないことを売りにしている仮想DOM実装が一定の人気を博していたりします。でもそういうライブラリは「キモさ」軽減のために結局新たな構文やら独自コンパイラやらを編み出して柔軟性を犠牲にしています。JSXは「関数呼び出しのシンタックスシュガーをJavaScriptに1個導入するだけで問題を概ね解決する」というシンプルかつ一番表現力の高い解決方法だと思います。仮想DOMの思想に逆らわない最も素直なやり方であり、将来長持ちする気がしています。
とはいえ所詮JSXはシンタックスシュガーなので、使いたくないなら使わず、本来の関数スタイルで仮想DOMを書いてReactを使ってもいいです。タイプ量が増えて若干見づらくなるだけなんで。
それと、JSXじゃなくてテンプレートでいいじゃん的に思っているようですが、テンプレートは仮想DOMでもなければJavaScriptでもないので、速度や機能の面でReactがやっていることに遠く及ばないと思います。
Reactはもう登場して3年経過して未だに勢いが増していますし、日常で困らないレベルのコンポーネント集も揃っています。React-Bootstrapはいいぞ、心が豊かになる。そろそろ採用してもアーリーアダプターとも言えんでしょう。むしろ真に先端を見るのが好きな人に言わせりゃ、2015年なんて「Reactが淡々と成熟していくのを見ているだけの、つまらない年だった」みたいな感じらしいですし。
Reactは現時点で既に3年に1回レベルのビッグウェーブであることは疑いようがなく、「これが10年に1回、つまりjQuery以来のビッグウェーブなのかどうか」については、そう信じている人と懐疑的な人がいる、という状況です。私はAngularもCoffeeScriptも「3年に1回」レベルに感じたのでスルーしましたが、Reactには「10年に1回」の方になりうる素質を感じています(個人の感想です)。将来もっと凄いものが出るとしたって、それは「ベターjQuery」ではなくて「ベターReact」でしょう。通常は「3年に1回」レベルでも試したり仕事に使ったりして構わないと思いますが、10年に1回の技術でなければ使わない主義の方は、あと2~3年待てばよいと思います。
保守性に関して言うと、Reactは典型的な「ひとつの事だけをとても上手くやる」系のライブラリです。考え方のコツさえ掴めば、記憶すべき要素はjQueryやAngularと比べても圧倒的に少なく、むしろそこらのテンプレートエンジンを覚える方が面倒なくらいです。10年後に見ても何をやっていたのか30分で思い出したいというのであれば、むしろAngularとかよりReactを採用すべきだと思います。
Markdownで書けるようにすること。(可能ならgithub flavored markdownで)
普段ははてなブログで書いててMarkdownを使用する機会も多いので、記法を覚えるコストを極力少なくしたい。
とはいっても、増田って多分レガシーな構成してるし、そもそも増田は実験プロジェクトのままだし、はてなは上場しちゃったから「増田に機能を追加」とかいう地雷をわざわざ踏みに行かないだろうなって思って諦めてる。
読みなおしてみたら、元の記事には英語とか海外とかぜんぜん書いてないね。
流し読んで、そうかぁー、ぐらいに思ったけれど。
Wikiの日本語や英語のwikipediaの説明を読むと、まんま書いてあって。
それまでのマークアップ言語の一つとして、e-mailの表記方法などから着想を得ている、ということらしいよ。
https://en.wikipedia.org/wiki/Markdown
http://daringfireball.net/projects/markdown/syntax#philosophy
そこでは、
While Markdown’s syntax has been influenced by several existing text-to-HTML filters — including Setext, atx, Textile, reStructuredText, Grutatext, and EtText — the single biggest source of inspiration for Markdown’s syntax is the format of plain text email.
Setext, atx, Textile, reStructuredText, Grutatext, and EtText とか、初めて聞いたけれど、そんな幾つかのマークアップ言語の
最大の影響を与え、着想の元となったものは、平易なプレーンテキストのe-mailの書き方です。
みたいに書いてるね−。
Markdownとは、はてなブログでも採用されている表記法のこと。
# こういう見出しを書いたり 1. こういうリストや 1. こういうリスト …を書くといい感じに表示されるやつね。
これをカタカタ打ち込んで投稿すれば、キレイに装飾されたブログ記事ができあがる。
似たようなものだと「はてな記法」やPukiWikiの記法も流行ってたけど、なぜだか今はMarkdown一択の時代。
なぜMarkdownだけが勝ち残ったのか? というと諸説あるかと思うけど、Markdownには他の表記法と決定的に異なる点がある。それは「メールで慣例的に使われていた書き方そのものである点」。
第二営業部 **様 いつもお世話になっております。第一営業部 永尾です。 お忙しいことは重々承知しておりましたが、またこのようなメールをお送りすること、何卒ご容赦ください。 第二営業部の皆様にはお忙しい中、当営業部長の退職送別会にお付き合いくださり誠に感謝しております。 さて、このたび当営業部では再度同送別会を開催する運びとなりましたので、改めてご案内申し上げます。 記 ■「澤井部長を送る会2」要旨 日時:3月25日(金曜日) 17時30分〜 場所:801会議室(今回はご参加頂きやすいよう社内にいたしました) 会費:0円 ※アルコール有り ■ 連絡欄 ・出欠:「 」(出席または欠席) ・欠席の場合、理由:「 」(自由記入・必須) 恐れ入りますが、明日3月24日までに返信にて出欠をお知らせください。 (重ねて申し上げますが会費は無料です) 幹事 永尾完治(第一営業部 内線118)
しかしこれはMarkdownではない。「日本人にとってのマークダウン」を考えるに、それは「■」や「・」、全角空白で構成された表記法のことを指すのだろう。ゆえに日本人はMarkdownの利点を享受できない──。
要するにMarkdownは「普段使いの書き方をいい感じに整える方法」であり、「覚えて使う表記法」ではなく「すでに知られている表記法に意味を持たせたもの」と言える。だから同じ見出しに書き方が二通りあったりする。他の表記法にこういった重複はない。
そういうわけで「リアルタイムプレビュー」なんて機能を欲しがるのはMarkdownの利点を理解してないというか、Markdownでさえ「意味不明な表記法」と見なすことになってしまう。そうじゃないんだけど。
自分は今までずっと、ネットでの軸足みたいなものを2chに置いてきた
他の場所も見るし、2chが好きなわけでも勿論ないけれど、何かいつもフットワーク真ん中らへんにあった
もういいかなという気がして、手遅れにも程があるけど、次の場所を物色してる
その候補の中ではてなは、何故かアカウントすら作ってなかった いい機会なんでつくった
んで色々見始めたばっかなんだけど、今まで感じてた違和感がここに集まってた気がする
とりあえず一つだけ書かせてもらう
2chの雑談,ニュース板というのは大概、大手報道機関からの記事と刹那的なネタスレと各板の内輪ネタで構成されてる
だからテレビ見てれば大概の話題は分かるし、内輪ネタは定期スレとして連打されるんで割とすぐ把握できる
ぱっと見は他と変わらない
検索してもよくわからないそいつのサイトと、自動生成されたはてなのサービスしか出てこない
他のコミュニティというのはそういうもんだと切り捨てれば済む話ではある
ただ自分の知ってる(よく知らない)他の場所は直接覗けば何かしら分かった
何をやってるのか、何故やってるのか、少なくとも1%ずつぐらいは理解できた
でも名前だけしか分からないそいつらは、ちょっと見ただけでは何をしているのか、殆ど分からなかった
何故か態度がデカくて、何故か煽り口調で、何故か炎上という言葉が好きそうだった
僕にとって炎上といえば、芸能人や政治家やバイトがミスってサンドバッグになる現象のことであって
よく分からない人が自称するものではなかった。だからとても異質に映った
今でははてなははてなでも、ブックマークやらブログやら増田やらで微妙に別れてて、それぞれ色々あるらしいことが分かった
一応雑に整理すると、ブックマークのほっとエントリは大抵ニュース板にロンダされてる(そして伸びる)んで、それと一緒に内輪の話までくっついて来たみたい
正直まだ殆ど何も把握してないし、正直自分に合わない感じがビンビンするんで深入りする気もないけれど、
追記
というか書き方これでいいのか?
完全に単一のHTMLファイルで動作するMarkdownエディタ作った
http://qiita.com/tatesuke/items/225b51b270faf8b10923
これ絶対単一HTMLじゃなくてAtomのプラグインで作るべきだって思ったんだよね
使ってみた感じやっぱ更新→保存周りが弱いんだよね、発想は良いんだけど
あとその他のMarkdownエディタに比べてデザインがあんまかっこよくない
エディタ部分とかほぼ単純なtextareaだし
例えばhogehoge.md.htmlみたいな名前のファイルをatomで読みこめば.mdファイルみたいな
感じ(実際はscriptとかCSSとかいろいろ書かれてるわけだけどMarkdown部分のみ)で読み込まれて、
で、それを編集した奴をそのままブラウザで開いたらJS側でレンダリングされたドキュメントとして表示される感じ
簡単にSassでスタイルを当てたりリアルタイムプレビューできればなお良い
実質完全に単一ファイルだしエディタ部分をAtomパワーに依存させることができるから
ええ感じのアイディアと思うんだけどどうやろか
■blogspot
Googleが運営しているブログサービス。何か独特なサービスで使いにくかった覚えがある。
アフィ厨の巣窟。同じ空気を吸うのも嫌なので却下!!却下却下!絶対NG!!!!無料だとキーワードにリンクが付くのが気持ち悪い露骨な集金アピールが気に入らないからお断り。
アクセス解析が無料でついてる。それ以外は特に目立ったものがない。
■github.io
ブログサービスでは無いんだけどgithubにブログを構築する。
これがよさそうだけど、利用規約が英語だから広告はっていいのか分かんないし。利用規約が読めない以上は手を出しにくい。
スパムしてないのにスパム認定されて解除してくれなかった経験があるので怖いのでNG。
アカ凍結された時の解除方法を伝授している記事はあてにならん!
■wordpress.com
CMSのほうじゃなくてサービスの方のwordpress.com。機能が少なすぎて選ぶ価値なし。
■アメブロ
ブログデザインがおしゃれすぎて合わない。どっちかっていうと自分の存在に商品価値があるような人向け。一生縁のないサービスなので却下。
ブログサービスじゃないんだけどここで記事を書くってのも手かな。
でも個人的にはブログを作ってそこで記事を書くべきだという信念があるので却下。
転載とか引用しただけの無駄な記事を見るのが面倒でもう見てない。
たまにプログラミングと関係ない職業の話とか哲学とかチラ裏にでもかいてろよみたいなのとかうざいだけ。
プログラミングってプログラミングの仕事している人だけのものじゃないしねどうでもいいんですよ。
ユーザーをブロックリストにいれて記事を非表示にするフィルター機能実装してくれませんかねqiitaのシャッチョサン。
記事なんて自分が愛用しているエディタで書いたほうが早いのでブラウザのテキストエリアでしこしこ書かない。
秀丸でmarkdown形式で記事書いてhtmlに変換すればいいだけ。
markdownで書いた文章もローカルに保存しとけばブログ移転も楽だよ。
だからブログサービスがmarkdownに対応しているかどうかなんてどうでもいいんだよ。
やっぱり無難なのはlivedoor blogかな。
プログラム書くようになってあるプロジェクトで実践でも投入されるようになってから数年。当時の上司にプログラマって名乗っていいんじゃない?とか言われてプログラマという自認もできた。
もともとはSE的な立場として仕様書を書いたりしてた。ゲーム業界だからSEとはいわずに企画とかプランナーとか呼ばれる職種。書類仕事がメインで、自分でツール作るかスクリプター的な役目でないかぎりコードみたいなものを書いたりはしなかった。コード書くの楽しい。VBなんかに戻れないし、もう書く事もできないだろうな。
だからってわけでもないけれど、できる企画とダメな企画ってのがわかるのよね。プログラマ側からみての意見になるから、ディレクターからみて、とかデザイナーから見て、とかはまたちょっと違うのだと思うのだけど。
自分、ちょっとコードの読み書きできるのでわかってます、な体で仕様書書いてくるのだけど、全然穴だらけ。要件が不明なままフローだけ書いてくる。実際にやりたいことは何なの?そこを説明して実装はプログラマに任せようよ、と。
ゲーム作るのにはバージョン管理システムを導入するのが常。subversionとかgitとかあるでしょ。すごく便利なんだけど基本的にテキスト形式のファイルを管理するためのものなので、エクセルみたいなバイナリ突っ込まれると差分じゃなくて全部のバージョンが入るから容量を圧迫するの。
画像データはまだいいよ。githubがpsdの差分さえ教えてくれるからね。
文字情報メインなのに差分を見る事もできない。検索もできない。
ただ、データ管理としてのエクセルは優秀なのよ。ちょっとしたツールもつくれちゃうし。仕様書をエクセル方眼で書いてくるやつはカスだ。
俺も若い頃はよく使ってたけどMarkdownを知ってからは断然こっちの方が書きやすい。そしてなにより読みやすい。検索もできるし成型もできる。強調表示や画像も貼れる。文法も簡単だし覚えやすい。
Markdownは文字列情報だ。文章だ。文章は一次元的に表現される。つまり書く側が完全に整理した思考でないと書ききれない。読む側に理解させるにはどういった順番で説明をすればいいか考えてからでないと表現できない。おのずと書類の内容、精度が上がる。ただの文章だからこそだ。
エクセルはタブやらなんやらで並列なまま多次元情報としたまま表現できる。思考が整理されてなくても表現できてしまうし、表現した気になる。書いてる側の思考がまとまってないまま表現できてしまうあたりはエクセルの自由度の高さでもあるのだけど、通して読む事ができない形式でもあるので、読む側のことを考えていないクソみたいな仕様書も提出されてきてしまうのが難点。
企画「XXファイルのYYタブに書いてありますよ。ちゃんと読んでるんですか?」
殺意が沸くわ。
Photoshopなり何なりで書いた絵図をGyazoにでもあげてリンクだけMDに貼れよ。エクセルでシェイプ駆使して作るより早いだろ。
パワポの方がマシですわ。あれはページにスペースの制限があるから1ページ内にまとめよう、伝えようっていう意思と能力がないとまとめられないから。
要件を伝えるのもいいけどバランス調整するための調整項目だしなよ。調整できるようにするし、こっちも使う変数を見出すきっかけになるから助かるんだよね。
3Dアーティストのあげてくるデータも仕様書書くでしょ?あれの要件とかもまとめられないでしょ。ノードとか意味わかる?揺れもの数とか制限あるのわかる?
なんでもいいからゲームエンジン触れよ。Unityとか簡単じゃん。プログラム書かなくてもいいじゃん。
俺があれだけMarkdown簡単だから覚えろって言ってもエクセルで上げてくるし、古い知識のままアップデートされない人って存在が迷惑ですわ。
プランナーで説明が下手って終わってるよね。俺も下手だわ。よく怒られてた。ごめんなさい。これは別にプランナーに限った話ではないけれど、プランナーて人に伝えてなんぼなので職能としてこれがないのは致命的だよなぁ。
書いてすっきりしたので寝る。星くれ星くれ
ファイルを保存したときにブラウザをリロードしてくれるHTMLプレビューが欲しかった。
確かAtomにあったと思うけど、あれはAtom専用で保存しなくてもリロードされてしまう…。
他に無いかなと探してみるもMarkdownプレビューしか見つからず、
いっそ作ろうかなーと思って調べてみるとmozreplとtelnetを使えば作れるようだった。
数分後、「firefox reload CLI」で検索してみると、
unix.stackexchange.comでAuto Reloadというアドオンが紹介されていた。
https://addons.mozilla.org/en-US/firefox/addon/auto-reload/
…導入したら目的が達成されていた。
GitHubはどう思ってるんだろうか?
だからそろそろ誰かが言ってかないと「馬鹿でも簡単にブログできるよ!」とかいう流れが加速してきてGitHubがクソ化していく気がする
利用規約見るとGitHub自体は法律・著作権的に問題なければ特に禁止事項はない(著しく容量喰ってる奴は消すよってだけ)っぽいんだが
https://help.github.com/articles/github-terms-of-service/
だってさ、それがgithubにあることでgithubにも他のユーザーにも不利益しかないじゃん
誰もそのソースを参考にしないし、フォークもしないし、バグ(誤植)を見つけたところでIssueもPull Requestも出さないだろ
ブログに誤植を見つけたからと言ってgit reset --hardしていちいち直すか?
直したところで誰も気づかない、それより新しい記事を書いて訂正したほうがいいしgitである必要ないよね
くだらない個人ブログがタケノコみたいに生えてきて、そいつらの記事内も検索しなきゃいけないからどんどんパフォーマンス下がって・・・
みたいなことは絶対に避けてほしいわけで
ここでいう「くだらないブログ」ってぜんぜんプログラミングに関係ないやつね、家庭菜園とか
レン鯖借りろって
ベクター: http://www.vector.co.jp/
言わずと知れた老舗ソフトウェアダウンロードサイト。毎日更新されるコンテンツは「新着ソフトレビュー」くらいなのに毎月7800万PVの高○○を誇る。(巷で人気のはてなは全サービスで2億PV/月らしい!ワーオ!)ベクターの広告掲載料はPVあたり0.05円だとか。今は…、…といった企業の広告が掲載されている。
世間に高い印度象を与えた遠隔操作ウイルスバスター事件に対するHIT-BITの印象はどうだったろうか。スーパーハッカーが自己満足のために起こした事件とか?
スーパーハカーといえばやはり遠隔操作。遠隔操作でCDトレイがガコンガコンだろうか。そう考えるとEjectコマンドユーザー会なんか完全にブラックハット集団だろ……何人いるのか知らないけど
この騒動の中で耳慣れないソフトウェアが複数登場した。例えばこういうものだ。
我々が普段ホッテントリで目にするアプリとは何か違う。例えばサーバ→鯖→マカレルのような発想と同じ匂いを感じずにはいられない。それに「パケット警察」よりも"SoftEther社のパケット監視ツール"と言われたほうがピンと来る。
ベクターにはこういったゆるキャラ的名称を持つアプリケーションが数多く登録されているのである。
私は空気読みができる人間だ。つまり何が言いたいかを改めて申し上げると、エバーノート活用法と聞けば、自分の時間を犠牲にしてでもライフハックMethod収集に勤しむ意識高い系ライフハッカーや、Markdown対応と言われればナンでもカンでも有り難がる技術系アーリーアダプターの方々や、はてブなどのソーシャルメディアに居を構える人たちと、ベクターユーザはどこか違うということを思わせる印象操作である。
増田一族の皆さんは日本で一番使われているWebブラウザをご存知だろうか? ……その通り、IE9である。ところがだ・私は10年以上、隔週一度の頻度ではてなブックマークを利用してきたが、いまだにIE9のハック記事がホッテントリ入りしたのを知らない。ちなみにOperaもない。
ベクターで人気のアプリケーションで「めもりーくりーなー」をご存知だろうか。不要になったメモリ領域を回収するシステムメンテナンス系ツールなのだが、実態は大量にメモリ確保をするものだ。Windowsはメモリが不足すると使用頻度の低いメモリ領域をシステムディスク上のスワップ領域(仮想メモリ)に追いやり、物理メモリを確保する。それが空きメモリ復活のからくりである。
遠い昔、メモリ最適化ツールとして「ただ数を足したり引いたりするだけのプログラム」が持て囃されたことがあったが、めもりーくりーなーのコア部分はメモリ確保のAPIコールをするだけで済んでしまうので、足したり引いたりほども難しくはないのである。
そんなツールが人気のベクタソフトウェアライブラリというと誤謬(ごびゅう)があるかもだが、そんなベクターが月あたり7800万PVである。ワオ。「そんな」とか言えない。そんなベクターからは毎日収録ソフトのアップデート通知が来るが、再インストールとほぼ同じ手間をそうそう小まめに行う人間がいかほどいるだろうか。注目ソフトウェアを取り上げる「ベクターソフトウェアニュース」ははてブと違って1日1回の更新だし、メールマガジン「ベックル」だって手作業での編集だ。それでもはてな2億PVに対してベクター7800万PVなのである。それを620万のUUが支えているので、1人あたり12PV余り稼いでいる計算になる。今のはてなは2億PVに対し4000万UU(U'ェ'U)→1人あたり5PV。情報の更新量で言えば個人ブログのスターダム層とあまり変わらないのではないだろうか。MLBに例えるならブログ界の野茂英雄とも言える旧イケハヤ書店さんが今年3月に100万PV/50万UU達成を記念して焚き付けを行なっていたが、同程度の情報更新量とするとイケハヤ100万パワーとベクター7800万パワーの差は一体何なのか。火事場のクソ力vs平時のキン肉マン並みの差である。(ちなみに超人界の神々が1億パワーであることもご考慮いただきたい)これは何か常連にしか見えない㊙コンテンツがあるとしか思えない数値である。
(そういえばはてなダイアリーからニコニコのブロマガにもらわれて行ったベックルハリー先生は、映像でもお見かけする機会が増えて、以前より増してご活躍のようですね。ニコニコ静画のコンテストで新作の絵師さんを決めたそうで気になります)
注: 「めもりーくりーなー」はCodeZine「マンガで分かるプログラミング用語辞典」やマンガでわかるJavaScript / Javaプログラミング、最近ではnoteでも連載中のクロノス・クラウン 柳井 政和さんの著作です。実際にはメモリー最適化のためのニーズに合わせたUIを備えているため、前述した原理だけのアプリケーションではありません。
ベクターはおかげさまで25周年!今年が平成26年、つまり平成も25周年を過ぎたところ。ベクターは日本の年号が「平成」に変わったのと同時期に創業した会社なのであります。平成の始まりは1988年2月。その頃あなたは何をしていましたか? まだ生まれていませんか?それとも友達が続々とファミコンを手に入れていく中、1人だけMSXを買ってもらってデータレコーダーで5分かけてロードした後、ただひたすらゴジラと戦う3DダンジョンRPGや、アスキーや徳間書店の雑誌に載っているプログラムリストを打ち込んで、F5を押しては"Syntax error"を出すという流れ作業の話をして「ふーん」と言われるだけの交友関係に何かコレジャナイ感を感じていた頃でしょうか?もしかしたらアイドルから一転してラ・ムーを結成した菊池桃子さんとHelloみかんに衝撃を受け、自称親衛隊を辞めようかどうしようか、辞めるとしたら世間的に許されるのかどうかと迷っていた頃……という方もいらっしゃるのではないでしょうか? そのころベクターはもう走り出していたんですね!!!!!!!!!!!!!<3
199x年から始まったソフトウェア・ライブラリサイト「Vector」の累計ダウンロード数は、1999年に1億DLを達成した後、毎年1億(ときたま2億)ずつ堅調に増加して今年19億DL達成。
本業がオンラインゲーム事業になってしまったベクターだが(「創星紀アステルゲート」大好評サービス中)、ソフトウェアライブラリは依然として健在だ。7800万PVを支える620万UUに7800万のベクター体験を提供している。(わーお)
ベクター体験と言えば、最近では「XPフォーエバー」が人気だった。XPが意味するユーザー・エクスペリエンス(UX)が後発OS(というかiOS)に受け継がれた現在においても、WindowsXPは走り続けているらしい。そして走り続けなければならない。定年退職と同じだ。ゴールが年々遠のいていくんだ。プログラマー定年説だって昔は30歳だった。それがいつの間にか35歳定年説になっている。40歳になる日もそう遠くはないだろう。30歳が若くない?そんな言い分が通用するのはアイドルとスポーツ選手とプログラマーくらいのものではないのか。政治家なら40歳で若手。そもそも一日中イスに座りっぱなしで政治家ほども動かず、身のこなしと言えば手を動かすくらい、チェリーの黒軸キーより重いものは打つことがない仕事がなぜ「体力勝負」と言われるのか。「プログラマーやってたんで体力には自身があります!(*°∀°)=3」とか引越し業の面接で言えんの?1日じゅう立ち仕事で刃物を扱ってる床屋の主人を差し置いて体力自慢できんの?
私は空気読みができる人間だ。落ちのない小話がそう何度も通用するとは思わない。本題に戻ろう。
さて、増田一族の皆さんはベクターのご当地ゆるキャラをご存知だろうか。その名も「べく太」である。心優しき少年ではあるが学校での成績がずば抜けて悪く、テストでは全問不正解の上、自分の名前を「べく犬」と書いてマイナス点をもらう奇才ぶり。友達はそこそこいるが、成績の悪さや自身のずっこけエピソードにより、知らない人にも名前を知られている有名人気質。得意科目は射撃とあやとり。手に座布団を持ったスタンディングポジションから就寝までの速さを競う競技昼寝の速さにおいて世界クラスの実力を持つ。いつも((ミ゚o゚ミ))の影にいるため主人公とは思われない彼だが、劇場版長編「のび太の結婚前夜」ではアレをナニされても決してああはしないという彼の秘められた人間性が描かれている。
そんなのび太が最も輝いていたのがシステムメンテナンス系ツールの紹介記事であった。
他とは比べ物にならないほど豊富にあるハードウェアの性能を引き出すため、Windowsの世界ではさまざまなチューンナップ技術が磨かれてきた。メモリ最適化、レジストリクリーニング、ディスクキャッシュの最大化、RAMディスクの利活用、ビジュアルテーマ/アニメーションの無効化、IEの常駐、スタートアッププログラムの削減、サービス系プログラムの無効化、EXEの圧縮、RARの活用、標準ツールよりも高度なサードパーティ製ディスクデフラグ&メモリデフラグ……、やることはいっぱいだ!でもこんなに手間をかけられるWindowsはかわいいなあ!そうやってPCチューンの腕を日々/.J で研鑚しあうマイルドハッカー達は磨き抜いたファイルコピーのスピードに一喜一憂したものである。
特にベクターには日本人により日本語で説明された扱いやすいメンテ系ツールが数多く登録されていた。使い方を誤れば手塩にかけて育ててきたWindowsに打撃を与えかねない分野であるため、「日本人にとっての分かりやすさ」は重要視される要素だ。そんな分かりやすいツールをさらに親しみやすく紹介する子供だましが紹介記事におけるべく太の役目である。
今ではべく太も良く読まれた記事のランキングでしかお目にかかれなくなってしまった。今や世間は萌え擬人化を通り越してゆるキャラブームである。いやブームさえ通り越して文化である。べく太はゆるいというよりマイルドなためかこのブームに乗っかろうという動きはまだ見せていない。これは残念なことである。(はてなもゆるキャラ路線をやめてしまうのだろうか)
ところどころかいつまんで述べたため、いくぶん主題がぶれた印象はあるが、
そんなベクターのユーザにリーチすることを考えないで、一足飛びに海外にロンする発想はちょっとチョンボしすぎなんじゃないの。その前にIEのセキュリティ問題で右往左往する人たちを相手にするのが先でしょ。そのあとは日本人口のメイン層である前期高齢者な。
情報社会を牽引する立場のソフトウェア開発者とは言っても、テストコード書いてこまめにリファクタリングしていくらでもデプロイしては動作確認できる人たちばかりじゃないの。一次請けから渡された画面設計書をメンバーに一人一枚ずつ手渡してアサイン完了、がんすけで開発スケジュールを引きつつ「これでどうだ?」とメンバー一人一人と納期交渉をするSEもいるの。ソースコードとほぼ同じ内容なので、スケジュールには含まれ得ない詳細設計書を「まぁ気持ちは分からんでもないが本来はそういうもの」という理由で実装前提出させたりするの。すべてが決まって検討課題がメンバーのメンタル面だけになった時点でキックオフ・ミーティングを始めるのが開発フローになっていたりするの。
これに対して事あるごとに穏やかな語り口で「私は雑用ですから」とつぶやくSEもいて、彼の場合は画面設計書をメンバーひとりひとりに渡して顔を伏せつつ実に申し訳なさそうな口調で「これぐらいでお願いできませんか」と納期交渉をしつつがんすけ2でスケジュールを引く人でした。
そんながんすけをダウンロードできるのもベクターソフトウェアライブラリなのである。がんすけ / がんすけ2 / (窓の杜にもあるよ) / (公式です)
話がそれたので本題に戻そう。
タイプは違うが、両者とも大差なくマッチョメンであった。SEなのに。ここから少し余談を挟むが、その後面接をしたとある派遣会社の派遣プロマネもマッチョマンであったが、マッチョメンに出会ったのはそれくらいなので特に私の人生がマッチョメンで占められているという話でなはい。
私も筋トレすれば強くてたくましいSEになれるのかな、、、
いやスケジュールが押したからって突然開催されるようになった朝会に、シドニアの騎士のOPを歌いながら入ってくるようなSEは私の目指すところではないな。戦いの場への入場曲はもういいので設計をして下さい、設計を。適切な設計で工数を減らすのは、あなた方の役目でしょ。あなたの敵はここにはいません。何も打ち砕かなくていいのです。そんなことよりぴょんぴょんしましょう。ぴょんぴょんのほうがメンタル的に優しくていいです。ぴょんぴょんですよぴょんぴょん。
このままで、果たして定年までぴょんぴょん続けられるのかな……。定年……って何歳だっけ……。
元々は55歳か。それが20年で60歳になって……さらに20年経って65歳が当たり前になったのね。じゃあ、あと20年したら70歳が定年かぁ……今働き盛りの人たちは70歳から年金受給者だね☆ 平均寿命が延びたぶん定年がずれていくということは「人は働くために生まれる」というのがこの国の常識なんだろうね。(だって政治家は自分を選んでくれた選挙区の空気を読んで法律に反映させる役職でしょ?) そんでもって現在の定年が65歳、日本人の平均寿命は80代前半。最高齢が110代なので医療福祉諸々の発展で平均寿命と定年があと30年延びる可能性も?95歳で定年!?いやいやいや……そのころには日本人の人生観も変わってるだろうから……いやいやいや……変わってるかなあ。
だったらプログラマーは何歳定年説になっているんだろう。IE9をシェアNo.1に押し上げるような職場に勤めていれば何も心配ないのかな……また大きなパラダイムシフト──という言葉がもうずいぶん久しぶりだけど──が起きてプログラマー定年が上がるのかな……パラダイムシフトじゃ上がらないかな……ライブラリとツールのほうが大事かな……(大体、オブジェクト指向だって末端のアプリケーションエンジニアにとっては「例にならえばいいだけのもの」だったし)……何かを速く便利に自動化するツールよりも、テストコードを書けばそれに合うライブラリを探してきてくれるエージェント指向システムが実現されないかな。今のところ再利用可能なコードを探す手段はドキュメントを検索するのと、ソーシャルふにゃふにゃで誰かに教わることくらいしか無いし。そんなパラダイムシフトが早いとこ起きないかなー起きればいいなー「お前が起こすんだよ」とか言う奴ぜったいいるだろうけどおれはおこせないしなー。
結局、定年って定まってないんだよね。不定年だよ。定年は不定年。同じ境遇の人間が多数いればその都度社会が対策とってくれるだろうし、先のことを気にしても仕方が無いよね。──ってことでハラオチ。
そんな私のベクター体験を元に、ベクターユーザからも訴求されそうなはてなブックマークUIを考案するのが本稿の主題である。
(Dan the full stuck engineer.)
Shared by iNotes - Sync Note with iOS
近年、関数型プログラミングの重要性はいろんなところで叫ばれています。
Javaの最新バージョンに関数型プログラミングに関する新機能が加わりました。
Rubyも昨今、関数型プログラミングへのサポートが手厚くなってきています。
プログラミングの教科書の大手、オライリー社から、Javascriptで関数型プログラミングを行うための解説書が発行されました。
関数型プログラミングへの注目度は高まってきています。
おそらく、みなさんは既にオブジェクト指向が何か、を知っています。
でも関数型プログラミングとは何か、胸を張って語れる人は、周りに見当たらないかと思います。
実際、オブジェクト指向によってプログラミングする方法は、わかりやすい解説があちこちにある一方で、
関数型プログラミングとは何か、何が良いのか、ということについての、よいまとめは見つけることはできませんでした。
この記事を読む方の中で、「関数型プログラミングを取り入れるか・取り入れないか」で切実に悩んでいる人は、おそらくいないでしょう。
この記事はあまり細かいところに立ち入りません。関数型プログラミングを使う側の立場に立って、利点や向き・不向き、それが導くスタイルを書きました。
みなさんは鳥のように飛んで、高い空から、関数型プログラミングとは何か、何が良いのか、を見渡してください。
オブジェクト指向的アプローチは、名前をつけてプログラムを整理する。
関数型プログラミング的アプローチは、汎用部品でなんとかする。
Googleが近年リリースした言語、Goには、”継承”を直接サポートする仕組みが無いことが話題になりました。
また、Mac OSXの基幹ライブラリCore Foundationは、ライブラリ自体はC言語で書かれているにもかかわらず、その設計方針は明確にオブジェクト指向です。
その本質とは"名前をつけて対象を識別し、それを扱うこと"、にあります。
最もプリミティブなオブジェクト指向の対象は、ファイルハンドラです。あるファイルを開いて、読み込んで、あるいは書き込んで、ファイルを閉じる。
これらの処理をまとめたら、わかりやすいですよね?
対象に関する処理を、対象の周りにまとめる。これがオブジェクト指向の基礎的な理念です。
識別することとイコールで比較できることは、とても良く似ています。
イコールによる比較は、オブジェクト指向では鬼門であることが知られています。
PointクラスのインスタンスとColoredPointクラスのイコール演算をどう決めればいいかに、正解はありません(詳しくは"effective java"をご参照ください)。
また名前をつけて識別する対象は、フワフワしていてはいけません。
たとえば、"軍人の階級"をオブジェクトにしたとしましょう。"大佐"クラスのある兵士は名前のフィールドや、性別のフィールドを持っているでしょう。
ところで彼が昇格したときに何が起こるでしょうか。
新たに"少将"クラスのインスタンスが作られます。"大佐"クラスを破棄する前に、名前、性別、その他沢山のデータを引き継がなくてはいけません。フィールドを増やしたい場合はその都度コードに修正を加える必要があります(*)。
なるべくイコール比較を避けたい。対象は不安定なものではいけない。では何に名前をつけて、識別するか。そこにオブジェクト指向技術者の熟練度が現れるのです。
一方、関数型プログラミングでは、特定の何かに名前をつけるより、極力、汎用部品でなんとかしようとします。
関数自体をリストなどのデータ構造に詰めることもよく行われます。
実は、関数型プログラミングというのは本質を表していません。
関数をはじめとして、リスト・ツリーのようなコンテナ、手続きを抽象化したもの、回路を抽象化したもの。
あらゆる対象を値として、合成し、ときに分解し、新しい値を作ります。
変数に適用する処理を作りあげることが、とても簡単だからです。
四則演算が定義されたデータを詰めたデータ構造もまた、四則演算可能だったり。
誤解を恐れずに言うと、オブジェクト指向がトップダウンなのに対し、関数型プログラミングはボトムアップです。
関数型プログラミングをサポートする言語には、沢山の汎用部品が定義されています。
このような構造をインターフェイスとして、様々なライブラリが組まれているので、
たとえばモナドを知っていれば、30分程度でパーサー(解析機)を理解することができて、
パーサーを理解できれば、JSONパーサー・ XMLパーサー・markdownパーサー・C++パーサー ... などを理解するのはとても容易です。
理解しやすいこと。これが関数型プログラミングの大きな利点です。
追記:
また、汎用部品と型のお陰で、ライブラリのドキュメントが圧倒的にひきやすい、というメリットも有ります。
Haskellな人がPythonにトライした結果 - Togetterまとめ
関数型プログラミングは「厳密な事前設計を必要とするため、簡単なことをやるのにも時間が掛かる」。
>> map (*2) [1,2,3] [2,4,6]
邪魔な”儀式”や、"おまじない"のコードが徹底的に撤廃されているためです。
関数型プログラミングのコードは、潔癖かつ濃密です。
たとえばC言語でint hoge(int x,int y)が定義されているとき、hoge(3)はなんの意味も持ちませんが(コンパイルでコケますが)、関数型プログラミングでは意味があり、実際に有用です。
上の例では、「掛け算をする」(*)関数は、二引数関数ですが、それに引数を渡して作られた「2を掛ける」関数(*2)は、一引数関数になります。
関数型プログラミングでは、「簡単なことは簡単にでき、複雑なことは複雑にできる。ただし、間違ったことは殆どできないか、全くできない」。
また、静的型付けの力によって、コード補完は非常に強力になっています。インテリセンスの比ではないです。
たとえば、関数中のある表記の型を任意に表示できます(GHC/TypedHoles - HaskellWiki)。
やがてやってくる未来には、プログラムをテキストエディタで書くことは時代遅れになっているでしょう。
統合環境のサポートで、バグやミスの少ない、スムーズなプログラミングができます。
そしてその環境で動くプログラミング言語は、関数型プログラミングをサポートした言語なのです。
以下の様な兆候を感じたら、あなたはそのプログラムを関数型プログラミングで書くべきです。
一般に、オブジェクト同士の相互作用が複雑になるほど、オブジェクト指向では手に負えなくなっていきます。
そういうときは、オブジェクトを直接扱わず、替わりにその"相互作用"を扱うことで、複雑さを軽減するアプローチが有効です。
それこそが関数型プログラミング的アプローチです。
特にオブジェクト指向が有効なのは、プログラミング初心者がそのコードをいじるかもしれないときです。
関数型プログラミングは、強固さと柔軟さの代償として、高い学習コストを伴います。
オブジェクト間の相互作用が複雑でなく、着目している(名前をつけている)概念が安定しているとき。
そして、プログラムをいじる人たちの間で共通理解が図れているならば、オブジェクト指向が有利です。
遅延評価という機能によって、レガシーな言語で扱えなかった、巨大な数を扱うことができます。
関数型プログラミングで書かれたプログラムは、正確さが要求される、金融関連の業界で使われています。
手続きとしてパーサーを記述できるので、テキスト処理プログラムはより理解しやすく、メンテナンスしやすいものになります。
関数型プログラミングを知らない人は、「正規表現でおk」と言いますが、
彼の書いた複雑な正規表現は、半年後には(書いた本人でさえ)理解できなくなっていることでしょう。
手続き一般を扱うことができるので、途中で割り込みのある手続きの表現も容易です。
関数型プログラミングをサポートしていない言語ではコルーチン(ファイバー)などをつかってなんとかするしかありません。
さもなくば、非並行処理では普通に関数として記述できるところを、並行処理のために、Builder,Strategy,Command,Interpreterパターンを駆使して書き直すことになります。
Javascript使いの方は、Deferredなどの構造を使うでしょう(http://qiita.com/KDKTN/items/4c6986049d204f0645d8)。
C++使いの方はBoostで頑張りましょう。破滅的に解りにくいコンパイルエラーメッセージと格闘してください。
もう少し簡単な例をあげます。
あなたは、あるレシピにしたがって、自動的に料理を行うマシンの制御プログラムを書いているとしましょう。
1. まず玉ねぎを炒める。
2. 飴色になったら、肉を加えて炒める。
3. 野菜を加える。
4. 水を加えて煮る。
5. スパイスを加える。
…できませんよね?何故ならば、各ステップの"間に"、マシンのロボアームの位置や動きを調整する処理が必要だからです。
これをオブジェクト指向でやろうとすると、各ステップの副作用として、それらの処理を行うことになります。
そうすると、マシンが二機に増えた時などの変更量は、絶望的なものになります。
あるいは関数として表現するのを諦め、手順全体をDSLで記述できるようにします。
このアプローチは関数型プログラミング的です。しかし関数型プログラミングをサポートした言語の助けなしでは、そのDSLを記述するために沢山のユーティリティーコードを書かなくてはならないでしょう。
オブジェクト指向的アプローチでこの問題をエレガントに解こうとすると、クラス化の粒度を上げる事になります。
野菜クラス、フライパンクラス、ボイルクラス、フライクラス、焼き加減クラス、アームクラス、野菜の大きさクラス、切り方クラス、焼き方クラス、"焦げたよ"クラス、etc...
こうすると早晩レシピはプログラムのコード上から消え去ることになります。上記のたった5行は、依存性注入のオブジェクトグラフを構築するコードに取って代わることになります。そこには沢山の挙動の制御がオプションとして付記されているのです。
カレーなど、ある種のレシピに限定することで、見た目の理解しやすさを得ることができますが、一方それは表現力を損なうことを意味します。
C言語などではマクロを使うこともできますが、それは結局、関数型プログラミング的アプローチの意味するところと同じになります。すなわち、補助のために沢山のコードを書くことになるでしょう。
iOSのAppstoreアプリは、"無料"と書かれたボタンを押すと、それが"インストール"ボタンに変わり、それをもう一度押すと、ダウンロードの進捗を表すインジケータに変わり、それを押すとダウンロードをキャンセルできます。
このように、位置は同じなのに、ステートに依って見た目と機能が変わるボタンは複雑です。
これをオブジェクト指向で実現しようとすると、
という下らない問題にぶつかります。
一方関数型では、"機能"、"見た目"、"状態"、を独立に扱って、それらを合成してボタンを作るので、迷うことはありません。
「同じ位置にあるUIオブジェクトは、コード上で(インスタンスとして)独立して、他から干渉を受けない」
この条件が満たされているうちは、オブジェクト指向でGUIを実現することに無理はありません。
しかし、携帯端末のような小さい画面で、多くの機能を達成するためには、UI要素はコンテキスト依存的に複雑になりがちです。
近年、PCのディスプレイの大きさは、頭打ちになってきました。
画素数は増えているのですが、MacにおけるRetinaのように、複数ピクセルでひとつのドットを表すようになってきています。
これは、ひとつの画面に置かれるボタンなどのUI要素の数は、これから先の未来で増えることはない、ということを意味します。
したがって、未来のGUIのプログラミングは、注意深く機能をピックアップして制限するというデザイナーの努力を脇におけば、
関数型プログラミングの力を頼るしか無いでしょう。
つまり…
Haskell さいこうなのおおおおおおおおおおおおおおおおおお!! おしっこ漏れちゃうのおおおおおおおおおおおおおおおおおおおお(゜∀。)ワヒャヒャヒャヒャヒャヒャ
1. google:すごいHaskellたのしく学ぼう を注文する。
2. Download Haskell を自分のPCに導入する。
3. コンソールにghciと入力して、対話型コンソールを立ち上げる。
4. 次の関数をコンソールに打ち込んで、結果を見る。即値で書かれているところとかをいろいろ変更してみて、感動する。
take 4 $ map (*2) [1..]
追記:
いかがでしたか?
ちまたには、関数型プログラミングの利点は変数が無いことだ、とか、より安全だから、とか、より速いから、などという妄言が満ち溢れています。
オブジェクト指向と関数型プログラミングは、水と油ではありません。プログラマは自分のプログラムに最適なアプローチを選ぶことができます。
一般にはあまり知られていないことですが、Haskellにもオブジェクト指向へのサポートがあるんです(Lensライブラリ、これを使用したサードパーティ製ライブラリも最近増えてきています)。
この記事を読んだオブジェクト指向プログラマのあなたが、少しでも関数型プログラミングに(そしてHaskellに)興味を持ってくださって、ホームセンターの大人用オシメのコーナーが大賑わいになれば幸いです。。