「圏論」を含む日記 RSS

はてなキーワード: 圏論とは

2015-05-13

http://anond.hatelabo.jp/20150513110244

うぜえ。

俺は毛の壁じゃねえし、こんなん関数型界隈じゃ常識だわ。

計算可能性の理論ラムダ計算Lispを産んだように、プログラム意味論圏論Haskellを産んだ。

プログラム意味論では変数の型が議論の最小単位で、関数プログラムはある型の変数を別の型の変数へ変換する変換器として記述される。

から本質的に、型が無いとプログラムという概念存在できないことになる。

で、このアカデミック議論が普段書くコードにどう影響を与えるかというと、実はほとんど影響がない。

もちろん知っていた方がよりエレガントなコードを書けるだろうが、必須ではない。

圏論を知っている必要があるのは、Haskell設計する人達だけだ。

下っ端はエリート様達が作った便利な道具を、細かい理屈抜きにしてありがたく使えればいい。

http://anond.hatelabo.jp/20150513104859

関数を一級オブジェクトとして扱えるかどうかとは関係ないよ。

しかプログラム圏論を使って扱おうと思うと本質的重要だよ。

この辺を青筋立てて語る奴らのいるせいで、ますます倦厭され普及が遅れるきらいがある。

なんでもっと大らかな心を持てないかねぇ。

2015-01-28

http://anond.hatelabo.jp/20150127003906

Kが関数型言語について虚言・妄想を書き連ねたように扱われてるが、解説はクソだったにしても、ソースコードは動くし完全に無根拠で書かれてるわけじゃないんだよな。

Kの記事批判コメントしてる自称関数型言語界隈の人たちも、関数型言語はただ動かせるだけで、プログラミング意味論圏論(といっても初歩)を数学的に議論できるやつなんてほとんどいないから、明確に誤りを指摘できずに今回ほど泥沼化してる。

程度の差はあれ、Kみたいに変な例えしか書いてないような関数型言語についての記事はいっぱいあるんだよなぁ…。

2015-01-27

http://anond.hatelabo.jp/20150127035153

関数型の言語プログラム書いてる人は別として、

関数プログラマ」ってのになるとキモくなる、と言うのがよく分かる例か。

圏論とか言い出す当たりも典型的というかなんというか。。。バカは黙って体張って仕事してろ、と言いたくなる良い例ですな。でももやしっこなんだろうな。。。

http://anond.hatelabo.jp/20150127062539

情報インプットアウトプットも、実際凄い能力を持ってる人だと思う。

ただ彼には普通技術者研究者とは違う彼独自理想の形、みたいなものがあって、既存の考え方を彼の理想のために都合のいいように組み込んでしまうんだよな。

都合のいい部分だけ取り入れて、気に入らない部分は切り捨てて「これが本当の関数型だ!」とか「これが圏論本質だ!」とか言っちゃう

専門に勉強してる人から見ると、本当に重要な部分が無視されていたり、用語の使い方がおかしかったり、いろいろ突っ込みどころがあるんだけど、

彼には彼の中で確固たる理想理論があって、筋道立てて話すことはできるので、素人からは正しいように見えるんだよな。

2014-05-15

未来の為の寛容さ

関数本と称したデタラメ本なんかどれだけ高く平積みしたところで、どうでもいいと思ってるよ。間違って買っちゃった初心者右往左往するだろうが、きっといつかは正しい知識に戻ってくるだろうし、それで諦めちゃう人はどのみち辞める定めなんだろう。たとえQiitaとかで議論を吹っかけられようと、話し合いが成立しないと判った時点で席を立てばいい。煽られようとワザワザ付き合ってやる必要はない。でも実際のお前らは腹を立て、戦い、傷ついてPTSDになって、数スレを消費した。そんなナイーブなお前らが、今回の事件は何故かスルーできた。

悪意のカタマリだろうと、他愛のない道化はむしろ放置でいいと思うんだよ。色んな奴がもっと好き勝手に書くべきだ。ちゅーんさんはモナド本を書いていいし、漫画解説する関数型があっていいし、遅延評価解説本は望まれている。市井プログラマー素人技術本を書いていいんだ。関数型プログラミング繁栄はそういう態度の先にあると思う。選択肢は多い方がいい。その中で、何が本当に重要かは読者が決める。ヘンテコリンな奴をありのまま受け入れる寛容さは必要だと思うんだ。

でも今回のはそれに収まらない。重要さのレベルが違うだろ。どこぞの馬の骨じゃない。あの子日本Haskellコミュニティの若手ホープじゃないか。今は女性関係で腹を立てているだけかもしれないが、将来トップに立った彼に「あなたライブラリは負の価値しか持ちません」っつって包丁画像突きつけられたらどうする。Slackでは「勉強会に参加する学生が少ない」とか嘆かれてたけど、俺が学生なら、もはや頼まれても行きたくない彼女言及しなければ安全? 俺はそんな風には全然思えないし、正直不安だよ。



…いや、だからどうしろって言う意見はない。どうすればいいかは判らない。お前らの冷静さにビックリしたというのが感想だ。他人が頭ごなしに言っても伝わらないだろうし、本当に必要なのは排斥することじゃなくて、自分の考えを親身になって聞いてくれる仲間だと思う。ただ正論ねじ伏せるのでなく、それでいて「単なる腰抜け」じゃない誰か。

彼はスレ民でもあった筈だが、ム板のこのスレはそういう話に適さないだろう。俺たちが場を提供することはできない。勝手だが身内に期待したい。圏論の話ならいつでも歓迎です。

