プログラミングの勉強は難しいのか?

結論

私は「プログラミング」自体は決して難しいものではないと思っています。
しかし、学生が「プログラミングをやってみたい」というのと、社会人の方が「プログラミングを仕事とするためにプログラミングをやってみたい」と言うのでは意味合いが変わってくると感じています。
どの程度勉強をしなくてはいけないのか、何を用意する必要があるのかについてお話をさせて頂きたいと思います。

プログラミングの学習

さて、冒頭では「「プログラミング」自体は決して難しいものではない」と述べました。
まずは「プログラミング」の学び方について意見を述べていきたいと思います。
プログラミングは機械語(プログラミング言語)を用いて、命令を記述しコンピュータに何かしらの処理をさせるためのものを作成する作業です。
映画やドラマでプログラマーの方々が何やら難しそうな英語をカタカタと打っている光景を見たことがあるのではないでしょうか?
実はプログラミングをする上で覚えるべきものは少ないです。実際に手を動かせばわかりますが、値の設定・条件分岐・繰り返し処理を使いこなせれば、大抵のものはできてしまいます。
それでもプログラミングの学習に挫折してしまう人がいるのは、大きく分けて2つの理由があると思っています。
プログラミングで挫折するポイント

「どこまで」勉強すれば良いのか分からない

結論から言うと、「どこまで」がある勉強ではありません。強いて言うなら「自分の作りたいものを1つ作ってみる」がゴールだと思っています。
新しい技術がどんどん出てきます。欲しい結果を出力する方法は1つではありません。なので、勉強はし続けないといけないです。
ただ、覚えられるものにも限界があります。では、どうするのか?
私は「過去の経験」と「調べる」ことでとても大切だと思っています。
「昔こんなことやったな。その時のコレが今回も生きるのではないか」「今回こんなことがやりたいな。やり方を調べてみるか」といった形で、過去の経験の思い返しやインターネット、書籍を用いた調べ事をしながらプログラミングは進めていくことが出来ます。
学校の試験ではないので、覚えている必要はないのです。ただ、調べるとっかかりとしてやったことくらいは覚えておくと、将来生きることは間違いないです。そして、覚えていられるなら覚えた方が良いです。
正直私は、SIerに努めて開発者として開発をやっていた当初「覚えようとして覚えたこと」はほとんどありません。「似たような仕組みを何回も使った」「似たような機能を何度も作った」「(自分としては)画期的な方法だったから印象に残った」から覚えていたものがほとんどでした。

「プログラミング」ではなく「アルゴリズム」ができていない

私が新人研修をやっていて、プログラミングの研修で進捗が悪い新人を見ていると2つに大別できます。

  1. 「やりたいこと」は分かっているのに、プログラムコードとしてアウトプットができない
  2. 「やりたいこと」が分かっていないから、プログラムコードにアウトプットできない

この2つです。
この「やりたいこと」がアルゴリズムです。
プログラミングをする上で大切なことは「結果」と「方法」です。方法がプログラミングコードとして記述されるものであり、「アルゴリズム」と呼ばれるものです。
では、身近な例で「結果」と「方法」を考えていきましょう。

結果:目玉焼きをつくる
方法
  1. フライパンをあたためる
  2. フライパンに油を垂らす
  3. 卵をフライパンに乗せる

これが、「目玉焼きを作る」ための「アルゴリズム」です。
しかしプログラミング言語には「フライパンをあたためる」という命令は用意されていないかもしれません。そうすると今度は

結果:フライパンをあたためる

方法

  1. フライパンを調理器具棚から取り出す
  2. コンロに火をつける
  3. フライパンを乗せる
  4. 30秒待つ

というアルゴリズムが必要になってきます。
そうすると目玉焼きを作るアルゴリズムも

  1. フライパンを調理器具棚から取り出す
  2. コンロに火をつける
  3. フライパンを乗せる
  4. 30秒待つ
  5. フライパンに油を垂らす
  6. 卵をフライパンに乗せる

になるわけですね。このように「結果」を得るための方法を考えていく中で、「小さな結果」のためのアルゴリズムが必要になってくることもあります。
もちろんプログラミング言語に「目玉焼きをつくる」という命令が用意されている可能性もあります。そうなれば

結果:目玉焼きをつくる
方法:目玉焼きをつくる

という、なんとも奇妙なプログラミングを行うことになるわけですね。

