プログラミング言語の習得度合を考える その2

スポンサーリンク

こんにちは!めっそそです。

前回「プログラミング言語の習得度合を考える」という記事を書いたのですが、書いていく中でどんどん書くことが増えていき、書ききれなくなったので続きの記事です。今回は、前回定義したレベルについてレベルアップする方法を書いていきます。

前回に引き続きあくまで個人の感想になりますので、温かい目で見ていただけると幸いです。

レベルの復習

詳しい内容は前回の記事を見てもらえればと思いますが、レベルについて再掲です。
これからレベルアップの方法を書いていきますが、大前提として、プログラミング言語については全員が最大のレベルまで習得する必要はないと思います。大層な定義をしていますが、気張らずにいきましょう。

  1. 変数宣言や基本三構造が書ける
  2. ライブラリ、言語毎の特徴的な仕組みを書いたことがある
  3. 例外処理を書いたことがある
  4. ライブラリ、言語毎の特徴的な仕組みをプログラムから読むことができる
  5. ライブラリ、言語毎の特徴的な仕組みを使って実装できる
  6. 読み解くのが困難なレベルの実装をできる

未経験→レベル1

プログラミングの習得で最もハードルが高い部分がこの壁になります。ここを越えられるとレベル3までは比較的スムーズに進めるので、まずは頑張りましょう。

この段階を突破するには、

  • 変数宣言を身につける
  • 変数への代入を身につける
  • 条件分岐・反復処理の書き方を覚える
  • 自分のやりたい処理を、順序立てて整理する

を身につける必要があります。特に変数への代入については「=」という記号が数学で意味する同値ではなく代入になるので、この感覚を掴むことが第一関門になりますね。

数学だと「x=x+1」は成り立ちませんが、プログラミングだと頻出です。この処理が理解できれば、大きな壁は越えたと言えるでしょう。

また、プログラミング言語の書き方がわかったところで実際に処理を書くのは自分です。どんな処理を機械にしてほしいのかを細かく書くのがプログラミングなので、処理の内容を細かく考える癖をこの段階からつけておきましょう。なお、この「どんな処理を機械にしてほしいのか」のことをアルゴリズムと言います。

例:「エレベーターで目的の階に行くための手順」を可能な限り細かく考える。
ボタンを押す→乗る→目的の階のボタンを押す→目的の階に着いたら降りる
のような粒度だと全然足りません。全て書いていくと長くなるのですが、例えば「ボタンを押す」をもっと細かく書くなら

自分の行きたい階が上か下か確認する→上または下に行くためのボタンが押されているか確かめる→押されていない場合、ボタンの前に移動する→上または下のボタンを押す→エレベーターが到着するまで待つ…

といった具合になります。これは日常生活でも練習することができるので、これからプログラミングを始めようという方は是非取り組んでみてください。

レベル1→レベル2

晴れて基本三構造を習得すると、理論上どんなプログラムでも作ることができるようになります。ただ一から自分で作成したプログラムは同じ処理をコピペしたりアルゴリズムが非効率であったりします。

そこで、レベル2の段階で身につける技術は「より効率的に、綺麗にプログラムを作る」ために必要になります。例えば、

  • 並べ替えをする
  • 文章の中に含まれるキーワードを探す

という処理は何度も使いそうな気がしませんか?他にもエレベーターの例で言えば、「ボタンを押す」という処理が何度も登場すると思います。そんな、何度も出てくる処理を毎回書いていては面倒で非効率なので、どこかに書いてまとめておこう…とするのが関数やクラスの役目になります。また、誰かがすでに作ったこの処理を、ライブラリと言います。

なので、このレベルで身につけるべきことは

  • 繰り返し登場する処理を見つける
  • 繰り返し登場する処理をまとめて、関数やクラスに分ける
  • 自分で作った関数やライブラリを使ってみる

になります。プログラムが多層化することで見にくくなり、自分で動かす際にはあまりメリットがないためその効果が中々分かりにくい部分ですが、とにかくここでプログラムを多層化させることに慣れてください。

大きなプログラムを作るようになってくると、関数やライブラリを使うことで自分のやりたい処理がスッキリし、手直しが格段に楽になると感じられるようになってきます。

ただし、この段階で扱う内容はレベル4以降でバンバン使う部分であり、プログラムによっては必要でないものもあったりします。全ての知識を身につけるとなると途方も無い労力がかかるので、この段階では程々に押さえておきましょう。「知っている、その用語は聞いたことがある」のレベルで十分です。

レベル2→レベル3

レベル2まで身につけた時点で、個人レベルであればかなりプログラミングができるようになっていると思います。ただ、あくまで個人で利用する用途なので他人が使うことは想定されていないのではないでしょうか。

