私は数か月前に、C言語とマイコン(Arduino、H8)に触れる機会があったのですが、それまではプログラミングは嫌いで、自分には向いていないだろうと思っていましたが、そうではなくてそれ以外の理由が原因だったのではないかということに気が付きました。
もし、これを読んでくれている方で、過去にプログラミングをやってみて挫折したという方がいらっしゃれば、何か参考になるものがあるかもしれません。
私の最初のプログラミング経験
私は、大学時代にC言語とFortrunという言語を習いましたが、本当につまらなくて、ほとんど勉強しませんでした。単位取得のためにレポート等はやむなく提出しましたが。。
特にC言語は、開発環境もとても親切なものではなく、コンパイルするとエラーがでるのですが、あまりにもそっけない感じで、デバッグも面倒でした。どこがエラーなのかよくわからかったです、、
しかも、授業でやっていることは、ほとんど教科書の演習ばかりで、自分で何かを作るといったことからはほど遠い内容でした。
しかも、教師もプログラミングを自分で作ったことがなさそうで、机上論が多く、ほんと、苦痛でしたね。。「計算機上と実際の計算の誤差とは、、云々」とかいってましたが、どうでもいいよそんなこと!!でしたね。
また、構造体とかポインタとか、よくわからないものがでてきて、コードの書き方は教えてくれるのですが、どう使うと良いのか、どのようなシーンで使うと良いのかは実践的に教えてもらえず、学習を完了せずになんとなくさわった程度位で、現在に至っていました。
なお、余談ですが、構造体、ポインタはマイコンをやりながら習うと本当によく理解できます。やはり目的と実際の用途がわからないままテキストとPC上の動作だけで習うと良くわからなくなるのですよね、、
ただ、C言語とマイコンとC言語を一緒にあわせて教える事のできる人は、残念ながらあまりいないと思います。(だんだん需要が減ってきているのもあるとは思いますが。)
そして、それから私が再びプログラミングと接したのは、仕事で経験した某官公庁のシステムで、地味な画面でデータの検索をするものでした。Oracle等のデータベースやVBでの入力画面(お客様のインターフェース)等の基本的な考え方は習得できましたが、開発当初から関わったわけではないので、全体像がみえず退屈なものでした。。
と、まあ、プログラミングに関して、あまり良い思い出がなかったのですよね~。なぜか、つらい記憶ばかり。。
プログラミングが苦手(嫌い)になった理由
振り返るとですが、プログラミングを嫌いになった理由は、以下だと思っています。
・開発環境が使いづらい。
私が最初にプログラミングを経験したのは、今から20年以上も前なので、今ではないと思いますが、参考になるかもしれないので少し書いておくと。
当時の私の学校でのプログラミング環境は、ワークステーションという当時では大型のマシンを使っていましたが、画面操作は、コマンドラインといって、現在のウインドウ画面でマウスを使ってカーソルを合わせたり、メニュー画面から操作する人にやさしい操作(笑)ではなく、キーボードだけで、操作するような環境でした。
なので、そもそもプログラミングをする際に、操作とかが良くわからなくていやになってしまうのですよね。なので、現在の開発環境に触れると、そのあまりの使いやすさに驚愕します。デバックも分かり訳す、コードを書くにも自動で選択・入力してくれたり、ほんと、懇切丁寧といった感じです。
くどいですが、私が学生のときは、自分でスペルを一文字ずつ入力して、それが間違いで、エラーが出るといったことが多々ありましたからね、、ほんと技術の進歩はすばらしい!
・教師(講師、トレーナー)の力量不足
その当時の事情なのかもしれませんが、本当にプログラミングができる教師の方は、あまりいなかったと思います。また、できたとしても教えるのが本当に下手(あるいは面倒くさい。)で、授業もテキストを真似るだけの内容で、課題も学んだことに対して、自分で成果物を作るとか、面白くなるように用意されているものではなく、退屈なものでした。
また、仕事としての経験では、トレーナーの力量があるかないかも結構大きいです。私が最初に経験した社会人でのトレーニングでは、トレーナーは、朝はいつも遅刻、学習意欲なし、そして、仕様書等の書類管理も完全に破綻、、みたいな、今思うと、超ダメ人間でした。
なぜ、自分にこんなトレーナーがついたのだろうと、本当に残念でした。まあ、組織全般的に残業が多かったので、その影響もあったのだとは思いますが。
・アウトプットが楽しくない。
これは、今でも実感できるのですが、プログラミングは実際に動かして、何か計算させたり、表示させたり、分析したりする等のアウトプットがあって初めて面白さを体感できるのですが、C言語の入門書では、面白いアウトプットを出すようなものはあまりなく、退屈なものが多いと思います。
教科書にある最初の演習は、画面に「Hello World」するところから始まり、四則演算、文字列の処理、構造体、ポインタと進んでいきますが、正直退屈ですよね。たしかに実務では非常に大事なのですが。。
ちなみに、大事なことなのですが、「C言語」は、ビジネス等でデータ分析や、最近のAIのようなところで使うものではなく、ハードウェア(パソコン等の機械)をソフトウェアで操作(私たちはマウスで画面を操作したり、機械を何かで操作しますよね。)の橋渡しの部分の機能を開発するためものです。
なので、普通の人(私もそうですが。)にとっては、OSやマイコン等を作ったりしてアウトプットを実際に体験できるわけではないですし、かといって、データの計算や分析、グラフ表示に「C言語」を使う必要はありません。データ分析、グラフ表示なら、Excelで十分です。
なので、標準的な言語だから、参考書が多いから、最初はC言語にすべきだから、、という理由で安易にあじめると学習することそのものが目的になり、アウトプットもないので飽きるし、挫折します。
プログラミングが面白い、楽しいと実感できるためには。
プログラミングを楽しむためには以下の点が必要だと思います。
・使い勝手のよい言語で試してみる事
C言語は、最初からマイコンのために学習するとか、仕事で必要等のアウトプットが明確であれば、学習も楽しくなるのですが、試しにやってみようとすると、たぶん挫折します。(くりかえしですが、退屈なので。)
なので、現在であれば、Python等の簡単にいろいろなことができる言語から入ってみる方が面白さが良くわかると思います。
また、C言語を習ったことがある方はご存じだと思いますが、プログラミング言語には、開発者がすべて一から書くのではなく、最初から関数といった形で機能が用意されています。関数をまとめてライブラリともいいます。
Pythonは、この関数(ライブラリ)が沢山用意されていて、自分で一から作らなくても大概ほしいものが用意されているのですよね。なので、生産性も高いです。ちょっと書くだけで昔では想像できなかったことができます!
ちなみに、Pythonは以下の通りです。
Python(パイソン)は、汎用のプログラミング言語である。コードがシンプルで扱いやすく設計されており、C言語などに比べて、さまざまなプログラムを分かりやすく、少ないコード行数で書けるといった特徴がある。
文法を極力単純化してコードの可読性を高め、読みやすく、また書きやすくしてプログラマの作業性とコードの信頼性を高めることを重視してデザインされた、汎用の高水準言語である。核となる本体部分は必要最小限に抑えられている。一方で標準ライブラリやサードパーティ製のライブラリ、関数など、さまざまな領域に特化した豊富で大規模なツール群が用意され、インターネット上から無料で入手でき、自らの使用目的に応じて機能を拡張してゆくことができる。
またPythonは多くのハードウェアとOS (プラットフォーム) に対応しており、複数のプログラミングパラダイムに対応している。Pythonはオブジェクト指向、命令型、手続き型、関数型などの形式でプログラムを書くことができる。動的型付け言語であり、参照カウントベースの自動メモリ管理(ガベージコレクタ)を持つ。
これらの特性によりPythonは広い支持を獲得し、Webアプリケーションやデスクトップアプリケーションなどの開発はもとより、システム用の記述 (script) や、各種の自動処理、理工学や統計・解析など、幅広い領域における有力なプログラム言語となった。プログラミング作業が容易で能率的であることは、ソフトウェア企業にとっては投入人員の節約、開発時間の短縮、ひいてはコスト削減に有益であることから、産業分野でも広く利用されている。Googleなど主要言語に採用している企業も多い。
出典: フリー百科事典『ウィキペディア(Wikipedia)』
https://ja.wikipedia.org/wiki/Python
・マイコンでプログラムを動かしてみること。
これは、すこし飛躍した感じがあるかもしれませんが、C言語はもともと、OSや組み込み機械(マイコン等)を動かすための言語です。なので、ただコードを書いてPC上で実行するだけだと、非常につまらないです。
最近のマイコン(Arduino)は、C言語をベースに開発ができ、また非常に簡単に動かすことができるので、試してみると面白いです。なお、単純に普通に動かすだけなら、構造体、ポインタ等は、はっきりいって不要です。できなくて大丈夫です(笑)。
・プログラミングの講義を受講すること。
私は、たまたま縁があり、C言語とマイコンのセミナーに参加できましたが、継続して学習でき、ある程度のアウトプット(マイコンで液晶画面の操作、センサーでデータを取得等)を出せたのは、ひとえに優秀な講師の方と実機での操作、体系的なカリキュラムのお蔭です。
やはり、講義での良い点は、アウトプットが決まっていって、それに対して必要なものが明確に用意されていて、否応なく時間内に自分でやる必要があるということです。
独学だと準備するのが困難な開発環境、成果物等があらかじめ用意されているので、プログラミングそのものの楽しさが、すぐに体験できます。しかも、最近は競争原理も働くためか、講師も良質になってきています。
なお、最近はオンラインのプログラム教室もあり、私も受講したことがありますが、やはり独学よりはるかに効率が良いです。
・【TECH::CAMP】エンジニアスクール
・自宅で学べるオンラインのプログラミングスクール【TechAcademy】
最後になりますが、プログラミングは本当に面白いです。現在アラフォーの世代の方は、学生のときに退屈な授業を受けたり、新人のころ退屈な開発に従事されたかと思いますが、現在の優れた環境でもう一度触れてみてください。あまりの環境の良さに、きっとびっくりされると思います。
なお、私も現在、HTML、CSS、JAVAを学習中です。Wordpressも初心者ですが、日々の少しづつの積み上げの効果が実感できて楽しいです。ぜひ、プログラミングに触れてみてください。