http://anond.hatelabo.jp/20130325172822 の続き
言語はJava7を想定。(Java8が迫っていますが、Lambdaなど関数型は、まだ早いと言うことで)
選定理由は、C++と比較して学べるところが大きく、安全でシンプルな言語だから。
※いきなりJavascriptはやめとけ、PHPは論外。
Ruby・Scalaでないのは、筆者が初心者には適切には教えられないから。
おもちゃ・ToyとしてjQueryで遊ぶのは、悪くは無いと思う。
これ以降は名著の紹介や学習方法の紹介が主体となります。名著のコンポジションという形が時間的限界ですね。
量については「初級になるなら、専門書を計3,000ページは修得することは覚悟してね」なんて言ったりしています。
Javaで初級のわかりやすい指標ですと、[amazon:Effective Java]とGoFまでの修得。
初級になるまでに登竜門への挑戦期間を含めて、3~4年はかかっても仕方が無いとも思います。
※逆に「一山いくらのコーダー」というのは、Effctive JavaやGoFが達成している技術も知らずに「自分がJavaプログラマー」だと誤解してしまっているような人達です。
そういったコーダーは何年経とうとも初級プログラマーにすら敵いません。
初級を目指して、プログラミングを楽しんでください。
ただ、学ぶべきことはべらぼうですが、「各分野毎に、エレガントな方法がある。だから探して修得する」ということが大切です。
※「一を聞いて十を知る」ような優秀な人に、50冊くらいドーンと本を置いてあげて、各本の目次を読ませるだけで、
底の見え無さを悟ってくれたりすると、嬉しくなってしまいます。
※余談ですが、その底の見え無さは数学という学問そのものですね。例えば、関数型言語の底流に「圏論」というここ100年の最新の数学があります。
また中級くらいで、Liskovの置換原則などが載っている本を紹介しますが、
そのLiskovの置換原則の周辺で出てくるcovariant(共変)って、圏論という数学の概念だったりします。
数学畑出身としては、数学が現実に活かされている嬉しい事例です。
「速く正確に大量の出力」という能力は、プログラミングをする上でも、ドキュメントを書く上でも、何より「つまらん仕事」の時間圧縮ができるようになるため、重要です。
スローガンとしては「思考のスピードで出力することを目指そう」です。
紹介するエディターはemacsやvimやExcelです。ついでにIMEとしてATOKを使用しているため、ATOKの操作をEmacsライクにする話も紹介します。
ExcelはWindows環境でMeadowすら入れさせてくれない場合の最後の砦という扱いです。
コマンドラインは、「コマンドラインというものがある」「時として非常に強力である」程度の紹介です。
※筆者はzshは全然使えません。使いこなしている方々と接する度に「勉強しなきゃな~、でも、あっちの方を先にやりたい・・・」とグズグズして、はや何年・・・
正規表現は置換を用いて、テキストの一括編集が重要です。後、遭遇したくない事態ですが、スパゲッティコードの解析をする上での最後の砦です。
※遭遇したくない例
ん?何か変なところで副作用のある処理があるようだなぁ(消沈)、SQLのInsertかUpdateか一応Mergeも使っているところから逆算して原因箇所を探すか・・・(諦念)
この糞コードがっ!!こんなところに書くんじゃねぇ!!(憤怒激高)
(ここで、他にやらかしていそうな似たようなコードを正規表現でgrep検索。改行コード込みにすれば複数文検索も可能)
わはは、予想通り共通化すべきロジックのメソッドがそこら中にある・・・
入門編で一つLinkedListというアルゴリズムを学びました。
少なくとも一つ本を読みながら自力でアルゴリズムを学べる人なら、大成できる可能性があります。
前に紹介した[amazon:C++実践プログラミング]には、LikedListやStackなど基本的なアルゴリズムが載っておりますが、
これに加えて、初級になるためにはこれくらいは知っておいて欲しいというものを紹介します。
※後、最初から必ずしも手を出さなくても良い上限も紹介いたします。
プログラムは、データを入力して、加工して出力・保存する処理の繰り返しです。
つまり、各一連の繰り返し毎に、「正しい入力」「正しい出力」を定式化する必要があります。
それを人間の手では無くコンピューターにやらせられるように、つまり自動テストできるようにテストをプログラミングします。
そこで処理の進捗を確認するためにロギングし、処理が想定通りであるかをアサーションでチェックし、
不正な入力・不正な出力=例外が起きたら、対処策をプログラミングします。
(ex 途中で処理を中断して、入力者に適切な入力のメッセージを伝えてあげる。入力の自動補正などもあり得る)
で、ここら辺をまとめてどうあるべきかとして「契約プログラミング」があります。
※余談。定式化・テストに際して、数学畑の人間としては、Javaだとequalsのオーバーライドでも必要になるし、同値関係・同値分割だけでなく、集合論・群論から学んで欲しい・・・(ここいらは数学科の学部1~2年の学習内容)
名著は英語で読みましょう。名著が名著たる由縁は、度々引用されることにあります。
つまり最新の技術書を読むときに、引用された名著のフレーズが、新旧のリンクをなし、理解の助けになります。
壁打ちといって、独り言で思考補助をするよりも遙かに有益です。
※素晴らしい師匠を探すなら、大学行くのが一番ですが、見聞を広げていく中で出会いを待つしかないとも思います。
マルチスレッドが難しいのは「バグを起こしにくいプログラミング」を求められるから。
つまりTry and Errorからの決別が求められ、今後の仕様変更・拡張も踏まえて慎重に慎重にデザインする必要があります。
できる限りステータス変数を持たずに安全に、でもマルチスレッドにするのだから、効率を追求しなければ本末転倒。
でも効率のためにはメモ化に代表されるキャッシングは必須と、アンビバレンツな要素のバランス取りが難しい。
このために、リエントラントな実装・抽象と実装の分離など様々なエッセンスを駆使することが必要です。
というよりも孔子曰く、知っているよりも好きであること。好きであることよりも楽しめることのほうが強く、
気づいたら日々時間が許す限りプログラミングをしてしまうのが理想です。
※仕事として嫌々スキルを磨かなきゃということが、これほど不幸な職業も無いですね。
学習の達成度を測るには、簡単すぎる不適切な問題ですね。
写経は数学の証明問題を、教科書のテンプレ通りに、数値や名称だけ変えて記述することしか出来ない人の発想。
つまり「矛盾無く一貫した論理モデル」の構築が自由に出来ず、テンプレの微修正しか出来ない人の発想。
また、外部の「矛盾無く一貫した論理モデル」の吸収が不自由で、アルゴリズムを「手順」としてしか捉えられないように見受けられる。
「連続」であること確かめるための「ε-Δ論法」(数学科の学部1年の学習内容)
事前知識無く、このモデルを理解できる人は、十分に「矛盾無く一貫した論理モデル」を構築できる人。
プログラムの定義 プログラム:定義づけられた物事を進めていく妥当な手順・方法の決定、および物事・手順・方法の記述書 プログラミングの定義 (コンピューター)プログラミング:コン...
http://anond.hatelabo.jp/20130325172822 の続き 言語はJava7を想定。(Java8が迫っていますが、Lambdaなど関数型は、まだ早いと言うことで) 選定理由は、C++と比較して学べるところが大きく、安全でシ...
増田が実際にプログラミングしている分野を知りたい
BIな分析・解析処理が多いかな。
http://anond.hatelabo.jp/20130327020050 の続き emacsを使う意味 キーバインドのおかげで、掌を左右に動かす必要が少なく、動きが小さい分速くなります。加えて動きが小さいためホームポジショ...
キーバインドがどうしても覚えられなくてEmacsやVimはあきらめました
いまどき、普通のハッカーはそこらの人よりEclipseやVisualStudioを上手に使いこなしますよ。 この手の、むやみに自分の趣味を押しつけてくる手合いにはろくなやつはいません。 それより...
横だけど、VisualStudioに関しては、クソなものも多いMS製品の中でも屈指の神ツールだと思う。 VSに比べたらEclipseなんて使ってらんないし、xcodeもかなり微妙。 VisualStudio for macとかfor linuxと...
横だけど、VisualStudioに関しては、クソなものも多いMS製品の中でも屈指の神ツールだと思う。 VSに比べたらEclipseなんて使ってらんないし、xcodeもかなり微妙。 VisualStudio for macとかfor linuxと...
http://anond.hatelabo.jp/20130327182715 上の候補に戻す場合や誤入力を消す場合に、結局BSや矢印キーを押すことになってしまいます。 ……?? 私は、1つ上の候補に戻したい場合はShift-Spaceを押...
漢字変換の最中というIMEが動作握っているときですと、emacs上でもC+hは押しても、 前文字を一文字消すにはなりませんよ。 日本語入力するとき、タイポしてからそのまま変換したときに...
漢字変換の最中というIMEが動作握っているときですと、emacs上でもC+hは押しても、 前文字を一文字消すにはなりませんよ。 日本語入力するとき、タイポしてからそのまま変換したときに...
漢字変換の最中というIMEが動作握っているときですと、emacs上でもC+hは押しても、 前文字を一文字消すにはなりませんよ。 日本語入力するとき、タイポしてからそのまま変換したときに...
とりあえず「プログラマー」と呼んでいる職業の具体的な対象をもう少し定義した方がいいと思うよ
間違ってはいないが、業務系の現場ではポインタよりも先にオブジェクト指向を抑えておいて欲しいというのが本音。 LinkedListをスクラッチできる人なら、すぐ理解できると思うけどね。...
http://anond.hatelabo.jp/20130325172822 正直、プログラミング初学者にやたらc言語とポインタ学習を勧める風潮には辟易している。 ポインタは何にでも使えすぎるんだよ。自由すぎる代わりに...
「関数ポインタを駆使しろ」というわけでも無く、 LinkedList程度なら「ポインタを使いこなす」には到底及ばない「簡単な話」という認識。 >>やるとしてもそれは直接叩くのではな...
見づらくて保守性の低いコードを書く奴より、多少コストが高くても読みやすいコードを書く人の方が好かれる。
コスト度外視は三流、コストを考えて二流、コストパフォーマンスを考えてようやく一流。
連結リストとSQLのループ分解程度で見辛いなんていう人初めて見た。 よくてSIer営業だよね?まさかプログラム書いてないよね?
多分そこにいるのは 「連結リストとSQLのループ分解程度で見辛いなんていう人」 じゃなくて、 「相手の文も読まずに適当に上から目線を開陳する人」 というだけだと思う。よくいる、...
いやだからさ、ここで言ってる「プログラマー」っていうのは、制約多くてAPIも大して整備されてないゲーム専用機上で超綺麗なリアルタイムレンダリングするエンジン開発するぜ!サ...
筆者としては、ゲームプログラマーの話は、「プログラミング入門」からは離れた尖った話だね。 明日以降の日記で書く「プログラミング初級者」以降の分化した世界の話だね。 そして...
筆者としては、ゲームプログラマーの話は、「プログラミング入門」からは離れた尖った話だね。 明日以降の日記で書く「プログラミング初級者」以降の分化した世界の話だね。 そして...
不勉強なもので教えて頂きたいのですが、「LinkedListの入れ子でTree構造をつくり」というのは、どういう意味でしょう? 普通、木構造といえば、ノードは子ノードを2つ以上持てるようなも...
横だけど、君の日本語の解釈がおかしいだけじゃね。 struct Node{uint nchild;Node **children;} とかやればいいんじゃないの?
具体的なコードを出していただいて助かります。もしかして、中間テーブルをmallocしろ、という話ですか?? あと、これは連結リストにもなっていないようですね。(ま、キャストすれば無...
もしかすると、連結リストの各ノードに保存するcharなどのデータのかわりにポインタを入れればいいだろう、という話なのかもしれませんが、それだと「入れ子」とは言わないでしょ...
それは「今はC++の話をしているから」ですね。 あいにくLispはよく知りませんが、Lispの場合はタプルに実データだろうが他のタプルへのポインタだろうが何でも入れられるので、連結リ...
C++ははるかな昔にBetter Cの段階で挫折した経験しかないが、 一方、Cのような変数の方に型のある言語の場合、連結リストの自然な実装では それは「自然な実装」じゃなくて「原始的な...
そもそも、よくよくLinkedListクラスのインターフェースを眺めてみると、これは連結リストのノードを表現するクラスではなく、連結リストそのものを表現するクラスのようですね。こん...
データ部をNode*型にすればいいだろ。SICPあたり読むといいんじゃね?
実際の現場では5年経験がありますとかいう癖にfizzbuzz書けませんとか言う連中をまとめて一仕事完成させないといけない。 俺の師匠はベタなプログラムを書きなぐるだけの俺の横に三か...
入門者にもなれない人間が、そのままズルズル残って役に立った例は見たこと無いんだよね~ 大成できないなら、日本のソフトウェア業界から足洗わせた方が温情という見解 単純労働し...
>入門者にもなれない人間が、そのままズルズル残って役に立った例は見たこと無いんだよね~ それはあなたが育てられないからだし、育てられないのはあなたの能力が低いからだよ。 ...
>入門者にもなれない人間が、そのままズルズル残って役に立った例は見たこと無いんだよね~ それはあなたが育てられないからだし、育てられないのはあなたの能力が低いからだよ。 ...
>入門者にもなれない人間が、そのままズルズル残って役に立った例は見たこと無いんだよね~ それはあなたが育てられないからだし、育てられないのはあなたの能力が低いからだよ。 ...
「誰もがプログラマーになれる」という幻想を信じているのでしょうか? 同様に、「誰もが努力すれば何にだってなれる」という幻想を信じていらっしゃるのでしょうか? 信じているよう...
「誰もがプログラマーになれる」という幻想を信じているのでしょうか? 同様に、「誰もが努力すれば何にだってなれる」という幻想を信じていらっしゃるのでしょうか? 信じているよう...
→「誰もがプログラマーになれる」という幻想を信じているのでしょうか? →同様に、「誰もが努力すれば何にだってなれる」という幻想を信じていらっしゃるのでしょうか? なんだこ...
「プログラミング出来ない奴ちょっと来い」と「プログラミングの入門」のプログラマ分類がSI業界的なので、別視点を引用。 プログラマには、プログラマ、職業プログラマ、真のプロ...
「プログラミング出来ない奴ちょっと来い」http://anond.hatelabo.jp/20130322031333 う~ん、この人の日記の意見は、駄目だな~ 特に駄目だと感じるのは、 「というのも、多くの人は計算機科学を...
この人もプログラマに向いてなさそう
http://anond.hatelabo.jp/20130325172822 いや,入門者にLinkedListは無理ゲーだろ. この人,入門者に教えたことあるのかな? 無いだろうなあ.
横だが、Linked Listを本を参考にして実装できない奴は門前払いでいいと思うよ? 入門者に教えたことがあるかないかと言われればないが、学生時代に同期の手伝いをしていた記憶を思い...
筆者ですが、新卒や第2新卒に教えるけど5割は脱落するよ。 それはもう仕方ない。 短期で転職という経歴に傷をつけることを避けるため、 3年見込みが無いことをやることになって、見...