はてなキーワード: Pythonとは
... | fun x:: cmd1 x : cmd2 x : ... : cmdn x | ...
一行毎に処理する場合はxargs -Iを利用する。
$ ls *txt a.txt b.txt $ cat a.txt 1 $ cat b.txt 2 $ ls *txt | fun x:: echo x : cat x a.txt b.txt 1 2 $ ls *txt | xargs -Ix fun _:: echo x : cat x a.txt 1 b.txt 2
>と<はそれぞれ大小の不等号で置き換えてくださいな
#!/usr/bin/env python import sys from subprocess import * def take_variable(var): # check the syntax of variable (http://www.gnu.org/software/bash/manual/bash.html) # variable ::= (_|[A-z])(_|[A-z]|[0-9])* # variable contained space if len(var.split()) > 1: raise Exception('fail: the variable contained space') # check head if not (var[0].isalpha() or var[0] == '_'): raise Exception('fail: the variable contained wrong character') # check the body of variable b = True i = 0 for c in var[1:]: i += 1 # is variable contained invalid character? if not (c.isalpha() or c.isdigit() or c == '_'): b = False break # no exception if thre are only spaces after variable if not b and not var[i:].isspace(): raise Exception('fail: the variable contained wrong character') elif b: return var[0] else: return var[:i] def parse(var_to_cmds): # check the position of '::' try: pos = var_to_cmds.index('::') except Exception: raise Exception('not exists "::"') var = var_to_cmds[:pos] cmd_str = var_to_cmds[pos+2:] # check the format of variable and commands if var == '': raise Exception('fail: no variable before "::"') elif cmd_str == '': raise Exception('fail: no commands after "::"') return (take_variable(var),cmd_str) if __name__ == '__main__': # parse variable and commands try: var,cmd_str = parse(' '.join(sys.argv[1:])) except Exception, e: print >>sys.stderr, e sys.exit(1) # var -> val val = sys.stdin.read().replace('\n',' ') # mapping and split by ':' again commands = map( (lambda cmd: cmd.replace(' '+var+' ',' '+val+' ')), cmd_str.split(':')) # exec command for cmd in commands: try: # need split for remove spaces check_call(cmd.split()) except Exception,e: # print >>sys.stderr, e sys.exit(1)
本当はfunじゃなくて\(バックスラッシュ)で、:: じゃなくて→にしたかったんだけど、シェルが置き換えちゃうからしかたない
シェルの改造は禁断の手段だし
Go言語の名前の由来について、デマを思いついたので、ちょっと面白いと思った人は広めてほしい。
こんな感じで。
Go言語はブレイク寸前であり、かなりの関心を集めているが、まだ詳しく知られてはいないので、デマを広めるには今が絶好と思う。
こんな感じで返していただきたい。
ロブ・パイクやケン・トンプソンがUTF-8の考案者だということは知ってる?(注:これは本当)
で、彼らがそれを考案するきっかけは、慶應の村井純先生が、ベル研で「日本語」についての講演を
したことだというのは知ってる?(注:これも本当)
http://d.hatena.ne.jp/oraccha/20081004/1223124803
そもそも君だって、ドイツ語とかの第2外国語で1から5ぐらいまでは数えられるんだから、
彼らが出来たって不思議はないだろ?
こんな感じで返していただくのはどうか。
そりゃ、表向きはそうだよ。彼らはGoogleで開発してるんだしさ。
だけどそれは後付けなの。
PHPが 「PHP Hypertext Preprocessor」という、GNUみたいにカッコイイ
再帰的頭字語を由来にしているけれど、元々はPersonal Home Page の略なんだよ。(注:これも本当)
それと同じ。
そもそもケン・トンプソンやロブ・パイクは、C言語やUNIXの父だし、
ノーベル賞やチューリング賞の受賞者をザクザク輩出しているベル研の出身だし、
Pythonのグイド・ヴァン・ロッサムみたいに、何かあったらすぐ他所に行くよ。
(注:グイドはGoogleを辞めて、2013年からDropboxで勤務している)
こういう態度で返していただくのはどうか。
(∩ ゚д゚)アーアーきこえなーい
このデマを、ロブ・パイクやケン・トンプソン自身の耳に入れること。
彼らに後付けで公認してもらえたらなお良し。
100ブクマ以上ついたので、上司に無断で弊社の宣伝をしてみる。
いろいろ怒られたら消します。
大規模開発にも使えるかどうかとIDEが自身で書かれているか、なんて全く関係ないじゃん。
↓
にしたら、C以外は大規模開発で使えないってことになるじゃん。
IDEについても、デスクトップGUIアプリケーションに向いてるかどうか、が重要で、規模は関係ない。
「大規模開発に向いてる」なんていってない。「大規模開発にも使える」といっている。
はっきりいって、世にあふれる軽量言語は大規模開発には使えない。
根拠の一つは、大規模ソフトウェアの代表であるIDEだ。私は、軽量言語の中で主要な開発環境として自身で実装されたIDEが使用されている例を知らない。Python IDELを常用している人は少ないだろうし、Emacs Lispを軽量言語にふくめていいかも疑問だ。PHPでかかれたPHP開発環境があるか? PerlでかかれたPerl開発環境は広く使われているか?
(この点、Visual Studioで開発されているVisual Studioは立派な環境だと思う)
Javaは軽量言語でできることの大部分を同じようにこなせる。そのうえ大規模開発にも使える、といっているのだ。同じように「奴隷向け言語」ともいってない。「奴隷でもつかえる言語」といっている。
誤読されているようなので一部修正
----
http://b.hatena.ne.jp/entry/koduki.hatenablog.com/entry/2014/02/01/192819
こういうJavaの良しあしの話題のときに必ずあらわれる「大規模開発に向いてる」という人たち。
レベルの低い(安い)プログラマに作らせるのに「チェックが厳しいから」「スタイルを強制できるから」向いてるって話ね。
Javaの良さをしぶしぶ認めざるを得ない人たちが悔し紛れに言ってるとしか思えない。
オブジェクト指向らしいコードを書けるプログラマはJavaで書いてもPythonで書いてもオブジェクト指向らしいコードを書けるし、書けないプログラマはJavaで書かせようがRubyで書かせようが書けない。
JavaのIDEや各種チェック機能も「有能なプログラマには無駄な機能で、残念なプログラマ専用」ってわけじゃない。
口汚い人がJavaを「奴隷向け言語」と言っていたのを見たことあるけど、むしろ機械にやらせられる仕事を人間が目をさらのようにしてやらなければならない言語のほうが非人間的だと思う。
「たとえレベルが低くてもとりあえず数を集められる」みたいな言語と関係ない理由ならともかく、言語機能から見たら「レベルを問わないで人海戦術的にプログラマを投入する大規模開発に向いてる」みたいな言説は完全に間違い。
rubyならnokogiri,
pythonならBeautiful Soup,
javascriptならphantomjs
でやってみ。
いきなりscrapyとかrailsとか使うと分けわかんなくなるよ多分。
検索しても出てくるワードがわけわかめでチンプンカンプンなら、分かるようになるまでドットインストール。
これだけ。簡単。
Web上に転がっている情報をプログラミングによって自動で拝借する技術を「スクレイピング」というらしい。
今まで欲しい情報を取得するときはコピーアンドペーストを繰り返していたから、もし「スクレイピング」ができたらすごい嬉しい。
ぼくは阪神タイガースが好きだから、阪神タイガースの情報をスクレイピングできたら楽しそうだと思った。
特に2軍の試合結果をスクレイピングできれば楽しそうだと思った。
だって、将来のスターは2軍で頑張っているからだ。あと、2軍の試合はいつも見れないからだ。
http://hanshintigers.jp/farm/score/score20131004.html
スクレイピングを使えばそれぞれの選手の成績を自動で拝借することができるだろうか。
もし、拝借することができたら毎日の試合結果をグラフにしてみて、2軍選手の調子を見てみたい。
2軍選手の調子が良かったら1軍にあげたほうがいいかもしれないからだ。
あいにく、ぼくには相談できる人がまわりにいない。そもそも友達がいない。友達がいないから阪神タイガースが好きな友達だっていない。
スタメン談義はいつも一人だし、唯一話すバイト先の店長は巨人ファンだ。
何をどうすればスクレイピングができるのか、よくわからない。言語はpythonとかrubyとかruby on railsとかを使うといいらしいことは分かった。
プログラミングの技術はほとんどない。昔授業でhello worldとかif文とかやったけど、もうほとんど忘れちゃった。言語はパスカルとかいうのだった。
もし助言がもらえて、pythonとかrubyとかruby on railsとかを使ってスクレイピングができたら、
みんなに公開したいし、スタメン談義をしたい。公開の仕方はよくわからないし、阪神ファンがいるかわからないけど、したい。
けど、する。
だから、助言がほしい。
大いに同意する。自分はPythonじゃなくCoffeeScriptで実感したけど、
閉じ括弧だけの行なんて不要なんだよ。
かといって「))))」みたいな対応括弧表示を駆使しないと
追えないような閉じ記号の羅列なんて使いたくないし。
こいつで電子国土とか空中写真とかで遊ぼうと思って先人の知恵を借りつつ一所懸命やってみたけど
Traceback (most recent call last):
File "C:\Users\****/.qgis2/python/plugins\openlayers_plugin\openlayers_layer.py", line 109, in draw
self.render(rendererContext)
File "C:\Users\****i/.qgis2/python/plugins\openlayers_plugin\openlayers_layer.py", line 158, in render
for res in self.resolutions():
TypeError: 'NoneType' object is not iterable
って動かない。他のも試したけどダメ。
なんか偉そうに書いてみた。
SFCには頭がおかしいプログラミング言語使いがたくさんいる。特に研究室に入ると、バイトでバリバリ書いている人間や、研究や趣味でライブラリを量産する人間に出会うこともあるだろう。彼らに惑わされてはいけない。最初は彼らの言っていることは一つも理解できないだろう、理解する必要は無い。彼らはプロダクションで安定するかどうかという縛りから自由だ。流行り廃りに敏感で、昨日言ってることと今日言ってることが違う。
これは実際に手を動かして使ってみて好感触かどうかささっと確かめられる人間だからできることで、プログラミングできない人がこれについていこうとしたら間違いなくプログラミングが嫌いになる。
こういう言葉に惑わされるな、コードを書くための勉強をするな、コードを書け。
できる人は概ね、できない人の気持ちがわからない。受動的になるな。積極的に書け。
「プログラミングなんて特殊技能で、少なくとも教養じゃないでしょ..」という認識が横行している今だけのチャンスとも言える。
webプログラミングができると「技術的には簡単だがアイデア一発で作ってみた」もので、ほんのちょっとだけ有名になれる可能性がある。論文を書いて学会に投稿したりニュースになったりするよりも、よっぽどお手軽に(一部での)社会的ステータスを高めることができる(かもしれない)。
↓ こういうのでいい(失礼だが)。
こう言っている人間を見て何を思うだろうか。
「いや少しずつでいいから今やれよ」とか「英語できたらもっと世界ひろがるのに..」とか「大学生なのにそれで恥ずかしくないの」とか思うかもしれない。
知らない世界を知らずにいることは大いなる機会損失である。プログラミングに金はいらない。金はないけど時間はある、時間を大量投入できる最後の機会、大学生である内に学んでおいた方が望ましい。
基本的なスタンスとして、講義ではプログラミングを教えてはくれない。講義に期待するな。プログラミングに限らず、全ての講義は自習への足がかりであり、興味のとっかかりである。実際に意思を持って積極的にコードを書かない限りプログラミングのことは好きになれない。自分で考えながら手を動かしてコードを書かなければ覚えないし、初学者が配られたプリントを写経しても血肉にならない。
「今日から俺は!」という感じでプログラミング講義を受けると爆死は約束された未来である。「腕試ししよう」「これなら楽勝じゃろ」という意気込みで講義を受けると、意外に学ぶことが多い。完全な初学者の域は脱しておいた方が講義は有効的に活用できる。少なくとも、最初の2週間をインストールと環境構築のみで終わらせるスジの悪い講義を取得してはいけない。
また、講師によってはJavaScriptのことをJavaと呼称したり、JavaScriptはLispに比べて読解が平易であるためハッキングを受けやすいと言ったことを平然と言ってのける。選別にあたっては「講義名」と「講師名」を明言した上で「先輩に聞く」「Twitterを活用する」等の手段をとるべきである。十二分に注意されたし。
道具を選ばないのはプロだけである。初学者は多少高くても自分をサポートしてくれる良いマシンを入手すべきである。1行のコードを書くだけでも恐ろしい手数が必要なアーキテクチャを選択するのは愚行だ。
モデルは何でもいい、無理して上位機種を買う必要は無い。お金が余ってるならMacBookProを買えばいいし、勿論一番安いMacBookAirでも全く問題ない。特にweb系のコードを書く際、インターネットで検索して出てくる記事はだいたい「OSがUNIX系であること」を前提としたサンプルである。これをWindowsの開発環境に読み替えるのは、初学者に取ってつらいだろう。
また、Macならばパフォーマンスは多少犠牲になるがwindowsも起動できる。どうしても光学機器が必要になればCNSコンサルタントで外部接続式の光学機器を貸し出してくれる。Macが気に入らなくてもどうせ研究が射程に入る3年生に上がったぐらいのタイミングでPCを買い替えるだろう。バイトして稼いだ金で「俺の考えた最強のマシン」に買い替えればいい。それまではMacを使え。
OSに固有の使い方なんて学ぶ価値はない、覚える価値も無い、操作時間が短縮されるだけだ。「普通の会社はWindowsなんでしょう?」というくだらない理由でWindowsPCを選択肢の第一候補にするな。Windowsを買うなら積極的選択としてWindowsを買え。
SFCにおいて、PCは毎日抱えて通学し、毎日開いて講義を受け、苦楽を共にする相棒だ。消極的に選択するな。
SFCには「共同購入PC」という制度がある、これを利用してはいけない。
もし要件が変更され、Macがラインナップに入れば積極的に利用するべきである。
条件を示す。
見た目に変化が無いと楽しくないだろう、こんなのを実行しても何も楽しくないはずだ。
#include &lt;stdio.h> int main() { int a; a = 1 + 1; printf("%d", a); }
マイナーな言語を選択してはいけない。「ライトウェイト言語」と呼ばれるくくりから選択肢するのがいいだろう、以下のようなものがある。
中でもjavascriptとrubyは推薦できる、SFCでも書いている人間は多い。
phpとperlはおすすめできない。ドキュメントは多いが、不慣れであればロジック以外に割かれる労力が非常に多い。pythonは日本語のドキュメントが少ないため最初はつらいだろう。
最初にjavascriptをやるのは理に適っている。index.htmlというファイルを作り、scriptタグの中にコードを書き、ブラウザでindex.htmlを開けばもう実行されている。web上のドキュメント量も豊富だ。
rubyも推薦できるが、少なくとも「自分でHTTPサーバを立てる」という言葉にピンと来るようになってから使い始めた方がいいだろう。きっと何をしていいかわからないはずだ。
他にもProcessing(http://processing.org)などが推薦できる。ダウンロードに時間がかかるだけでインストール作業は必要ない。こちらに関しては旧プロダクト名である「proce55ing」をキーワードに検索すると記事が引っかかりやすいという暗黙のルールがあった、今はどうだか知らない。
最近ではnode.jsの採用事例も増えてきた(他に比べれば圧倒的少数、増加傾向にあるという意味)。クライアントでもサーバでも活躍できるjsは学習コストパフォーマンスが高いと思われる。
書ける言語は一つにしぼってはいけない。なるべくたくさんの言語を使ってみよ。ブログ記事を読みあさり、「その言語は何が得意なのか」調査しろ。不得意なことをその言語にやらせるな。
下記のような上達ストーリーが考えられる。
例えばpythonは音響処理や数学計算が得意だったりする。そういった特徴を徐々につかみながら書ける言語の種類を増やし、好きな言語を見つけて好きな言語のことをもっと好きになればいい。
自分が好きな言語のことを胸を張って自慢できるようになったなら、あなたは既に初学者ではない。
人に聞くとvimやemacsを推薦されるかもしれない。もしそれを使ったことが無いなら、あるいは「プラグインの導入方法がわからない」なら、やめろ。Terminalを開かなくても書けるGUIアプリのテキストエディタを使え。
具体的にはSublimeText(http://www.sublimetext.com/3)を使うのがよい、無料である。
ライセンスが必要だが、起動時に「買ってね!」というダイアログが出続けるだけで無料で使用し続けられる。信頼できるエディタだと思ったら買えばいい。
SublimeText3にPackageControlというものを導入すると、標準で備わっていない機能を拡張できるようになる。こちらのブログ(http://p.tl/Ev7b)の「インストール手順」セクションのみを実行する。たとえば「Jadeという言語を、文法に従って色付けしてほしい(SyntaxColoring)が、その機能が無い」という時に、「Jade用プラグイン」をSublimeText内で検索し、インストールすることができる。
もし使い方がわからないければ、回りにいる「プログラミングができる優しい人」に上の記事を見せ「インストールしてくれませんか?」と頼んでみろ。きっと戸惑いながらも正しい操作をしてくれるだろう、一挙手一投足を見逃さず学べ。
エロ画像を集め続けるツールが欲しいとする。どうやったらいいか考える。クライアントjsだけでは限界が来る。rubyなど別の言語を試すステップを踏む。
http://www.slideshare.net/shokai/ss-26387303
プログラマ同士じゃないと伝わりにくい用語が頻発すると思う。逐一人に聞いていてはラチが開かない。人に聞くな、適当に読み飛ばせ。
ブログ記事は本ではない、それを読解しなければならない理由はない。適当にはてブでもつけといて、次の記事を読め。たくさん読めば共通項が見えるだろう、コードが書けるようになるに従い読めるようになるだろう。
みんなが息をするようにコード書いてさ、みんなでしあわせになろうよ。
この間、AmazonでKindle Fire HDXの7インチのヤツが5000円引きだったからホイホイ釣られて買った
そのうちKindle Fire端末は買うつもりだったからちょうど良かった、と思ってた
Amazonプライムの会員だったら毎月1冊無料でKindle本が読めるし
Android互換だからマイナーなアプリはなくても、有名どころなら当然ストアにあるだろうし
いいことづくめじゃん!
そう、思ってた
でも実際は違ってた
オーナー ライブラリーのメニューからカテゴリまで絞り込んで、
あとはページを送ってシーケンシャルに自分で探さなければいけないとかなんなの、ばかなの?
あと、カテゴリ分けもクソ
「IT・コンピュータ」のサブジャンルの「プログラミング」に1冊しか本がない
あの・・・親ジャンルの「IT・コンピュータ」にはScalaだのJavaScriptだのPythonだのという文字の含まれたタイトルが結構見えるんだけど・・・?
つーか、「IT・コンピュータ」カテゴリの最初に出てくるのがちきりん日記の育て方とかいうどう考えても関係なさそうな本なのもどうなの
なんか自費出版本の数も以上に多いし
http://www.amazon.co.jp/gp/feature.html/?ie=UTF8&docId=3077716126
まあ、ここまではいい、だいたいそんな気はしてた
でもKindleではGooglePlayはつかえない
よしんばAmazonになくても、はてなのことだからapkファイルをダウンロードできる様にくらいしてくれてると思ってた
でもなかった
これは完全に予想外だった
かくして、年末年始はごろごろしながらKindle端末で本読んだり、はてブでgdgdしたりするかー、という私の予定は崩れ去った
作ったサイトはこちら、
レスポンシブデザインなので、ブラウザを縮めたり、スマートフォンから見てもそれなりのデザインで
見れると思います。(まだ、ところどころ表示が崩れるかも)
おじさんというタイトルですが、まだ30代前半の男です。RubyとかPythonとかをがっつりやっている世代よりたぶん上なので、
おじさんとしました。
普段は組み込みOSを販売している会社でサポートエンジニアとして働いています。
なので、C言語についてはある程度理解でき、ハードウェアやCPU(ARM,Intel,PPC,SH4 etc)の仕組みについては
普通の人より詳しかったりします。また、昔勤めていた会社で家電製品の中のプログラムをC言語で3年間程書いた経験があるので、
プログラミングについては全くの素人ではありません。あくまでwebプログラミング(php,ruby,python)が、という話になります。
他の「素人が作りました」を匿名ダイアリーで見ていて、自分も何か作りたいな~って思っていました。
で、どうしようどうしようって考えってた時に、”あれ、オレは毎日コンビニでぷりん買ってないか?”って事に気づき、
おいしいプリンの情報がどっかにまとめったらいいなって思い、ぷりんデーターベースを作ろうと思いました。
一連の「素人が作りました」でTwitterbootstrapを使っている方が多くみられたのですが、そのまま使うのはなんだかな~だったので、
Flat UI というTwitterbootstrapベースのモノを利用しました。
これはWindows phoneのデザインに採用されているようなFlatなデザインをBootstrap形式で作成できてしまうものです。
はじめはRubyでやろうとしたけれども、windows上でテスト環境を作るのが難しく途中で断念し、次に候補にしていたpythonは
なんか情報が少なそうだなって思ってやっぱり途中で断念し。最終的にphpになりました。
それで、wordpress使って簡単に会員制のサイト作っちゃえって思ってたら、wordpress動かしたらよく分からないエラーが出て、
1時間程格闘して解決したんだけど、この事に疲れて、やっぱり1から自分でつくらないとダメだなと思い、
wordpressは諦めて、ログイン機能、ユーザ管理などもphpで自作することにした。
いいのか、悪いのか、安いのか、高いのか、よくわからない。
ぷりんデーターベースを作る際に参考にした”ドットインストール”というサイトのレッスンが、
phpとMySQLが必ずセットだったので、これにするしかなかった。ほかのDBはよくわからない。
http://dotinstall.com/lessons/tw_connect_php_v2
http://dotinstall.com/lessons/poll_php_v2
http://dotinstall.com/lessons/basic_sakura_vps
JavaScriptで作る残り文字数チェッカー
http://dotinstall.com/lessons/char_checker_js_v2
http://dotinstall.com/lessons/upload_image_php
【旧版】Twitter Bootstrap 2.1入門
http://dotinstall.com/lessons/basic_twitter_bootstrap_v3
http://dotinstall.com/lessons/sns_php_v2
PHP入門(基本編)
http://dotinstall.com/lessons/basic_php_beginner
http://dotinstall.com/lessons/paging_php_v2
【旧版】PHPで作る「簡易掲示版」
http://dotinstall.com/lessons/bbs_php
ブログを作る
http://www.php.net/manual/ja/manual.php
http://getbootstrap.com/getting-started/
Flat UIはBootstrapの拡張ですが、マニュアルが容易されていないので、
実際に下記ページをソースコード表示させたり、cssファイルを見てどんな定義をしているのかを確認しました。
http://designmodo.github.io/Flat-UI/
Responsive Checker
全部合わせて3ヶ月程で作ったんですが、かなり大変だった。
phpのプログラミング部分はよくわからないなりに、なんとかなるなっとは思ったのですが、
デザイン面は本当によく分からなかった。PC上ではちゃんと表示されているけど、ウィンドウサイズを縮めると
グチャグチャになったり、全然レスポンシブにならないじゃないかって事が多々あった。
あと、Flat-UIが個人が作成したものなので、たぶんまだ全然揉まれていないCSSなんだなとも思った。
今まで、デザインの仕事ってプログラマより楽なのかと思ってたけど、全然楽じゃないですね。。
ごめんなさい。
本当は気楽に作ったわけじゃなく、現状の単調な毎日を変えたいと思って作りました。
これをきっかけにいろんなものを作ってフリーで仕事が取れるといいな。。
このサービスを作っている時に、自分を励ますために聞いていた歌です。
Mr.Children「横断歩道を渡る人たち」
http://www.youtube.com/watch?v=6yTYBGM1KEk
ずっとPHP、Javaをいじっていて、はじめてPythonをさわったとき、涙がでたね。コードが圧倒的にシンプルで。結局生産性のボルトネックになるのは、コードの可読性だと思う。
唯一PHPが優れているのは、「みんな知っている」ということ。だたそれだけ。
自分はJavaからPHPに入ったので、最初はとにかくクソな言語だと思っていた。
Copy On Writeという謎仕様なのに加え、すべての配列が常に「順序付きマップ」という謎なものになっている。ただ単にマップ(連想配列)を使いたいだけの場合でも、なぜが挿入順でキーが順序付けされているという仕様で、内部でどんだけオーバーヘッドがあるんだろうと考えると、それだけでストレスが溜まったものだ。
あと、何も宣言せず、$array['key1']['key2'] = 1としただけで、要素が1の配列が2つ作られる。これも気持ち悪い。この仕様のせいで、どれだけ見つけづらいバグが誘発されているかと思うと、それだけで痒くなった。
そんな風に思いながら、2年近く仕事をして、そこそこ大規模なシステムを一人で書けるようになった。それでも、PHPをやっている引け目のようなものはなくならなかった。
ただ、そんな思いのまま「意識が高い」系のプログラマが集まる会社に移り、RubyだとかPythonだとかScalaだとかが書けるようになった上で、あらためてPHPを見ると、その仕様が優れていることを痛感させられる。同じことを書こうとしたときの行数が圧倒的に少ないのだ。配列についてもたしかに、オーバーヘッドはあるが、実際にはパフォーマンスに影響することは少なく、それを通して得られる開発効率は半端じゃない。他の言語だといくつものライブラリを介して可能になることが、単にサーバにファイルを置くだけで可能になるというのは、特に小規模なプロジェクトでは生産性の高さに直結する。
もちろん、プロセス/スレッド/データ共有の仕組みが前時代的で、パフォーマンス効率は高くない。言語仕様が、ノンブロッキングな処理に向いていないなど、用途によっては致命的な欠点もないわけではない。ただ、きちんと言語の特性を理解するレベルで使ったことがないのに、仕様的に他の言語と変わっているところを挙げて、「PHPを使うのはレベルの低いエンジニア」というのは、そろそろ終わりにした方が良いと思う。
あと、話は変わるが「意識が高い系エンジニア」は、システムを開発する上で人件費や採用コストの問題をあまり考えていないのではないかと思う。たとえば、ビジネスが急に大きくなって、取り急ぎ100人エンジニアを雇おうとなったとき、PHPならとりあえず書ける人間をかき集めやすい。RubyやPythonで同じことをやると採用にかかる時間が大幅に伸びるか、人件費が大幅にアップするかになるだろう。これは、一緒に働くエンジニアを所与の条件として見るか、お金を払って雇うべきダイナミックなものとして見るかの違うじゃないかと思う。
※参考指標
カテゴリ別 | 2006 | 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 |
---|---|---|---|---|---|---|---|---|
合計 | 2users | 70users | 176users | 289users | 224users | 199users | 140users | 594users |
暮らし | 1 | 33 | 68 | 147 | 133 | 83 | 34 | 317 |
テクノロジー | 1 | 15 | 38 | 47 | 26 | 49 | 39 | 92 |
世の中 | 0 | 11 | 21 | 31 | 22 | 27 | 21 | 64 |
エンタメ | 0 | 2 | 6 | 9 | 6 | 3 | 34 | 31 |
アニメとゲーム | 0 | 3 | 11 | 12 | 7 | 15 | 17 | 26 |
おもしろ | 0 | 3 | 25 | 10 | 9 | 6 | 6 | 25 |
学び | 0 | 1 | 6 | 17 | 11 | 11 | 4 | 25 |
政治と経済 | 0 | 2 | 1 | 16 | 10 | 5 | 16 | 14 |