以上、スレ汚し済まなかった。コードポイントフリーにする作業(たのしい)に戻ります

--------------------------

この文章は当初2ちゃんねるプログラムHaskellスレに投げる予定だったが、スレ汚しになると判っていて書くのもどうかと思い、失礼してこちらに置きました。あとリツーイータビリティ。(この記事リンクフリーです)

2014-04-22

http://anond.hatelabo.jp/20140410183410

すごい今更だけど、1に対してだけ少し。

基本的に、まだ発展途上にあるものほど、理論面が強調されがちなんだと思う。

今の関数型言語は、まだデザインパターンが、色々発案されだしているけど、確立しきっていなかった頃のJavaオブジェクト指向時代、みたいな感じ。

Javaで言うデザパタは、関数型言語では大体、モナドとしてまとめられるわけだけれど、そのモナドを色々発明するために、圏論をしっておくに越したことはない、みたいな感じなんじゃないかと。

もっとも、そろそろすでに出てきているデザパタモナドを利用するだけの、純粋学習者も増え始めている頃合だから、気になりだしては来るタイミングなんだろうけど。

2014-04-21

20代男性プログラマのためのライフハック

集中力を維持しデキる男になるための

から初められるライフハック

1 ビタミンミネラルサプリをとる

食生活が乱れがちになっても健康を維持できる。

口内炎貧血に二度と悩まされなくなる。

2 通勤自転車を使う

通勤時間が2,30分増える程度なら電車より自転車を使おう。

満員電車に体力を削られることなく、体型や心肺機能を維持でき集中力もUp!

3 毎日10分でいいからLISP圏論勉強する

どちらをやるかはお好みに合わせて。

疲れない範囲で難しい問題に取り組むことで脳が活性化する。

4 ちん毛を手入れする

亀頭が完全に出るように短くそろえる。

パンツの中で毛が皮に巻き込まれなくなる。

5 オナホ格安風俗店を使う

普段はオナホを使い、二週に一度は格安店に通って性欲を発散しよう。

彼女を作るよりコスパ満足度も高くなる。

女は30手前で焦りだしたのを捕まえればいいのが安く手に入る。

2014-04-10

プログラム中級者が感じる関数型の違和感

なんだか話題になってるから書く。

やっと初心者を脱して中級者になりかけてるプログラミング学習者が関数型言語に何を感じているかを書こうと思う。

1 圏論かいらないんじゃないの?

Haskellが短いコードプログラムを書けるというのは分かる。

forループmapやfoldで抽象化する利点も分かる。

それでやりたい処理のほぼ全てがまかなえるということも実感している。

副作用のない小さな関数を合成して大きな関数を作る利点も分かる。

再利用性も上がるし、どこからどう影響を受けているかが簡単に分かるからバグも出にくい。

ただ、Haskellの基礎になってる圏論が何の役に立つのかは、まったく分からない。

むしろ邪魔なんじゃないかと思う。

ファンクターやモナド概念圏論で扱われているのは分かるけど、圏論なんて名前だけ知ってればコードを書くのに不都合はないだろう。

圏論必要なのはHaskell設計する人であって、使う人ではないと思う。

なのに、やれクライスリ圏だ自己関手の圏だのと、うるさいったらありゃしない。

Linux上で開発環境整えるのにカーネルコードを読めって言うぐらい的外れだと思う。

いや、知識として持っとくのはいいだろうけど、役に立たんだろ。

2 言うほど新しい機能ないような?

Rubyが羊の皮をかぶったLispとはよく言われることだけど、関数型言語オブジェクト指向言語とそこまで違いがあるような気がしない。

純粋言語ではできないけど、クロージャに内部状態を保持してもらって無名オブジェクトみたいな使い方をすることはあると思う。

その無名オブジェクトもっとあれこれデータ関数詰め込めば、いつの間にか普通にJavaC#で使うようなクラスのできあがり。

その間はなめらかにつながっていて、不連続に切れるようなもんじゃない。

関数プログラミングと言いつつ、オブジェクト指向の考え方は利用できる。

上級者はデザインパターンdisるのが好きかもしれないけど、逆の考え方をするべきだと思う。

デザインパターンオブジェクト指向言語欠点を補うための苦肉の策じゃないよ。

関数プログラミングの基礎的なパーツだと思う。

からちょっと見た目がすっきりするだけで、結局やることはオブジェクトプログラミングと変わりはないと思う。

3 なんか選民思想にとらわれて無い?

関数プログラミングコミュニティの人って、業務でクソコードメンテさせられて、その現実逃避に美しいコードに擦り寄っているように見える。

もちろん、美しいコードを書けるなら書いた方がいいし、現代的な言語を使えるなら使ったほうがいいと思う。

けど、適材適所というか、オブジェクト指向言語でも、やってやれないことはないわけで。

役に立たない圏論をありがたがる所とか、どうもイキがってるように見える。

せいぜい生産性が倍になる程度で、他の要素が悪ければ帳消しになるような利点でしかないに違いないのに。

開発プロセスとかを見直す方が仕事を楽にしてくれるんじゃないのかな?

2014-01-20

自称関数型プログラミングマスターの同僚がイタイ

一人で勝手イタイならいいけど、いい加減我慢も限界でなんとかしたい。

そいつ圏論に裏付けられた静的型付け言語スバラシサを布教しないと気がすまないらしく、事あるごとに純粋でないオブジェクト指向言語disる

