パスワードを忘れた? アカウント作成
12950225 story
プログラミング

「プログラミングは簡単に学べる」というのは嘘か 52

ストーリー by hylom
気がついたらプログラミングをしていたので是非についてはコメントできません 部門より
あるAnonymous Coward 曰く、

FreeCodeCampというオープンソースベースのプログラミング学習サービスがあるのだが、そのサイトに「One does not simply learn to code(「プログラミングは簡単に学べる」という嘘)」という興味深い記事があったので紹介したい(オリジナル記事)。

世の中には「プログラミングは簡単です」という言説が多々溢れているが、これはマーケティング的にそう語られている場合が多く、次いでベテランの開発者が「知識の呪い」として初心者の気持ちを思いだせなくなり、そうした発言をしているケースが多々あるという。例えば、巷のチュートリアルには「単にSalesforceのAPIと統合するだけ」や「ただAWSにデプロイするだけ」などと書かれたページが見られるが、こうした内容は初心者にとっては全く簡単なことではない。こうしたページの作者は、自分と同程度のスキルを持った読者を想定してデザインしてしまっており、「簡単」という言葉を使っているようなチュートリアルは避けるべきとしている。

スラドにはプログラミングが出来る側の人が多いと思われるが、プログラミングは簡単or難しいどちらだろうか?

  • 医者は簡単になれないけど、小説家は誰でも名乗ることはできるでしょう。
    小説もプログラミングも普通は人命や健康に対する責任を伴いませんし。

    ここに返信
    • by Anonymous Coward

      極めて高度な信頼性が要求される用途(以下「ハイセイフティ用途」という)がうんたらかんたら

    • by Anonymous Coward

      例えとしてなら日本語でよいかも

      バグのないプログラムを組むのは至難の業だけど、一応動くものならすぐできる
      ちゃんとした文法でしゃべることは難しいけど、一応意味を伝えることならすぐできる

      おまけに方言を操る人などいてそっくり

      • バグのないプログラムを組むのは至難の業だけど、一応動くものならすぐできる

        記事にある「AWSにデプロイするだけ」と同じで、「動くものならすぐできる」も微妙な気が。

        生徒「説明通りに打ち込んだのに、なんだか動かないんですけど!!」
        講師「どれどれ…」

        main()

            printf(”hello, world¥n”);

        • by Anonymous Coward

          これだけだと何とも言えない
          2バイト文字では問題があるので、半角で入力しなさいという説明が足りてないだけに思えるよ
          特に完全な初心者を相手にした授業の場合でなら尚更

          • by Anonymous Coward on 2016年10月14日 14時20分 (#3096595)

            その説明はプログラミングの解説なのか?という点が興味深いと思う

            「全角文字と半角文字があって、プログラムを組むときは半角文字でやってください」という抽象的な(あるいは理由などはすっ飛ばした)注釈でもいいけど、それを重ねるとサンプルプログラム以上のものが作れないプログラマーにしかなれない
            だからどこかで概念や動作原理もある程度理解していく必要があるんだけど、入門書でそこまでカバーするのって難しくて、かといって上級者向けの本にはわざわざそんな基礎的なことは書いてないから学び辛い、とかね

            なにも文字の話に限らず、たとえばコマンドラインからビルドする方法の解説が不親切で初心者が躓いたとか、HTTP・TCP/IPへの知識が足りなすぎてWebアプリ作ってもバグバグにしかならないとか、そういうことは普通に起きるからなぁ
            20年以上前の、いわゆるBASICが動いてたマイコンみたいに、OSもミドルも抽象化も意識する必要が無い完結した環境でならともかく、今のプログラミングは「プログラミングをする上で学ばないといけない、プログラミング言語以外の要素」が割と多いし、それを体系的に学ぶ方法が用意されてないとハードル高いんだと思うよ

            # 文字コード云々だって業務レベルで色々問題になるレイヤーの話を適切にできる人ってSE見ててもさほど多く無いし
            # Webアプリ作ってる人でもHTTP(s)の仕様をきちんと意識してるとは限らないっていうね

          • このコメントのどこにボケが潜んでいるのか、私は一所懸命探しましたが…

            …なんの成果も!! 得られませんでした!! (AA略

            # そういやあ連載読まなくなって久しいなあ(えー

          • by Anonymous Coward on 2016年10月14日 14時59分 (#3096630)

            その昔、某国民機の日本語環境には、「2バイト半角文字」とか呼ばれる奇矯な英数字が存在していた。
            C言語の入門書に「某某のFEPは切ること」とか書いてあったのを覚えている。

            幸か不幸か、意識して使ったことはない。

          • by Anonymous Coward

            しかも本によっては、本当に書いてなかったりする初心者むけ本があるから困る。

            ”必須なものすら何かすらわからないから初心者なんだよ。”

            • by Anonymous Coward

              処理系が悪い。
              2バイト文字も許容すればいいだけの話。

              • by Anonymous Coward

                #include "io.h"
                を挿入するのも処理系がやる事なんだろうか。

          • by Anonymous Coward

            2バイト文字で問題があるのではなく、見かけが似ていても違う文字であるということを教えた方がいいでしょう。
            それと併せて文脈ごとに使用できる文字および用途が限定されていることも。

    • by Anonymous Coward

      もっと単純に、「料理」でしょう。
      料理もある意味プログラミングですよ。

      アルゴリズム=材料の性質
      データ構造=仕込み(皮をむく、切る)

      これらをフローに沿って組み上げていくと料理が出来上がります。

      一人暮らしの男の自炊から、料理上手な専業主婦、プロの料理人、プロでも中華、和食、フレンチとプログラマにもいろいろ。

      レトルトはフレームワーク。
      レトルトを使うと料理の手間が幾分か省ける。
      カップ麺みたいなインスタント食品はpkgやyum/rpmみたいな。

      料理が簡単か難しいかと言えば、簡単な料理もあるというだけの話。

  • もっとも,
    プログラミングを覚えることが目的だと困難を極める。
    なんででしょうねw
    ここに返信
  • by Anonymous Coward on 2016年10月14日 12時29分 (#3096522)

    アマチュアが入門本を読んでちょっと触ってみたり遊ぶのは簡単

    クライアントや上司が示した要求・仕様を、エラー時の動作も含めてきちんと設計・実装したり
    多人数で一つの大きなソフトウェアを開発したりするといったような、プロの仕事は難しい。

    ここに返信
    • 個人的には逆だなあ。
      プログラムはとっかかりが大変。
      数行のプログラムでもすっと浸みれば,
      10行も1万行も同じだと思う。
    • by Anonymous Coward

      いわゆる写経は出来ても
      そこから何かを足したり引いたりが全くできない新人を見たことがあるので
      簡単という部分も人によってかなり変わるんだというイメージ

      付け足すといっても、フォームの項目一つ足すことも出来なかったんだ…

      • by Anonymous Coward
        写経でも100%のパフォーマンス発揮できるのがプログラミングのよいところ
        どんな初心者でもスーパーハッカーのコードをコピペすればスーパーハッカーと同じプログラムができあがるんだぞ。
        プロ野球選手と同じフォームで素振りしたってホームラン打てないのと比べれば「ずっと簡単」と言っていい。
        • by Anonymous Coward on 2016年10月14日 15時21分 (#3096648)

          素人は意味が分かってないから、
          単なる写経でもTypoだらけでろくに動かないよ。
          9割の日本人は英語のエラー文が出た瞬間頭がショートして逃げだしてしまうからな。

        • by Anonymous Coward

          どんな初心者でもスーパーハッカーのコードをコピペすればスーパーハッカーと同じプログラムができあがるんだぞ。

          残念ながら、他者の制作物と全く同じプログラムに付加価値はない。

          • by Anonymous Coward

            著作物としては無価値でも秘伝のたれの継ぎ足しみたいな仕事がありますけどね

    • by Anonymous Coward

      せやな
      そんなん夏休みの工作や日曜大工と
      モノホンの大工を比べてみれば当然のことやがな

    • by Anonymous Coward

      10m走るのが簡単だからといって、フルマラソンを世界標準記録で走るのが簡単ではないということと同じだよ。

      • by Anonymous Coward
        プログラミングの場合10行コピペすんのも42195行コピペすんのも労力一緒だし
  •  PRINT "Hello wprld." や printf("Hello world.\n"); とするだけなら簡単です。
     1^1の知識量とでも言うか。
     ただ次のステップに進むためには2^2の知識、その次には3^3の知識量・・・って感じでしょうか。
     結局、根底にはアセンブラの考え方が流れていたりして、高級言語はそれをなるべく隠しているだけに過ぎませんし。

     でもまあ、体得するには動機も必要ですからね。
     私は高速に動く言語が欲しくてCからアセンブラに移行しようとしたら、当時のGCCの最適化が私の書くアセンブラより速くてCに定住してしまいましたし。
     今は既製品(商用のみならずフリー含む)で済む場合が多いですからね、その気になれない時代でもありますよね。
    ここに返信
  • 1.教育用のシンプルなソースコードを読んで意味を説明できる
    2.教育用のシンプルなソースコードを修正して動きをちょっとだけ変える
    3.教育用のソースと同レベルの要件に対して0からソースコードを書ける
    4.オープンソースで提供されているアプリのソースコードを修正して動きをちょっとだけ変え
    5.業務で 0 からソースコードを書く
    6.外注先が作った、カプセル化の概念がほとんどない 100Ks を超えるソースコードの中から障害の原因を探しだし、多数のモジュールに変更が必要なことに怨嗟のうめきを上げながら管理職に報告、「なんでそんなことになってるんだ」と怒られつつ毎日終電まで修正する

    どのあたりまでできたら「プログラミングを学んだ」って言えるんでしょ
    (2.あたりまでなら「簡単に」って言っても差し支えがない気がする)

    --
    # mishimaは本田透先生を熱烈に応援しています
    ここに返信
    • 1. から 6. に向かって加速度的に難易度が上がっていくところが「簡単でない」という所以かも。
    • by Anonymous Coward

      単体動作のアプリケーションを作るのと、複雑なシステムの動きを動作を理解したうえで動作を変更する修正を行うのとでは、天と地の差があるものなあ。システムの仕様を理解するだけで、600MBものドキュメントファイルを読んで理解しなきゃならないとか地獄だよなあ。まあ、ドキュメントファイルが全くなくて、既存システムのソースコードすらないなんて案件もあったけれどね。

  • くだらない話で済みません。原文にちゃぶ台返しの絵があって吹いた。ほんとにそう書いてあったのか。

    Before you know it, you’ll suddenly hear the sound of your own voice screaming, feel your body rising to its feet and (╯°□°)╯︵ ┻━┻

    英文でいきなりこれが出てくるとは。みなさん、わかったのかね。声に出して読むと:

    ふぃーる ゆあ ぼでぃ らいじんぐ とぅ いっつ ふぃーと あんど “ちゃぶ台返し”

    chabudai-gaeshiは英語だったんだ……。

    ここに返信
  • 確かに書くだけなら簡単だろう。文字を、単語を、文法を覚えれば、書くことはできる。

    だが、文章を書くことによって(読者に伝えたいことを伝えるという)目的を果たすこと
    となるとどうだろう。伝えるべき内容が多く、複雑になるほどそれは簡単ではなくなる。

    「プログラミング」という言葉を、「文法エラーのないプログラムを書くこと」と
    取るなら簡単だ。だが、「思い通りの動作をするプログラムを書くこと」と取るなら、
    難易度は「思い通りの動作」の複雑度次第となる。ただそれだけの話。

    ここに返信
  • by Anonymous Coward on 2016年10月14日 12時41分 (#3096532)

    どんな事でも適正はあるでしょうし、才能や訓練による振れ幅もあるわけで
    簡単と一括りにするのはナンセンス

    ※既に簡単の域に到達した客観視できない人か理解はできないけど「簡単でしょ?」と価値を認めたく無い人しか言わないでしょ

    ここに返信
  • by Anonymous Coward on 2016年10月14日 12時41分 (#3096534)
    茹で卵を作るだけなら、誰でも出来るし簡単。レストランで食べるような食事を作るのは誰にでも気軽に出来ることではなく難しい。
    どちらも料理という括りなのだから、茹で卵だけを見て「簡単」と言うことも出来るし、シェフの技術を見て難しいと言うことも出来る。

    どんな物だろうと、レベルがあるんだから、簡単とか難しいとかは言えんよ。
    ここに返信
  • by Anonymous Coward on 2016年10月14日 12時47分 (#3096537)

    あなたは簡単に学べるもを頑張って覚えたのですか?と。

    #まあ簡単だと言っとかないと拒絶反応起されるからなぁ

    ここに返信
    • by Anonymous Coward

      頑張って覚えたことで評価されてる人がいるの?

    • by Anonymous Coward
      プログラム書けるようになるのに頑張る必要なんてないでしょ。
      もし頑張らなきゃ覚えられないというのなら、適正としてはプログラマやSEには向いてないってことなので、どこまで頑張ったところで平均レベルまでは届きません。

      難しい部分もありますが、とっかかりさえわかってしまうと簡単だし、わからなかった時の自分に、ここだけ分かればあとは自然に理解できると言えてしまうので、何でも簡単だと言えてしまう。
  • by Anonymous Coward on 2016年10月14日 13時33分 (#3096567)

    皆さん、できる人とできない人のレベルの差を知らなさすぎ。
    関数(メソッド)はおろか、ループすら理解できない人も世の中にはいます。一説には「代入」が最初のハードルになるとか。だからと言って別に頭が悪いとかやる気がないとかじゃないし、もちろん普通に仕事もできます。勉強してそれなりに動くモジュールの作成までできるようになったりもします。でもプログラマが考えるプログラミングの概念はどうも理解できていない。
    一方では新しい知識をスルスルと吸収して、平均的な新人の数倍以上のスピードでどんどん書けるようになっていく人たちもいます。
    まあどちらも両極端のレアな例ですが、一般の学習者のレベルはこの間に広く分布しているわけで、これほど習得に個人差のある技術について、「簡単か?」というこれまた個人の感覚的な評価をするのは、ずいぶんナンセンスな話だな、と。

    ここに返信
    • by Anonymous Coward

      この辺りは、小中高の国語/数学/理科/社会/英語の勉強でも学力に差が出るのと同じだわな。

      ただ、ソフトウェアの場合は、理解できてなくても、例えば簡単なソフトならループやら代入なしでも動く訳だ。
      要は、同じ動作のコピペでも、毎回数値をセットしてでも、"見かけ上なら完成したソフトウェアを作成できる"のがミソだよ。
      で、そういうソフトウェアでも、最終的に動いていればどうでもいい訳だ、趣味ならば。
      だから、例えとんでもない構造のプログラムでも、"組める"なら学んだ、理解していると言えてしまう。

      結局のところ、2プログラミングを学ぶ"ってのがどのレベルの事を指しているのかに依るんじゃないかな。
      "コンピュータ言語を学ぶ"の意味ならば、”こんな命令がある->命令については理解した->使い方?知らね"
      であってもプログラミングを学んだと言えるんだから。

    • by Anonymous Coward

      ループすら理解できない人も世の中にはいます。一説には「代入」が最初のハードルになるとか。

      はい。
      最初のプログラミング(大学の夏期講習)では、どちらも全く理解できませんでした。
      あまり説明もない、「BASICなんてとにかく手を動かせばそのうちわかる」的なポリシーの講習でした。
      フロッピーディスクをフォーマットしたことと、打ち慣れないキーボード操作に肩が凝って目が疲れたことくらいしか覚えてないです。

  • by Anonymous Coward on 2016年10月14日 14時44分 (#3096617)

    ここで言われている”プログラミングを学ぶ”ってのは”コンピュータ言語を学ぶ"だけなら、そんなに難しくはないよね。
    ただ単に、コンピュータ言語の命令、例えばif/else/for/while等を理解してればコンピュータ言語を学んだと言える。
    実際にどんなプログラムを組むかなんて二の次な訳で、どんなスパゲッティでも、どんな複雑怪奇でも、
    プログラムを組んだ人間が理解できて、修正できて、自分が必要とする機能が動けば、プログラムを組み上げたと言える訳だ。

    でも、それは趣味のレベルならの話で、仕事となると一気に違うものになる。
    一般的な構造化やアルゴリズムの勉強、仕様書、要件定義、検証記録等の書類作成、
    会社でのコーディング規約といった、ソフトウェア設計全般を学ばないと、
    本当の意味で"プログラミングを学んだ"とは言えないんじゃないかな。

    そう考えると、趣味の範囲なら簡単、仕事でやるなら難しい......ってな感じじゃなかろうか。

    #会社のプログラムでも、とんでもないプログラムは結構あるけどな~......
    #(入社当時の自分のプログラムなんか見たくない、修正なんかしたくない。自分でも嫌になる。)
    #(それに輪をかけておかしい先輩のプログラムもあったけどな~......)

    ここに返信
    • by Anonymous Coward

      で、要件定義も検証記録もコーディング規約への準拠も完璧のプログラムを自信満々で作っても
      プロダクトの国際的な競争力は全くないというオチ

typodupeerror

開いた括弧は必ず閉じる -- あるプログラマー

読み込み中...