カテゴリー別アーカイブ: プログラミング

Ruby on Rails勉強してますし、CakePHP勉強してますし。

今すぐ辞めて欲しい、「Ruby on Rails勉強してます」「CakePHP勉強してます」というエントリーもある。若者がWebアプリケーションを開発するにあたってrailsやcakeから入るのは逆に遠回りだという理由で全力で否定したいが、まあ、本人がやりたいって言うんならいいんじゃないかなぁと思う。ただし、お客さんの要望を事細かくみたそうとした時にframeworkの仕組みを知らないと手が出せないとなったら、結局はフレームワークの構造やスクリプトの言語仕様ひいてはプログラムそのものやアルゴリズム(解法)ひいてはコンピュータ科学の基本が分かっていないとお話にならないことがわかって勉強をはじめればいい。

でも、(その要求はフレームワークでは実装できませんから)できません、ということと、(技術的には他のプログラムやアルゴリズムを組み合わせればできるけど僕には時間や能力がないから)できません、ということ、ずいぶん差があるということがわからないままなのは、まずい。frameworkで効率よくできることはあるが、frameworkでしかできないことを考えたら、それはframeworkにおんぶにだっこ。単純で便利な世界でしか生きられないframeworkの温室育ちのエンジニアは「何か会った時にゼロからつくりだす」ことができないということになってしまう。そのことのまずさを正しく理解できなくなってしまうのが問題だ。

…ということをperl最高でcなんかいらねー.netあるからvb6ランタイムくそとか思ったことがある私も別にframework病とではないにせよ同じ原理の「便利病」に掛っていることを完全に自覚できていない。そのため言語とはなにかアセンブラとは?機械語とは?CPUとはlinux/unixとは?を問いただして深めていくことが急務である。(自戒をこめて。

【書籍】わかりやすいJavaがどうでもいい。

『わかりやすいJava』という本がお勧めだと言っているエンジニアがいたが、
これの読者はどう考えても「手続き型言語を1つも習得していない学生さん」向けだろう。

これをC言語のエンジニア/プログラマに渡したらはったおされるに違いない。
Javaの教科書というより、Cの教科書課と思ったくらい、基本文法へのウェイトが高いということ。

継承、オーバーライド、オーバロード、ポリモルフィズム、とか、そのあたりのオブジェクト指向に必要な特性
(もちろん、これらはJavaのオブジェクト指向というか、Javaに限らずオブジェクト指向の1特性に過ぎないが、)
には、ごくわずかにしか触れていない。そういう意味では、Javaで学ぶデザインパターンみたな本を買わないとダメなんだろうなと思った。

--

Java言語で学ぶデザインパターン。結城浩氏は個人的に謎の人物であまり好きじゃないんだけど、
というか、Perlや数学ですごい人だと思っていたんだけどJavaも使えちゃうなんてすごいな。

あと気になるデザインパターンの本としては下記が挙げられる。

他には、網羅性はなく、いくつかのデザインパターンをピックアップして紹介する本だが、
導入にはよさそう。このシリーズの本は、分厚い割には軽くて、実用性がちょっと薄いように感じており、
私は買ったことがないんだけど、デザインパターンに関しては概念レベルゆえに、こういった図解図書がよさげ。

無論、デザインパターンを提唱するGofの原著として、
オブジェクト指向における再利用のためのデザインパターンは外せない。
邦訳がちょっと残念らしいので、英語が読める人は迷わず英語の方を。

どうでもいいけど、結城浩のJava本は、オブジェクトパターンのデザイン(表紙)をパクったのだろうか?

結城浩の方が翡翠でGofの方はヒエログリフ?まあ、どうでもいいや、。

オリジナリティは多くの場合は悪である。

あんまり知られていないが、プログラミング能力を客観的に評価する場合、もっとも無難な軸になるのは、簡潔に短く構造化して書くことなどと言うことができるわけだが、、、これ早い話、「一般的で無難なコードを書くことができる」ということだ。(これに対して、一番やってはいけないのは「オリジナリティのあるコード」を書くこと。クセがあるコードという意味になり忌諱される。奇を衒う必要はない。新しい(処理効率の高い)アルゴリズムを考え出したのではない限り、コードのオリジナリティとは可読性を下げる害にしかないらない。)

--

「一般的で無難なコードがいい」ということが正しいかどうか?常識を疑うことにこそ自分で思考する価値があると言う人がいる。

結果としてオープンソースは有用だ。人の目にさらされた方が処理プロセスそのものがセキュアになる。バグが減る。バグも誰かが直してくれる。パブリックにさらされて残ったコードは洗練されて抽象化されたお手本になる。ことプログラミング/コードに限らず、自然言語もそうなのではないだろうか。いや、人の思考とはそもそもそういうものではないだろうか。オリジナリティは多くの場合は悪である。

プログラミングにおける様々な変数名名記述法

スクリプトを作成するにあたってよく使われる3種類の記述法を説明する。

camelCase記法

camel(らくだ)のように初めの単語は短く、後に続く単語を大文字にして連結する方法。
オブジェクト名やクラス名に用いられることが多い。

(例:getMonthDate)

Pascal記法

初めの単語を大文字にする。

(例:SubclassNamed)

アンダースコア記法

単語をアンダースコアで区切る方法。

(例:menu_list_id)

※どれも一長一短あると言えばあるし、見やすければどれでもいいのではないかと思う。