どうも、こんにちは。
僕は現在、IT業界に5年半振りに転職し、復帰しました。
そのため、プログラミングの勉強中の身であります。
復帰にあたって、まず僕はプログラミングスクールに通い、web開発の学習を行いました。
スクールには、多くの受講生が参加していて、未経験者の方が多かったです。
学習を進めていく中で、1点気になったことがあるので、今日はそのことについて、お話ししようかと思います。
気になったこととは?
スクールのプログラミング学習の流れとしては、
Html・CSS → プログラミング言語(Ruby) → フレームワーク(Ruby on Rails) というような順で学習が進んでいきます。
非常に効率的に、web開発に必要な知識を学習することができます。
ここで他の受講生からこんな言葉をいくつか耳にしました。
そうか!プログラミングは、フレームワークでいろいろな機能を提供してくれているから、フレームワークの使い方をマスターすれば良いんだ!
プログラミングのキモは、フレームワークなのね!
多くの受講生の方は、フレームワークをマスターすることに関心が向いているようでした。
僕が気になったのはこの点です。
本当に身につけるべき大切なものとは?
確かにweb開発のためには、フレームワークを使いこなすことは、重要です。
しかし、僕は、勉強の初期段階は、プログラミング言語を用いて様々なアルゴリズムをプログラミング(コーディング)していくことが大切だと考えています。
これはなぜかと言うと、以下の問題を例に説明したいと思います。
これを実現しようとすると、いくつかの考え方があります。
例えば、
- 隣同士の数字を比較し、小さい数字を左側にしていく(バブルソート)。
- 一番小さい数字を左側にしていく(選択ソート)。
- ある基準値を用いて、数字のグループを分割していく(クイックソート)。
等々、いろいろ方法があります。
今回の問題の「数字を小さい順に並べる」ですが、実はプログラミング言語では「数字を小さい順に並べる」という機能は、すでに用意されています。
自分で考えてプログラミングをする必要がありません。すでに誰かが考えて作ってくれているわけなんですね。
この用意されている機能を使うと「数字を小さい順に並べる」ことは、なんと1~2行ほどで、書けてしまいます。
しかし、用意されている機能を使用せずに、自分でプログラミングしようとなると数十行記述することになります。
このとおりすでに用意されている機能を使用すると、非常に便利ですし、効率的ですよね。
フレームワークもこれと同じ便利さがあります。
フレームワークは、web開発に必要な様々な機能を提供してくれるものであり、開発を効率的(時間をかけず)に行うことができます。
しかし、僕は、上述の例に戻ると、「数字を小さい順に並べる」という機能はすでにプログラミング言語で用意されている機能ではあるが、勉強の初期段階では、あえて、その機能は使用せず、数字を小さい順に並べるという方法(アルゴリズム)を自分で考え、プログラミングをしてみるということが大切だと考えています。
つまり、自分で考えプログラミングすることで、論理的思考力が身につくと考えています。
小学校でプログラミング学習の必修化
2020年度には、プログラミング学習が小学校で必修化されます。
文部科学省では以下のように発表しており、論理的思考力について言及しています。
児童がプログラミングを体験しながら,コンピュータに意図した処理を行わせるために必要な論理的思考力を身に付けるための学習活動
文部科学省 平成29・30年改訂 学習指導要領、解説等(ホームページ)
小学校学習指導要領(平成29年告示)(PDF P22)
勉強の一助に!
僕はいろいろなアルゴリズムをプログラミングする際に、以下の参考書で勉強をしました。
Javaとなっていますが、オブジェクト指向に対応している言語であれば、問題ないと思います。
やってみた僕の感覚では、Ruby・PHPでも大体問題ありませんでした。
上述の数字を小さい順に並べる問題でご紹介した、バブルソート等の並べ方のアルゴリズムについても、本書に掲載されています。
最後に!
例を用いて長くお話ししてしまいましたが、要は…
いろいろプログラミングをして、考える力(論理的思考力)を身につけよう!
ということでした。
小学校学習指導要領には、具体的に「プログラミング言語を学ばせる」とまでは記載されていませんが、僕たちはまさにプログラミング言語を勉強しているところです。
(この記事をご覧いただいている方には、プログラミングを勉強中あるいは、興味ありという方が多いのではないかと思っております。)
現在のプログラミング言語では、様々な機能が提供され、プログラミングしやすい環境というのが整っています。
「こんな機能ないかな?」と思うようなことは、おそらく大体誰かが実装してくれています。
しかし、あえてそれらの機能を使用せず、自分で考えてプログラミングしてみるのも非常にいい勉強になるのではないでしょうか?