🐣

プログラミング基礎の基礎勉強法

2020/12/19に公開

自己紹介

  • 職業ひよっこSE、業務効率化システムを主に提供
  • Web/バッチアプリ開発(C#)、RPA構築、OCR構築などなど

数年、プログラミングを勉強してみた経験から、おすすめの勉強法と流れを紹介します。
プログラム書いてみたいけどさっぱりわからん!みたいな人向けです。
※あくまで、個人の意見なので参考程度に見てみてください

勉強に使用したもの

まずは勉強に使ったサイトなどの紹介。

  • AtCoder(競技プログラミングサイト)
  • Progate
  • ドットインストール
  • SEのお仕事(これはチートですが、正直1番手っ取り早いです)

これらを使用してどう勉強していったかというと

  1. とにかく参考になるソースコードの模写
  2. アルゴリズムを勉強、理解
  3. Webデザインについて勉強、理解
  4. Webアプリの仕組みを勉強、理解
  5. 最後は自分のやりたいことをひたすら勉強

ソースコードの模写

ここで活躍するのがSEのお仕事!というわけにはいかない人が多いと思うので、
実際はAtCoderでプログラミングの基礎を学ぶには事足ります。
開発環境(Visual StudioとかIntelliJ)をインストールしていることが前提となっているので、
まずはインストールしてください。
開発環境の構築方法はGoogle先生に説明を任せてあります。

AtCoderとは

簡単に言うと競技プログラミングのサイトです。
が、競技に参加しなくともプログラムの書き方を学ぶにはとても便利です。

かなり質の高いソースコードを見ることができます。
が、そんな方々のソースコードは一目ではわけがわからないことがほとんどです。

まずはAtCoderのサイトへ行き、コンテスト一覧の終了後コンテストから
AtCoder Beginner Contestとタイトルのついているものを探しましょう。

その中からどれでもいいのでコンテストを選択します。
そうするとコンテスト(問題)のページに遷移できるので、まずは問題を見てみましょう。
初学者なら「A - XXXXXXX」の問題をまずは見たほうがいいと思います。

問題を見つつ、新しいタブで 提出結果(すべての提出結果) を開き、
提出結果一覧から提出結果を見てみます。
まずは以下の内容で検索します。
問題:A - XXXXXXX(見ている問題)
言語:自分の好きな言語(なければPython、C#あたりでいいでしょう)
結果:AC(正解)

一覧がずらーっと出てきます。

「A - XXXXXXX」を選んだ場合はその中からコード長1000Byteぐらいの人の詳細を見てみましょう。
1000Byteぐらいだと難しい省略した書き方が使われておらず、比較的わかりやすいソースコードが記載されている可能性が高いです。

実際のコードを見てみて、こうやって記載するものなんだと公式のように覚えます。
なんならコピーしていいです。

そして、実際に問題を解いてみます。
問題のページへ行くと問題を解けるようになっており、テストのサンプルとその答えがあります。
ここで自分の開発環境で先ほど覚えたコードを記載し、実行します。
すると入力ができるようになると思うので、入力例をコピーし貼り付けます。
結果が出力されます。
ひとまずプログラミングって何?って方はこの流れを何度かやればなんとなくコードの書き方のお作法わかります。

次は実際にアルゴリズムを学んでいきます。

アルゴリズム勉強

AtCoderでいくつかコードを見たところで、何しているのかさっぱりわからんって部分がいくつもあったと思います。
そういう時にはGoogle先生です。
気になる部分をひたすら調べます。
いろんな方が該当のコードが行う処理、その仕組みについて解説してくれています。
この段階までくるとプログラミングとは何ぞや、の状態からプログラミング簡単そう!まで成長しているはず(?)です。
いったん基礎としてはこれだけ学べばいいです。
プログラミングについて浅く理解できているはずです。

ただ、現時点では機械が裏で処理するためにどんな命令(コード)を書いているかが分かっただけです。
よく見るアプリやサービスには必ずわかりやすい画面があります。
そこでWebデザインについても基礎知識を学んでいきます。

Webデザイン勉強

ここからはProgateを使ってWebデザインについて学んでいきます。
Progateアカウントを作成し、コース一覧よりHTML&CSSを選んで学んでください。
Webデザインの仕組みがわかります。
皆さんが日頃見ているサイトはどんな仕組みでデザインされているのかわかるはずです。

Webデザインについてなんとなくわかったところで、最後はWebデザインと連動して機械が裏で処理してくれる仕組みについて勉強していきましょう。

Webアプリの仕組みを勉強

ここでもProgateの出番です。
コース一覧からRuby on Rails5を選んで学んでください。
基本的なWebアプリの仕組みがわかります。

Webアプリ、プログラミングの基礎の基礎についての学習はひとまず完了です。

残りは自分のやりたい分野をひたすら勉強

ここまででとっかかりはできたと思いますので、残りは自分が学びたい知識をひたすら学ぶだけです。

  • アルゴリズムを極めたいならAtCoder
    ※ただし今後は模写はせず、自分でロジックを組み立てコードを書いてください。
     でないと自分の考える力が身に付きませんし、コードを書けない人になります。
  • Webアプリ、サービス系統を極めたいならProgate、ドットインストール
    ※ドットインストールはある程度勉強してから取り組むことをお勧めします。
     ここでもコードはできる限り自分で考えて書いてください。

自分の学びたいことをやっていくうちに知識が足りない部分が嫌になるほどわかります。

アルゴリズムでは、、、

  • 処理性能を極めるロジックについての知識
  • 各言語でのAPIの機能とその書き方
  • エラー考慮の足りない点(想定外なエラー)やデータの入力パターンの考慮不足
  • データ型の指定方法
  • 同じ結果になるプログラムでもいくつもの書き方があること
  • 最適なプログラムを書くことの難しさ

Webアプリ、サービスでは、、

  • 人に優しいUIを作る難しさ
    マニュアルがなくてもストレスなく利用できるサービスが理想
  • DBと連携することがほとんどであるため、DB設計、SQLの知識不足
  • ユーザが行う予想外な操作への対応知識(入力制御、操作制御、セッション管理などなど)
  • 通信プロトコル関連
  • セキュリティ知識
  • OSやブラウザに依存して動かなくなる機能達

エンジニアになりたい、プログラマになりたい方向けに

極めるのは大変ですが、一つの分野でも極めることができれば浅く広く知っている人より確実にエンジニアとして需要はあります。
ただ、既に分野ごとに天才が多くいるというのも事実ですので基礎知識は身に着けつつ、天才たちが作ってくれたアプリやソフト、サービスを利用して新しい何かを作る人(SIerとか)になるという方法もあります。どちらにしろ基礎知識はないと厳しいですが。

プログラミングを仕事にしたいならまずはそれができる仕事をするのが一番です。
学んでいるだけでは身につかない、人に提供する責任感、新しいものを生み出す大変さに気づけます。

と、2,3年エンジニアとして働いてみた自分がごちゃごちゃ言いましたが、2,3年で少なくともこれぐらいの感覚が身につくので仕事で経験しちゃうのが手っ取り早いです。
なんならアルバイトでも、まずはインターンでもいいと思います。
ぜひ、現場を感じてみる、同じ境遇の人たちと交流してみるってことをしてみてください。

Discussion