はてなキーワード: Perlとは
Perlでの業務経験5年超を経て数年前Rubyに転身した俺が通りますよ。
自分がそうだったのでよくわかるけど、PerlとRubyは良く似ているからこそ、Perlに慣れた人が不慣れなRubyを使い始めると「PerlでいうアレはRubyでどうやるのか」の勝手がわからなくてイライラすると思う。 while(<>){ } とか。
自分の場合は転職を機に仕事で使うプログラミング言語が変わったので、Rubyに慣れるしかなかった。最初は何をするにも「定番」っぽいやり方がわからなくて不便だったけど、初心者向けの参考書を買ってきてサンプルコードをひたすら写経した。読むだけだとわかった気になるけど、実際自分で何か書いてみようとおもうと書けないので、手に覚えさせる訓練だと思って無心になってirbコンソールに打ち込んだ。
けどもし自分が転職せず、仕事でPerlを使い続けていたとしたら、たぶん未だにRubyを使えるようになってなかったと思う。だってPerlでできることをわざわざ必要もないのにRubyでやることないじゃん。言語の機能や使えるライブラリにも大きな差があるわけじゃないし、両方中途半端に覚えるよりは片方を深く習得したほうがいい。今はもうRubyに慣れてしまってPerlは全然使わなくなっちゃったけど。
そう思えるんなら君にとってはPerlが一番良い、合ってる言語なんだから、世間の流行とかあんまり気にせずPerlを使えばいいと思う。
それでもなお「新しい言語を覚えたいんだ!」と思うなら。
文句言いながらでもいいからRubyでプログラムを書き続けろ。 while(<>){ } 相当なのは ARGF.each{ } だ、とかこれ読んだだけですぐ身に付いたら苦労しない。お前の仕事をRubyで片付けられるプログラマはゴマンといる。情報だってそこらじゅうにあふれてる。Rubyに対するアンテナが低すぎて見つけられてないだけ。Perl習いたての頃「CPANやperldocに情報が豊富にあるぞ」と言われて活用できたと思うか?
全体に何を言ってるかよくわからんかったが、WWW::Mechanizeだけ使ったことがあって心当たりがあったので調べてみた。
出典は↓のサイト
http://d.hatena.ne.jp/kitamomonga/20110628/ruby_mechanize_2_0
このサイトによれば、
「2011年6月27日に、Ruby のスクレイピングライブラリ Mechanize のバージョン 2.0 が公開されました。」
「1.0.0 以前から警告されていましたが、WWW モジュールが実際に削除されました。Mechanize 2.0 では WWW::Mechanize という記述は単にエラーが出ます。」
らしい。
つまり、WWW::Mechanizeの名前で使えたのは3年前。それ以前から警告が出ていたようだから、元増田がWWW::Mechanizeを警告なしで使っていたとすれば、少なくともそれ以上前のコードなわけだ。
Perlと違い、RubyではMechanizeは標準ライブラリではなく、単なるサードパーティのライブラリだ。それが3年以上無変更で動かないからといってRubyという言語自体を否定するのは、ちょっと飛躍が過ぎるんじゃないか。
Perlが3年以上一切互換性を破壊する変更をしていならそれは結構だけど、結局それは、(よく言えば)枯れた言語だからという理由もあるだろう。単にPerlが死につつあるのを、Rubyをダシにして抵抗したいだけに見える。
理由くらい書けよ糞が
他のWindowsプログラムがやっていて、多くの方が「できて当然」だと思っていることは、7割くらいであれば.NET(フレームワーク名)を叩けばできます。
.NET対応言語はC#、VB.NET、J#、F#、JScript.NET、C++/CLIなどがあり、実際の開発においてはこれらの中から自分に合った言語を選ぶことになります。
個人的な感想ですが、この中で最もゆとり仕様なのはC#です。StackOverflowなどのノウハウが一番蓄積されているのもC#だと思います。
「頻繁なアップデートを追跡しないといけない」「Visual Studioが必要」という問題はありますが、がんばってください
なお、.NETはメモリを食うので、数値計算みたいなことをしたいのであればC++が現状一番まともだと思います。がんばってください
昔のMacのプログラムのGUIはCarbonというライブラリで作っていました。今はCocoaというライブラリで作っています。
残念なことに、どちらも言語はObjective-Cです。がんばってください
ブラウザアプリは、ユーザのWebブラウザ(Chrome、Firefox、Opera、Safariなど)上で動作するシステムと、遠隔のサーバ上で動作するシステムが連携して成立します。
従って、ブラウザアプリを作る言語は、サーバ用言語とクライアント用言語の2種類を考えなければなりません。めんどくさいですね。
ひとたびそのめんどくささを突破してしまえば、Webブラウザさえあればどこでも動くようになります。素晴らしいですね。
クライアント用の言語は、まぁ、JavaScriptしかないと思います。がんばってください
JavaScriptも(正直なところ)あまり褒められた言語ではないので、近頃ではもうちょっとまともな言語を作って、それをJavaScriptに変換する方法が取られたりします。CoffeeScript、TypeScript、Haxeとかですかね。がんばってください
JScriptとかいう、名前が紛らわしい上にゴミブラウザ上でしか動かないゴミ未満言語もありますけど、そんなもんで作っても私の環境では動かせませんので悪く思わないでください。
そもそも選択肢が全くありませんので仕方がないです。がんばってください
Xamarinがあるじゃないかって?まぁそういうのもあるかもしれませんね。がんばってください
私の勉強不足で、Java以外の選択肢は知らないです。Java以外にあるんですかね?
Perlは使い捨てスクリプトを作るのに適しています。CPANクライアントは昔から安定して動きません。だいぶオワコン化してます。がんばってください 私は鞍替えしました
PythonはPerlより見た目がすっきりしたPerlです。easy_install・pipはすごく安定していてびっくりします(Windows除く)。3系とかいう邪念は捨てて2系教の悟りを開きましょう。がんばってください
RubyはPerl(の処理系のソースコード)より(処理系のソースコードが)綺麗なPerlです。私の手元のUbuntuで「ruby」と入力すると「Command not found.」と返ってくることからも解るとおり、多くの*NIXではOS標準でインストールされておりません。昔のgemは何故あんなにすごい時間をかけてrdocを作っていたのでしょうか。日本人が作ったのでムラ意識の強い日本人の仲間が大勢います。他の国は知りません。がんばってください
これ以上言語を増やすのはやめましょう。バベルの塔で大勢の人間が不幸になったのに、それを人間が自ら引き起こしてどうするんですか。
言語処理系を作るのであれば、BNFという言語で文法を定義して、yacc・bisonというツールに食わせればひな形ができます。ぶら下がりelseとの格闘が待ってますが、がんばってください
1からOSを作った方もいますが、デバイスドライバの流用などを考えると、だいたいはLinuxやBSDのソースコードを改変するお仕事だと思います。
昔はCGIと言っていました。所詮は80番ポートでlistenするだけのプログラムであり、BSDソケットをlistenできるライブラリを有する言語であれば何でもいいのですが、いくつかの宗教があります。
PHPはバンドネオンと同じくらい習得が困難な言語なのに、宣伝の仕方を間違えたために「自分はできる」と勘違いしたプログラマが暴徒と化し、イスラム教と同じくらい不当に低く評価されている言語です。きちんと勉強して使う分には、悪くない選択肢だと思います。がんばってください
Javaは、Eclipse・Netbeansといった超重量級IDEを起動して、Java EEやSpringといった超重量級ライブラリに依存したwarを、Jboss・WebSphereなどの超重量級アプリケーションサーバ上で動作させるため、メモリが貧弱な環境ではIDEとサーバを同時に起動すらできません。サーバのメモリが潤沢であれば悪くない選択肢だと思います。がんばってください
C#は、選択肢が全くないことを除けば、状況はJavaとあまり変わりません。Microsoftがお好きな方、何かの間違いでWindowsサーバを使わざるを得ない方であれば、悪くない選択肢だと思います。がんばってください
いや、bashと組み合わせるなら、それこそrubyとかperl、pythonが簡単だよ。
result = `ls -l`
意見を聞かせて欲しい。
なるほど確かに教養としてPerlは知っておいた方が良いが、より優れた言語がある。
そして、推される筆頭はRubyだろうか。
そう思ってきた。
ブラウザで使うなら選択の余地はないので、あの言語は除外しよう。
で、未経験者でも聞いたことの有りそうなこのあたりはこの辺り。
C, C++, C#、 Java、Perl、PHP、Ruby、Python。
Hello, World!を見比べたら
「publicてなに?staticってなに?voidってなに? mainはメインなんだろうけど []ってなに?argsってなに?なんでint main?str mainとかあかんの?たまに*印ついてるのなに?全部意味が分からんし解説もなしにおまじないって言って飛ばしてるケースも多いしなんか詳しく言ってるっぽいのもあるけどその分かる人だけが分かるような言い方やめて私のライフはもう0よ!なんで一言「やぁ!」っていうのにどれだけのことを理解せなあかんのよ!」
となるのでスクリプト言語が残るだろう。
Webでしか使わない言語は関数名もキモイから除外しておくと、Perl、Ruby、Pythonの三択となる。
私がPerlを選んだ当時は、Rubyは信者が先鋭的で他人を攻撃しないと気が済まないという風評を目にしたので外した。
そしてPythonはまだ日本では弱いらしい一方、Perlははてなやmixi、Amazonでまで使われていて、
恰幅のいいヒゲのおっさん他、情報を発信する人の量・質ともに非常に高い様子だったから、Perlを選んだ。
ここから本題。
あれから数年。
新たなものを学ぼうと思い、Pythonは昔バージョンの違いでなかなか動かせず、またPython2と3で随分変わってしまうようなので、
Rubyを始めてみようと思ったんだ。
Next Perlというだけあって馴染みやすい書き方も多く、洗練されてるなってすごく関心した。
学ぶこと自体が目的なので、何をしたいって、何もないので、とりあえずPerlでやってることを全て移植してみることから始めた。
Net::FTPSSL
うごかない。
まぁそんなこともあるよね。
うごかない。
まぁPerlでもActive Directoryに繋ぐのは随分苦労したしな・・・
WWW::Mechanize:
うごかない。
CentOS 6に入ってるRubyではバージョンが違って動かないって・・・
上手くいかないのは仕方ないよ。でもmechanize、昔動いてたのに今動かないって何なの?
モジュールクリックしたら作者のサイトに飛ぶし、マニュアルの書き方も作者次第でバラバラ…読みづらい…
CPANみたいにちゃんとやってよ。
ネット上の情報もバージョンが違って動かないことも多々あるようだ。Perlなら5.8で書いたものが5.20になっても当たり前に動くよ?
CentOS 6とFedora 20のそれぞれで出てくるエラーも違うし、Perlの下地があっても正直キツイ。
洗練されていいな!って思った分余計に残念だ。
こんなバージョン違えば動かなくて当たり前で、Rail抜いたら情報も半減するような言語、本当に初心者向けでいいの?
使える人が使える用途で使えるバージョンを選んで使うとステキ。そんなん初心者向けじゃねぇぇぇっぇ。
いや、言語の学びやすさとこれとは別問題なんだろうけど、Perlの安定度と情報の量・質・多彩さで比較になってない。
言語そのものはRubyの方が上でも、使えない道具は劣る道具じゃんよ。
「身の回りの雑多な仕事を片付ける」って用途の方が特殊なんだろうか。
Rubyは良い言語だって思ってた。しかし、分からなくなってしまった。
教えてくれ。
キリシア様に届けていい言語はなんなんだ?
s/キリシア/キシリア/
でもたいした議論もないということは、概ね合ってるのだろうか。
あと、perldocの情報量もすごいと思う。ある程度Perlが使えるようになってからじゃないと読むのはキツイけど、
他言語で書籍じゃなしにあれだけ詳しく書かれたものってあるかな?
kiyo_hiko型が動的なのが耐えられなくて結局Java
ある日、彼女は「うわあ、おもしろかった。ハルといっしょだったんだ。」と玄関にはいるなり、つっ立ったまま、話しだした。
プロジェクトに入れてもらえることになったモリがはじめての現場にちょっと不安をおぼえながら出ていった日だった。
マネージャーのトラウマ氏が「これが、こんどインフラチームにくわわるアルバイトのモリだよ」と仲間たちに紹介して彼女を二列目の席にすわらせた。
パチパチパチ—みんなの拍手をうけながら、モリがぐるりとまわりを見わたしたとき、三人ほどはなれたアプリチームの席に例の少女の顔があった。まっ白な鼻をピンとのけぞらせて、目と口もとをにこりとさせモリにうなずく。「えっ、彼女もいるのか」モリはひとりでふきだしそうになりながらカバンをあけた。
その日、その子の頭のお団子にいつものペチャン帽はなかった。定時になって帰るとき、モリは彼女に近づいていって「あなたの帽子は、どうしたの?」と話しかけ、つい、クスリと笑った。「私の帽子、きょうはベッドでおねんねよ。とっても疲れてかわいそうなの。」若くてやわらかい声で、まるいメロディーのついた話しかただった。ふざけている、という表情ではない。あのペチャンとした丸いものは、この少女にとってまったくまともな帽子なのだ。ああ、あれ!といっておたがいに笑いだすことになるのでは、と予測していたモリは、このまじめさのまえでまたおどろいた。「あなたも京阪?途中までいっしょにいけるわね?」
度肝をぬくような服装をしていながらその話しかたには、あかるい光を発散するようなやさしさがあって。なんとなくモリはひきこまれていった。
「モリのPerlて、とってもきれーいね。ほかにどんな言語を書くの?」
「あら、ひとつの言語だけなんてそんなに幅のせまいことではだめよ。私は、PerlとRubyとObejctive-CとJavaScript。あとScalaとGoも必要でね。そのうち始めるわ」
マリンスポーツ?あ、そうか、モリは、このあいだの夏休みに見たYAPCでのプレゼンテーションを思い出した。あのときのスピーカーに強烈な印象をうけたのだった。えーと、何て名前の人だったっけ・・・・。
「私、hitode909に弟子入りしたいって手紙出したのよ。あの人のTwitterやらgithubのログやら、全部読んだの。」
そうだ、hitode909だ、とモリは思い出した。え?でも、あんな人に手紙を出したなんて!
「ほんとは、はてなインターンも必要なのよ、でもそんなにいくつもやる時間がないでしょ。だからいまのところ過去の参加者のブログを読んで様子を見ているのよ。」
京阪電車の座席でむかいあって座っていたハルがしばらく沈黙した。ふと、モリの目のまえで、なにかが、なよなよと動いた。見ると、ハルの両手がのびてくる。左右の手指をからませたり、はずしたり、その手がパッとひらいたり・・・。腕をおりまげ、背をまるめ、首をうなだれていたかと思うと、ふたたび頭をおこし、両腕をゆるやかにつきだしてきた。少女の目は、どこか遠くにむけて、自分だけに見えるものを、つかまえようとしている。いきなり、彼女が両手でモリの両肩をおさえてゆさぶりながら、「ねえ、ねえ、モリ、いまの私にとって、なにがいちばんの問題か、わかる?緑よ、緑の色を、どうマリンスポーツするか、ってことよ。青と、赤は、かんたんなの。でも緑はね、ほんとにむずかしい。」さっきとちがう早口で、熱っぽく語りだした。
「あんな子に・・・私は・・・もう・・・ほんとに・・・はじめて出あった・・・。」
東京に行くついでに寄ってみたらショボくて笑った。松江に勝ってるのって、中華街だけじゃん。まず、近代建築がショボい。銀行建築だけだよね、横浜が誇れるのって。松江の武家屋敷みたく、個性豊かな個人の住宅が残っていない。まあ関東大震災があったから仕方ないけど、ちょっと肩透かしを食らった。てか横浜は街並みが汚いよね。松江駅そばのシャッター街のが人が居なくて綺麗。あとさ、みなとみらいにある横浜ランドマークタワーって建造も松江出身者が関わっているんだよね。横浜があまりに労働者がないからって、出稼ぎしてたみたい。真実は知らない。
それに、繁華街も松江のスターバックス前の方が密度があって栄えているイメージ。横浜はでかい箱物って感じ。横浜が誇る人口だって、面積広いだけじゃん。あと、東京のベッドタウン(笑)で稼いでいるだけ。なんかさ、横浜って東京の属国みたいな感じだよね。頭があがらないイメージ。その点松江は、米子や出雲に対しても胸を張って誇れるものがあるし、内心下に見ているよ。
あとさ、横浜はポプラが少ない。松江は多い。横浜に大盛りライス文化が根付いてない証拠。横浜ってガストっぽいんだよ。
過去から脈々と受け継がれるプログラミング文化がない。米子から松江にRuby本買いに行く人は沢山いるが、東京から横浜は全くない。Perl(笑)が横浜の限界だもん。学生向けのRuby教室とか、プログラミング書籍コーナーにおけるRuby本の比率とか松江のがダントツに多い。街ゆく人も、松江の方がRubyistが多い。そういうのは、横浜は全て東京に奪われてる。まつもとゆきひろみたいな言語的分担がない。『初めてのPerl』よりも『初めてのRuby』の方が薄いしね。
だいたい、横浜国立大学ってほぼ単科大学じゃないか。国立なのに早慶に蹴られるし。その点島根大学は総合大学だし、山口大学にも肩を並べる大学。山陰の政財界に多数OBを排出している。レベルが違う。
あと、島根は山があるところが素敵。横浜みたいなぼんやりとした平地とは違う。琴引山(松江市から車で1時間半)ではスキーが出来る。海もあって山もあって、おまけに歴史があって栄えている街なんて松江ぐらいしかない。あと横浜は言葉が汚い。下品。なんだダベって。松江のようなだがぁ、だがぁって素朴な感じがない。田舎の港町そのまま。
まあ総合すると、
swiftをJavascriptとかLLみたいに言ってる人沢山いたけど、あれって変数宣言がvarだとか、見た目がスッキリしてるとかそういう印象だけで言ってるんだよね。
以前、C#に型推論が導入されたときも(っていうか今でも)動的型やバリアント型と区別がつかなくて「使うな」「バグの元」みたいに言ってる人よくいたし。
あと、C++, Perl, Java, C#, Javascriptあたりをまとめて「C系の言語」と言ってPythonやらRubyみたいな言語と比較する文脈で「似てるから」おぼえやすいとかいう人とか。
VB6をやっていてVB.NETなら移行しやすいと思っていて「ぜんぜん違う言語だよ」って言われて驚く人とか。
共通のキーワードを使ってるとかぱっと見た目が似てたら、同じような言語と思ってしまう層がけっこうな量で存在するみたいで、そういう人たちも一応コードを書けてるんだよね。
3行で
そうだったのか。。。。落ち込みんぐwwww
Webに憧れたのは小学生の時だった。YahooKids!を開くとでてくるポンタの冒険に夢中だった。
ここにはないデータを手にして、ゲームができてしまう。インターネットすごい!!僕も作りたいとおもった。
中学になって、引きこもりぎみだった僕は自宅にあったパソコンの本を読みあさった。HTMLなるものを使えばインターネットがつくれることを知った。
必死になって意味を理解しようとした。headないにJavaScriptをかいて、bodyには本文をかいて。拡張子の存在を初めてしった。ファイル名+αの文字がなければ画像を
インターネットに乗せれないことを知った。色々な色を使ってデザインして、くそだなーと思いながらHTMLを書きまくった。
PerlやRubyにも手をだした。図書館で本を借りて理解を深めた。頼る人なんていないのですべて独学だった。
高校入学まえにHatenaをしった。higeponやnaoya、amachang、Hamachiya2にあこがれた。
Plagger芸を真似してぴざの配達でわらったり、ニュースさいとの転送してみたり。
RSSリーダーが流行ったのはどっちが先だったっけ?自分でRSSリーダーつくったりもしたなー。
ニュースサイトをまとめるWebServiceつくったりもしたっけ。
ApacheのカスタマイズとかLinuxKernelを理解しようとしてたWebな人達の向上心にひかれた。
higeponが未踏にとおったときに、学歴をしって、情報系の学部にいくのはやめた。
理学系の学部でSICPよんでみたり、データベースいじってみたり。好きにうごいた。そのころはWeb技術に関心はなかった。
学部4年になってから研究室のHP管理をしたので、そのあたりからWebの情報を取入れはじめた。
JS系のフレームワーク、AngularJSやらBackbone。すげーJSの見通しがたちやすくなっててエレクトした。
サーバー側も、RailsだけでなくFuelPHP、Laravel4、Sinatra、PythonのWebApp2とか。
Herokuを使って感動した。nodeなんてものがでてて椅子からひっくりかえった。
おもしろすぎて使いまくった。
ハッカソンにも参加してみた。僕の様なよばなれした人が出る場でないのはわかっていた。
作れない人達にかわって瞬時に作った。意見をその場その場で聞いて、作るべきものをはあくした。
楽々アイディアを形にしていった。他の学生と比べても僕の方が早く正確にかけた。
かなわないか、同じ程度だとおもったのはMSPの学生くらい。
だれよりも技術が好きで情報を取り入れてアイディアを形にした。
もちろんメールと一期一句同じではなく、僕の解釈した言葉ではある。
Webのプログラマになろうとしたじてんで一生技術を学び続ける覚悟はした。
それに沿って行動もした。実際にサービス作ってOutputもしてる。
僕よりも技術に欲ある人がいるということでもある。みたことない。
いままでハッカソンで会ってきた学生はC言語みたいなJSかくやつしかいないし。
生JSからAngularJSに移行したら僕の前から消えたようなやつらだ。
僕以上のスピードと正確さでサービスのリリースに尽力して、技術をもとめてるやつがいるのか。
面接で、クラウドとか、ビックデータとかPじゃなくてNやらHな言語を勉強してるとか言えばよかったのかな。
八つ当りにGithubのBackboneのプラグインにプルリクしといた。
今日はいくつかリポジトリみつけて気晴らしにプログラムをかこうと思う。
最後まで読んだひとはわかるとおもうけど、僕は人に通じる言葉が苦手です。
付き合ってくれて有難う。僕は地方で働きます。さよならWeb。
ぼくにはピンポンのアクマみたいな、 「おまえ誰よりWeb好きじゃんよ!!」といってくれる友達はいない。
それとも僕が無能(アクマ)だったのか。
ここには載ってるかもしれないし載ってないかもしれない会社(でもまぁだいたい同業が多いから書いとくね)に転職したけど
うかつに有頂天になって生活レベル上げすぎて戻せなくなると怖いので節制しようと頑張ってるけど。
重要なのは年収じゃないけど、採用されないのは試験受けすぎってのもあるんじゃない?
ちなみに俺は6−8社くらい受けたし、糞なのもあったけど、うち3社は受かったかなぁ。スキルは似たようなものだよ(C#, perlの経験のみ。あとは履歴書埋めるために学生時代だとか数日前だとかにrubyやphpで書いたものとかをそれっぽく水増しして、2,3公開アプリをてきとーにrailsで作ってherokuに上げただけ)
ここには載ってるかもしれないし載ってないかもしれない会社(でもまぁだいたい同業が多いから書いとくね)に転職したけど
うかつに有頂天になって生活レベル上げすぎて戻せなくなると怖いので節制しようと頑張ってるけど。
重要なのは年収じゃないけど、採用されないのは試験受けすぎってのもあるんじゃない?
ちなみに俺は6−8社くらい受けたし、糞なのもあったけど、うち3社は受かったかなぁ。スキルは似たようなものだよ(C#, perlの経験のみ。あとは履歴書埋めるために学生時代だとか数日前だとかにrubyやphpで書いたものとかをそれっぽく水増しして、2,3公開アプリをてきとーにrailsで作ってherokuに上げただけ)
id:minamiyama1994 さん、反論してくださってありがとうございます。
Haskellファンのご意見がいただけて嬉しいです。元増田です。
記事全体で「関数型言語」と呼ばれているものは「関数型言語一般」ではなく「Haskellや一部OCamlの話題を含むごくごく一部の言語」の話である
わかりにくくてすいません。記事では「関数型言語」の話はしていません。「関数型プログラミング」の話をしました。
「関数型言語」は範囲がよりボンヤリとした表現です。たとえばC言語が関数型言語かどうかをみても賛否両論にわかれるでしょう。
私が記事を書いた目的は、”関数型プログラミングに縁のない人に関数型プログラミングをわかりやすく紹介したい”でした。
その目的のため、「関数型言語」という表記を注意深くとり除き、代わりに「関数型プログラミングをサポートした言語」という言い方をしています。
このスタンスの上で、
”関数型プログラミングをフルにサポートした言語”の代表として、Haskellを紹介し、
”関数型プログラミングへのサポートが片手落ちな言語”として、LispやErlangなどを扱いました(それらのファンの皆、ごめんなさい)。
関数型プログラミング初心者の方は、それらの差異なんてどうでもよい、と考えるのではないでしょうか。
関数型プログラミングとは何が良いのか、を大雑把に知りたい。
そうなのではと考えて、あえて区別せずに記事を書きました。
「たとえばモナドを知っていれば、30分程度でパーサー(解析機)を理解することができて」? モナドはそんな限定的用途のものではないし、パーサの理解とは無関係だ(単にライブラリの設計の問題)。それにApplicativeスタイルのほうがパーサが書きやすいという人もいるだろう
id:minamiyama1994 さんの仰るとおり、モナドはパーサー以外の多くの応用があります。
現状多くのパーサーがモナディックパーサーとして書かれています。モナディックでないパーサーは、あまり多くのユーザーには使われないでしょう。
モナドなどの抽象的な構造が幅を利かせてるお陰で、ライブラリに秩序が生まれ、ユーザーはそれを使いやすく・読みやすくなっている、というのが私の言いたかった主張です。
(なお細かいことで恐縮ですが、ある種のモナディックパーサーはApplicativeでは書けません。その点をお忘れですよ)
「テキスト処理」に対して
お前それShellやPerl、RubyやPythonの前でも言えるの?
「GUI」に対して
この二つは、先人が不利な環境ですごく頑張った成果が現状なのだ、と思っています。
本質的には関数型プログラミングの強みが活かせる分野のはずです。
「個人の技量の話題」
「レシピ」に関しては、関数型プログラミングのスタイルでは、手続きを手続きとして自然に表現できるのに対し、オブジェクト指向ではできない(DSLチックなものになってしまう)、ということを言いたかったのですが、
わかりにくかったですね。
「書きやすい」
(*)関数の例で、関数型プログラミングの無駄の無さを示せた、と思ったのですが…
マヂですか…反論のためのでっち上げとかじゃなくて(失礼)?(追記: Haskellの方が「短く書ける」、のタイポだそうです)
Haskell布教のために有休とって4時間かけて書いたのにーw
撲滅…
ショボーン(´・ω・`)
いくつかまとめて反論したい
まず最初に言っておきたいけれども、僕自身はHaskellが大好きな関数型言語大好き人間である、ということを先に述べておきたい、それを踏まえた上で以下をお読みいただきたい
最初の「オブジェクト指向 v.s. 関数型プログラミング」や「ふたつのアプローチの比較」はまあ問題ないかなぁという感じ、問題があれば他の誰かに任せます
問題は「関数型プログラミングの利点」と「関数型プログラミングの得意分野はなにか」
まず「関数型プログラミングの利点」だけれども、ファンクタが云々、モナドが云々、これは「関数型言語の話」ではなく「Haskellの話」である
そこを引いてあくまでHaskellの話だと割りきって見たとしても、「たとえばモナドを知っていれば、30分程度でパーサー(解析機)を理解することができて」? モナドはそんな限定的用途のものではないし、パーサの理解とは無関係だ(単にライブラリの設計の問題)。それにApplicativeスタイルのほうがパーサが書きやすいという人もいるだろう、パーサの理解にモナドの知識はあまり関係がないと言っても差し支えないのではないか
「書きやすい」に関してはこれはもう「主観の問題だよね」以上の言い様がない、僕自身はC++とHaskellの両方を書く人間で、確かにC++Hakellの方が「短く書ける」と「感じる」ことは多い、がしかしそれはあくまで個人の主観であり、更にはなにか明確な基準を取ったとして、やはりこれは「関数型言語」ではなく「Haskell」の話である、わかりやすく言えば「関数型言語であるLispを僕は読み書きできない」、特定言語の、主観に大きく左右される特徴を関数型言語一般の話であるかのように敷衍して話すのは感心できない
「静的型付け」云々もこれはもう完全にHaskellやOCamlの話である、LispやErlangとは何だったのか
多くの数値計算アルゴリズムは逐次的に定義されている、関数型言語で扱いやすいものではない、簡単にいえば「それFortranの前でも言えるの?」である
遅延評価はこれまたHaskellの特徴であり関数型言語一般の特徴ではないし、別に他の非関数型言語でエミュレートできないものでもない、更に言えばこれが何か数値計算に対して有利な何かをもたらすかといえばそういうわけでもない
「分数や虚数が扱えます」、に至ってはむしろ近頃の言語で扱えない言語何かあるんですか、である、大抵の言語にはその手のライブラリはある、関数型言語に限った話ではない
お前それShellやPerl、RubyやPythonの前でも言えるの?
この手の話は「ライブラリ」の話になり、言語パラダイムにより議論されるべき問題ではない、もちろん自動並列化などの問題で数学モデルに基づいていることが多いHaskellなどは有利かもしれない、が、やはりそれは特定言語や特定のライブラリの話になり、関数型言語一般の話ではない、並行処理の扱いにくい関数型言語の設計など容易だろう
言語の話でも言語パラダイムの話でもライブラリの話でもない、個人の技量の話だろう、関数型言語でも下手にしか書けない人は上手には書けない
GUIライブラリの設計にもよるけど、GUIってOOPの強い分野だと認識していたのだけれど、さてはて
最後に要点をまとめると
俺はターミナルを快適に使える+普通の作業(Excel, Word, インターネット)もできるっていうのが好きだよ
perlやらシェルスクリプトやらでパパっと処理を書いたりするので、ターミナルが使えるととても助かる
fink、macport、homebrewなんかでCUIプログラムでも導入しやすいし。まあこれはLinuxならたいてい同程度以上の機能を持ってるけど。
Winでcygwinやらmingwやらも使ったことあるけど、Macみたいに基板がUNIXってわけじゃないからかどうも使いづらかった
あとはemacsみたいなショートカットキー(Ctrl+kとかCtrl+aとか)が大体のアプリで使えるっていうのも、無いとストレスが溜まるレベルでありがたい
サーバサイドの通信プログラムなど、OSのシステムコール使いまくり系の、所謂システムプログラミングのうち、電話の交換器とか緊急地震速報のように、処理速度と信頼性が求められる仕様のソフトウェアは、未だにUNIX系(というか実質Linux)にC/C++になってしまうのだろうか。
速さの問題でJavaやPerlがダメとなると、未だにシステムプログラミングはアプリケーションプログラミングよりも高難易度というイメージがある。
かくいう自分の場合、C言語は学生時代の授業でポインタに挫折して以来、仕事で画像処理のプログラム実装でちょっと使ったけど結局よく分からない状態で、急病でリタイヤした人の仕事(C言語で少しだけ作った通信プログラムの引き継ぎ・納品)をムチャ振りされ、泣く泣く取り組んだ経験が半ばトラウマ化している。
だってC言語やっててポインタが分からないとか本当にド素人レベルの初心者が、socket()のノンブロッキングにpipe()にsignal()にselect()無限ループで複数のファイル記述子の監視を非同期通信でfork()もあるよという世界に放り込まれたのだ(当時のLinuxカーネルはpselect()がシステムコール実装されてなかったというオマケ付き)。
K&Rと「UNIXネットワークプログラミング」片手に涙も枯れた状態で帯状疱疹作りながら挑み、最後はどうにかこうにか元請けが引き取ってくれたけど、共有メモリやマルチスレッドはハイレベル過ぎて手が出なかったのが悔やまれる。
これがC++(当時未経験)なら、Javaで体得したオブジェクト指向で複雑な仕様もかなり楽に出来るかと思ったけど、いざ始まってみたらC言語とLinuxのシステムコールを使いこなすだけで精一杯で、C++は今でも未経験と。
あとmalloc()やfree()とかも全く活用できなかった。懸案だったポインタと構造体は嫌でも覚えたけど。
というか休日遊んでいて、突然それまで分からなかった部分が理解できたのはいいが、次の瞬間「やべ!あのまま本番動かしたら洒落にならん!」という展開になり、休日こっそり会社に忍び込んで必死にソース直したこともあったっけ。
・・・という経験をしているので、いつかまたシステムプログラミングの仕事が振られた時のことを考えて、一応PGで飯食ってる仕事人として、何か準備しておきたいと思っているのだが、できればもう少し楽になる技術やフレームワークが生み出されていると嬉しいんだけどなーという感じ。
愚痴です。
中学校くらいの時にWebサイト作ってた。しょーもないサイトだったけど、それなりにアクセス数増えてカウンタが1000万超えた。
掲示板CGIとか設置する過程で、perlを覚えた。楽しくて、自作で掲示板とかチャットとか色々作った。
暇さえあればperlの情報集めてたし、Socketモジュールだけで簡単なWebサーバー作ったりしてたし、
でもプログラミングに対する周囲の印象は「オタク臭い」だった。中学ではよくいじめられてた。
だから高校進学を期に高校デビューした。おかげで友達いっぱいできた。
でも模試の成績は偏差値30くらいだったし、perlはまったく触らなくなった。
文系らしくテストだけ出席して単位を取り、あとはバイトとサークル活動で大学生活を浪費した。
就職活動では金融を志望した。もう僕は文系の人生を歩むんだと思ってた。
もともと人との会話なんて大嫌いだったのに、大学時代に頑張ったことなんてコミュニケーションくらいしかなかったから
コミュニケーションの話を面接でアピールしまくった。実は辛かった。
ほんのとあるきっかけで、ドワンゴの面接に行った。楽しかった。
もう僕がperlを辞めてから5年くらい経ってたし、今思い返せば稚拙なことしかアピールしてなかったけど、とにかく面接は楽しかった。
perlが好きだったからWeb系のベンチャー受けまくったけど、当然のように落ちまくった。
結局、中小企業のSEだかPGだか職種がわからない開発系の会社に内定もらった。
内定はもらったけど実は行きたくなかったし、転職してでもWeb系開発に行きたいから今めちゃくちゃに勉強してる。
僕がプログラミングをやっていた中学時代から、本当に世界は変わってしまっていた。
javascriptはただのオモチャみたいな存在から、ajaxだとかフレームワークだとか、今最も熱い言語になってしまってるし、
perlはいつの間にか没落してて、サーバーサイドは主にphpが主流らしい。
一つの事を学べば、さらに三つくらい新しく学ぶべき分野が増える。時間がいくらあっても足りない。
おかげ様で、今まで付き合ってきた人間とまったく話が合わなくなってしまった。
大学の友人は、ウェイウェイしか言わないので連絡を取らなくなった。多分、陰口叩かれてる。
内定した会社の同期は、勉強してる様子がまったくうかがえない。
いまどきのSEらしく、技術より顧客との折衝能力の方が、大事だと思ってるんだろうか。
内定した会社の先輩社員からは、勉強意欲があまり見えてこない。
オブジェクト指向がわからない人間が役職についている事には驚いた。
もしかして、今後私はずっと、こうした技術に対する意欲の低い人間たちにまみれながら、
一人勉強を続けなければいけないのだろうか。
それは、出る杭で在り続けるということであり、大変ツライことなのではないだろうか。
文系の学部に入学し、ウェイしか言わない友達を作ってきたのは自己責任だから
仕方ないことだけれど、最近自分のやっている事が周囲に理解されない事があまりにも辛くなってきた。
環境のせいにするのは良くないことなのだけれど、なぜ中学の当時、誰も私がプログラミングをやっていたことを
応援してくれなかったのか。応援してくれてさえいれば、今頃、それなりに技術に関して積み重ねてこれたのではないか、
技術に興味を持つ友人を作れたのではないかと恨む言葉が出てくる。