「プログラミングは簡単に学べる」というのは嘘か 156
ストーリー by hylom
気がついたらプログラミングをしていたので是非についてはコメントできません 部門より
気がついたらプログラミングをしていたので是非についてはコメントできません 部門より
あるAnonymous Coward 曰く、
FreeCodeCampというオープンソースベースのプログラミング学習サービスがあるのだが、そのサイトに「One does not simply learn to code(「プログラミングは簡単に学べる」という嘘)」という興味深い記事があったので紹介したい(オリジナル記事)。
世の中には「プログラミングは簡単です」という言説が多々溢れているが、これはマーケティング的にそう語られている場合が多く、次いでベテランの開発者が「知識の呪い」として初心者の気持ちを思いだせなくなり、そうした発言をしているケースが多々あるという。例えば、巷のチュートリアルには「単にSalesforceのAPIと統合するだけ」や「ただAWSにデプロイするだけ」などと書かれたページが見られるが、こうした内容は初心者にとっては全く簡単なことではない。こうしたページの作者は、自分と同程度のスキルを持った読者を想定してデザインしてしまっており、「簡単」という言葉を使っているようなチュートリアルは避けるべきとしている。
スラドにはプログラミングが出来る側の人が多いと思われるが、プログラミングは簡単or難しいどちらだろうか?
何を持って学んだと言えるのか (スコア:4, おもしろおかしい)
1.教育用のシンプルなソースコードを読んで意味を説明できる
2.教育用のシンプルなソースコードを修正して動きをちょっとだけ変える
3.教育用のソースと同レベルの要件に対して0からソースコードを書ける
4.オープンソースで提供されているアプリのソースコードを修正して動きをちょっとだけ変え
5.業務で 0 からソースコードを書く
6.外注先が作った、カプセル化の概念がほとんどない 100Ks を超えるソースコードの中から障害の原因を探しだし、多数のモジュールに変更が必要なことに怨嗟のうめきを上げながら管理職に報告、「なんでそんなことになってるんだ」と怒られつつ毎日終電まで修正する
どのあたりまでできたら「プログラミングを学んだ」って言えるんでしょ
(2.あたりまでなら「簡単に」って言っても差し支えがない気がする)
# mishimaは本田透先生を熱烈に応援しています
Re:何を持って学んだと言えるのか (スコア:1)
教うるは学ぶの半ばなり by 孔子 (スコア:2)
5と6の間は絶壁ですね。
全くプログラムができない管理職に説明するのは超がつくほどたいへんだし、
プログラムができる人に説明するのは超簡単。
同じ理屈でエンドユーザに説明するのは、かなり大変。
私は、孔子が「教うるは学ぶの半ばなり」というように、
新人に教えられれば、プログラマと呼べるんじゃないでしょうか。
Re:何を持って学んだと言えるのか (スコア:1)
単体動作のアプリケーションを作るのと、複雑なシステムの動きを動作を理解したうえで動作を変更する修正を行うのとでは、天と地の差があるものなあ。システムの仕様を理解するだけで、600MBものドキュメントファイルを読んで理解しなきゃならないとか地獄だよなあ。まあ、ドキュメントファイルが全くなくて、既存システムのソースコードすらないなんて案件もあったけれどね。
Re:何を持って学んだと言えるのか (スコア:1)
このためいまでは逆説的に、直接的な応用化を個々で学ぶよりも、
その可能性を全体的に広げる道具自体の使い方のほうの重要度が増しています。
何を言っているのかよくわからんな
# mishimaは本田透先生を熱烈に応援しています
医者は例えとしてどうかな (スコア:2)
医者は簡単になれないけど、小説家は誰でも名乗ることはできるでしょう。
小説もプログラミングも普通は人命や健康に対する責任を伴いませんし。
料理 (スコア:1)
もっと単純に、「料理」でしょう。
料理もある意味プログラミングですよ。
アルゴリズム=材料の性質
データ構造=仕込み(皮をむく、切る)
これらをフローに沿って組み上げていくと料理が出来上がります。
一人暮らしの男の自炊から、料理上手な専業主婦、プロの料理人、プロでも中華、和食、フレンチとプログラマにもいろいろ。
レトルトはフレームワーク。
レトルトを使うと料理の手間が幾分か省ける。
カップ麺みたいなインスタント食品はpkgやyum/rpmみたいな。
料理が簡単か難しいかと言えば、簡単な料理もあるというだけの話。
Re:料理 (スコア:2)
アルゴリズム=材料の性質
データ構造=仕込み(皮をむく、切る)
むしろあなたが料理の何を知っているのかもの凄く不安になる。
Re:医者は例えとしてどうかな (スコア:4, おもしろおかしい)
記事にある「AWSにデプロイするだけ」と同じで、「動くものならすぐできる」も微妙な気が。
生徒「説明通りに打ち込んだのに、なんだか動かないんですけど!!」
講師「どれどれ…」
main()
{
printf(”hello, world¥n”);
}
Re:医者は例えとしてどうかな (スコア:1)
#include <studio.h>
Re:医者は例えとしてどうかな (スコア:1)
Re:医者は例えとしてどうかな (スコア:3, すばらしい洞察)
その説明はプログラミングの解説なのか?という点が興味深いと思う
「全角文字と半角文字があって、プログラムを組むときは半角文字でやってください」という抽象的な(あるいは理由などはすっ飛ばした)注釈でもいいけど、それを重ねるとサンプルプログラム以上のものが作れないプログラマーにしかなれない
だからどこかで概念や動作原理もある程度理解していく必要があるんだけど、入門書でそこまでカバーするのって難しくて、かといって上級者向けの本にはわざわざそんな基礎的なことは書いてないから学び辛い、とかね
なにも文字の話に限らず、たとえばコマンドラインからビルドする方法の解説が不親切で初心者が躓いたとか、HTTP・TCP/IPへの知識が足りなすぎてWebアプリ作ってもバグバグにしかならないとか、そういうことは普通に起きるからなぁ
20年以上前の、いわゆるBASICが動いてたマイコンみたいに、OSもミドルも抽象化も意識する必要が無い完結した環境でならともかく、今のプログラミングは「プログラミングをする上で学ばないといけない、プログラミング言語以外の要素」が割と多いし、それを体系的に学ぶ方法が用意されてないとハードル高いんだと思うよ
# 文字コード云々だって業務レベルで色々問題になるレイヤーの話を適切にできる人ってSE見ててもさほど多く無いし
# Webアプリ作ってる人でもHTTP(s)の仕様をきちんと意識してるとは限らないっていうね
Re:医者は例えとしてどうかな (スコア:1)
このコメントのどこにボケが潜んでいるのか、私は一所懸命探しましたが…
…なんの成果も!! 得られませんでした!! (AA略
# そういやあ連載読まなくなって久しいなあ(えー
Re:医者は例えとしてどうかな (スコア:1)
その昔、某国民機の日本語環境には、「2バイト半角文字」とか呼ばれる奇矯な英数字が存在していた。
C言語の入門書に「某某のFEPは切ること」とか書いてあったのを覚えている。
幸か不幸か、意識して使ったことはない。
Re:医者は例えとしてどうかな (スコア:1)
test.cだと思ったか?残念test.c.txtでした!
Re:医者は例えとしてどうかな (スコア:2)
と思ったか?
これはtest.c.txt .exe、だ。
Re:include 文がない (スコア:2)
「アイフォーンでゲームが作りたい」
そう言いながら、彼はすっとAndroid携帯を取り出した。
「これで作ってテストプレイできる?」
目的がハッキリしていれば簡単。 (スコア:2)
プログラミングを覚えることが目的だと困難を極める。
なんででしょうねw
Re:目的がハッキリしていれば簡単。 (スコア:2)
網羅的にやるのは何であれ困難を極めると思うけど。
Re:目的がハッキリしていれば簡単。 (スコア:3)
(英語なんかも同じ罠におちますよね。使えりゃ問題ない,という意味では)
ゲームが作りたいからプログラムを覚える,てのも無理ゲーパターンかな。
「どんなゲームを作るのか」と考えてルールに落とし込まないと。
まずはそこが大事で,
じゃあそれをどうコンピュータゲームに落とし込むのか,
という時に初めてプログラミングの必要性が出てくる。
んで,その解決には決して網羅的になる必要はないですもんね。
困難に思えるのは (スコア:1)
何かを極めようとするからでは。勿論プログラミングに限った話ではないが。
モデレータは基本役立たずなの気にしてないよ
Re:困難に思えるのは (スコア:2)
プログラムが組めるようにはならない,ってことだけなんですがw
うまく表現できないけど,プログラムってもっと根っこの部分ですよね。
Re:目的がハッキリしていれば簡単。 (スコア:1)
中学の時にマシン語の参考書を読んで勉強してた頃
「だからアキュムレータに値を足したり引いたりしてなんなんだよ!」
と憤ったことがあったなあ。
その後、ディスプレイに8bitの直線を引くというサンプルを動かして初めて「なるほど!」と理解できたもんです。
hello world並みの簡単プログラムだったけど、ただ学習するのと目的もってサンプル書くのではえらい差だなぁと今思いますね。
ちゃぶ台返し (スコア:2)
くだらない話で済みません。原文にちゃぶ台返しの絵があって吹いた。ほんとにそう書いてあったのか。
英文でいきなりこれが出てくるとは。みなさん、わかったのかね。声に出して読むと:
chabudai-gaeshiは英語だったんだ……。
それは、文章を書くのは簡単だと言うことと同じだ。 (スコア:2)
確かに書くだけなら簡単だろう。文字を、単語を、文法を覚えれば、書くことはできる。
だが、文章を書くことによって(読者に伝えたいことを伝えるという)目的を果たすこと
となるとどうだろう。伝えるべき内容が多く、複雑になるほどそれは簡単ではなくなる。
「プログラミング」という言葉を、「文法エラーのないプログラムを書くこと」と
取るなら簡単だ。だが、「思い通りの動作をするプログラムを書くこと」と取るなら、
難易度は「思い通りの動作」の複雑度次第となる。ただそれだけの話。
子供の頃からやってたから (スコア:2)
正確にいうと、他の事に比べて特に難しいというわけではなかった。
1km走るとかの方がよっぽど困難だった。
実際には、雑誌のコードの打ち込みとバグ探しだけで何時間もかけていたんだから、今の時間尺度で考えると簡単にやっていたわけじゃないんだけど、苦痛ではなかった。
#子供だから苦痛なら自分からはやらないよね
だからプログラミングが想像していた以上に難しいと考えるようになったのは大学に入ってから。工学部の情報工学科というフィルターを通してすら、プログラミングが理解できてそうなのは5%ぐらいしかいなく思えた。さらに就職したら、プロを名乗ってもこんなものなのかと感じた。
やっぱりプログラミングは特殊技能だよ。
だから、もっと高い報酬をよこせ。
#困難な仕事をやり遂げた報酬は、もっと困難な仕事
大抵のもんは入門は簡単 (スコア:1)
アマチュアが入門本を読んでちょっと触ってみたり遊ぶのは簡単
クライアントや上司が示した要求・仕様を、エラー時の動作も含めてきちんと設計・実装したり
多人数で一つの大きなソフトウェアを開発したりするといったような、プロの仕事は難しい。
Re:大抵のもんは入門は簡単 (スコア:2)
プログラムはとっかかりが大変。
数行のプログラムでもすっと浸みれば,
10行も1万行も同じだと思う。
Re:大抵のもんは入門は簡単 (スコア:2)
あと,Unityとかミドルウエア使えば,
23年前にドットから3Dの波に乗り遅れた中年でも3Dゲーム作れちゃうし。
Re:大抵のもんは入門は簡単 (スコア:1)
素人は意味が分かってないから、
単なる写経でもTypoだらけでろくに動かないよ。
9割の日本人は英語のエラー文が出た瞬間頭がショートして逃げだしてしまうからな。
Re:大抵のもんは入門は簡単 (スコア:1)
そうなんだよね。なんで英語だと思うと閉じるのかね。
「なんかエラー出た」
「なんて書いてあった?」
「閉じたので分かりません」
「読めよ」
Re:大抵のもんは入門は簡単 (スコア:2)
10yy
p
42195yy
p
手間は log(42195)/log(10) 倍くらいじゃないかなあ。
Re:大抵のもんは入門は簡単 (スコア:1)
vi/ex/ed 系統を蛇蝎のごとく忌み嫌う人の場合のこともご考慮いただきたく。
Re:大抵のもんは入門は簡単 (スコア:3)
解せぬ!(ESC):q!
簡単ですよ(ただし条件付き)。 (スコア:1)
1^1の知識量とでも言うか。
ただ次のステップに進むためには2^2の知識、その次には3^3の知識量・・・って感じでしょうか。
結局、根底にはアセンブラの考え方が流れていたりして、高級言語はそれをなるべく隠しているだけに過ぎませんし。
でもまあ、体得するには動機も必要ですからね。
私は高速に動く言語が欲しくてCからアセンブラに移行しようとしたら、当時のGCCの最適化が私の書くアセンブラより速くてCに定住してしまいましたし。
今は既製品(商用のみならずフリー含む)で済む場合が多いですからね、その気になれない時代でもありますよね。
Re:簡単ですよ(ただし条件付き)。 (スコア:2, おもしろおかしい)
プログラムの話題ゆえか、^がべき乗記号じゃなくてXOR演算子に見えて、全部0じゃん!って思ってしまった
Re:簡単ですよ(ただし条件付き)。 (スコア:1)
データレジスタを4バイト長で0初期化するなら move.l #0,Dn より clr.l Dn なんですねー。
確かもう少し速いので eor(xor)使うのがあったと思ったけど、思い違いでした。
と言うか加算の最速が4クロックで、乗算の最速が70クロック(*1)だとか、当時からして使うと遅くなるとか使うなとか言われてましたね。
*1:正しくはクロック表記が『<70』で、最大70クロックと言う意味なのかも・・・。
Re:簡単ですよ(ただし条件付き)。 (スコア:1)
×wprld
○world
これはリテラル部分だから動作するでしょうけど、
おそらく本来の目的である『画面にHello world.と表示する』は達成できません。
揚げ足取りみたいになってしまいましたが、
ちょっとした入力ミスはすごくよくあることで、
これが prinrf だったら、コンパイルエラーになってしまいます。
言語や処理系によりますが、エラーメッセージって親切とは言いがたいですし。
苦手な人間が引っかかると、
『動くはずのものが動かなくて、何で動かないかもわからない』
になっちゃうわけで。
『正しく動かない原因をつきとめて修正する』
という技能というかノウハウが、わりと早期からに必要になってきますが、
これがなかなか難しいと考えます。
Re:簡単ですよ(ただし条件付き)。 (スコア:1)
昔は"Syntax error in xxx"でしたからね。
初心者に、もっと難しかったのが"Illegal function call in xxx"でした。
まあ、エラーが出てくれれば良い方なんですけど(^^;
マシン語/アセンブラを実行した時の、ノーコンになった時の妙な間の沈黙(笑)。
ぶっちゃけた話、割り込みなど複雑な制御構造があるにせよシングルタスクである限り、実行は一筆書きなんですよね。
順番を追う習慣さえ身に付けば、デバッグも捗るもので。
でもおっしゃるように、難しいですよね(^^;
Re:簡単ですよ(ただし条件付き)。 (スコア:1)
Cコードとアセンブラ列のクロックを数えて比較して、勝手にダメージ受けていました。
ただ、移行しようとして挫けたぐらいの技量だった事をお察しくださいませm(__)m
それでも、結果的にはそれで良かったかも。
ターゲットは68000だったのですが、アセンブラレベルの思考は多少身に付いた段階でCに戻った事で、今でもCで書いています。
趣味グラマなので、メインはこれで良いかなと。
同趣旨の記事 (スコア:1)
「コーディングを学ぶこと、それはあなたが考えるよりも大変です」
http://postd.cc/learn-to-code-its-harder-than-you-think/ [postd.cc]
プログラミングは簡単です。 (スコア:1)
※個人の感想です。
Re:向き不向き (スコア:1)
あるまとまった作業をステップに分解してループなどに再構成するという考え方が
得意な人と苦手な人がいるみたいだけど
Re:ここまでのコメントを見て思ったんですが (スコア:2)
生存者バイアスですかね
// 言ってみたかっただけ
Re:ここまでのコメントを見て思ったんですが (スコア:1)
ループすら理解できない人も世の中にはいます。一説には「代入」が最初のハードルになるとか。
はい。
最初のプログラミング(大学の夏期講習)では、どちらも全く理解できませんでした。
あまり説明もない、「BASICなんてとにかく手を動かせばそのうちわかる」的なポリシーの講習でした。
フロッピーディスクをフォーマットしたことと、打ち慣れないキーボード操作に肩が凝って目が疲れたことくらいしか覚えてないです。
Re:ここまでのコメントを見て思ったんですが (スコア:1)
だってa=bが代入でA==Bが左右が同じと示すんだぜ。そのくせ同じか小さいと同じか大きいは=なんだ。どう考えても狂ってる。
Re:なんでも (スコア:1)
>茹で卵を作るだけなら、誰でも出来るし簡単。
「誰でも出来るし簡単」とか言って甘く見てるとこうなるという事例
http://matome.naver.jp/odai/2142760472028501701 [naver.jp]
>こうしたページの作者は、自分と同程度のスキルを持った読者を想定してデザインしてしまっており、「簡単」という言葉を使っているようなチュートリアルは避けるべきとしている。
なるほど至言
Re:なんでも (スコア:1)
>そこまで言いだしたら世の中に簡単なものなんて無いでしょ。
正解
>こうしたページの作者は、自分と同程度のスキルを持った読者を想定してデザインしてしまっており、「簡単」という言葉を使っているようなチュートリアルは避けるべきとしている。
なるほど至言
Re:不得意な人の意見が少ないのかな (スコア:1)
教科・課目だけでなく、教える人、教わる場所、その背後の組織を憎んで攻撃する者も出てくるのかなあ。
// そうならないことを願うが、果たしてどうなる?
結局は作文なのでは? (スコア:2)
プログラミングって言葉の定義をどうするかって事もあるが、
とりあえず任意の言語による作文をプログラミングと定義するなら、
プログラミングが簡単かどうかは作品の難易度に依存する話になると思う。
少なくとも、母国語で作文して自分の言いたいことを伝えることが出来るなら、
プログラミング能力の素地はあるはず。
しかし、それを外国語でやれと言われると、
途端に難易度が上がる人がほとんどだろうし、
一流と言わないまでも、市販の書籍レベルの成果物を求められると
それは困難以外の何者でもないだろう。
自分の場合、実行環境とマニュアルが手元にあるプログラミング言語の場合、
未体験の言語でも数千~数万行くらいなら、
時間さえあれば、まぁ何とか書けそうな気がする。
しかし外国語の場合、それが仮に英語であっても、数行すら難しく感じる。
これは、実行環境が手元にあるプログラミング言語なら
実験と検証を繰り替えして正しいことに確信が持てるが、
外国語の場合は、正しいことに確信を持つための容易な手段がないため、
非常にハードルが高くなっているように思う。
人に聞けば良いのだろうけれど、
This is a pen. レベルの疑問をいつでも気軽に聞けて、
しかも根気よく付き合ってくれるネイティブレベルの人を見つけるのは容易ではない。
そういう意味では、実験と検証を行う能力があるなら、
プログラミング言語は通常の外国語よりも簡単な気がする。
uxi