「プログラミングは簡単に学べる」というのは嘘か 52
ストーリー by hylom
気がついたらプログラミングをしていたので是非についてはコメントできません 部門より
気がついたらプログラミングをしていたので是非についてはコメントできません 部門より
あるAnonymous Coward 曰く、
FreeCodeCampというオープンソースベースのプログラミング学習サービスがあるのだが、そのサイトに「One does not simply learn to code(「プログラミングは簡単に学べる」という嘘)」という興味深い記事があったので紹介したい(オリジナル記事)。
世の中には「プログラミングは簡単です」という言説が多々溢れているが、これはマーケティング的にそう語られている場合が多く、次いでベテランの開発者が「知識の呪い」として初心者の気持ちを思いだせなくなり、そうした発言をしているケースが多々あるという。例えば、巷のチュートリアルには「単にSalesforceのAPIと統合するだけ」や「ただAWSにデプロイするだけ」などと書かれたページが見られるが、こうした内容は初心者にとっては全く簡単なことではない。こうしたページの作者は、自分と同程度のスキルを持った読者を想定してデザインしてしまっており、「簡単」という言葉を使っているようなチュートリアルは避けるべきとしている。
スラドにはプログラミングが出来る側の人が多いと思われるが、プログラミングは簡単or難しいどちらだろうか?
医者は例えとしてどうかな (スコア:2)
医者は簡単になれないけど、小説家は誰でも名乗ることはできるでしょう。
小説もプログラミングも普通は人命や健康に対する責任を伴いませんし。
Re: (スコア:0)
極めて高度な信頼性が要求される用途(以下「ハイセイフティ用途」という)がうんたらかんたら
Re: (スコア:0)
例えとしてなら日本語でよいかも
バグのないプログラムを組むのは至難の業だけど、一応動くものならすぐできる
ちゃんとした文法でしゃべることは難しいけど、一応意味を伝えることならすぐできる
おまけに方言を操る人などいてそっくり
Re:医者は例えとしてどうかな (スコア:3)
記事にある「AWSにデプロイするだけ」と同じで、「動くものならすぐできる」も微妙な気が。
生徒「説明通りに打ち込んだのに、なんだか動かないんですけど!!」
講師「どれどれ…」
main()
{
printf(”hello, world¥n”);
}
Re: (スコア:0)
これだけだと何とも言えない
2バイト文字では問題があるので、半角で入力しなさいという説明が足りてないだけに思えるよ
特に完全な初心者を相手にした授業の場合でなら尚更
Re:医者は例えとしてどうかな (スコア:1)
その説明はプログラミングの解説なのか?という点が興味深いと思う
「全角文字と半角文字があって、プログラムを組むときは半角文字でやってください」という抽象的な(あるいは理由などはすっ飛ばした)注釈でもいいけど、それを重ねるとサンプルプログラム以上のものが作れないプログラマーにしかなれない
だからどこかで概念や動作原理もある程度理解していく必要があるんだけど、入門書でそこまでカバーするのって難しくて、かといって上級者向けの本にはわざわざそんな基礎的なことは書いてないから学び辛い、とかね
なにも文字の話に限らず、たとえばコマンドラインからビルドする方法の解説が不親切で初心者が躓いたとか、HTTP・TCP/IPへの知識が足りなすぎてWebアプリ作ってもバグバグにしかならないとか、そういうことは普通に起きるからなぁ
20年以上前の、いわゆるBASICが動いてたマイコンみたいに、OSもミドルも抽象化も意識する必要が無い完結した環境でならともかく、今のプログラミングは「プログラミングをする上で学ばないといけない、プログラミング言語以外の要素」が割と多いし、それを体系的に学ぶ方法が用意されてないとハードル高いんだと思うよ
# 文字コード云々だって業務レベルで色々問題になるレイヤーの話を適切にできる人ってSE見ててもさほど多く無いし
# Webアプリ作ってる人でもHTTP(s)の仕様をきちんと意識してるとは限らないっていうね
Re:医者は例えとしてどうかな (スコア:1)
このコメントのどこにボケが潜んでいるのか、私は一所懸命探しましたが…
…なんの成果も!! 得られませんでした!! (AA略
# そういやあ連載読まなくなって久しいなあ(えー
Re:医者は例えとしてどうかな (スコア:1)
その昔、某国民機の日本語環境には、「2バイト半角文字」とか呼ばれる奇矯な英数字が存在していた。
C言語の入門書に「某某のFEPは切ること」とか書いてあったのを覚えている。
幸か不幸か、意識して使ったことはない。
include 文がない (スコア:0)
しかも本によっては、本当に書いてなかったりする初心者むけ本があるから困る。
”必須なものすら何かすらわからないから初心者なんだよ。”
Re: (スコア:0)
処理系が悪い。
2バイト文字も許容すればいいだけの話。
Re: (スコア:0)
#include "io.h"
を挿入するのも処理系がやる事なんだろうか。
Re: (スコア:0)
2バイト文字で問題があるのではなく、見かけが似ていても違う文字であるということを教えた方がいいでしょう。
それと併せて文脈ごとに使用できる文字および用途が限定されていることも。
料理 (スコア:0)
もっと単純に、「料理」でしょう。
料理もある意味プログラミングですよ。
アルゴリズム=材料の性質
データ構造=仕込み(皮をむく、切る)
これらをフローに沿って組み上げていくと料理が出来上がります。
一人暮らしの男の自炊から、料理上手な専業主婦、プロの料理人、プロでも中華、和食、フレンチとプログラマにもいろいろ。
レトルトはフレームワーク。
レトルトを使うと料理の手間が幾分か省ける。
カップ麺みたいなインスタント食品はpkgやyum/rpmみたいな。
料理が簡単か難しいかと言えば、簡単な料理もあるというだけの話。
目的がハッキリしていれば簡単。 (スコア:2)
プログラミングを覚えることが目的だと困難を極める。
なんででしょうねw
Re:目的がハッキリしていれば簡単。 (スコア:2)
網羅的にやるのは何であれ困難を極めると思うけど。
Re:目的がハッキリしていれば簡単。 (スコア:3)
(英語なんかも同じ罠におちますよね。使えりゃ問題ない,という意味では)
ゲームが作りたいからプログラムを覚える,てのも無理ゲーパターンかな。
「どんなゲームを作るのか」と考えてルールに落とし込まないと。
まずはそこが大事で,
じゃあそれをどうコンピュータゲームに落とし込むのか,
という時に初めてプログラミングの必要性が出てくる。
んで,その解決には決して網羅的になる必要はないですもんね。
困難に思えるのは (スコア:1)
何かを極めようとするからでは。勿論プログラミングに限った話ではないが。
【アレゲ】阿蘇山で36年ぶりのブルカノ式爆発、噴煙の高さは11,000メートルに http://srad.jp/submission/68118/
Re:困難に思えるのは (スコア:2)
プログラムが組めるようにはならない,ってことだけなんですがw
うまく表現できないけど,プログラムってもっと根っこの部分ですよね。
Re:目的がハッキリしていれば簡単。 (スコア:1)
中学の時にマシン語の参考書を読んで勉強してた頃
「だからアキュムレータに値を足したり引いたりしてなんなんだよ!」
と憤ったことがあったなあ。
その後、ディスプレイに8bitの直線を引くというサンプルを動かして初めて「なるほど!」と理解できたもんです。
hello world並みの簡単プログラムだったけど、ただ学習するのと目的もってサンプル書くのではえらい差だなぁと今思いますね。
大抵のもんは入門は簡単 (スコア:1)
アマチュアが入門本を読んでちょっと触ってみたり遊ぶのは簡単
クライアントや上司が示した要求・仕様を、エラー時の動作も含めてきちんと設計・実装したり
多人数で一つの大きなソフトウェアを開発したりするといったような、プロの仕事は難しい。
Re:大抵のもんは入門は簡単 (スコア:2)
プログラムはとっかかりが大変。
数行のプログラムでもすっと浸みれば,
10行も1万行も同じだと思う。
Re: (スコア:0)
いわゆる写経は出来ても
そこから何かを足したり引いたりが全くできない新人を見たことがあるので
簡単という部分も人によってかなり変わるんだというイメージ
付け足すといっても、フォームの項目一つ足すことも出来なかったんだ…
Re: (スコア:0)
どんな初心者でもスーパーハッカーのコードをコピペすればスーパーハッカーと同じプログラムができあがるんだぞ。
プロ野球選手と同じフォームで素振りしたってホームラン打てないのと比べれば「ずっと簡単」と言っていい。
Re:大抵のもんは入門は簡単 (スコア:1)
素人は意味が分かってないから、
単なる写経でもTypoだらけでろくに動かないよ。
9割の日本人は英語のエラー文が出た瞬間頭がショートして逃げだしてしまうからな。
Re: (スコア:0)
どんな初心者でもスーパーハッカーのコードをコピペすればスーパーハッカーと同じプログラムができあがるんだぞ。
残念ながら、他者の制作物と全く同じプログラムに付加価値はない。
Re: (スコア:0)
著作物としては無価値でも秘伝のたれの継ぎ足しみたいな仕事がありますけどね
Re: (スコア:0)
せやな
そんなん夏休みの工作や日曜大工と
モノホンの大工を比べてみれば当然のことやがな
Re:大抵のもんは入門は簡単 (スコア:2)
あと,Unityとかミドルウエア使えば,
23年前にドットから3Dの波に乗り遅れた中年でも3Dゲーム作れちゃうし。
Re: (スコア:0)
10m走るのが簡単だからといって、フルマラソンを世界標準記録で走るのが簡単ではないということと同じだよ。
Re: (スコア:0)
簡単ですよ(ただし条件付き)。 (スコア:1)
1^1の知識量とでも言うか。
ただ次のステップに進むためには2^2の知識、その次には3^3の知識量・・・って感じでしょうか。
結局、根底にはアセンブラの考え方が流れていたりして、高級言語はそれをなるべく隠しているだけに過ぎませんし。
でもまあ、体得するには動機も必要ですからね。
私は高速に動く言語が欲しくてCからアセンブラに移行しようとしたら、当時のGCCの最適化が私の書くアセンブラより速くてCに定住してしまいましたし。
今は既製品(商用のみならずフリー含む)で済む場合が多いですからね、その気になれない時代でもありますよね。
Re:簡単ですよ(ただし条件付き)。 (スコア:1)
プログラムの話題ゆえか、^がべき乗記号じゃなくてXOR演算子に見えて、全部0じゃん!って思ってしまった
何を持って学んだと言えるのか (スコア:1)
1.教育用のシンプルなソースコードを読んで意味を説明できる
2.教育用のシンプルなソースコードを修正して動きをちょっとだけ変える
3.教育用のソースと同レベルの要件に対して0からソースコードを書ける
4.オープンソースで提供されているアプリのソースコードを修正して動きをちょっとだけ変え
5.業務で 0 からソースコードを書く
6.外注先が作った、カプセル化の概念がほとんどない 100Ks を超えるソースコードの中から障害の原因を探しだし、多数のモジュールに変更が必要なことに怨嗟のうめきを上げながら管理職に報告、「なんでそんなことになってるんだ」と怒られつつ毎日終電まで修正する
どのあたりまでできたら「プログラミングを学んだ」って言えるんでしょ
(2.あたりまでなら「簡単に」って言っても差し支えがない気がする)
# mishimaは本田透先生を熱烈に応援しています
Re:何を持って学んだと言えるのか (スコア:1)
Re: (スコア:0)
単体動作のアプリケーションを作るのと、複雑なシステムの動きを動作を理解したうえで動作を変更する修正を行うのとでは、天と地の差があるものなあ。システムの仕様を理解するだけで、600MBものドキュメントファイルを読んで理解しなきゃならないとか地獄だよなあ。まあ、ドキュメントファイルが全くなくて、既存システムのソースコードすらないなんて案件もあったけれどね。
ちゃぶ台返し (スコア:1)
くだらない話で済みません。原文にちゃぶ台返しの絵があって吹いた。ほんとにそう書いてあったのか。
英文でいきなりこれが出てくるとは。みなさん、わかったのかね。声に出して読むと:
chabudai-gaeshiは英語だったんだ……。
それは、文章を書くのは簡単だと言うことと同じだ。 (スコア:1)
確かに書くだけなら簡単だろう。文字を、単語を、文法を覚えれば、書くことはできる。
だが、文章を書くことによって(読者に伝えたいことを伝えるという)目的を果たすこと
となるとどうだろう。伝えるべき内容が多く、複雑になるほどそれは簡単ではなくなる。
「プログラミング」という言葉を、「文法エラーのないプログラムを書くこと」と
取るなら簡単だ。だが、「思い通りの動作をするプログラムを書くこと」と取るなら、
難易度は「思い通りの動作」の複雑度次第となる。ただそれだけの話。
向き不向き (スコア:0)
どんな事でも適正はあるでしょうし、才能や訓練による振れ幅もあるわけで
簡単と一括りにするのはナンセンス
※既に簡単の域に到達した客観視できない人か理解はできないけど「簡単でしょ?」と価値を認めたく無い人しか言わないでしょ
Re:向き不向き (スコア:1)
あるまとまった作業をステップに分解してループなどに再構成するという考え方が
得意な人と苦手な人がいるみたいだけど
なんでも (スコア:0)
どちらも料理という括りなのだから、茹で卵だけを見て「簡単」と言うことも出来るし、シェフの技術を見て難しいと言うことも出来る。
どんな物だろうと、レベルがあるんだから、簡単とか難しいとかは言えんよ。
Re:なんでも (スコア:1)
>茹で卵を作るだけなら、誰でも出来るし簡単。
「誰でも出来るし簡単」とか言って甘く見てるとこうなるという事例
http://matome.naver.jp/odai/2142760472028501701 [naver.jp]
>こうしたページの作者は、自分と同程度のスキルを持った読者を想定してデザインしてしまっており、「簡単」という言葉を使っているようなチュートリアルは避けるべきとしている。
なるほど至言
Re: (スコア:0)
本当に「誰でも出来るし簡単」? [itmedia.co.jp]
逆に問おう (スコア:0)
あなたは簡単に学べるもを頑張って覚えたのですか?と。
#まあ簡単だと言っとかないと拒絶反応起されるからなぁ
Re: (スコア:0)
頑張って覚えたことで評価されてる人がいるの?
Re: (スコア:0)
もし頑張らなきゃ覚えられないというのなら、適正としてはプログラマやSEには向いてないってことなので、どこまで頑張ったところで平均レベルまでは届きません。
難しい部分もありますが、とっかかりさえわかってしまうと簡単だし、わからなかった時の自分に、ここだけ分かればあとは自然に理解できると言えてしまうので、何でも簡単だと言えてしまう。
ここまでのコメントを見て思ったんですが (スコア:0)
皆さん、できる人とできない人のレベルの差を知らなさすぎ。
関数(メソッド)はおろか、ループすら理解できない人も世の中にはいます。一説には「代入」が最初のハードルになるとか。だからと言って別に頭が悪いとかやる気がないとかじゃないし、もちろん普通に仕事もできます。勉強してそれなりに動くモジュールの作成までできるようになったりもします。でもプログラマが考えるプログラミングの概念はどうも理解できていない。
一方では新しい知識をスルスルと吸収して、平均的な新人の数倍以上のスピードでどんどん書けるようになっていく人たちもいます。
まあどちらも両極端のレアな例ですが、一般の学習者のレベルはこの間に広く分布しているわけで、これほど習得に個人差のある技術について、「簡単か?」というこれまた個人の感覚的な評価をするのは、ずいぶんナンセンスな話だな、と。
Re: (スコア:0)
この辺りは、小中高の国語/数学/理科/社会/英語の勉強でも学力に差が出るのと同じだわな。
ただ、ソフトウェアの場合は、理解できてなくても、例えば簡単なソフトならループやら代入なしでも動く訳だ。
要は、同じ動作のコピペでも、毎回数値をセットしてでも、"見かけ上なら完成したソフトウェアを作成できる"のがミソだよ。
で、そういうソフトウェアでも、最終的に動いていればどうでもいい訳だ、趣味ならば。
だから、例えとんでもない構造のプログラムでも、"組める"なら学んだ、理解していると言えてしまう。
結局のところ、2プログラミングを学ぶ"ってのがどのレベルの事を指しているのかに依るんじゃないかな。
"コンピュータ言語を学ぶ"の意味ならば、”こんな命令がある->命令については理解した->使い方?知らね"
であってもプログラミングを学んだと言えるんだから。
Re: (スコア:0)
ループすら理解できない人も世の中にはいます。一説には「代入」が最初のハードルになるとか。
はい。
最初のプログラミング(大学の夏期講習)では、どちらも全く理解できませんでした。
あまり説明もない、「BASICなんてとにかく手を動かせばそのうちわかる」的なポリシーの講習でした。
フロッピーディスクをフォーマットしたことと、打ち慣れないキーボード操作に肩が凝って目が疲れたことくらいしか覚えてないです。
趣味or仕事で難易度が違う。 (スコア:0)
ここで言われている”プログラミングを学ぶ”ってのは”コンピュータ言語を学ぶ"だけなら、そんなに難しくはないよね。
ただ単に、コンピュータ言語の命令、例えばif/else/for/while等を理解してればコンピュータ言語を学んだと言える。
実際にどんなプログラムを組むかなんて二の次な訳で、どんなスパゲッティでも、どんな複雑怪奇でも、
プログラムを組んだ人間が理解できて、修正できて、自分が必要とする機能が動けば、プログラムを組み上げたと言える訳だ。
でも、それは趣味のレベルならの話で、仕事となると一気に違うものになる。
一般的な構造化やアルゴリズムの勉強、仕様書、要件定義、検証記録等の書類作成、
会社でのコーディング規約といった、ソフトウェア設計全般を学ばないと、
本当の意味で"プログラミングを学んだ"とは言えないんじゃないかな。
そう考えると、趣味の範囲なら簡単、仕事でやるなら難しい......ってな感じじゃなかろうか。
#会社のプログラムでも、とんでもないプログラムは結構あるけどな~......
#(入社当時の自分のプログラムなんか見たくない、修正なんかしたくない。自分でも嫌になる。)
#(それに輪をかけておかしい先輩のプログラムもあったけどな~......)
Re: (スコア:0)
で、要件定義も検証記録もコーディング規約への準拠も完璧のプログラムを自信満々で作っても
プロダクトの国際的な競争力は全くないというオチ