カレーなる辛口Javaな転職日記 RSSフィード

2012年 04/15

「漢字の書き方を覚えるのと、プログラミングを覚えるのは大差ないです(キリッ)」

http://blogs.itmedia.co.jp/fukuyuki/2012/04/post-d365.html

あー,また大嘘つきがデマを垂れ流してる.


こういう大嘘つきの話に耳を貸すくらいなら,こっちの本を斜め読みした方が100倍ためになる.

プログラマが知るべき97のこと

プログラマが知るべき97のこと

まだ買ってもいないけど,これもちょっと(かなり)注目している.*1 *2

http://pragprog.com/book/jcdeg/new-programmer-s-survival-manual

電子書籍版もあり.Kindleストアではなく,出版社のサイトから購入・ダウンロードできる.

追記:日本語版も出た.

プログラマのためのサバイバルマニュアル

プログラマのためのサバイバルマニュアル

個人的には、Webプログラミングに関しては、漢字の書き方を覚えるのと、プログラミングを覚えるのは大差ないです。最初の最初は、「写して、書いて、覚える」しかないです。

同じ小学生のお勉強で例えるにしても,せめて「さんすうの計算ドリル」と言ってくれ.まだしもそっちの方が近い.*3


計算ドリルの升目に答を見てそのまま書き写してるだけの人間は,たかが「さんすう」のレベルでさえも上達は見込めない.*4 *5 この辺はプログラミングでも同じ.書き込んだ答は同じでも,自分の頭で考えるか考えないかの差は本質的で決定的な違いになる.

絵とか写真が多くて分かりやすい言葉で書いてあるプログラミングの入門書で、出来るだけ薄いのを買ってきて、淡々と最初のページから、書いていることを淡々とマネして、写経してください。たまに改造してみてください。最初は、それだけです。だいたいわかったら、一冊全部やる必要もありません。

そういうやり方では身につかない.

むしろ,できるだけしっかりした名著をしっかり読んで書いてあることを理解する方が良い.一見回り道に見えるかもしれないけれど,結局はこっちの方が楽だし早いのだ.

プログラミング作法

プログラミング作法

なかには分からないことも出てくるから,他の本や,あるいはネットで検索して調べてみる.英語版のWikipediaなんかは入門者に必要な情報が詰まっていてお勧めだ.

そういう意味では英語力はプログラマーの基礎体力でもある.スポーツ選手が筋トレするのと同じように,プログラマーは英語をトレーニングしておく必要がある.

難しい解説なんか、理解しなくてもいいです。動けばいいです。

こういうことを言う奴はいるが,はっきり言ってこういうプログラマーにろくな奴はいない.大抵は自分の作ったプログラムを走らせることもできない役立たずだ.

こういうことをいう管理職もいるが,そういう管理職の特技は技術的負債と赤字と鬱病患者の大量生産だ.

経営者だったら?その人の会社は倒産するか,さもなくば遅かれ早かれブラック企業になる.*6


多少、意味が分からなくても、淡々と写経を続けてください。地道に。淡々と。「はじめてのプログラミング」は、そんなものです。地味です。地道です。それだけです。難しくもなんともないです。最後までやる必要も無いです。

これはウソ.

たしかに地味だし,コツコツ努力するものだけど,初歩のプログラミングはそういうものではない.

写経なんて時間の無駄.スポーツにおける「鉄下駄履いてウサギ跳び」と同じ発想で,苦痛はあるけど技術は身につかず,最後は体を壊す.そしてそういう指導したコーチの責任が問われることはなく,体を壊した選手の自己責任にされるのだ.

せめて苦行を積むなら頭を使え.体力を使ってもプログラミングは上達しない.

今のWebのプログラミングやスマホアプリプログラムは、「ある程度」は、頭が相当悪くてもできます。

昔のプログラミングは、メモリの管理とか、ポインタとか、画像処理が必須だったりしましたが、今のWebのプログラミングなんて、算数すら使わないので、誰でも出来ます。本やネットから写経すればいいです。

これも嘘.「ある程度」というのをド素人レベルと定義するならそうだが,超がつくほど低レベルの場合だけだ.*7