このポイントで躓いてしまった方へのアドバイス

プログラミングを学ぶために「どこまで」と考えてしまう人は、残念ながらプログラミングには向いていないかもしれません。もしくはゴール設定を誤っています。
「作りたいもの」「やりたいもの」を決めましょう。それを作ることが初めのゴールです。それが達成出来たらどうするか?
次は「次の作りたいもの・やりたいもの」を決めましょう。もしくは、自分の作ったもののプログラムコードを見て「より良いやり方」を探してみましょう。「より良いやり方」は自分だけでは見つけにくいと思います。知人にプログラミングに明るい人がいればアドバイスをもらってください。一緒に勉強をしている仲間がいればプログラミングコードを見せ合ってください。
そうやって、沢山のコードを見て、書いていくうちに効率的なコードや必要な知識が自然と身に付きます。
「アルゴリズムを考えられない」と感じた方は「Scratch(スクラッチ)」を触ってみてください。小中高生あたりをメインターゲットにした言語ではありますが、用意されたブロックをつなげてプログラミングをしていくので、プログラミングコードの難しさを押させて、プログラミングができるので、アルゴリズムを考えることに集中できます。また、ブロックの組み合わせなので「必要なものを探す」ことでプログラミングができます。0から書くよりはとっつきやすいと思います。
あとは、日常生活の何気ないことのアルゴリズムを考えてみましょう。

結果:自販機でジュースを買う
方法
  1. 財布からお金を取り出す
  2. お金を必要な金額以上入れる
  3. 欲しいジュースのボタンを押す
  4. しゃがんで取り出し口からジュースを取り出す

のようなことですね。直接役に立つかはわかりませんが、プログラミングをする上では「結果のための手順」をプログラミング言語に用意されている命令レベルまで分解することが必要になります。その考え方が身に着けられるようにしましょう。

プログラミングに興味をもった方へのお話

「仕事」にするかは分からない。でもプログラミングをやってみたいという方は「書いてみる」という行動をまずはおこしてみてください。
様々な文献があります。それをいくら読んでもプログラミングが出来るようにはならないと思います。今はブラウザ上でプログラミングを行えるサービスやソフトが沢山あります。
まずはどれか選んでやってみましょう。後日、私の方でもサービスやプログラミングについての紹介記事を書かせていただきます。

仕事にしたい方

仕事の仕方にもよりますが、プログラミングの知識だけでは勝負できないことも多々あると思っています。
例えばプログラミングをするための環境を用意できるか、データベースを使用することはできるかなど、作るための環境の知識や、作ったものが動くために必要な他の物の知識が必要になることがあります。
とくに、仕事としての開発ではデータベースは切っても切り離せないものであると私は考えています。
全部が全部ではないですが、データベースの知識が要求されることもあるでしょう。
副業としてやる場合はDBが絡まない言語(HTMLやCSS(Webページのページ自体やページの装飾を行う言語)など)をメインの仕事に据えるなどを考えても良いかもしれません。その際は市場調査も忘れずにやりましょう。
たとえば私が運営しているこのブログでは「HTML」「CSS」の知識でほとんどが結末しています。ややこしいところはCorofulbox(レンタルサーバ会社)やWordPress(ブログソフトウェア)がやってくれているわけです。
開発会社に入ると「WordPress(ブログソフトウェア)」この部分を作っていくことになるので、小難しい部分の知識が必要になってくるわけですね。
学生が新卒で仕事にする場合はそこまで深く考えなくても良いと思います。そこまで出来る学生は(少なくとも地方SIer私は)見たことがありません。
現在働いている方が中途採用で入社を目指す場合はある程度の知識が要求されることも珍しくはないと思います。年齢が上がるにつれてその傾向も強くなると思います。勉強をする前に各社の募集要項を見てみても良いかもしれませんね。

最後に

以上、プログラミングに関する私の考えになります。
社会人になって3年ほど経過すると、他業種の友人から「プログラミングを学びたいけど、今からだと無理か?」と問われることが多くなりました。
結論としては「プログラミングがやりたい」という気持ちがあれば問題ないというのが私の回答ですが、裏にはここまでの文章のような考え、気持ちがあります。
ITに興味をもっていただけることは非常に嬉しいですし、応援もしますが、やはり「専門職」です。
「どうして」勉強をしたいのかを考えて、勉強を始めて下さい。
みなさんの参考になれば幸いです。