曰く、静的型付け言語だと型を合わせてコンパイラが通るようにするだけで実行時エラーを絶対起こさなコードが書けるらしい。

ああまた始まったと思ってたら、そいつが熱弁する後ろから同僚が近づいて「ヒープ足んねぇ」って書かれたメモ背中に貼っつけてたのは笑った。

お前が書いたn3アルゴリズム(!!!!)も型さえ合えばコンパイラがnlognに書き換えてくれんのかね。

いやそれ、動いてるって言わないから

型チェックぐらいで取れるバグなんて、せいぜいスタックキューみたいなもんだろ。

その程度の仕事しか任せてもらってないのは分かるが。

お前の怪しい動的計画法バグをチェックできるコンパイラなんて存在しないぞ。

圏論なんてやってる時間があるならダイクストラ法でも復習しとけってんだ。

そもそも関数型言語生産性が高いというのが眉唾ものだ。

どちらにせよ設計においてはオブジェクト指向が使われるのだからほとんど違いなどない。

せいぜい数倍コードが短くなる程度の話に学習コストをかける価値は無い。

もちろん俺はとっくに学習済みであるが、他の同僚には難しい。

彼ら全員が理解しない限り、関数型言語で開発などできるわけがない。

そのコストと、純粋関数型言語によって得られるメリット差し引きすると、正直何の魅力も感じないのだ。

関数型にかぶれている奴は、プロジェクト全体を見通す力、マクロ的な視野なく、自分の狭い世界だけで騒いでいるだけだ。

ま、厨二病みたいなもんさ。

2013-10-26

http://anond.hatelabo.jp/20131026144247

実際に買ったのはロッキードマーティンとかだな。

Googleには少なくとも数台はあるでしょ。

で、圏論とかコンフォーマル代数についてはどうですか?

うちの会社社員とか協力会社募集するけど、「あらゆることに精通しています」とか言いながらその程度も理解してない人が来たら困っちゃうよ。

http://anond.hatelabo.jp/20131026142229

いやD-waveマシンは実際に販売されてるから

その程度も理解してない人間は「あらゆること」なんて言っちゃだめだよ。

その調子だとラムダ計算とか圏論とかの計算機科学の基礎すら怪しそうだな。

「あらゆること」なんてぶち上げるくらいだから流石にその程度はマスターしてるんだろうと思って触れなかったんだけど。

ちなみにクリフォード代数とかconformal algebraとかは分かってる?

CGとかやるとき結構重要なんだけど。

2013-05-14

プログラミング大好き男に「どの言語が好き?」と訊ねられたとき、女はどう答えたらいいの?

あ、まず前提として、

貴女プログラミング大好き男を夢中にさせることが、

はたして貴女幸福にするかどうか、それはまた別問題だけれど。

はいえ、プログラミング大好き男たちは玉石混交ながら、

IT系の超かしこい男なども多く、

多くっつーかIT系でないのにプログラミング大好き男っていうのは超かしこ学生まぁこれは有望株)か研究者系なんか、