自分が作ったものを人が使うとなると想像以上に色々な問題が発生します。例えば、整数値を入れなければいけないところに文字列を入れてしまったり、絶対に入力をしないといけないところに入力をしないままプログラムを動かしたり…

そんな時に、プログラムを安全に終了させたり利用者に「ここはこうしてね」と案内してあげたり、吐かれたエラーからプログラムの情報が漏れないようにしたりするための処理が例外処理となります。

レベル2まではあくまで自分が使うためのプログラムでしたが、レベル3の技術では他の人に安全に使ってもらうために必要になります。

レベル3で身につけるべきことは

  • 例外処理を発生させる方法を身につける
  • 自分で例外を定義する
  • プログラムの中で、自分で定義した例外を発生させる処理を組み込む

です。
よくある自作例外処理としてはNotNull制約、桁数指定、指定した値以外を許容しない等ですが、「自分が思っているルールを人にも守ってもらうための処理」と思えばイメージしやすいかと思います。

例外処理を盛り込むことでプログラムの量が一気に増えるため、「プログラムは正常系で半分、異常系(例外処理のこと)で半分」とも言われます。考え始めるキリがない例外処理ですが、まずは少しずつプログラムに書いていきましょう。

レベル3→レベル4〜

レベル3までは参考書に書いてあることのため、頑張れば独学で身につけることも可能です。しかし、レベル4以降は他人が書いたそれなりの規模のプログラムを読むようになるため、どうしても独力では限界があります。

もし就職活動のためにプログラミングを一から勉強しているのであれば、即戦力として働くのでもない限りレベル2もあれば十分だと思います。レベル3あれば非常に優秀ですね。そのためレベル4以降が必要なのは、仕事や大学でプログラムを扱うようになってからではないでしょうか。

レベル3からレベル4に上がるためには他人のプログラムを読むことが必要ですが、そのためにはとにかく人が書いたプログラムを読みましょう。仕事や大学で触るプログラムの他にはGitHubにあがっているソースコード、Qiitaやブログの記事、ハンズオンで作る何かの成果物などがあるかと思います。

他人のコードを読む際には自分のあまり使わないライブラリをどう使っているのか、どのように関数を分けているのか、ここで自分ならどう処理をするのか等自分にないものを吸収することを心がけてください。

レベル3まで到達した時点でプログラミングに必要な知識は身についています。ここからは覚えた知識を理解して自分の身に取り込むようになっていきます。とにかく多くのプログラムを読み、時には自分で人の書いたコードをいじり倒して自分流のプログラム技術をどんどん身につけていきましょう。

これ以降はどれだけプログラムに触ったかがそのままレベルに直結します。私自信はそんなにプログラミングが得意ではないため、レベルで言えば一番使っているJavaでも高々5前半くらいしかありません。

それでも仕事はなんとかなっていますので、これからプログラミングを始める人たちも、すでにプログラミングをしている人たちも気長に取り組んでいきましょう。

余談:プログラミングに暗記は必要?

以下、余談です。界隈でよく初心者から聞かれるのが、ライブラリや構文に対して「これ全部覚えないといけないんですか?」というものです。新入社員への言語研修にも講師として参加することがあるのですが、めっちゃ聞かれます。

こちらの質問ですが、個人的には暗記は不要と考えています。それこそライブラリなんかいくらでもありますし、滅多に使わない構文や演算子もあります。多分Javaのシフト演算なんか街を歩いているJavaプログラマを捕まえても分からないんじゃないんでしょうか。(あくまで個人的な偏見です!悪しからず!)

何よりプログラミングをするときは大体ネットを使用できる環境であり、調べればライブラリの基本的な使い方はすぐ出てきます。そうすると、わざわざ使い方を覚えるメリットが検索する手間を省ける程度しかありません。

ただ、誤解をしないでいただきたいのは「暗記する必要はない」≠「勉強する必要はない」ということです。初見のライブラリが想定どおりの挙動をする保証はないですし、それこそ分からないものがあったときに毎回一から調べるのはそれこそ時間がかかってしまいます。

なので、正確には暗記は不要ですが「思い出せるように一度勉強しておけば、わざわざ暗記をしておく必要はない」というのが個人的見解です。

(恥ずかしながら私も久々にwhile文を書いたときに「あれ…どうやって書くんだっけ…?」となりました。使わない技術はどんどん忘れていくので、Java Goldを持っていてもこんなもんです。)

まとめ

色々長々書きましたが、プログラミング言語は使わないと身につきません。なのでとにかく書きましょう。何を書いていいかわからない人は競技プログラミングをすればいいし、ハンズオンの講座で作るプログラムを自作してもいいでしょう。

色々書いて、思ったとおりに動かないところを調べて直して、機能を拡張して…の果てなき繰り返しが、プログラミング言語を習得する唯一の道ですね。頑張りましょう。

コメント

スポンサーリンク
タイトルとURLをコピーしました