Python
プログラミング
初心者
C言語
初心者向け

バカにC言語は難しい~プログラミングの機会損失~

プログラミングは難しい

注意:
この記事は「プログラミング学習とはかくあるべき」、「こうやって学習するのが一番」ということを言いたいのではなく、プログラムを勉強したいが右も左もわからない人に少しでも勇気と情報を与えることを目的としています。過去の挫折経験からか、なかば愚痴っぽくなっていますがご勘弁を

はじめに自分のプログラミング歴を軽く紹介して起きます。

言語 学習目的
2010 C言語 学校の実習
2011 C++ 組み込み系
2012~2017 None None
2018 Go,Js,Scala,Python 研究、Web開発

といった感じです。2012~2017年がNoneになっているのには原因が「C言語に挫折し、とにかくプログラミングがしたくなかった」からです。そう思ってしまった原因と、そこから立ち直ったことがこの記事を書いた理由です。

「おいおい、C言語ごときで挫折とは情けないな」と思った方は素晴らしいと思います。この記事を読んでも何も得るものはないでしょう。しかし、実際にC言語で挫折した人間がここにいることだけは覚えておいてください。
そして、安易に初心者に初めてのプログラミング言語としてC言語をオススメすることを今すぐにやめていただきたい。

この記事はC言語で挫折してしまうような人間が、挫折の経験からプログラミングについて語ります。

プログラミングと成長曲線

ところで話は変わって「成長曲線」というものをご存知でしょうか?
スクリーンショット 2018-10-20 0.50.10.png
横軸は学習の時間、縦軸は学習に対する成功、成果を示しています。この曲線は「学習しても最初は成果は出にくいけど、あとあと成果が付いてくるよ」ということを示しています。

おそらくプログミング上級者の方が初心者の方にC言語をオススメするのはこの図のような考え方が原因にあると思います。C言語は難しいですが、C言語を学ぶことによって確かにコンピュータがどうやって動くのかを知ることが出来ますし、メモリ管理などの知識はプログラミング全般に生きてくる知識なので、初めは役に立たなくても将来的に大いに役に立つ可能性があります。

上級者の方はそういったことを知っているので余計に初心者の方にC言語などをオススメしてしまうのでしょう。しかし、その考え方には前提に大きな間違いがあります。その前提とは「この人はずっとプログラミングを続けるだろう」という前提です。

難しく、理解できなく、さらには成果も見えないことを続けられるほど人間は強くありません。多くの人が挫折してプログラミングという世界から離れてしまうでしょう。私もその一人でした。

プログラミングの機会損失

人によってプログラミングを始めた理由は千差万別だと思います。自分の中だと3つに分けられると思っています。
1. プログラミングが大好き、仕事で使うようになったのは必然
 (最強のグループ、一般的なプログラマーのイメージ)
2. プログラミングで何か作りたい、実現したいものがある
 (夢追い人、幸せそうなグループ、 プログラムリア充
3. 好きではないがテクノロジーの力を理解しているので必要なプログラミングの技術は身につけたい
 (基本的にプログラムはツールの一つくらいにしか考えてない, 斜に構えがち

※完全に個人の偏見です。他の分別をしてる人がいたら教えて欲しいです。自分は完全にグループ3です。

ここで言いたいことは、プログラミングを始めたのには一人一人理由、目的があるということです。ここでもし先ほどのように難しい言語を勧められて、プログラミングを始めたはいいが挫折してしまったとすればどうなるでしょう?

グループ1の方ならこれから出会うはずだった数々の美しいプログラムに出会うことなくプログラマー人生を終えてしまうでしょうし、グループ2の方なら実現したかったサービス、作りたかった面白いアプリも頭の中にあるだけで世にリリースされずに終わるでしょうし、グループ3の方ならテクノロジーと離れた世界で生きて行く可能性が高くなってしまいます。

初心者の方にアドバイスをされる方には、そういったプログラムから離れてしまうことによって発生してしまう”プログラミングに対する機会損失”があるということを知っていてもらいたいと思います。

じゃあどうプログラムに立ち向かっていけばいいの?

自分のプログラミング人生はC言語との出会いによってほとんど扉は閉まりかけていました。しかし、ある言語との出会いによってその扉は開かれました。その言語とは”Python”です。

大学の研究でどうしても使う必要があり、Jupyter noteでちょこっと作業しただけでした。コーディングとも呼べないかもしれません。でも便利、簡単、メモリ管理しなくてもいい、みるみるうちにグラフが作成される、「なんて簡単なんだ」と思いました。そして、プログラムへの興味と可能性も再確認することが出来ました。
Pythonのおかげのあってプログラミングの魅力と可能性に気づいて色々な言語を学習できましたし、エンジニアとして社会人生活をスタートさせる決心がつきました。

そういった経験もあって、プログラミングと向き合い、学習を続けるには以下のような点が重要ではないのかと思うようになりました。

・学習の成果を可視化する

 -成果をアウトプットできるようしておく(例:個人サービスのリリースなど)
 -逆言えば、成果物を作りやすい言語は学習が続きやすい、入門しやすいと言える

・学習がもたらす可能性、将来性を認識する

 -学習を始める前に、なぜ、何の為に、需要はあるのか
 -情報を入手する→調べる→触ってみるの流れを築いていく

・そのプログラミング言語を学ぶ目的を常に理解しておく

 -プログラミングの使用目的は明らかにしておこう(例:Kotlin→Android開発の為)
 -目的のない学習の挫折率は半端ない(個人談)

最後に

ということで、プログラム学習について少しでも参考になれたでしょうか?
多くの人にとってはプログラミングは難しいので、「みんながやっているからなんとなく」で始めてしまうと痛い目に会うかもしれません。
教える側も、これから始める人も”プログラムは難しい、理解できないのは無理もない”という前提を持っていれば優しい世界になるんじゃないかな〜と思っています。

殴り書きのような記事になってしまい申し訳ありません。気分を害される方もいるかもしれません。ただ、プログラミングで悩んでいる方が、こんな感じでプログラムに向き合っている人間もいるよと知ってもらえれば少しでも気が楽になるかもと思い書かせていただきました。読んでくださってありがとうございました。あなたのプログラミング人生に幸あれ!

謝罪

C言語やその他の難しめ?のプログラミングについて散々悪口のようなことを書きましたが、C言語やそれらの言語が悪いとは微塵も思っていませんし、PythonはC言語より優れているなんていうつもりも毛頭ありません。非難すべきはC言語を理解できなかった私の理解力であり、根気だと思っています。

C言語や、もっといえばアセンブリ言語などは、現在世の中に出回っている幾多のプログラミングに経験と知見を与えており、開発に関わった方や、使いこなすことのできる方には尊敬の念しかありません。いつか理解したいです。