あとはまったくかしこくもないクセに頭いいつもりして「Lispやってます(キリッ ハローワールドくらいですが」とか言っちゃうアホしかいないわけで、

したがって、釣り師たる女たちにとっては、

なかなかあなどれない釣り場です。

では、プログラミング大好き男に「どの言語が好き?」と訊ねられたとき

貴女は、どう答えれば理想的でしょう?

まず最初に、その男COBOLのようなタイプレガシーコード

あとはC/C++、そして(TechEdに参加するほどではないけれど)VisualBasicが大好きな、

そんなタイプ場合は、

貴女はかれの目を見て、微笑みとともに質問など無視して、こう言いましょう、

「わたしが、仕様書を作ってあげる♪」

これこそまさに必殺の答えです。

そこでプログラミング大好き男が、えへへ、とやにさがったならば、

貴女は、ひそかに、「コピペ量産しやすい技術的ポイントを抑えた仕様書」あたりを

ひそかに練習しておきましょう。これで成功まちがいなしです。

しかし、ここでは、もう少しハイブロウな(?)いわゆるプログラミング好きの男の

落とし方をお伝えしましょう。

この場合貴女は、こう答えましょう、

「わたしは、JVM上のScalaが好き。

型推論もあるしラムダ式クロージャスクリプト言語みたいに書けるの、豊富組み込みのコレクションメソッドはいつも便利だし、

XMLリテラルCaseクラスによるパターンマッチもTraitベースMixi-inも、大好き♪」

もしも貴女がそう答えたならば、

その瞬間、プログラミング大好き男の目はきらりと輝き、

かれの貴女への恋心は、

20%増量になるでしょう。

なぜって、Scalaは、

ちょっぴりお洒落Ruby風味に記述できて、

Maybeモナド差し込んで、

コンパイルは遅いながらも、そこがまた

ちょっぴりメモリを多く積めばいい富豪プログラミングみたいなふんいきをかもしだしていて。

しか関数型言語としての不変変数・不変Listを実装して

質高くふるまっていて、なおかつ、

JVM上で動くくせにJavaが「やるやる」と言ったまま実装してなかったラムダ式と仮想拡張メソッド型推論を実装した功績もあって。

したがってScalaこそは、

本来なんの接点もないまったく縁もゆかりもない別々の世界に生きている、

インタプリタ言語大好きな綺麗系OLと、玉もあれば石も混じっている、そんなプログラミング大好き男たちが、

この世界で唯一(いいえ、JVM系列のJRubyClojure と並んで唯三)遭遇しうる場所です。


では、参考までに、危険な回答を挙げておきましょう。

プログラミング大好き男に「どの言語が好き?」と訊ねられたとき

貴女がこう答えたとしましょう、

MicrosoftVisual Basic for Applicationが好き♪ 週3回は Excelコーディングするの。」

その瞬間、プログラミング大好き男の貴女への恋心は消えます、

なるほどMicrosoftは、世界最大のOS供給メーカー

特にOfficeは平凡ながら、ま、無難にまとめてあるものの、

しかし、「新UIのリボンUI!」「メトロUI対応!」とかなんとか無意味な自慢を吹聴し、

VBAはさらプログラミングについての謬見を撒き散らした罪がありますからプログラミング大好き男にとっては天敵なんです。

ティーガー戦車乗りのオットー・カリウスは「ティーガー乗りなら誰でも片側の履帯がはずれ僚車に牽引されて帰ってきた経験を持つはずだ」 って言ったけど

社内SESIerなら誰でもクソみたいな前任者が書いたクソみたいなExcel-VBAコードを直した経験があるはずなんです。

また、もしも貴女が「PHPが大好き♪ あたしが書いたPHPのWebサイトが、さくらサーバに7件あるよ♪」

と答えたとしても、同様の効果をもたらすでしょう、

なぜって、PHPは、1990年代にはWeb系を目指す人にとっては簡単で要件を満たすWebサイトが簡単に作れる輝きの道だったものの、

しかし2000年代うそうからセキュリティ関係の問題で転落し、

いまや、あの貧弱な言語能力では、Rubyの魅力に遥かに及びません。

(注1)

またもしもたとえあなたプログラミング言語が大好きで、

「わたし、.NET FrameworkのC#が好き、フォームアプリでも書くけど、

最高に好きなのはASP.net♪ SQLServer連携も、ajax control toolkitもすっごくおいしいの。」

と、答えたとしたらどうでしょう

なるほど、貴女の趣味は高く、

しか.NET Frameworkは、C# が cool であるのみならず、

.NET Framework上で動く F# や IronPythonIronRubyマネーJScriptも最高においしいんですけれど、

しかし、貴女の答えを聞いて、プログラミング大好き男はきっとおもうでしょう、

(なんだよ、MS信者な女だな、カネかかりそう)って。

(注2)

貴女が、プログラミングが大好きで、言語の名を挙げるにしても、

たとえば、JavaScript(node.js)ならば安心でしょう、

なぜならば、JavaScriptは、かけだしのプログラミング初心者にもマニアにもともに愛されるめずらしい言語で、

貴女がその名前を挙げても必ずしも、(jQueryがやっとの初心者と思われることはあっても)あなたプログラミング言語おた宣言をしているとは受け取られないでしょう。

しろへぇ。ちゃんとprototypeは使ってる?」と聞かれたら「当たり前じゃない。むしろnode.jsでいいMVCフレームワークが分からないんだけど…」と話を振ってみましょう。

男は嬉々として、30個くらいのnode.jsフレームワークを教えてくれることでしょう。(まぁどれもどれで帯に短し襷に長しなんですが)

あるいはRighno上で動かしたコードをnodeへ移植する話とか、CoffeeScript、甚だしきはClojureScriptを振ってみてもいいかもしれません。

しかし、たとえば、世界が(つーか竹内先生ポール・グレアムが)誇る超絶関数型言語の名作、Common Lispにせよ、

selfと書きまくることと海外で使われてることに定評のあるPythonにせよ、

バージョンアップごとに言語仕様が変わり、かなり素敵なものではあるもののobsolatedな罠にはまりやすRubyにせよ、

まったく読めない$_だらけで頭悪い仕様リセットしてPerl6にする(そしてまた全く読めない)Perlにせよ、

気さくなクジラ飛行机さんがふるまう素敵においしい日本語プログラミング言語ひまわりなでしこにせよ、

基地外トリッキー言語の代表BrainFxck・Glass・Missa・WhiteSpaceにせよ、

そういう言語名前をいきなり挙げるのは、ちょっぴり微妙。

ましてや貴女が、「Haskellが大好き♪ わたし、プロジェクトオイラーの問題もうほとんどHaskellで、解いちゃった♪」

と答えたならば、どうでしょう

これはかなり博打な答え方で、

なるほど、Haskellは、純粋関数型でありつつも副作用のある操作が行える超絶名言語ゆえ、

あなたがそう答えた瞬間、プログラミング大好き男がいきなり超笑顔になって、

へぇ、やっぱりHaskellなら大抵の問題は4行以内くらいで解いちゃった?」とか言いながら

鼻の下がだら~んと伸びちゃう可能性もあるにはありますが、

しかし、逆に、(なんだよ、この女、プログラミングおたくかよ)とおもわれて、どん引きされる可能性もまた大です、

なぜって、必ずしもプログラミング大好き男がプログラミング大好き女を好きになるとは、限らないですから

しかも、この答えには、もうひとつ問題があって、

男たちは、女を導き高みへ引き上げてあげることが大好きゆえ、

もしも貴女が、「Haskellが大好き♪」なんて言ってしまうと、

そこにはもはや、男が貴女圏論モナド教育する余地がまったく残されていません、

したがって貴女のその答えは、

プログラミング大好き男の貴女への夢を潰してしまうことに他なりません。

ま、ざっとそんな感じです、貴女の目にはプログラマーたちはバカでスケベで鈍感に見えるでしょうが

しかし、ああ見せて、プログラマープログラマーで繊細で、おざなりに扱われると傷つきやすく、ローカル変数名前一つにも気を使い、女と自分の将来に夢を持っています、

貴女の答え方ひとつで、プログラマー貴女への夢は大きくふくらみもすれば、

一瞬で、しぼんでしまいもするでしょう。


では、スキットを繰り返しましょう。

「わたしは、JVM上のScalaが好き。

型推論もあるしラムダ式クロージャスクリプト言語みたいに書けるの、豊富組み込みのコレクションメソッドはいつも便利だし、

XMLリテラルCaseクラスによるパターンマッチもTraitベースMixi-inも、大好き♪」

そして、その瞬間、プログラミング大好き男の目がらんらんと輝いたなら、

貴女はこう重ねましょう、

それからね、いま、わたしが使ってみたいWebアーキテクチャは、

Play Framework、素敵なリアルタイム嗜好のアーキテクチャって噂を聞いたから。

あなたのお暇なときがあったら、わたしをPlayへ連れてって♪」

これでもう完璧です。

PlayFrameworkと、Play(遊ぶ・じゃれる)のダブルミーニングでかれの股間も刺激しちゃえます。

そうなったらこっちのもの

デートの日には、ペアプロ用に Happy Hacking Keyboard をばっちり決めて、かわいい下着をつけて(注3)、

github.comの通販で売ってるoctcatのTシャツか、facebookの「いいね!ボタンがムネのところにあるTシャツ、 あるいは初音ミク(ないし彼のお気に入りアニメキャラ。北米ならMyLittlePonyで鉄板なんだけど)のコスプレを着てゆきましょう。

その日からプログラミング大好き男は貴女の虜になるでしょう。

では、釣り師としての貴女の、愛の幸運幸福をお祈りします!

注1:

(と、書いたもののPHPの現状をよく知りません。グローバル変数だらけになるのとか旧ASPみたいなもんなのかなぁ。count($array); とか書くのアホと思うがpythonも同じだった)

(あと、マジで機能とかTwitter連携とか診断メーカー的なのでもPHPで7つも作ってる女子居たら付き合いたい)

注2:

もっとも。objective-Cなんていう言語をやることに比べれば個人で行う程度なら金のかからない手法もなくはないのですが。

注3:

プログラマーにとっての「かわいい下着」と、女性にとっての「かわいい下着」の定義にずれがあるので注意。

半数くらいのプログラマーしましまぱんつが可愛いと思ってる気がするので、妙齢の女性が着用するには抵抗あると思うが、ボーダー柄のコットンショーツ(ただしキャラ絵のは除く)とか、

過度でないていどにフリルがついたものオススメ。また、色は、レッドだとプログラミング大好き男は引いてしまう(だってそれはコンパイルエラーときの色だ)ので、薄ピンクホワイト、薄ブルー、せめて黒(に差し色でピンクとか)あたりに留めたい。

補記:

 元ネタhttp://tabelog.com/tokyo/A1301/A130101/13002457/dtlrvwlst/3464106/

補記2:

  「プログラマー」か「プログラマ」かの問題については、特に意味は無いが前者を採用した。

補記3:

 言うまでも無いけど、ネタです。 

 また、COBOLとVB、C++ではまったくもって難易度が違うことも分かっています。後者になるほど圧倒的に難しい。

2013-03-27

プログラミングの初級になるためにの目次

http://anond.hatelabo.jp/20130325172822 の続き

言語Java7を想定。(Java8が迫っていますが、Lambdaなど関数型は、まだ早いと言うことで)

定理由は、C++比較して学べるところが大きく、安全シンプル言語から

※いきなりJavascriptはやめとけ、PHPは論外。

RubyScalaでないのは、筆者が初心者には適切には教えられないから。

おもちゃToyとしてjQueryで遊ぶのは、悪くは無いと思う。

0.はじめに

これ以降は名著の紹介や学習方法の紹介が主体となります。名著のコンポジションという形が時間限界ですね。

量については「初級になるなら、専門書を計3,000ページは修得することは覚悟してね」なんて言ったりしています

Javaで初級のわかりやすい指標ですと、[amazon:Effective Java]とGoFまでの修得。

初級になるまでに登竜門への挑戦期間を含めて、3~4年はかかっても仕方が無いとも思います

※逆に「一山いくらのコーダー」というのは、Effctive JavaGoFが達成している技術も知らずに「自分Javaプログラマー」だと誤解してしまっているような人達です。

そういったコーダーは何年経とうとも初級プログラマーにすら敵いません。

初級を目指して、プログラミングを楽しんでください。

ただ、学ぶべきことはべらぼうですが、「各分野毎に、エレガントな方法がある。だから探して修得する」ということが大切です。

※「一を聞いて十を知る」ような優秀な人に、50冊くらいドーンと本を置いてあげて、各本の目次を読ませるだけで、

底の見え無さを悟ってくれたりすると、嬉しくなってしまます

※余談ですが、その底の見え無さは数学という学問のものですね。例えば、関数型言語の底流に「圏論」というここ100年の最新の数学があります

また中級くらいで、Liskovの置換原則などが載っている本を紹介しますが、

そのLiskovの置換原則の周辺で出てくるcovariant(共変)って、圏論という数学概念だったりします。

数学出身としては、数学現実に活かされている嬉しい事例です。

閑話休題

1.目次

1)エディター・コマンドライン正規表現友達

