TL;DR
プログラミングを勉強したいけど
- プログラミングに苦手意識を持っている
- どこから勉強したら良いかわからない
そんな人向けに、自分の経験を掘り返した上で、
自分なら今までどうやってきたかを噛み砕いて説明した記事です。
この記事の内容は筆者の主観によって、
こうしたら個人的に理解が進んだという経験をもとに書いています。
ですので、人によっては別の方法の方がよい可能性もあります。
あくまで参考として読んでいただけると幸いです。
メモ程度の筆者の経歴
- CS系学科出身(卒研でドロップアウト)
- 27歳の時に独学コーダー
- 先輩社員いない中ひたすら独習→転職
- Web制作会社でフロントエンドとバックエンドやってる
そもそもプログラミングとは
コンピューター(英語: Computer Programming)とは、ある特定のコンピューティングの結果を得ることを目的として、実行可能なコンピュータープログラムを設計・構築するプロセスのことである。
例えばフロントエンドならAPIにリクエストを発信して受け取った値をブラウザに表示する「処理を実装する」こと、
バックエンドなら、APIからPOSTを受け取ってデータベースの値を更新する「処理を実装する」ことが当てはまります。
プログラミングに必要な知識
個人的にプログラミングに必要な知識は重要な順に
- 実装したい処理に対して、処理フローを設計する知識
- 言語を問わないプログラミング知識
- 言語に関する知識
- 言語仕様に関する知識
- フレームワーク・ライブラリに関する知識
だと思っています。
主として設計知識やプログラミング基礎の知識があり、
そこに言語ごとの仕様やフレームワーク・ライブラリの知識が積み上がっていくイメージとなります。
土台ができているか否かで、新規学習の難易度はグッと下がります。
また、言語共通の仕様を理解しているのならば、
別の言語を理解するのも容易になります。
言語に関する知識
実務で一番重要になってくるのは言語そのものや
ライブラリに関する知識になるかと思います。
おそらく、ここについては通常業務をこなしていれば自然と身についてくる、
自主的に学習する際真っ先に学習対象になってくる部分ではないかと思います。
こちらについては特筆することもないかと思うので省きます(書くのめんどくさい)
言語に関する知識について、
なんとなくで学習すると言語仕様についての知識は割と抜けがちなので
しっかりやっておくと後が楽です。
言語を問わないプログラミング知識
言語を問わないプログラミング知識には、
例えば上記のプログラミング三大要素に加えて
- 変数
- 関数
- クラス
などの処理のまとまりや、
各変数・定数の型、例えば
- 文字列型(String)
- 整数型(Int)
- 浮動小数点数型(Float)
- 真偽値型(Boolean)
- 配列型・オブジェクト型
などがあります。
上記を組み合わせた設計理論なども
言語を問わない知識に入るかと思います。
上記は大まかな言語の方向性さえ揃っていれば
新しい言語やフレームワークにも応用できるので、
言語を問わない知識を身につけていると新規学習をする際のハードルが
グッと下がるようになります。
実装したい処理に対して、処理フローを設計する知識
プログラミングの基礎の基礎はこの部分であり、
おそらくなんとなくコピペから入った最初に突き当たる壁がこちらになります。
そして、所謂CS(情報科学)系学科でまず最初に勉強する部分がここになります。
この知識を伸ばすには、まずフローチャート描く練習をします。
いきなりソースコードを書くのではなくフローチャートを利用した上で、
プログラミングの三大要素である
- 順次
- 分岐
- 繰り返し
という概念を身につけます。
また、分岐を構築するためには
- 論理演算
の基礎が大事になってきます。
また、繰り返しの拡張である
- 再帰処理
も重要ですが、こちらは実際にプログラムを動かしながら
勉強するほうが理解度は高まるかと思います。
フローチャートを描く能力の身につけ方について
例えばFizzBuzzや、自販機などの例題を探して、
フローチャートを書いてみます。
フローチャートじゃ味気ない、なんかイマイチ乗り気にならないという場合は、
Scratch
や、ゲームを利用した
ビジュアルプログラミングから入ると、
フローチャート・アルゴリズム部分を重点的に訓練することができるかと思います。
というわけで
基礎は大事( ー`дー´)キリッ