Private content!This content has been marked as private by the uploader.
http://martinfowler.com/bliki/Closure.html 動的言語に興味がでてくると、 クロージャやブロックと呼ばれる概念に出会うと思います。 C/C++/Java/C# などクロージャを持たない言語をご使用の方は、 どういったものなのかご存知ないかもしれません。 ここでは簡単にクロージャについて説明します。 クロージャを持った素晴らしい言語を使ったことある方にとっては、 あまり面白くない話かもしれません。 クロージャは長年使用されてきました。 私が最初に出会ったのは、おそらく Smalltalk だったと思います。 Smalltalk ではブロックと呼んでいました。 Lisp ではクロージャを多用しています。 Ruby でもクロージャが提供されています――多くの rubyist がスクリプト言語に Ruby を選ぶのはこのためです。 基本的にクロージャとは、ブ
ソフトウェアシステムはほぼ間違いなく、汚く滅茶苦茶になってしまうことに気づいたからです。 最初はプログラマの心のなかでけがれのない水晶のように輝いていた設計が、時間が経つことで劣化し、悪くなった肉のように腐敗していきます。 1年前に構築した、こぢんまりした出来の良いシステムが、翌年には関数や変数が絡まり合ったひどい泥沼に変わります。 いったい何が起きているのでしょう。 「レガシーコード改善ガイド」まえがき 大きなシステムに携わったことがあるなら、痛いほど気持ちがわかると思う。 私はこの問題を、プログラマのレベルが低いプロジェクトにのみ起こる現象だと思っていたが、どうやらそうではないらしい。 そんな簡単な問題では無かった。 第2章 リファクタリングの原則 ここではリファクタリングの定義にはじまり、行う理由、いつ行うべきか、などが示される。 中でも、私はこの文が気に入っている。これは冒頭の問題
ファウラーの言わずと知れた名著だけど、私は15章構成のうちカタログ部分(第5章〜第12章)を今まで読んでいなかった。 理由としては、やはり古いこと、そんなに難しい内容では無いこと、リファクタリングの思想という意味では理解していたこと。 ホントに古い本なので、もういいかなと思っていたんだけど、少し読み直したらやっぱり一度は全部書くべきだった。 リファクタリングの思想と同じくらい、カタログにある各種技術は重要だった。 それに「おすすめの本は?」と聞かれたときに、とりあえずこれを挙げることは多くて、そのくせ完読してないのは質が悪いというのもある。 ということで、今回は「はじめに」と「第1章」 はじめに ここでは本書の説明と、リファクタリングについての話が少し。 ・リファクタリングはリスクが高いのでやみくもに行ってはいけないこと。 ・手順を守り、体系的に行うこと。 ・具体的には「1度に1ステップず
2008年02月04日07:00 カテゴリLightweight Languages λ Calculus - まずは遅延評価から うーん、まずY Combinatorというのはおじさんたちが悪かったかな。ギター習いたてでいきなりFの音を出すようなもんだから。 Haskell のリストと遅延評価が少し分かった - IT戦記 Y コンビネータって何? - IT戦記 まずは、遅延評価についてきちんとおさらいしておこう。 慌てるな、ループは急に止まらない まずは、以下の式を考えてみる。 (function(a, b, c){ return a ? b : c; })(true, 1, 1+1); 実行してみると、1となるはずだ。しかしここで重要なのはこのことじゃない。後ろの1+1が実行されるかだ。このことはどうやって確認したらよいだろうか。以下のようにしてみればいいはずだ。 var ELSE =
こんにちはこんにちは ! ! はまちや2です! 今日からぼくと一緒にWebプログラミングのセキュリティについて、ちょっぴり勉強してみませんか!今回はHTTPがどんなやりとりをしているのか、簡単におさらいしてみましょう!
プログラマ1人で完成できる仕事に、2人のプログラマを投入して、直感的に判断してペアプログラミングを拒否する人がいます。これには大きな間違いとリスクが潜んでいます。ペアプログラミングに対する真実を理解しましょう。 ペアプログラミングはコードを書く時間が15%増える 1999年にユタ大学でおこなわれた実験によれば、設計の時間を別にして、ソロプログラミングに対してペアプログラミングを実施したペアは平均して15%多く、プログラムを書く時間に費やしました。 では、なぜペアプログラミングを選択するのか? 将来的なテストと現場のリソース要求を減少させるためです。一般的なシステムにバグが見つかると業界のデータでは、33時間から88時間を修正に費やすそうです。これが、開発期間中に欠陥を修正すると0.5時間から88時間の時間を節約できることになるのです。したがって、ペアプログラミングは寿命の長いソフトウェアほ
ちょっと興味深いエントリが目に留まりました。「プログラミングへのこだわり」を方向づける: 設計者の発言基本的に、この方自身もプログラマーや開発者をされているようですし、他のエントリを読んでも「プログラマーの地位向上をすべき」ということで、私にとっても非常に共感することをおっしゃっているのです。それでも、ちょっとこのエントリの内容については疑問に思うところがあったので、勝手ながら私の意見を書かせていただきたいと思います。 業務システムの生産性や保守性を高めるための基本は「コードを1行でも減らす」である。なぜなら、コーディングとこれにともなうテスティングこそが、開発作業の中でもっとも人手のかかる作業だからだ。個別案件においては、良いコードだろうが悪いコードだろうが少なければ少ないほどよい。 これは、まさにおっしゃる通りですね。もちろん、可読性ということもあるため、厳密には最少のコードが最良とい
若い頃にはよく陥る過ちだと思う。 最近やってしまったので自戒エントリ。 1.テストでバグ発見。 2.共通で使っている様々な計算をするクラスのメソッドから期待した値が戻ってこない。 3.どう考えてもこの(自分以外が作った)メソッドが業務上の例外を考慮してないだろ(履歴を見ると何度も問題があったモンスターメソッドだ)。 4.読み辛いながらも、そのメソッドのバグを探す。 5.どうもバグってないように見えるので、そのメソッドが使っている定数まで疑いだす(どんだけだよ。) 6.よく見たら私が書いたメソッドの呼び出し方が悪かった(結論) この歳になってこれはないよ。。。 でも「今更やってしまった」と実感できたのは良かった。 今後、バグを見つけたら、自分のコードを徹底的に疑う。 以下余談。 テストのコストが高いのがネックだと感じる。 数秒で終わるUTのコードがあればぐるぐるまわすんだけど、テストコードを
先日から「Rubyベストプラクティス」を読んでいる。 これは確かに中級者向けで、左手に「プログラミング言語Ruby」を開きつつ読んでいる。(読んでみたら本書内でも勧められていた。) 「対象読者」にある下記の記述は本気である。「メタプログラミングRuby」とは違って(「メタプログラミングRuby」は「自称初心者」こそ読むべき - holyppの日記)、初心者には辛い。私も辛い。 本書はRuby初心者を想定して書かれたものではない。プログラミングを始めたばかりの方にはあまり役に立たないだろう。 (中略) 少なくとも中級レベルの経験があれば、本書を読み進めていくのは楽しいはずだ。必要に応じて調べられるよう、お気に入りの参考書を手元に置いておくとよいだろう。 『プログラミング言語Ruby』(オライリー・ジャパン)か、『プログラミングRuby第2版言語編、ライブラリ編』(オーム社)があればよいだろう
どこかで、本書は「Rubyの中級者向け」であると聞いたことがある。 私にはまだ早いかな、と思いながらも読み始めたら、P33に「想定読者」が書いてあった。 そこに自己診断がある。 自分の能力に自信がない場合は、以下のような簡単な自己診断をしてみるとよい。 配列を繰り返すのに、あなたならどのようなコードを書くだろうか? この答えはどんなRuby入門書にも必ず書いてある。つまり入門書を何か一冊でも読んでいれば、本書の「想定読者」に入っている。 もし「難しそうだから読んでない」と敬遠していたなら今すぐ読んで大丈夫、このタイトルに少しでも興味を惹かれるならば、十分に資格がある。 内容も「自称初心者」から見て、ちょうど「そうそう、こういうことが知りたかったんだよ」というものが多い。 例えば、 P46 インスタンス変数はオブジェクトに住んでいる。メソッドはクラスに住んでいる。 知っていれば単純なことだが
防御的プログラミングに関して、いくつか記事を書いています。 防御的プログラミング 防御的プログラミングとテスト駆動開発 防御的プログラミングしない後ろ向きの理由 防御的プログラミングしない後ろ向きの理由(2) 防御的プログラミングとカバレッジ 防御的にプログラミングするというのは、公開APIの仕様にその内容を反映するということです。つまり、不正なパラメータが渡された時に、どのように振る舞うか(どのような例外をスローするかとか)を仕様書に記述する訳です。しかし、開発組織として防御的プログラミングの重要性を認識していない場合には、次のようなことが起きています。 開発者の多くが言葉としての「防御的プログラミング」を聞いたこともない。 APIの仕様書には正常な場合の処理内容しか書かれておらず、不正なパラメータが渡された場合の振る舞いが何も記述されていない。 結果として、APIの実装コードでは不正パ
2010年09月03日05:30 カテゴリLightweight LanguagesMath Algorithm - 0と1を次々と返す簡単なお仕事 ごもっとも。 0と1を次々返す方法 - a2c.get.diary TrueだったらFalseで、FalseだったらTrueにしたい。 なんかそんなことそこかしこで必要で、その為の便利なものが あるのかなぁと思ったんだけど無いぽい Closure 本来は一番おすすめなのだが… JavaScript ()が煩わしいが、perlやrubyよりは自然。 #!/usr/bin/js var flipflop = function(p){ p = !p; return function(){ return p = !p; }; }; var fl = flipflop(); console.log(fl()); console.log(fl()); c
「Java入門ブックガイド(入門編)よりよき入門書と出会うために」を読んで。 第一印象として、よりよきJava入門ブックガイドに出会う必要があるなということ。 コマンドラインでは慣れ親しめない サブタイトルに「慣れ親しむことが上達の秘訣」とあるけども、コマンドラインで慣れ親しむのは難しいと思います。 「慣れ親しむことが上達の秘訣」が正しいのであれば、IDEで慣れ親しんだほうが上達するのではないでしょうか? 現実問題として、書籍を買って勉強する人は強制されて勉強するわけではないです。自分の時間をやりくりして入門書を読んでいます。 そして、まだプログラムの面白さを知りません。 コマンドラインでコンパイルエラーが出たとき、じっくりとそのエラーを読み解くのではなく、そこでくじけてやめる可能性が高いと思われます。 それよりは、IDEでエラーを入力段階で修正しつつ進むほうがいいと思います。 javac
プログラミング言語経験を列挙する場合、以下の指標を資料内に併記してください 付記例) Perl (5), Python (4), C (3), C++ (2) レベル5 マスターレベル。拡張ライブラリを記述できるだけでなく、言語の内部仕様、処理系の実装等についても明るい レベル4 問題なく日常的に利用できるレベル。言語を使うだけでなく、その言語のライブラリを作ったり、フレームワークを作ることもできる レベル3 リファレンスがなくても任意の処理が記述できるレベル レベル2 リファレンス本があれば利用できるレベル レベル1 授業などで触れたことがある程度。日常的に利用できるわけではない はてなサマーインターン2010 はてブ経由ではてなインターンシップの募集要項を見ながら,まず「レベル3」の壁が高すぎだなぁと言う感想を抱きました.私が自分の中で最も「書ける」と思っているプログラミング言語は C
いまさら聞けないiPhone/iPadアプリの作り方の基礎:SDKで始めるiPad/iPhoneアプリ開発の勘所(1)(1/4 ページ) 初めてiPhone/iPadアプリ開発に挑戦する人が、迷わず短時間でアプリを作れるように、数多くの情報の中から要点をグっと絞った開発の勘所を紹介する入門連載です 迷わず短時間でiPhone/iPadアプリを作れるように 皆さんのお気に入りのiPhone/iPadアプリは何でしょうか。筆者は、Googleカレンダーと同期してくれるスケジュール管理アプリがお気に入りです。いまでは目的のアプリを探すのも大変なほど、日々多くのiPhone/iPadアプリが登場しています。 6月8日にはiPhone 4の発表があり、マルチタスクやモバイル広告ネットワーク、ゲーム開発など、iPhone OS改め、iOS 4で実現できる機能がたくさん追加され、さらに魅力的になりました
なんかVelocityもJSPもスクリプト言語より遅いという事実は、Java屋さんはあんまり知らなかったみたいだね。しかも、遅い原因の考察が的外ればかりで笑ってしまう。 「Javaの文字列操作は遅いから」とか「UTF-16の変換に時間がかかるから」とか、そんなのまるで関係ないですから。Javaの文字列操作は十分速いし、UTF-16の変換も主要因ではない。 #つうかさ、「Javaの文字列操作は遅い」とか、Javaに対して失礼だろ。 VeocityやJSPが遅いのは、単に動的な独自言語を導入したから。はっきりいって、これはアーキテクチャ上の間違った選択。せっかくJavaが静的であるのにその特性を利用せず、わざわざ動的言語を導入しているのだから、何考えてんだろうと思う。いつもJava屋さんが主張しているような、「コンパイル時にエラーを発見できる」「IDEでの補完が効きやすい」「リファクタリングが
まずは次の表をご覧あれ。これはプログラミング言語のベンチマークとして有名な Computer Language Benchmarks Game のベンチマーク結果。上にいくほど高速で、下に行くほど遅い言語になる。 これを見れば、最速な言語は C/C++ であり、Java や Haskell や OCaml といった静的な言語は軒並み上位に登場する。これに対し、Ruby や Python や PHP といったスクリプトは全部下のほう (つまり遅い)。その速度差は非常に大きく、このベンチマークで見ると Python3 や Ruby1.9 は C/C++ の約50倍から60倍遅く、Perl は約90倍、PHP にいたっては約130倍遅いことになる。 (ちなみに JIT つきの Lua が驚異的に高速なのが目をひく。この結果が本当だとしたら、言語の速度に大きく関係するのは動的か静的かではなく、どれ
どれほど優秀なコンサルタントに要件定義を策定してもらったとしても、どれほど時間を掛けて事前に仕様を策定していても、 開発中に変更や追加が発生するのはもはや常識です。その度にあらゆる修正が必要になるため、リミットが厳しければ厳しいほど 開発チームに負荷が掛かります。 特に大規模開発の場合、業界標準と盲目的に信じられているウォーターフォールはスケジュールや予算組みがしやすいなどのメリットがありますが、 事前の仕様策定に時間が掛かり、そこから開発に入るため恒常的に発生する仕様変更や追加によって要件定義まで戻って作業をし直す必要があるなど 多くの弊害があります。 また、アジャイルで組み立てたとしてもフロントエンドからバックエンドまでを全て修正する必要があるため、 場合によってはウォーターフォールよりも時間が掛かる場合もあります。 これ以外にも様々な制作手法が存在しますが、現代のIT業界のスピードに
株式会社ジーワンシステムの代表取締役。 新しいものを生み出して世の中をあっといわせたい。イノベーションってやつ起こせたらいいな。 炎上したので、論点を整理しておく。 1.業務系では効率がトレードオフできない必要条件 業務系の職務では、「効率を求めること」がトレードオフしてはいけない必要条件です(十分条件ではない)。医者でいうならば、「命・健康」と同じ、トレードオフしてはいけない必要条件です。 効率が必要条件にならない職業もあるけれど混同してはいけない。 2.SQLはオブジェクト指向言語の数十倍の効率 オブジェクト指向言語を使い切るのと、全部staticで宣言してしまうような使い方と比べても、効率は数十%も変わらない。 SQLとオブジェクト指向言語を比べたら、数百~数千%の差が付く。 言語や手法を考えるとき、慣れてない人はできないから無限大の工数が掛かる。ですから、できない人を対象に比べても
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く