「速く正確に大量の出力」という能力は、プログラミングをする上でも、ドキュメントを書く上でも、何より「つまら仕事」の時間圧縮ができるようになるため、重要です。

スローガンとしては「思考のスピードで出力することを目指そう」です。

紹介するエディターはemacsvimExcelです。ついでにIMEとしてATOKを使用しているため、ATOK操作Emacsライクにする話も紹介します。

ExcelWindows環境Meadowすら入れさせてくれない場合最後の砦という扱いです。

コマンドラインは、「コマンドラインというものがある」「時として非常に強力である」程度の紹介です。

※筆者はzsh全然使えません。使いこなしている方々と接する度に「勉強しなきゃな~、でも、あっちの方を先にやりたい・・・」とグズグズして、はや何年・・・

正規表現は置換を用いて、テキストの一括編集重要です。後、遭遇したくない事態ですが、スパゲッティコードの解析をする上での最後の砦です。

※遭遇したくない例

ん?何か変なところで副作用のある処理があるようだなぁ(消沈)、SQLのInsertかUpdateか一応Mergeも使っているところから逆算して原因箇所を探すか・・・(諦念)

この糞コードがっ!!こんなところに書くんじゃねぇ!!(憤怒激高)

(ここで、他にやらかしていそうな似たようなコード正規表現grep検索。改行コード込みにすれば複数文検索も可能)

