ユーニックス総合研究所

  • home
  • archives
  • programming-easy

プログラミングが簡単だという幻想

プログラミングは簡単か?

プログラミングは簡単だというワードがSNSやまとめ系ブログを中心に飛び交っている昨今ですが、果たしてそれは本当なのでしょうか?

結論から言うとプログラミングが簡単だというのは幻想です。ごく一部の例外を除いて。

🦝 < その幻想、あぶないですよ

具体的には以下の理由があげられます。

  • 環境構築がむずかしい
  • 言語の学習がむずかしい
  • エラー解決がむずかしい
  • 新技術の吸収がむずかしい

環境構築がむずかしい

これもプログラミング界隈のネット上では有名な話ですが、まずプログラミングを行うにはプログラミングのための環境構築を行う必要があります。
パソコンにはプログラミング言語を実行できるソフトウェアがないので、そのソフトウェアをパソコンにインストールして、プログラミング言語で書かれたソースコードをプログラムとして実行できるようにしなければいけません。
そのようにプログラミングのためにパソコンの状態をセットアップすることを「環境構築」と言います。

実はこの環境構築ですが、初心者の人がつまづきやすい工程としても有名です。

うまくソフトウェアをパソコンにインストールできず、プログラミングを断念する人。
ソフトウェアをインストールしたけど、なんか失敗して、アンインストールとかしてたらなんかぐちゃぐちゃになってしまった人。
パスってなに?なにそれおいしいの?という人。
など、いろいろな人がいます。

環境構築はとにかく慣れるしかないのですが、慣れるためには何度も失敗しなければいけません。
つまり上にあるような失敗は、成功するための経験値なのですが、そもそもそこまで根気よくやろうと思っていない人が大半なので、ほとんどの人が環境構築に失敗したら諦めるわけです。

プログラミングは簡単だと言われてひさしいですが、この環境構築についてはもう長年使いやすさが改善していません。
いっぽう、Googleなどはブラウザで使えるプログラミング環境を提供していて、こちらは環境構築の手間が必要ありません。

しかし、出来るプログラミングに制限が入ったりするので(例えばGUIアプリの開発)、やはりスタンダードなのはいまだにパソコンに環境構築する方法です。

環境構築に失敗すると、プログラミングに対して抵抗感が生まれます。
もうやだ! という感情です。これは私も経験したことがあります。
この抵抗感、嫌悪感が生まれてしまうと、これを取り除くのは簡単じゃありません。

いつまでもそれらの嫌悪感が頭にこびりついて、プログラミングがどんどん嫌いになっていきます。
環境構築に失敗したら再度トライするしかないのですが、そのトライする気もなくなっていきます。
そしてプログラミングのことを忘れて、まとめブログなどをネットサーフィンして時間を潰すわけです。はい。私です。

この環境構築はプログラミングの入り口みたいなものですが、この入口がむずかしいために「プログラミングは簡単じゃない」ということになってしまうわけです。
逆に言うと、この環境構築が簡単になればプログラミングはずいぶん取っつきやすいものになるかもしません。

言語の学習がむずかしい

パソコンにプログラミングの実行環境が用意できたら、あとはエディタを用意してプログラミングをはじめるわけです。
その時に最初にやることがプログラミング言語の学習です。

プログラミング言語の学習は、英語や中国語の学習に比べれば簡単です。
たしかにそれらに比べれば簡単なのですが、やはり言語は言語なので、それなりに大変なわけです。

とくに英語と数学が苦手な人は大変です。
プログラミング言語の文法には英語の単語が使われることが多いです。
ifとかforとか、そういうキーワードが目白押しなわけです。

こういった英単語にアレルギーを持つ人は、勉強のためのサンプルコードを見るだけでげんなりするわけですね。
「日本語で書けよ日本語で」と思ってしまうのも無理はないかと思います。

プログラミング言語の多くは英語圏の国で発展しました。
たとえばC言語(シーゲンゴ)という歴史のある言語はアメリカが発祥です。
UNIXというOSを作るために開発された言語です。

そのため文法のキーワードはみんな英語なんですね。
後発の言語も英語圏に合わせるようになっています。
たとえばRuby(ルビー)というプログラミング言語は日本産ですが、文法には英語が使われています。

ちなみに「なでしこ」というプログラミング言語もありますが、これは日本語でコードを書くことができます。

言語の学習コストはいかほど?

言語の学習コストはどれぐらいのものでしょうか?
実は、言語をすべて知りつくすというのはあまり現実的ではありません。やめたほうが無難です。
必要なところだけ覚えて、使えるようになるというのが普通です。

それほど言語というのは巨大なソフトウェアなわけです。
しかし、初心者のうちはそのことを知らないので、とにかく片っ端からぜんぶ覚えようとします。
そうすると終わりのない勉強の道に疲れてしまって、勉強のモチベーションがなくなってしまうわけですね。

必要なところを最低限覚えて使う
これはプロも実践しているプログラミング言語の覚え方ですが、これができない人が多いんですね。
なので巨大な言語によくわからずに突進してしまって、気がついたら空を仰いでいるということになるんです。

