2013年03月27日の日記

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あたりでイプシロン デルタ論法を見てください。

FPSエンジン

国産で作れないのは解るけど、エンジン買ってきて国産風味に味付けしたFPSTPSすら出せないってどゆこと?

そんなん出来ないのか、売れないからやらないのかどっち?

http://anond.hatelabo.jp/20130326193638

配偶者を大切にしていることは大変すばらしい事です。嫁さんを大切に。

まあ、元カノ感謝している割には自分の決めつけで良く知りもしない相手を見下したり、外見に勝ち負けをつけたりする価値観性格はちっともお変わりで無いようですけど。

http://anond.hatelabo.jp/20130327012052

皆本当に「定年後の生活のため」に節約やら安定志向やらになってるの?

にわかに信じられん。そうじゃない人いっぱいいると思うけど。

本当に長生きしたいのか

なんで人は長生きしたがるのだろう。

ちょっとでも長生きできるように薬を開発する、制度を作る。

地球上に少しでも人類を反映させるためか。

そりゃあ寿命を短くするための研究はないから当然なんだけど。

でも本当に長生きしたほうが幸せなのかな。

生きたくても生きられない人は世界中にたくさんいる。でも、この豊かな、とりあえず死なずに生きられる日本ではどうか。

まり、定年後もちゃんとご飯食べていくために、若くからせっせと節約し、安定を求める。

着地点がぐらついているから今の足元を見ていられない。

未来自分を守るために今の自分犠牲にする。そういうものである

うーん。

もう少し早く死ぬと分かっていれば、もっと今を生きられるんじゃないかな。

挑戦して、やりたいことを恐れずにできないかな。

すぐ死ぬことを焦っても、みんなが精一杯好きに生きれる方が幸せなんじゃないかと思ってしまう。

論理的な反論をする余地は大きいと思うけど直感的にはありえると思うんだよ。

http://anond.hatelabo.jp/20130326101714

→入門者にもなれない人間が、そのままズルズル残って役に立った例は見たこと無いんだよね~

それはあなたが育てられないからだし、育てられないのはあなた能力が低いからだよ。

実際の現場はいくらコードをかけても、能力の低い人を育てたり上手く使えない人は役立たずだよ。

まあ学生さんなんだろ?プログラムの知識以外もちゃんと身につけないと実際の仕事では行き詰まるぞ。

http://anond.hatelabo.jp/20130327003436

別にコストが小さくたって、よい会社ベネフィットをたくさん提供すれば転職されないよ、ということ。

flyawayのWindowsコマンドライン版のエラー修正

flyway.cmdの"Columns"を"桁数"に変更。ついでに改行コードも直すと吉。

for /F "usebackq tokens=2* delims=: " %%W in (`mode con ^| findstr 桁数`) do set CONSOLE_WIDTH=%%W

あほーっ。

今、オナニーをするか

明日風俗に行くか

それが問題だ

転職コストを小さく感じるような人が転職市場には多い、ということ

罵倒語

罵倒語ってただのノイズだよね。

この世界からまったく必要がないと思う。

http://anond.hatelabo.jp/20130327002247

それはそうだけど。

そうやって簡単に転職されてしまうようなクソ会社がどんどん潰れれば全体が健全になると思う。

http://anond.hatelabo.jp/20130327001015

写経」とか表現するから誤解を招くのであって、

コードを読み、理解し、自然言語仕様に直し、その仕様だけを見て自分で実装してみる」とか言ったほうがいいと思う。

転職市場人材欠点は、転職に躊躇がないところ

雇ったけれども、また転職されてしまう可能性が小さくない

http://anond.hatelabo.jp/20130326202740

あほらしい。せっかく美人彼女がいて、相手からも好かれているのに別れてどうするよ。

彼女も傷つけることになるが、それでもいいのか?

釣り合わないと感じるんなら、自分を磨け。



と、ちょっと前にすごい美人彼女に振られた男が言ってみる。

ふと思った

ふと思った。謝り癖って、元イジメられっ子に多かったりするんだろうか?

http://anond.hatelabo.jp/20130326235902

???

俺はむしろリベラルから転職なんて当たり前だろ、って言ってるんだけど…。

うちも当然共働きだし、嫁も転職してるぞ。

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