わはは、予想通り共通化すべきロジックメソッドがそこら中にある・・・

2)アルゴリズムに始まりアルゴリズムに終わる(データ構造アルゴリズムの一部という認識言葉を使っています)

入門編で一つLinkedListというアルゴリズムを学びました。

少なくとも一つ本を読みながら自力でアルゴリズムを学べる人なら、大成できる可能性があります

前に紹介した[amazon:C++実践プログラミング]には、LikedListやStackなど基本的なアルゴリズムが載っておりますが、

これに加えて、初級になるためにはこれくらいは知っておいて欲しいというものを紹介します。

※後、最初から必ずしも手を出さなくても良い上限も紹介いたします。

3)正・不正の定式化・自動テスト・ロギング・アサーション・例外・契約プログラミング

プログラムは、データ入力して、加工して出力・保存する処理の繰り返しです。

まり、各一連の繰り返し毎に、「正しい入力」「正しい出力」を定式化する必要があります

それを人間の手では無くコンピューターやらせられるように、つまり自動テストできるようにテストプログラミングします。

そこで処理の進捗を確認するためにロギングし、処理が想定通りであるかをアサーションでチェックし、

不正入力不正な出力=例外が起きたら、対処策をプログラミングします。

(ex 途中で処理を中断して、入力者に適切な入力メッセージを伝えてあげる。入力自動補正などもあり得る)

で、ここら辺をまとめてどうあるべきかとして「契約プログラミング」があります

※余談。定式化・テストに際して、数学畑の人間としては、Javaだとequalsのオーバーライドでも必要になるし、同値関係同値分割だけでなく、集合論群論から学んで欲しい・・・(ここいらは数学科学部1~2年の学習内容)

4)名著を読め、新たな名著を探せるようになれ・素晴らしい人を見つけたら、縁を大切に

名著は英語で読みましょう。名著が名著たる由縁は、度々引用されることにあります

まり最新の技術書を読むときに、引用された名著のフレーズが、新旧のリンクをなし、理解の助けになります

対話は学問をする上で非常に重要です。

壁打ちといって、独り言で思考補助をするよりも遙かに有益です。

※素晴らしい師匠を探すなら、大学行くのが一番ですが、見聞を広げていく中で出会いを待つしかないとも思います

5)オブジェクト指向とはなんぞやとGoFデザインパターン + マルチスレッドプログラミング

マルチスレッドが難しいのは「バグを起こしにくいプログラミング」を求められるから

まりTry and Errorからの決別が求められ、今後の仕様変更拡張も踏まえて慎重に慎重にデザインする必要があります

できる限りステータス変数を持たずに安全に、でもマルチスレッドにするのだから効率を追求しなければ本末転倒

でも効率のためにはメモ化に代表されるキャッシング必須と、アンビバレンツな要素のバランス取りが難しい。

このために、リエントラントな実装・抽象と実装の分離など様々なエッセンスを駆使することが必要です。

床屋哲学者問題

6)日々コツコツと

というよりも孔子曰く、知っているよりも好きであること。好きであることよりも楽しめることのほうが強く、

気づいたら日々時間が許す限りプログラミングをしてしまうのが理想です。

仕事として嫌々スキルを磨かなきゃということが、これほど不幸な職業も無いですね。

余談 FizzBuzz写経について

FizzBuzz」は、本来の目的通り、協力会社の選定の際の足切りには便利ですが、

学習の達成度を測るには、簡単すぎる不適切な問題ですね。

写経

数学畑の人間として言わしてもらうと、

写経数学証明問題を、教科書テンプレ通りに、数値や名称だけ変えて記述することしか出来ない人の発想。

まり矛盾無く一貫した論理モデル」の構築が自由に出来ず、テンプレの微修正しか出来ない人の発想。

また、外部の「矛盾無く一貫した論理モデル」の吸収が不自由で、アルゴリズムを「手順」としてしか捉えられないように見受けられる。

プログラマーとしての大成は見込めないと思う。

数学畑として提供できる試金石

連続であること確かめるための「ε-Δ論法」(数学科学部1年の学習内容)

事前知識無く、このモデルを理解できる人は、十分に「矛盾無く一貫した論理モデル」を構築できる人。

1.まず「連続」とは何ぞやと考えて概念を膨らませてください。

2.十分思考できたと思えたら、Wikiあたりでイプシロン デルタ論法を見てください。