コピペプログラマーなんてプログラマーじゃない.しかも実際にそういうコピペでは大きなトラブルを招く場合が多い.*8 またコピペプログラマーは良いコードと悪いコードの区別がつかない.継ぎ足す場合もセンスがないので,良い継ぎ足しと悪い継ぎ足しの区別も付かない.その結果は往々にして,悪いコードを悪い継ぎ足し方で継ぎ足していって,最悪の結果を生み出すことが多いのだ.どうせコピペするなら,せめて名著を参考にして良いコードを真似ろ.もしそれができる位のスキルがあればの話だが.


また,たかがコピペでも楽ではないことは,こういう本を開いたことがあれば分かるはず.

CSS Cookbook

CSS Cookbook

Web Development Recipes

Web Development Recipes

コアjQuery+プラグイン/jQuery UI 開発実践技法 (Programmer's SELECTION)

コアjQuery+プラグイン/jQuery UI 開発実践技法 (Programmer's SELECTION)

RailsによるアジャイルWebアプリケーション開発 第4版

RailsによるアジャイルWebアプリケーション開発 第4版


本格アプリを作ろう! Androidプログラミングレシピ

本格アプリを作ろう! Androidプログラミングレシピ

プログラマの皆さんが、新しい技術や言語やAPIが出てもリファレンスのwebページを見て、パッと使えるようになるのは、皆さん、最初の最初に地道な努力をしたからです。いきなり出来るようになったわけではありません。

字義通りにはそうだが,あんたの言ってることは「地道な努力」の方向性が180度違うんだよ.


「地道な努力」の中には,難しい数学を学んだり,アルゴリズムを理解したり*9,改良したり,先進的な言語のいろんな機能を理解したり,自分のものにしたりというのが含まれるんだ.そういう部分から逃げてるだけの奴らは,いつまでたっても一流のプログラマーになれはしないよ.

アルゴリズムクイックリファレンス

アルゴリズムクイックリファレンス

Effective Java 第2版 (The Java Series)

Effective Java 第2版 (The Java Series)

関連:


ポインタ/参照,再帰呼び出し,マルチスレッドでも挫折する人がけっこういるという話.しかもこれらは,プログラミングのほんの入り口でしかない.

「文系でもプログラミングできますか?」という質問がよくありますが、「小学生くらいの知能があればできる」と思います。

の答は,

コンピュータサイエンス学科のドロップアウト率の数字をいろいろ見たが、それは通常40%から70%の間だ。

http://local.joelonsoftware.com/mediawiki/index.php/Java%E3%82%B9%E3%82%AF%E3%83%BC%E3%83%AB%E3%81%AE%E5%8D%B1%E9%99%BA

で十分だと思う.数値については多少議論の余地はあれ,だいたいそんなものだ.理系で,コンピューターサイエンスを志望した人たちで40%から70%がドロップアウトする.数学が苦手で文系に進んだようなひとたちのドロップアウト率がコレより低いとは考え難いのではないか? *10


(「同意しかねる」のtypoかな.「しかける」だと意味が違っちゃうので.)


これも嘘だなあ.そりゃバブルソートクイックソートくらいなら小学生でもできるけど,ちょっと難しいアルゴリズムになると,そんな簡単にはいかない.この人の頭はクイックソートレベルのまま静止している老害さんなのかも.



http://b.hatena.ne.jp/entry/blogs.itmedia.co.jp/fukuyuki/2012/04/post-d365.html

  • id:atsushifx こうやってなんちゃってコーダーが増えるからプログラマーの負担が増えるんだよ。大事なのはコーディング・デバッグ・TDD

激しく同意.

  • id:mac_wac 個人的には、写経だけじゃなくサンプルを改造することが大事だと思うけどなあ(たぶん初歩の英語も一緒)。「「ある程度」は、頭が相当悪くてもできます。」
  • id:tanimiyan 写経してるとだいたいどこかで写し間違えて動かないんだよね。その辺を修正する課程で学びがあるように思う。

これも同意.

たとえば英語でいえば,「過去形にする」「IをWeに変える」「受動態にする」「仮定法過去完了にする」等々の変更をして,頭で考えずにスラスラと話せるようになるのはとても意味がある.*11文は丸暗記してても,こういう変更ができないと応用範囲は狭い.そして実際にコレができない日本人はすごく多い.

どんどん話すための瞬間英作文トレーニング (CD BOOK)

どんどん話すための瞬間英作文トレーニング (CD BOOK)

「さんすう」でも計算ドリルの中に入ってる数値を置き換えたりかけ算や足し算を追加しただけで,もう計算手順や結果が分からなくなる人というのは,それは計算が全くできていないのだ.


単にサンプルプログラムを書き写しただけで,変更できない人,変更した結果出たバグを修正できない人,コードを改良できない人というのはプログラムを全く理解していない証拠.書き写すことは暗記の役には立つかもしれないが,プログラミングの理解という上ではほとんど意味が無い.間違ったまま理解していても,書き写している段階ではまだ自覚できない.その無理解はプログラムを変更する時点で露呈する.

  • id:ysync 写経そのものに意味があったのかは疑問も残る。機械語モノはASMソースじゃなくて数字打ってたわけでw/個人的には改造とそれに伴う試行錯誤の方が大きいかと。残機数増やすとこからスタート。

http://livedoor.3.blogimg.jp/himasoku123/imgs/9/d/9ddd733f.jpg FROM http://blog.livedoor.jp/himasoku123/archives/51713209.html

たしかに.子供の頃は英単語の意味も分からず「じーおーてぃーおー 10」と読みながら入力していたので,「写経」したところで意味がわかるはずもありません.機械語レベルならなおさら.

また

for(int i=0; i<MAX ; i++){ }

のようなC言語系のforループはもはや多くのプログラマの常識と言ってもいいレベルだけど,こんな簡単なことも「写経」では身につかない.ましてインターフェース継承と実装継承の違いが「写経」で身につくとしたら,天才を通り越して超能力者のレベルだ.

  • id:gallu 単純に経験として「写経でプログラミングがある程度以上のレベルでちゃんと理解出来ている」子を見たことがないなぁ。

  • id:QTL_chicken 「漢字の書き方を覚えるのと、プログラミングを覚えるのは大差ないです。最初の最初は、「写して、書いて、覚える」しかないです。」 コンパイルしたらエラー吐かれて発狂するフラグですね、分かります
  • id:garage-kid より込み入ったことをしたいと思うと数学ができなくていいとかそういったことはないと思う / はじめてプログラミングを覚えるのはどうしたらいいか?という質問の答え (via @ReadItLater)
  • id:kiyo_hiko プログラミングの取っ掛かりはそんなに難しくない、という話なら納得…かな 何も考えずに写経はクラウチングスタートの構えができるできない位の話で、走りだしたあとが勝負
  • id:kirifue なんちゃってプログラマ、育成法。「最初は写経から」はおっしゃる通り。プログラミングを覚えてから応用が効くようになるまでが長い道のり。

  • id:sqrt マジレスすると、薄い本はサンプルコードにバグがあるよー。

http://d.hatena.ne.jp/bleis-tift/20081018/1224263803

http://takagi-hiromitsu.jp/diary/20060202.html#p01

  • id:gomis ちゃんと動くきれいなソースが手元にあって、趣味か仕事かでそれをちょっと変更する必要にかられるのが、第一歩としては理想。

しかし仕事で与えられるソースは汚いことが多いのであった.仕事から始めたプログラマに糞プログラマが多いのも納得.

理想は理想だろうけど,現実的には全体的に汚いか部分的に汚いソースがほとんどなので,初心者が綺麗なコードだけをより分けるのは困難だろう.せめて名著を参考にすれば,(比較的)良いコードにあたる可能性は高くなるが,薄い本を手に取るような初心者は最初から最後まで糞コードしか目にしないことが多い.

  • id:utd_sn3781 BASICの時代のおっさんの話って、今どれだけの意味を持つのかいつも疑問に思う
  • id:p260-2001fp 個人的には『#マイコン少年あるある』でとっても共感するのだけれど、確かに『今の時代に始める子供達』にとってどうなのかは、正直よくわからない。

共通している部分もあるけれど,あの時のままで役に立つことはほとんどないな.

むしろ失敗経験の方が役立ってる.

  • GOTO文の乱用は百害あって一利なし
  • モジュール化はとても重要.
  • 可読性は以下同文.
  • マシンの性能の違いは,処理速度の決定的差では無い.プログラマーの能力の違いは,時に致命的な差を生む.
  • 「マイコンベーシックマガジン」をコピペしただけで,プログラミングが上達した人はまずいなかった.上達したのはコピペで終わらずに,ちゃんと勉強した人だけ.

写経を勧める人って,ベーマガ華やかなりし頃の経験を元に,何も考えずに同じことを勧めているだけなんじゃないかという気もする.

当時はソースコードは基本的に手入力するしかなかった.*12 *13 またやろうと思えば手入力できる規模のソースだったというのもある.その後,TV副音声での放送*14,付録フロッピーディスク*15,付録CD-ROM/DVD-ROMなどを経て,今ではインターネットでのダウンロードが一般的になった.そしてソースの大きさの制限も事実上なくなった.今では,それなりの規模のソースを手入力で入力するのは,もはや現実的ではない.

今から勉強を始めるならダウンロードしてきたサンプルを弄り倒す方がよっぽど効果的.*16

  • id:mohno “真似て覚える”のはプログラミングに限らないよね。楽器でも、料理でも。真似る元の選択は重要だと思うけど。

例えば,数学の公式は手書きで書き写すことで,丸暗記の補助としての効果は期待できる.他にも音読する人もいれば,成り立ちや証明から暗記する人もいるだろう.楽器の演奏などは,名手の演奏を一度聞いただけでそれをそのままコピーできれば天才だ.野球で名投手の優れた変化球を見ただけでコピーできればそれも天才と言えるだろう.外国語などは,まずは単語とフレーズの丸暗記から入るのも事実だ.*17 *18 微積分や因数分解も最初は丸暗記から入る

一方で,たとえば駒の動かし方も知らないままにプロ棋士の棋譜を「丸暗記」することにどれほど意味があるだろうか.*19 数学の計算を,意味も分からず書き写すことにどれほど意味があるだろうか.たとえばスカラーの乗算と行列の乗算の違いもわからずに,「A・B=b」みたいな式を書き写すことにどれほどの意味があるだろうか.光速度不変の意味も知らずにE=mc^2の式を書き写すことにどれほどの意味があるだろうか.

GoFデザインパターンも,先人達の設計を「真似る」学習法かもしれない.しかしこれもソースコードの「写経」では身につかないだろう.


広義においては多くの分野において「真似て覚える」ことは行われているかもしれないが,「真似る」ことが必ずしも「意味も分からずに表層的な知識や文字列だけを書き写す」ことを意味するわけではない.

  • id:feita お絵描きと同じだね。勉強法ばっか探してないでスタートしてから勉強したほうが明らかに良いよ。スタートの仕方さえわからないというのが一番ネックだし。デキる人間にリアルで聞けるのが本当は一番なんだろうけどね

勉強法ばかりさがしてないで云々は賛成だけど,「お絵かき」や「漢字の書き取り」は見えたままをコピーすれば良いのに対し*20,数学や物理やプログラミングは見えている記号の背景にある目で見えない抽象的知識の方が本質なので,見えるものしか見てない写経は不適切.

  • id:kenkitii 敷居を下げたいのはわかるんだけど、PGやSEが自ら、自身の価値を貶めるようなこと言うのは如何なもんかなぁ。むずいね。

いやこの人は経営者だから.

何もしらない若者を騙くらかしてこの業界に入信させ,深みにはまり込んだら利用するだけ利用してからポイ捨てする側の人間だよ.


これはギャグで言ってるのか?

もちろんこれは「意訳」ではなく「直訳」で,しかも100%「誤訳」.

  • id:satotaka99 本を数冊買ってノソノソ勉強してもちっとも身に付かない気がするから、やり方間違ってるのかな?もしかすると俺、メチャクチャ頭悪かったんかな?などと思い始めて、できる人に聞いてみたくなる…のは甘えというお話
  • id:j1nn 頭の良さ以前に、地道にやり続けられるやる気と、時間と、好奇心という、小学生や中学生にはあって、大人に無い物が無いとプログラムは難しいということか。「誰でも出来る」ではなく、大人になってはじめるのが難し

そんなことはない.頭が悪い場合もあるし,やり方が間違ってる場合もある.そもそも悪書を掴まされてる場合も多い.*21

  • id:washita 今更ながら写経を始めようと思ってたとこでした

辞めた方がいいと思うよ.

その他

*1:よく見ると「初心者」って意味ではないのかも.

*2:ちょっとだけ読んだ. http://d.hatena.ne.jp/JavaBlack/20120505/p1

*3:「計算する、答合わせする、間違った所を直す,間違った所,分からなかった所を調べる」.

*4:九九くらいは暗記するけどね.その場合でも答を見てコピペするわけじゃない.

*5:スキルアップするには理論を理解すると共に,演習問題を沢山解くという過程が必要不可欠なんだな.決して答を書き写すものじゃない.

チャート式 基礎からの数学1+A 改訂版

チャート式 基礎からの数学1+A 改訂版

*6:「村上福之 株式会社クレイジーワークス、代表取締役」.「クレイジー」か.名は体を表す.

*7:メモリ管理も必用だよ.C言語とは異なるレイヤーで異なる形で管理されているだけ.昔に比べたらメモリリークの危険はなくなったが,メモリをバカ食いするプログラムを書いてOutOfMemoryで落としたり,パフォーマンスを低下させたりするバカは実在する.

*8:こういうコードを作ったりな. http://www.pro.or.jp/~fuji/mybooks/cdiag/

改訂新版 Cプログラミング診断室

改訂新版 Cプログラミング診断室

「しかし、現実の姿は全く反対で、技術レベル差はますます広がり、下級レベルは「ごみプログラム」を大量生産しているだけになってしまいました。趣味のプログラマが下手で、どうしようもないのは趣味だからまだ良いのですが、下手なプログラマが報酬を得て下手なプログラムを組み、そのプログラムで社会活動の一部が動いているかと思うとゾッとします。コンピュータは日常生活のあらゆる分野に入り込んでいるので、人権、金銭、財産に関することはもちろん、交通機関、医療機械などでもどんどん利用されているので、バグが生命を奪う危険性も当然考えられます。」

*9http://d.hatena.ne.jp/JavaBlack/20110923/p1

*10:関連: http://d.hatena.ne.jp/JavaBlack/20091227/p1

*11:こういう変形を,文法的な基礎知識なしで「写経」だけで身につけるのは絶望的に難しい.普通は英語を学習する最初期に単語や文章の丸暗記と平行して,必ず初歩的な英文法の勉強も行っているはず.特に日本人の場合は英語とは語順の違いもあるため逐語訳がほとんど役に立たない.

*12:ベーマガ華やかなりし当時では,多くの「パソコン少年」がソースコードの手入力を経験していた.それ以外に方法はなかったから.しかしそれを「勉強法」とみなしていた人は当時でもいなかったと思う.ゲームで遊ぶのが目的で入力しているだけの人が,書いてあるプログラムの内容を突然理解したりプログラミングに目覚めたりということもなかった.

*13:つまりは「写経をしていたパソコン少年」と「プログラミングができる人」に相関関係はあるけど因果関係はないということだろう.当時プログラミングを習得した人はパソコンを弄り倒していた.そういう人の多くがゲームも好きだったし,ベーマガのソースコードを手で入力する「写経」も数多く行っていたというだけ.写経をしたからプログラミングを習得できたのではなく,プログラミングを習得できるのはパソコン好きだけであり,パソコン好きだからこそ「写経」を経験する率も高かった.

*14:「がーぴー」というあの音声をテープに録音し,その後PCに読み込ませる.今の若い人だと,「プログラムの音声」と言われてもわけがわからんだろう.ゆとべでぐぐると,そううい動画も見つかるよ.

*15アスキーが出したんだよな.当時としては画期的だった.

*16:開発では「IDE万歳」「エディタでの手書きイラネ」という人たちがいる一方で,勉強だったら「書き取り」とか「写経」を受け入れられる人たちがいるのはとても不思議.普通は逆だと思うんだけど.開発では信頼性や品質重視,勉強では効率重視.

*17:単語やフレーズの丸暗記でさえも,ひたすら手で書き写して覚える人もいれば,音読する人も黙読する人もいるし,耳から覚える人もいる.語呂合わせで覚える人だって,多読多聴で覚える人だっている.「手で書き写す」が唯一の解ではない.

*18:とはいえ,「"Do you know me?"を和訳しなさい」「"デカケルトキハ ワスレズニ"です(キリッ)」という懐かしい冗談があったりする.
D
これはとても馬鹿馬鹿しい冗談なんだけど,意味も分からず丸暗記してると,時にこういう致命的なミスもする.しかもそのミスに自分では絶対に気づけない.

*19:将棋気でもチェスでも囲碁でも,動いた結果だけを見てその背景にあるルールを予測するのってかなり難しいよね.普通はルールの方を先に勉強する

*20:姿形を忠実に書き写す「デッサン」は「お絵かき」の基礎じゃないのかな.一方でプログラミングにおいてデッサンは全く意味を成さない.

*21http://d.hatena.ne.jp/JavaBlack/20080401/p1

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト

コメントを書くには、なぞなぞ認証に回答する必要があります。