「プログラミングの出来る人と出来ない人の決定的な違い」?

http://1yg.net/archives/554

プログラミングが出来るかどうか、というのは「興味を持てるか否か」だと思う。
わからない人が見たら、アルファベットの羅列にしか見えないようなプログラムでも、ちゃんと動いている以上「文法」に従って書かれているはず。
じゃぁそれがどういう文法なのかというのに「興味」を持つ事が出来れば、その人は簡単なプログラム程度なら組めるようになるのは早いと思う。
でも、その文法に興味を持つ以前に、「自分にはわからない」と諦めてる人って結構多い気がする。
一つの言語が出来るようになれば、「どの言語でも決まりに沿って書かれている」という事を理解しているから、その他の言語の習得は早いけど、まず最初の言語で躓くとどの言語をやってもダメっぽい。

はい,大間違い.

  • 「簡単なプログラムが組める」程度ではプログラマーとは言わない.楽譜が読めてピアノでドレミファソラシドの音を出せるだけでは音楽家とは言わないように.
  • ちゃんと動いていれば文法に従って書かれている.しかし文法に従ってかかれていても,バグは存在しうる.
  • 「ちゃんと動く」「文法に従って書かれている」だけでは最低ランクのプログラム.文法が正しいのは当然で,プログラマーの仕事はそこからがスタート.
  • (一つの言語で)「書けた」だけでは「できる」うちに入らない.
  • 一つの言語ができても,他の言語ができるようになるまでには相応の時間と努力が必用
  • 好きな人でも,素質がなくて挫折する人は多い.

文字の羅列に興味を持つ事が出来、理解しようと真剣に取り組めるか否か
だと思う。

プログラムは「文字の羅列」じゃないんだけどね.音楽家が楽譜を見ただけでそれが名曲か雑音かが判別できるように,コードを読んでそれが良いコードが悪いコードかを判別できる能力*1はすべてのプログラマが持つべき基本スキルの一つだ.*2

Code Reading―オープンソースから学ぶソフトウェア開発技法

Code Reading―オープンソースから学ぶソフトウェア開発技法

Code Quality ~コードリーディングによる非機能特性の識別技法~

Code Quality ~コードリーディングによる非機能特性の識別技法~

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

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


この調子だと,この辺りの話題の半分も知らないんじゃないかな?
http://programmer.97things.oreilly.com/wiki/index.php/Contributions_Appearing_in_the_Book

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

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

Javaスクールの危険」

  • 高校ではApple IIのBASICでpongゲームをうまく作れていた子供たちが、大学に入ってデータ構造の授業のCompSci 101を取り、話がポインタのことになると彼らの脳みそは吹き飛んでしまう。そしてこれはロースクールに進むほうが良さそうだと思って政治科学専攻に切り替えるのだ。コンピュータサイエンス学科のドロップアウト率の数字をいろいろ見たが、それは通常40%から70%の間だ。大学はこれを損失だと考えているようだが、私はこのふるい分けを不可欠なものだと思っている。彼らがプログラミングのキャリアで成功したり幸福になることはないだろうからだ。
  • しかしポインタと再帰の明らかな重要性以上に重要なのは、これらの学習から得られる精神的な柔軟さと、これらを教えている授業からふるい落とされないために必要な精神的態度が、大きなシステムを構築する上で欠かせないということだ。ポインタと再帰には、ある種の推論力、抽象的思考力、そして何よりも問題を同時に複数の抽象レベルで見るという能力が要求される。そしてポインタと再帰を理解できる能力は、優れたプログラマになるための能力と直接的に相関している。
http://local.joelonsoftware.com/wiki/Java%E3%82%B9%E3%82%AF%E3%83%BC%E3%83%AB%E3%81%AE%E5%8D%B1%E9%99%BA

初級〜中級者にとって難しい物としては,