2013-03-20

これもファッション

私は、流行りのSNSとやらをわりとぞんざいに使っているので、

誰かがフォローなりフレンド申請なりを飛ばしてきたら、

誰であろうと基本的には全て承認するようにしている。

そのせいかタイムライン上にいつの間にかへんちくりんな人間がいることも多い。

今日はその一例をここに記したいと思う。

彼はプログラミング精通しているようで、どうやら情報系の学校に通う学生らしい。

彼はよく、流行りらしい関数型言語Haskell?)やらアセンブル言語等の話題を取り上げ、

これがああなってこうで・・・等と、恐らく的確なのであろうコメントを発する。

記事の内容を見てもまるでサッパリであるからすると、

最近学生勉強熱心であり意識も高いのだな、と思わせるには十分であった。

私の職業プログラマーでもエンジニアでも無いが、

仕事をほんの少し楽にする為のこまいスクリプト程度なら書くこともある程度での知識を持つ人間である

そんな彼の観察を時偶に続けていたところ、

彼がとあるウェブ上のプログラミングコンテストに挑戦した、という旨の発言が目に入った。

いつも難しいアルゴリズム先進的なコーディングについて語る彼のことだから

さぞかし優秀な成績なのだろう、と期待してコンテストウェブサイトアクセスし、彼の固有名検索にかけた。




結果は、失笑に耐えぬものだった。




コンテストは4つの問題が出題される形式であり、それぞれ難度に差がつけられている。

1つは中学生でもコードの書き方さえ知っていれば解けるであろう問題。

1つはFizzBuzzを基本とし、それに些細な応用を付与した問題。

1つはエイトクイーン問題を少し改変した問題。

1つは前述のエイトクイーン問題から更に発展させた上で、高度な数学的思考を求める問題。

彼の結果は、初問正解のみであった。

提出されたコードは、会期を過ぎると誰でも閲覧が可能になる為、

彼のコードを覗いてみることにした私は、そこで更におかしな笑いがこみ上げた。

彼は、FizzBuzzがほぼ全く書けていなかった。

それどころか、基本的なループ処理や、型の扱いが出来ておらず、

素人の私から見ても、これがちんぷんかんぷんコードであることは一目瞭然であった。

以前、彼はHaskellの話題に言及する中で逆FizzBuzz問題についても述べていた気がする。

確かに、私もそんな事が要求される場面があれば悩むだろうな、とその記事を読み感想を覚えたが、

彼は逆FizzBuzzどころかFizzBuzzすらマトモに記述できないのである




コンパイラの違いによってコードの書き方はここまで変わる」

圏論が出来ないヤツは将来、プログラマーとしても技術者としても失格」

構造体同士の四則演算は全メンバに同一の演算子適用するのかな?」

彼は、一体何なのだ

2013-03-02

変数に型がないということの利点について考える」の何が良くないの

ふえぇ・・・これの話ですよぅ

変数に型がないということの利点について考える」

http://d.hatena.ne.jp/perlcodesample/20130227/1361928810

この記事の内容についてはですね、多くのなーどの皆さんが、「何言ってんだこいつ」の気持ちを抑えきれずにいたんですけどね。

特に話題が「型」なものですから関数型もひかんの皆さんが我慢できずに、「ひゃっはー汚物は消毒だー」とばかりに集まって大騒ぎする事になってしまったわけです。(ほとんどTwitterから来たんじゃないですかね・・・)

そりゃぁ、ガタイのいいお兄様達が火炎放射器構えながら、端正込めて書いた記事を炎上させれば、主様の頭に血が登るのも当たり前の話ですか。

わざわざ、こんなブログを定期的に更新する主様の事ですから、きっとプログラムが好きなのでしょう。でもきっと、「プログラム」が好きという点については、もひかんさん達負けてません。負ける気がしません。だからもひかんさん達も、自分達の足りない脳みそ使って、勉強してるんです。

『「静的型付け言語」と「動的型付け言語」ではどっちのほうが良いんだろう。そもそも「静的型付け」「動的型付け」ってどういう事なんだろう、っていうか第一「型」って一体何ものなんだろう・・・?』

答えを求めて、勉強してるんです。



僕もそんなもひかんさんの一人です。低い知能で出せるだけのぱわーを出して、それなりの勉強をしてきてます。だから言うんですよ。

「お願いだから、間違った事を間違ったまま広めないで」って。

これはね、別に「間違っている」事を責めているのでは無いのです。そんなもの、記事の冒頭に「僕が間違ってましたふひひさーせんw」って一言付け加えたなら、皆納得するんです。

そうじゃなくて、明らかに間違った事を間違っていると指摘しているのに、「いや、僕は間違っていない」と言い続けている事に問題があるのです。

そうです、件の記事の内容は、残念ながら・・・誠に残念ながら、その多くが間違っているんです。

具体的な間違いの内容は、コメント欄や多のブログ記事で散々指摘されいるので、僕が今更蒸し返すのは野暮でしょう・・・ただ、困ったことに主様はそれが「実感」として得られないので、何が間違っているか解らないのでしょう。

解らない事は恥ずかしいことではありません。ツーステップ以上登った先にある事を実感するのはとっても労力がいるものです。僕だって今、圏論Haskellモナド関係についての厳密な説明を求められたら、泣いて謝るしか無いのです。



では、主様が今、件の記事の指摘の内容を実感するためには、どうすれば良いのでしょう?僕からは、ふたつ、提案する事ができます