言語自体はRuby, Pythonなどの言語であれば3ヶ月ぐらいあれば「とりあえず」は使えるようになるというのが目安です。
ただしこれは個人差があります。
私がC言語を最初に学習したときは「とりあえず」使えるようになるのに1年ぐらいかかった記憶があります。

その言語に精通するようになるには数年という単位で時間が必要になります。
そういう言語マニアは自らその言語の開発に参加してしまうということがよくあります。
RubyなどはOSS(オーエスエス)という世界中に開かれた開発スタイルを取っていて、さらに主な開発者が日本人なので開発に参加しやすいというメリットがあります。

話はそれましたが、言語の学習コストはとにかく時間がかかるんですね。だからむずかしいわけです。
熱意がないと続きませんし、そういった熱意のある人はそれほど多くありません。

エラー解決がむずかしい

プログラミングで常につきまとうのが「エラー解決」です。
これはプログラミングの妻、あるいは愛人みたいなもので、とにかくプログラミングをしているとよく遭遇します。
もはや「プログラミング=エラー解決」なのでは? と思ってしまうほどです。

エラーというのはどういうことかと言うと、たとえば文法エラーです。
プログラミング言語はそれぞれ独自の文法を持っています。
日本語や英語は多少、文法が間違っていても、話し相手が意味を理解してくれることが多いですが、プログラミング言語はそうはいきません。

ちょっと文法がまちがっていたら「ここ違うよ!」と言ってそれ以上実行してくれなくなるんですね。
すねた犬みたいです。
それほどプログラミングというのはコードに厳密さが求められます。
相手がパソコンなので融通がきかないんです。

このエラー解決ですが、最初の慣れないうちはとにかくストレスを感じます。
私は感じました。
慣れてくると感覚が麻痺してくるのですが、最初のうちはエラーがいやでいやで仕方ありませんでした。
「またエラーか……」
となって、プログラミングのモチベーションが下がるんですね。

エラーが発生したらどうするのかというと、エラーの原因を調べるわけです。
Google検索やエラーメッセージを読んでエラーの原因を特定して、そのエラーを取り除きます。
しかしいくら調べてもエラーの解決方法がわからない時がよくあります

そうするとどうするのかというと、最終手段は他人に聞くんですね。
スタックオーバフローやTeratailで質問をして回答をもらえるまで待ちます。

エラー解決は基本的に時間がかかります。
そしてこれはプログラミングの内なんですが、コードを書く面白さとは別のものです。
よってエラー解決がいやになってプログラミングのモチベーションが下がってしまうことがよくあります。

プログラミングでソフトウェアを作りたいのに、エラー解決ばかりしてたら「なにやってるんだろう?」という気持ちになるのは仕方ないことです。
しかしプログラミングというのはそういうものなので、初心者の人はずいぶん苦しむわけですね。

新技術の吸収がむずかしい

環境構築もできてプログラミング言語も覚えて、さぁプログラミングだ。
そうなるわけですが、実際にはプログラミングではその周辺の知識も必要になってきます。

たとえば最近だと、WebのプログラミングをやるにはDocker(ドッカー)というソフトウェアを利用するのがエンジニアのあいだで流行っています。
もうどこもかしこもDocker, Dockerばっかりです。

Dockerというのは仮想化用のソフトウェアで、環境構築で主に使われます。
WebのプログラミングではWebサーバーやデータベース、フレームワークなど、プログラミング言語以外の周辺知識が求められるんですが、Dockerはその一部を構築するのに使われます。

Dockerというのはわりと最近の技術です。
そういった最近の技術が流行るというのは、ITの世界ではよくあることです。

なぜこういった新技術がつぎつぎに生まれるのかと言うと、世界中であーでもないこーでもないと言いながら「より生産的で効率的な手段」を研究しているからです。
新技術というのは基本的には過去の技術より効率的なわけなので、エンジニアなどは自分を効率化するために新しい技術を常に学んでいく必要があります。
そうしないと競争に置いてかれるんですね。

趣味でやってる場合も、そういったトレンドはある程度追いかける必要があります。
趣味でやる場合は時間はそんなに取れません。ですので追いかけるのが大変なわけですね。

おわりに

いかがでしたでしょうか?
繰り返しになりますが「プログラミングは簡単」というのは幻想です。
最後に例外をあげたいと思います。

いわゆる「才能のある人」は今までのことは当てはまりません。
そういう人はほいほいと吸収していってしまいます。

ほとんどの人はどちらかというと「才能がない人」です。
そしてそういう人達こそプログラミングを必要としているのが現状です。

プログラミングについての認識を改めれば、それだけプログラミングの学習がはかどるようになります。
簡単だと油断していればスライム相手でも負ける可能性はありますが、気を引き締めてかかればスライムも敵ではないということですね。
みなさんも気を引き締めてプログラミングに臨んでみてください。

🦝 < 健闘を祈ります