が有名.これにくらべれば文法だのループだのFizzBuzz問題などは子供だましだ.そしてまともなプログラマならこの三つくらいは(相応にバグは出やすくなるが)容易く操れる.

良くプログラミングの事を「技術」と表現する人がいるけど、一般的なレベルまでなら「知識」の積み重ねだと思う。
英語や多国語を習得出来たのなら、「文法」「作法」そして「単語」があって、無意味な文字の羅列に見えてもそこには「意味」がちゃんとあるという事を理解して挑めば、「プログラミング」はそう難しいものではないと思う。

これも大間違いだな.これについても以前書いた.

またプログラミングの難しさのほとんどは,言語の違いではなく人間とコンピューターとの思考形態 −もしコンピューターのそれを思考と呼ぶことができるのであれば− の違いによるものである.

国際コミュニケーションを見れば解るとおり,言語の差だけでなく文化や世界観,道徳,価値観などの相違もコミュニケーションギャップを産む.言語を学ぶのは国際コミュニケーションのスタート地点に過ぎない.そしてコンピューターには人間の持つ「常識」や「知性」「本能」「論理的思考力」などが全くないため,そのギャップは外国人とのコミュニケーションの比ではない.しかもそのギャップは人間側が100%カバーしなければならない.

http://d.hatena.ne.jp/JavaBlack/20060331/p1

http://b.hatena.ne.jp/entry/1yg.net/archives/554

  • id:rintaro220 いちいち「自分はできませんが」みたいな、批判に備えた保険みたいな言い訳が鼻につきますね

自分でも間違ってることに薄々気がついているんじゃない?

  • id:minatuki-A07 個人的な経験としては、「数列」を理解しきってない人はループを使うプログラムを完成させられなかった。あくまで仕事としてプログラムが組めるか、という視点ですがやはり数学的素養は必要だと思います。
  • id:hirokidaichi 小学生と中学生の違いのレベル。そのくらいで出来るとか出来ないとか言うレベルじゃない。ここでいうプログラミングの出来ない人は仕事も出来ない
  • id:okra2 本当に書けない人ってそもそもドキュメントすら読まないし、ifの意味すらわかんないんだよなあ。その辺りのレベルなら確かに文系理系関係ないよ。
  • id:matsui 好きでもムリだった。
  • id:harumomo2006 ぶっちゃけ代入とifとforが理解できたらプログラマとして使えるけど、その壁を超えられない人が多いわけで

世の中にはマルチスレッドやポインタどころか,驚くべき事にFizz-Buzz問題さえできない人がいるという.できる人からすれば信じられない話だが,キャッチボール程度の所で躓く人が野球選手を目指すのは無謀以外の何物でもないと思うよ.*3


アルゴリズムを考えられないのはプログラマーと呼べるレベルじゃないと思いますよ.細かい文法についてはコンパイラや参考書を頼ることも可能だけど,新たなアルゴリズムを創り出すのは他力本願ではどうにもなりません.

  • id:good2nd このエントリに3桁ブクマがつくところが、業界の病理を反映してる気が。どんだけ素人が金とって仕事してんだ…。

悲しいけど,かなりのレベルで事実だな.orz

  • id:chousuke7 自分の小成功を後生大事にしてる人間の役に立たない説教。このエントリ読んで「ああ救われた」って人はいないと思う。実現したいことがあるのに他人に頼れない。だから文系のプログラマは生まれる。ただそれだけ。

「divタグが多用されている経済産業省のページのdivタグを可視化してみた」

http://d.hatena.ne.jp/Pasta-K/20101212/1292139075
おまけ

はてなブックマークとかで盛り上がってたのを見て、せっかくなので、divにborderかけてみたらすごいことになった。
話題なのはこのページ
経済産業省 会見・スピーチ 大臣記者会見
ページ自体は古め*1
divの数は下のコードで数えたらページ全体で309個あった。