ひとつ・・・僕が散々言っているように、「お勉強しましょう。僕はHaskell大好きなので、型を学びたいのであれば迷わずこの言語を学ぶことをお勧めします。多分、実用に耐えうる言語の中では最も型がしっかりした言語じゃないかなって、思うんです。

そしてね、お伝えしておきたいのはこの言語、ParlやRuby使いさんがビックリするくらい柔軟で簡潔なんですよ。静的型付け言語無駄が多いなんて、とんでもない事です。

他の言語お勧めしている方も居ましたね。

うーん、僕は、OCaml良くわからないですが、Scala直積型を再現するのが面倒な印象ありますです・・・

もう一つは・・・言語は何でも良いです、何か静的型付け言語を使って、それなりに大規模なもの・・・できれば二人以上で実装してみてください。それが終わったら、もし動的型付け言語で同じ事をしたらどうなっていたか想像して見てください。きっと主様は、件の記事を上げたことを、後悔する事でしょう。



最後に、僕が言いたい事はですね・・・

「型」ナメんなヴォケが(# ゚Д゚)

って事なんです。

プログラミングの型は、プログラマが間違いを犯さないために、プログラミング言語がわざわざ用意してくれているものです。そしてその基礎になっている理論は、コンピュータ真空管だった時代から、今にかけて、ずーっと研究され続けているテーマなんです。だから安易に「型がないことによって、たくさんの面倒から解放されるからです。」なんて、すっとぼけた話が通用するほど簡単な世界じゃないのです。

型は、主様が考えているよりも、もっと強力で、もっと柔軟で、僕や、主様や、なんとなくこの日記を除いた誰かさんプログラミングを大いに手助けしてくれる凄いものなんです。それが動的型付けの言語だって、型の考え方は実装の指針を示してくれます。どうです?もっと型の事を知りたくなって来ませんか?

最後に、「本物のプログラマHaskellを使う」から、いくつか引用して終わります。ばーいばい。

http://itpro.nikkeibp.co.jp/article/COLUMN/20080108/290605/?ST=develop&P=1

型がテスト自動化の道具であるという概念は、最初は理解しにくいかもしれません。しかし、Haskellのような強い静的型付けの言語に慣れるにつれて、こうした考え方を自然ものととらえられるようになります

検査をうまくテストの道具として利用することで、問題自体が生じるのを防いだり、問題により近い部分で対処できます

型のわずらわしさを克服し、型での静的なテストに慣れて型検査メリットを実感するにつれて、「型を考えること自体がプログラミングである」と理解し、「型によってバグを防ぐためのテストコード」を当たり前のように書けるようになります。こうした感覚を身に付ければ、一人前のHaskellerになったと言えるでしょう。

2011-05-09

http://anond.hatelabo.jp/20110509125142

でもしか圏論を扱える頭を持っている奴が世界にどれだけいるんだよwww

2011-01-18

http://anond.hatelabo.jp/20110118191131

ああまぁそういうのとかマジキチ正規表現かには役立ちそうだね…。

やっぱ主にその辺かなあ?応用先。

数学は嫌いじゃないけど、プログラマ系の人が好きな、「静的な」とでも言うような分野は嫌いなんだよね…。

理論理とか圏論とか…。この辺に魅力感じる人は何が魅力だと感じるんだろう。関係性そのものに萌えるのか。

2010-05-05

http://anond.hatelabo.jp/20100505154604

圏論を何に使いたいの?

Haskell向けだったら

http://www.haskell.org/haskellwiki/Category_theory

あたりをじっくり読めばいいと思う

数学物理学向けだったら難しくて知らん

http://www.youtube.com/user/TheCatsters

動画勉強すべし

高校数学レベルから圏論を理解するためにはどんなルートがもっとも数学的に最適ですか。

最適についての定義広辞苑を参照してください。

2008-11-28

アレクサンダー・テクニークと、オートポイエーシスって

似てるよね。アプローチ集合論よりも、圏論っぽいっていうか。

2007-09-11

最近思うこと

圏論プログラム意味論を情報系の大学専門学校カリキュラムに必修で入れればいいのに。まだ、一部しかやってないみたい。

この辺の考え方が力の底上げにつながる気がする。

オブジェクト指向の、フレームワークデザインパターンにしても圏論を知ることでより深い洞察力が養えると思う。

2007-08-03

東大にもかなわないし、2ちゃんねるニコニコ動画にもかなわない。

さらに叩いておこう。

LLなんかで喜んでるような人たちは東大卒とかのように

計算の本質にまでたどり着いている人たちにはかなわない。

Googleのような正面突破オブジェクト指向を1日で理解し、

CPUを0から作れる能力を持ち、それでいてグラフ理論圏論など

そもそも何の役に立つのかわからないことも一生懸命考えていたような

人たち(つまり大学)からしか生まれないからだ。

Googleのためにグラフ理論が開発されたわけではない。

件の夏の人の意見は完全に正しいわけだ。

正面突破が無理だとしたら、問題はおもしろいことができるのか

と言うことなんだけど。

日本重要WEBサービスは3つだけしか存在しない。

2ちゃんねるWinnyニコニコ動画

技術力の問題ではないのに、どれに対しても

完全敗北しているよね、つまらないからだよ。

ライブドアリーダーよりも、2chブラウザのほうが確実に

優れたソフトウェアだなんてことは1秒で理解できるはず。

面白いものってのはさ…

(あんまし重要な結論なので書くのやめました。続きを読むにはココをクリ

ログイン ユーザー登録
ようこそ ゲスト さん