プログラミングが簡単に見えるのは,それはまだ言語学習の第1フェーズしか知らないから
- 「プログラムのどこが難しいの?」http://anond.hatelabo.jp/20150131090608
本日の釣り堀.
プログラムって難しいとか、上達しないとか言ってる人をよく見かけるけど、こんなもんどこが難しいのか理解できない。
どんな言語でも基本的にやることは変わらないし、構文さえ理解できれば後は理解云々というよりは、どう構築するかという話になるわけでそこに言語への難しさなどは無いと思う。ほとんどのプログラマは細かいアーキテクトまでを隅々まで理解している必要はないしハードルもむちゃくちゃ低い。スマートな書き方ができないというのであれば、事細かにコメントを残せば良いだけだ。なによりプログラム上をデータがどのように動くか、そちらのほうが大事だ。こんなもん習得できないやつは向いてないと思う。というか知能レベル低すぎ。
本気でそう思ってるんなら匿名ダイアリーじゃなくて自分のブログで書けや.匿名に逃げてるのは,自分でも本気でそう思ってないからだろ?
あと「どんな言語でも」って具体的に幾つの言語をやったの?実はJavaとC#とVB.net,或いはPHPを触っただけで,世界を知ったつもりなんて勘弁な.*1
「アーキテクトまで理解している必要は無い」って書いてるけど,そこは設計なので「アーキテクチャ(architecture)」だな.「アーキテクト(architect)」だと「設計者」になる.事細かにコメントを遺したところで糞設計や糞コードが救われることはない.
そして日記を削除して逃亡か.どうやら図星だった模様.匿名ダイアリーで良かったな.
「Effective Ruby」のイントロダクションより
新しいプログラミング言語の学習は,通常2フェーズで進む.第1フェーズで,言語の構文や構造を学ぶことに時間を費やす.このフェーズは,新しいプログラミング言語を学んだ経験があれば短期間で終わることが多い.Rubyの場合,構文は,ほかのオブジェクト指向言語の経験がある人にはとてもなじみやすい.言語の構造(構文からどのようにプログラムを組み立てていくか)も,ベテランのプログラマにはおなじみだろう.
- 作者:Peter J.Jones
- 出版社/メーカー: 翔泳社
- 発売日: 2015/01/19
- メディア: Kindle版
それに対し,第2フェーズには少し時間がかかる.このフェーズでは,言語を深く掘り下げ,イディオムを学ぶ.ほとんどの言語は,よく見られる問題を解決するための独特の方法を持っており,Rubyもその例外ではない.たとえば,Rubyは明示的なループではなく,イテレータパターンとブロックの組み合わせを使う.危険を避けながら「Rubyのやり方」で問題を解決する方法を学ぶのがこの段階だ.
この匿名氏は,短期間で終わる第1フェーズを終わっただけで,時間のかかる第2フェーズまで進んでない.しかもこれは「言語学習」の第1フェーズであって,初級プログラマーになるまでだけでも,まだまだ他に学ばなければならないことがあるのだ.
- id:qtamaki 難しさを理解出来るところまで達していないSI系の中堅PGに多い考え方
だいたいそんな感じだと思う.
こういうこと言ってる奴は,あまりに無知すぎて自分が無知であることにさえ,まだ気付いてないだけ.*2
- 作者:
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/12/18
- メディア: 単行本(ソフトカバー)
たとえばJavaを例にとって考えると,
「やさしいJava」レベルなら,こういう馬鹿でもすぐに到達できる.
- 作者:ケン アーノルド,デビッド ホームズ,ジェームズ ゴスリン
- 出版社/メーカー: 東京電機大学出版局
- 発売日: 2014/05/10
- メディア: 単行本
EFFECTIVE JAVA 第2版 (The Java Series)
- 作者:Joshua Bloch
- 出版社/メーカー: 丸善出版
- 発売日: 2014/03/11
- メディア: 単行本(ソフトカバー)
- 作者:Joshua Bloch
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2018/01/06
- メディア: ペーパーバック
そして,たとえば「EffectiveJava」と「Effective JavaScript」と「Effective C++」を読み比べたことはないと断言できる.もし読み比べていたら,「どんな言語でも同じ」だなどと,絶対に言うはずがないから.
Effective JavaScript JavaScriptを使うときに知っておきたい68の冴えたやり方
- 作者:Devid Herman
- 出版社/メーカー: 翔泳社
- 発売日: 2013/04/13
- メディア: Kindle版
- 作者:Bear Bibeault,John Resig
- 出版社/メーカー: 翔泳社
- 発売日: 2013/08/28
- メディア: Kindle版
Effective C++ 第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTI)
- 作者:スコット メイヤーズ
- 出版社/メーカー: 丸善出版
- 発売日: 2014/03/18
- メディア: 単行本(ソフトカバー)
新訂版MORE EFFECTIVE C++ (ADDISONーWESLEY PROFESSIONAL CO)
- 作者:スコット メイヤーズ
- 出版社/メーカー: 丸善出版
- 発売日: 2014/02/28
- メディア: 単行本(ソフトカバー)
- 作者:Matt Galloway
- 出版社/メーカー: 翔泳社
- 発売日: 2013/11/20
- メディア: Kindle版
- 作者:Joseph N. Hall,JoshuaA.McAdams,briandfoy
- 出版社/メーカー: 翔泳社
- 発売日: 2015/02/27
- メディア: Kindle版
- 作者:Damian Conway
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2006/08/24
- メディア: 大型本
「Effective Ruby」というのもあるんだな.まだ見てないけど.*5
- 作者:Peter J. Jones
- 出版社/メーカー: 翔泳社
- 発売日: 2015/01/09
- メディア: 大型本
そして「Effective Python」も...
- 作者:Brett Slatkin
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2015/02/12
- メディア: Kindle版
Effective Python ―Pythonプログラムを改良する59項目
- 作者:Brett Slatkin
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/01/23
- メディア: 大型本
Fluent Python: Clear, Concise, and Effective Programming (English Edition)
- 作者:Luciano Ramalho
- 出版社/メーカー: O'Reilly Media
- 発売日: 2015/07/30
- メディア: Kindle版
- 作者:Bill Wagner
- 出版社/メーカー: 翔泳社
- 発売日: 2009/12/01
- メディア: 大型本
Effective Modern C++ ―C++11/14プログラムを進化させる42項目
- 作者:Scott Meyers
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/09/18
- メディア: 大型本
Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14 (English Edition)
- 作者:Scott Meyers
- 出版社/メーカー: O'Reilly Media
- 発売日: 2014/11/10
- メディア: Kindle版
Effective STL―STLを効果的に使いこなす50の鉄則
- 作者:スコット メイヤーズ
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2002/01
- メディア: 単行本
Effective Typescript: 62 Specific Ways to Improve Your Typescript
- 作者:Dan Vanderkam
- 出版社/メーカー: Oreilly & Associates Inc
- 発売日: 2019/11/05
- メディア: ペーパーバック
少し経路が違う 毛色が違うけど,こんなのもある.
Effective TCP/IP Programming: 44 Tips to Improve Your Network Programs (English Edition)
- 作者:Jon C. Snader
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2000/05/04
- メディア: Kindle版
Effective TCP/IP Programming: 44 Tips to Improve Your Network Programs
- 作者:Jon C. Snader
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2000/05/04
- メディア: ペーパーバック
- 作者:ジョン・C. スネーダー
- 出版社/メーカー: 日経BP
- 発売日: 2001/08/10
- メディア: 単行本
追記
Effective Debugging ―ソフトウェアとシステムをデバッグする66項目
- 作者:Diomidis Spinellis
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/06/24
- メディア: 単行本(ソフトカバー)
- 作者:Diomidis Spinellis
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2016/06/29
- メディア: Kindle版
- 作者:John L. Viescas,Douglas J. Steele,Ben G. Clothier
- 出版社/メーカー: 翔泳社
- 発売日: 2017/12/20
- メディア: 単行本(ソフトカバー)
Effective SQL: 61 Specific Ways to Write Better SQL (Effective Software Development Series)
- 作者:John L. Viescas,Douglas J. Steele,Ben G. Clothier
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2016/12/30
- メディア: ペーパーバック
こんなものまでEffectiveなんとか.
Effective DevOps ―4本柱による持続可能な組織文化の育て方
- 作者:Jennifer Davis,Ryn Daniels
- 出版社/メーカー: オライリージャパン
- 発売日: 2018/03/24
- メディア: 単行本(ソフトカバー)
- 作者:Jennifer Davis,Ryn Daniels
- 出版社/メーカー: O'Reilly Media
- 発売日: 2016/05/30
- メディア: Kindle版
あれ,まぎらわしいけど,こっちは別の書籍なのか?
- 作者:Nathaniel Felsen
- 出版社/メーカー: Packt Publishing
- 発売日: 2017/07/31
- メディア: Kindle版
しかしEffective PHPというのはないのか.やはりバッドノウハウの塊だからかな.
Modern PHP: New Features and Good Practices (English Edition)
- 作者:Josh Lockhart
- 出版社/メーカー: O'Reilly Media
- 発売日: 2015/02/16
- メディア: Kindle版
言語の違いについては刃物の例えが良いだろう.たとえば包丁でも洋包丁と和包丁と中華包丁では,形も使い方も異なる.和包丁でも菜切り包丁と刺身包丁と出刃包丁では用途も使い方も異なる.*6それぞれに合わせた使い方ができて,ようやく一人前の料理人になれる.
そして「刃物」という視点で見ると,それら包丁というのはその一部でしかない.世の中にはカッターナイフやハサミやノコギリ(木工用両刃ノコギリ,糸鋸,回し引き鋸,金属用鋸.はてはチェーンソーや(電動)丸鋸なども),彫刻刀,斧に鉞,鉈,さらには日本刀/太刀など,さまざまな刃物が存在する.どれを使っても紙を切るくらいならできるかもしれないが,それではそれらの刃物を使いこなしているとはいえないだろう.
この匿名氏のように「どの言語でも同じ」と言ってるのは,刃物の特製を全く理解せずに木工用ノコギリで刺身を作ったり,斧で芋の皮むきをしたり,出刃包丁で薪割りをしたりするような物だよ.
さて,そういう言語レベルの学習に加えて,アルゴリズムとデータ構造とかデザインパターンとか,1万行以上の実用レベルのコードを,十分な可読性,メンテナンス性,拡張性,テスト可能性等々を維持した状態で書けるようになって,ようやく初心者プログラマーになれる.たぶんこの匿名氏は,まだその出発点にさえ達していない.
Numerical Recipes 3rd Edition: The Art of Scientific Computing
- 作者:William H. Press,Saul A. Teukolsky,William T. Vetterling,Brian P. Flannery
- 出版社/メーカー: Cambridge University Press
- 発売日: 2007/09/06
- メディア: ハードカバー
- 作者:George T. Heineman,Gary Pollice,Stanley Selkow
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/04/26
- メディア: 単行本(ソフトカバー)
- 作者:エリック ガンマ,ラルフ ジョンソン,リチャード ヘルム,ジョン ブリシディース
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 1999/10
- メディア: 単行本
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
- 作者:Dustin Boswell,Trevor Foucher
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/06/23
- メディア: 単行本(ソフトカバー)
Code Complete 第2版 上 完全なプログラミングを目指して
- 作者:スティーブ マコネル
- 出版社/メーカー: 日経BP
- 発売日: 2014/04/02
- メディア: Kindle版
そしてその先には,たとえば並列/平行プログラミングや分散システムのような,さらに難易度の高いプログラミングの世界が横たわっている.
Java並行処理プログラミング ―その「基盤」と「最新API」を究める―
- 作者:Brian Goetz,Joshua Bloch,Doug Lea
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2006/11/22
- メディア: 単行本
The Art of Multiprocessor Programming 並行プログラミングの原理から実践まで
- 作者:Maurice Herlihy,Nir Shavit
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2009/09/01
- メディア: 大型本
http://anond.hatelabo.jp/20150131105001
C++のテンプレートライブラリの実装を俺に教えてくれ。
boost graphとか、実装どころか使おうとするだけで意味不明すぎて挫折したんだ。
http://anond.hatelabo.jp/20150131154439
この程度で思考が止まるような人間ばかりがそのへんにゴロゴロいたりするから、
クズみたいなプロダクトと、その尻拭いをするプログラマだけが取り残されるんだよなあ。
激しく同意...orz
http://b.hatena.ne.jp/entry/anond.hatelabo.jp/20150131090608
- id:karumado わかった!貴殿の力でみ◯ほのプロジェクトを救ってくれ!!
せやなw
- id:qtamaki 難しさを理解出来るところまで達していないSI系の中堅PGに多い考え方
- id:ms6145vv 「うこけばいい」だけの要件で生み出されたクソコードを保守させたい。
- id:naoya2k こういう人たちに「簡単に実装できるじゃん」って思わせるところまで問題を分割したり全体の設計をするところが難しいんですけど
- id:ka-ka_xyz "プログラムの難しさ"って一言でいわれても、言語レベルの話から、拡張性やメンテナンス性まで踏まえた設計の話まで色々とある訳で。なんつーかこー、懐かしい。これが若さか。
- id:vamview チャールズ・ダーウィンは『熟知よりも無知の方が自信の源になる』と語っています。このように正確な自己評価が欠如していること、つまり未熟でありながらそれに気づいていないことを『二次無能力』と呼びます。
- id:a2ikm 文法や標準ライブラリの使い方さえわかっていればなんでもできると思っていた時期が僕にもありました…
- id:takhasegawa ブログラマじゃない人向けに言うと、大工「家建てるのなんて簡単。木を切って釘を打つだけじゃないか」小説家「小説書くのなんて簡単。日本語の文法で文字を書くだけだろ」みたいな話。難しさの本質はそこじゃない
まともな小説家や大工なら,それが問題の本質でないことを理解している.だからそういう風な形で「簡単じゃないか」とは言わないはず.
- id:northlight 某銀行の話はプログラミングの問題じゃないだろうに…
半分正しいけど,でもねえ.
言語の違いが問題の一つだから.匿名氏の主張のように「どの言語でも同じ」なら,COBOLでもJavaと同程度の保守性が実現できるはず.しかしこの匿名氏の描いた未来は,JavaでもCOBOLと同程度の保守性にまで貶めるものだ.
でもおそらくコンピューターサイエンスの専門教育は受けてない.専門教育を受けているにしては無知すぎる.文系学部出身かもしれない.それこそ文学部や経済学部を出て2〜3年超入門レベルのプログラミングを囓っただけで,「俺スゲー」と勘違いしちゃった残念な人かも.
*1:
*2:「スゲー天才であらゆる言語をたやすくマスターした」という可能性はまずない.天才なら,各言語の違いを理解し,各言語ごとに異なるコーディングの注意点を列挙してくれることだろう.
*3:「C++ の必読本は簡単にいえば C++ in-Depth シリーズ全部なのですが、それはプログラミング言語的に普通のことではなく、 C++ がおかしい、ということは忘れてはいけないと思います。」 http://d.hatena.ne.jp/JavaBlack/20101128/p1
*4:
*6:それ以外にも何十種類(以上?)もの和包丁が存在するらしいが,素人レベルならこの三つくらいで十分だろう.