なとりうむのメモ帳

アナログな趣味が多めのしがないIT系エンジニア。技術のこと、好きなこと色々書きます。

はじめてのプログラミングの勉強で挫折しない方法

そろそろ新年度なので入学、入社など環境が変わる人も多いことでしょう。
これから新しいことを学ぶ人が大勢いらっしゃると思います。
私は学生時代~今まで何だかんだプログラミングに触れ続けているのですが、プログラミングを勉強しようとしても挫折することが多いと思っています。
実際に学生時代は単位取得のためにやっていましたが、大変苦手で苦しんでいました。
ただ、仕事を始めてからは「なぜ学生時代にあんなことで苦しんでいたのか?」と思える程度には身についたので*1、そんな実体験も含めて
「どうしてプログラミング入門はあんなに辛くて、分からなくて挫折してしまうのか。どうやったら挫けず学ぶことができるか」
を考えて、残しておこうと思います。
新たに入門してくる方々へ、お出迎えの横断幕と共に苦しい時の支えになるような記事になると嬉しいです。
今回は実践的なおすすめ本やサイトとかではなく、学習方針や心構えについて書きます。
実際のおすすめ本とかについてはもう少し経ってから書こうと思います。

今回の話題について次の前提があります。

  • プログラミングに初めて挑戦する/一度挫折したがまたやりたい
  • 使用言語は、JavaC#といった高級言語
    (おそらく他の言語でも共通する部分はあると思いますが、普段利用している言語ベースなので一応それ向けだと思ってください)

 

プログラミングを勉強して何がしたいですか?

プログラミングを学ぼうと思った動機はなんですか?
仕事上必要になったからですか?ゲームや便利ツールを作ろうと思ったからですか?
それとも「面白そう」と思ったからですか?
プログラミングを勉強する際には、ある程度の目的やゴールを設定している方がスムーズに学習が進みます。*2
例えば、自分のお気に入りキャラで作るデスクトップマスコットと銀行システムでは、規模、機能、セキュリティ、処理精度など全てが異なります。
もちろん作りたいものによって学ぶべき概念の優先度変わります。
よく使うライブラリや、実装したい処理も変わります。
なので、ある程度の目標を設定した方が学ぶ際のとっかかりになります。

その言語選択は正しいですか?

勉強しようと思った言語、それは先に書いたゴールにたどり着くのに本当に正しい選択ですか?
各言語には得意分野があります。万能な言語はありません。
言語特性を調べて本当にそれを学ぶべきかを検討した方がいいでしょう。
ただ、とりあえずメジャーな言語を使ってみるというのも手ですね。
利用者が多いということは、ネットに情報もたくさんあるのでいきなりマイナーな言語を選択する必要もないと思います。

実は入門書って初心者向けではないんです

これからプログラミングを勉強しようと思った時に一番最初に何をしますか?
「はじめての○○」「○○入門」みたいなタイトル*3の本を買う方も多いでしょう。
ただ、これらの本ってあくまでもその言語の入門書であって、プログラミング初心者のための本ではないことが多いです。
開発環境の構築方法や、ビルド方法、外部ライブラリのインポート方法など…準備の手番が全てすっ飛ばされていることも少なくありません。
なので本を読んでチャレンジしてもビルドできない…なんてことが起こります。
いきなり本を買う前に、今学びたい言語の開発環境は何があるのか・何を使うのかの選定や、セットアップ方法を紹介している技術ブログを見たりして、まずはプログラミングができる環境と前提知識を揃えましょう。
また、とりあえず始める程度であれば、多くの場合本は不要だったりします。
ネットを駆使して先人の知恵を使いましょう。
深く知りたくなったタイミングで専門書を買えばいいと思います。

ちいさくてもいいので、動くものを作ろう

机上だけの勉強ではどうにもならないのはどのジャンルもそうでしょう。
実践してこそです。
目標に設定したものよりちいさなもので構わないので、
どんどんコーディングしましょう。
動くものができると達成感やステップアップした感覚を得られやすいです。

全部知る必要はありません(とりあえずは)

勉強していると「どうしてこういう風に書くの?」「これはどういう意味?」「これはどうして必要なの」と気になることがたくさん出てくるでしょう。
それらの由来が学習中の言語そのものではなく、コーディング言語の歴史を学べば理解できるようになったり、その言語の思想を知れば腑に落ちることが結構あります。
でも、それらを全て知らなくてもコーディングはできます。
重要なポイントだけを優先的に学び、ひとまず動くものを作れるようにした方がモチベーションも保てます。
気になったことはメモを残しておいて、後から気長に勉強すればOKです。
全てがわからないと次に進めないタイプの人も、気持ちはわかりますがぐっと飲み込んで進んでみてくだい。
広く見渡せるようになってから気づけるものもありますよ。

標準ライブラリやフレームワークをどんどん使いましょう。

楽にコーディングするために色々なものを公式が提供してくれています。
「使っていいよ」と差し出してくれているものを使わず、わざわざ自前で実装してバグを大量に出してもしょんぼりしてしまいますよね。
楽できるところは楽しましょう。
凝ったことをし始めると、使っているものの仕様を知りたくなってくるでしょうから、その際にはリファレンスを読み込むといいと思います。

書くだけではなく、読む量がモノをいいます

プログラミングと言うとバリバリ書いてバリバリ動かして…という姿を想像しがちかもしれません。
でも、実は読む量が重要だったりします。
ゼロから書き始めるのって結構大変ですが、他の人が書いたソースを読むのはすぐに始めることができます。
しかも、どういう意図で処理を書いているかを考える行為が力を付けます。
ソースはGitHubなどで世界中の人が公開しています。
コメントは言語依存があるかもしれませんが、プログラミング言語は共通言語です。
バリバリ読んでいきましょう。

特に作りたいものの類似品のOSSがあればどんどん読み込むといいと思います。
ただし、みんながみんな模範的なソースを書いていませんし、宗教の違いで書き方が異なっていることもあります。
全てを正しい教材と思って読む必要はありません。
読むべきものはソースだけではありません。
自分の作ったソースが吐いた例外も重要な教材です。
例外情報を読み込んでどういうときに出やすいものか、何が原因か、何をすれば解決するのかをしっかり考えるのも腕を上げる手段です。

技術ブログだけでなく、公式情報を見ましょう

コーディングをしていて困ったときに頼りになるのが先人たちが残した、技術ブログの記事や掲示板です。
でもその内容は本当に正しいでしょうか?
多くの人が嘘を流布しようとは思っていないとは思いますが、情報が古くなっていて現在の状況とは異なっている場合もあります。
また、苦肉の策で褒められはしない回避方法だったり、実は制限があってベストな選択ではなかったりします。
なので、公式の文書も合わせて読みましょう。

身につくにはそもそも時間がかかるものです

“10,000時間”このキーワードを聞いたことある方は多いでしょう。
まあ、正直10,000時間の使い方が重要なわけで、とりあえず10,000時間やればトップレベルになれるわけではありません。
でもとにかく、何かを「食っていけるレベル」にするには時間がかかるものです。
勉強したいだけなならここまでする必要はありませんが、時間がかかるものであると意識してゆったりした気持ちで学ぶとプレッシャー少なく学べると思います。*4

*1:職業コーダー+最近は管理系の仕事増え気味なので、書く量が多くはないです

*2:この辺、仕事で必要ってなるとゴールが明確になりやすいですよね

*3:○○の部分は学ぶ言語名

*4:でも仕事で締め切りきつくて死ぬ気で勉強すると密度高くて早く覚えますけどね