「まあ,そんなこともあるだろう.きっと何年も前にあったサンプルページに継ぎ接ぎしていった結果,こんな風になったのかもね」とか思って見ていたら,ふと何故か奇妙な既視感を感じた.

ある意味で,下手糞なプログラマが継ぎ接ぎで作ったスパゲッティプログラムがこんな感じだということに気づいて少し凹んだ.これは「簡単なHTMLページ」だからこそこの程度の被害ですんでいるが,もし普通に作っても難しいプログラムで,こんなことをされたら一体どうなるか想像してみるといい.




....まあ想像するまでもなく良くある話なんだけどね.日本だと.だからこそ,こういう手合いの下手糞プログラマは,その存在自体が社会にとって害悪にしかならんのだと,経験的によく知っている.*4

それで、こちらの方は、
「元のプログラムは、あまりに下手糞でどうしようもなかったし、元のプログラムを作ったプログラマは全然対応する気力および能力がなかったので、ビシバシ書き換えました。元々はそういう予定じゃなかったのですが、おかげで、随分馬鹿げたことに時間を使ってしまったぞ。我々の仕事は、尻拭いでしかなかったわい」
と答えたかったのだが、そうあからさまには言えないので、言葉を慎重に選んで、穏やかに言ってしまった。

どの世界でも、尻拭いという作業は存在する。下手な奴、失敗する奴がいるから、尻拭いは絶対にある。問題は、尻拭いは優秀な人間にしかできないことである。下手なプログラマには、どうやっても責任は取れない。せいぜい、仕事を退くことによってしか責任を取れない。直そうと思って修正を加えると、どんどん症状を悪化させるだけだから、退くことが唯一の道である。作業から離れて、学習にでも精出してくれれば言うことなしだ。

優秀なプログラマに尻拭いをさせるのは、非常にもったいない。尻拭いをするくらいだったら、初めからその人が作っていれば良い物ができる。しかし、優秀なプログラマの多くは、尻拭いに忙しいのである。低レベルのプログラマを早く締め出すのが急務である。

http://karetta.jp/book-node/okite/003183

http://d.hatena.ne.jp/m-hiyama/20101220/1292806348

追記.

彼の「大間違い」6項目が、論理的にいかにメチャクチャでグダグダであるかを形式的に(formally)説明してあげてもいいのだけど、今はその気力が全然ありません。誰か別な人が僕をつついてくれてもいいですよ :-)

好きにすれば?


全体にあまりに的外れでバカバカしい.全然論理的でもなければ,反論にもなってない.詭弁術の参考にはなるけど,建設的な議論にも論理学の参考にもならないのは必至.

やっぱり,この人もプログラミングの出来ない人なんだろうなあ.

*1:なんなら「センス」と言い換えても良いけど.

*2:実際の所,芸術的にまで美しいコードを読むのはプログラマの楽しみの一つだ.

ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか

ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか

  • 作者: ジュニア,ヘンリー・S.ウォーレン,Jr.,Henry S. Warren,滝沢徹,玉井浩,鈴木貢,赤池英夫,葛毅,藤波順久
  • 出版社/メーカー: エスアイビーアクセス
  • 発売日: 2004/09
  • メディア: 単行本
  • 購入: 35人 クリック: 732回
  • この商品を含むブログ (129件) を見る

*3:野球やサッカーでも同じだと思うけど,小学生の頃「好きだから」と始めた人はたくさんいても,本物の才能を開花させてプロになれるのは,ほんの一握りだけ.好きなのは伸びる必要条件かもしれないが十分条件ではない.現実は残酷だ.

*4:無能な働き者。これは処刑するしかない。
理由は働き者ではあるが、無能であるために間違いに気づかず進んで実行していこうとし、さらなる間違いを引き起こすため。http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%B3%E3%82%B9%E3%83%BB%E3%83%95%E3%82%A9%E3%83%B3%E3%83%BB%E3%82%BC%E3%83%BC%E3%82%AF%E3%83%88