独学エンジニアのプログラミング学習〜意識編〜

てちてちエンジニアのおっとーです。

最近プログラミングを学ぶ人口が増えてきたのか、SNSの広告にもプログラミング学習の広告がよく表示されている印象を受ける今日このごろです。
プログラミングを学べる場所が増えてきているのはとてもうれしく思う一方、
本当に「金額に見合った学習コンテンツを提供できているのかな?」なんて思ったり・・・。

こればかりは、自分で体験してみないとなんとも言えないので、
「もやっ」とした気持ちはいつか体験してみて解明したいと思います。

そんなことは一旦さておき。
本題に入っていきます。

私は現在エンジニアとして派遣先に勤めながら、
副業としてウェブアプリ開発や企業HPの作成や業務システム化のお手伝いしています。

プログラミングスキルのレベルは、作りたいものを調べながら作れるレベルです。
プログラミングに本腰を入れて学び始めてから2年ほど経ちますが、
今でも新しい機能や技術を学び続けないと周りに取り残されてしまうなと感じながら生活をしています。

そんな私がこれまで独学してきた中で、これから学習する方の参考となるように、
学習時に心がけると学習効率が上がり、スキルが身につく方法紹介していきます。

学習目標を立てよう

「これから学習を始める段階で目標と言われても・・・」、と感じるかもしれませんが、目標はゴールが明確なら何でもいいです。

参考書をベースに学習を進める人は、参考書を読み切る。

アプリを作りたい人は、機能の実装に必要なプログラムをコーディングできるレベルになる。

サイトを通して勉強する人は、カリキュラムを完了する。

特に目標が無いという方向けに私からのおすすめとしては以下です。

「プログラミングが好きな人」は基本文法を使って自分の書きたい処理をかけるようになる
「プログラミングに抵抗ある人」はプログラムが何をしているかを読めるようになる

実現できそうな目標を立て取り組むほうが、実現過程をより明確にできます。

ざっくりとした目標ができたら、それをいつまでにやるかを決めます。

私は今でも学習する際は、目標を決めてそれを実現するための学習手順を明確にしてから取り組みます。

初めての人は学ぶ言語を1つにしてプログラミングの基本を習得しよう

プログラミングを学ぶ人は色々と言語を学ぼうとして、
Python、Javascript、HTML、CSS、JAVA、GO、C++、C#など複数の言語に手を出し、
挫折をしているなんて話を何度か耳にしたことがあります。

実は私もPHP、Objective-C、Swift等を同時に学習しようと思っていた時期があり、
その頃はあっちの参考書をみてはこっちの内容を忘れとっ散らかった状態でした。

その頃努めていた会社で既存システムをベースに機能を開発してほしいと依頼を受け、1つの言語の習得に集中することができました。

1つの言語を学習していく中で、基本を理解し応用を覚えていった時の学習の進み具合は今でも覚えています。

1つの言語を理解すると、他の言語を学ぶときにも基礎ができているので、少し参考書を読む程度で基本文法は理解できるようになります。

ここまでくれば言語を新たに学習し始める時はWEB検索で十分になります。

入門レベルの参考書は不要になり、中級者向けの書籍から学習を始められたりします。

以下のような内容はどの言語でも類似してきます。

  • 定数、変数、関数、クラス、型、宣言
  • ループ、分岐処理
  • エラー処理(例外処理)
  • ファイル操作

初めてプログラミングを学習しようとしている方は、ぜひ1つの言語に絞ってみてください

目標を実現するための手順を考えよう

最初に考えた目標を実現するための方法を考えます。

「1ヶ月で参考書を読み切る」という目標であれば、1日どれぐらいのペースで読めば目標を達成できるのかは明確です。

手順を考える方法は目標の大きさに関わらず同じで、

いつまでにどういった目標を果たすためにどのように行動するか

を考えます。

掲げた目標が大きすぎる場合は、まず大きな目標を小さな目標に落とし込んでから、小さな目標の手順を逆算をして最終的に「いつまでに〇〇と✗✗をやって目標を達成する」という手順を考えます。

目標が抽象的になるほど手順を考えるのが難しくなります。

ですので、目標はなるべく具体的な内容にしたほうが良いです。

例えば、「拾ってきたコードを微修正できるようになる」の場合だと、拾ってくるコードの難易度によって、微修正に求められるコード読解能力は大きく異なります。

参考に1例をあげておきます。

アプリを作りたい

どんなアプリ?:学習記録アプリ

どんな機能を搭載する?:①学習内容の記録②学習した日付の記録③学習内容への一言コメント

データを記録する必要がある(DBの知識が必要)
記録日時を取得する方法を探す
記録するためのフォーム(入力ボックス)の仕組みを理解する必要がある

こんな感じで、自分が時間配分できるレベルまで細かく分けていきます。

最終的に

  • DBの知識習得&構築:2週間
  • 時間取得方法検討:2日
  • フォームの理解&実装:1週間

と約1ヶ月でアプリを作っていく手順を明確にしていきます。

取り組んでいく中で、「時間の取得はDBのTIMESTAMP機能で十分だわ」と計画がずれる場合もありますが、
必要日数が減る分には問題ないので、本来立てた目標日数で進めましょう。

目標が早く達成できた時は、別の喜びに出会えるかもしれないです。

コーディングの時に注意すること

プログラミングを学習していく上で、最初から意識できてたら楽だったなと思うことを紹介します。

  • 変数の型
  • 可読性(変数名の付け方、コメントの付け方)
  • 何度も出てくる処理のパーツ化(関数、クラス)
  • スコープ(変数の有効範囲)

この辺に関してはリーダブルコードと言う、エンジニア必読書と呼ばれている書籍を読むのが良いかもしれません。

230ページほどの書籍なので、隙間時間でも全然読めます。

ちゃんと動いているか確認する方法を考えよう

自分が書いたプログラムが想定どおりに動いているかを確認するための方法を考えることを意識しましょう。

def test(num):
    if num > 0:
        print('0より大きい数です')
    elif num == 0:
        print('0です')
    else:
        print('0より小さい数です')


if __name__ == '__main__':
    user_input = int(input('自由に入力してください'))
    test(user_input)

上記のプログラムは、
・ユーザーの入力を自由に受け付ける
・入力された数字によって「0より大きい数です」「0です」「0より小さい数です」を表示する
・数字以外は何もしない
という設計で作成されたプログラムだとします。


どのような値を入れて動作確認をすれば問題なく動作していると判断できるでしょうか。

入力を自由に受け付ける場合、

  • 数字
  • 記号
  • 英字
  • 日本語

等、様々なキーボード入力がされるかもしれません。

テストケースは想定される入力値を部類分けして各1種、

数値に関しては1,0,-1等境界値等を準備するのが良いかと思います。

「*」「あ」「0.1」「11」「a」「1」「0」「-1」とかが良いと思います。

テストを行うとタイプエラーが発生するはずです。

受け付けた入力値を整数型に変換する際に、数字以外では変換が行えないためです。

プログラミングを行っていると、簡単な処理一つでも、想定通りの動作をしないことがあります。

入力時に整数以外受け付けない、途中でエラーキャッチを入れる等、後から対策の処理を追加しても良いのですが、予め不具合が発生しない処理を作れるようになることはコーディング効率に繋がります。

特に学習し始めたばかりの方は、自分の書いたプログラムに対しテストケースを考え動作確認をして理解を深めることをしましょう。

何度もやっていると、プログラムを書く時に自然と意識できるようになり、飛躍的に不具合を減らせます。

デバッグ機能を活用しよう

学習を進めていく上で多重ループ(ループ処理内のループ処理)の様な複雑なプログラムを作っていくことになると思います。
私はテーブル操作を行ったりするときに、頻繁に多重ループ等使います。

最初の頃は動きが見えないので少し難しいと思います。

そんな時に使えるのがデバック機能です。

デバッグ機能では、

BREAK POINT:処理を止めたい箇所
STEP INTO:次の処理まで移動
STEP OUT:ブレイクポイントから後続処理を行って、呼び出し元に移動
STEP OVER:次の行の処理まで移動

を使ってプログラムを1行単位、1ブロック単位で確認することができます。

高機能なエディタやIDEでは代入されている値なども見れるので、
ぜひ活用して複雑な処理も少しずつ理解できるようにしていきいましょう。

とりあえずざっと書きましたが、また何か思いついたら更新していきます。

コメント

タイトルとURLをコピーしました