かつての自分がプログラミングについて書いたメモ
☆プログラミングの基礎及び学習法
○プログラミングの基礎
プログラミングとは、演算装置(CPU)に見せる命令書を作ることである
そしてその命令書は、
一つあるいは複数の単発の命令と、(順次構造や繰り返し構造や選択構造(条件分岐)などを用いて)それらの実行手順を示すことで作ることができる。
複数の単発の命令を適切な手順で実行させることで複雑な機能を実現できる
プログラマーはある言語について学ぶとき、
・単発の命令の記述法
・実行手順を記す方法
を学べば、それだけでコードを概ね書くことができるようになる
+
全てのコードを自力で一から構築することは時間がかかりすぎる。実際にプログラムを組むときは他者がすでに用意してくれているコードを利用することが多い。
他者の描いたコードを参考にする技術も学んでおいた方がいい
○プログラミングの学習法
特定の言語を学ぶことに過度に熱中することは避けた方がいい(例えば普段使わない細かい機能を大量に覚えるようなことはしない方がいい)
プログラミング言語は無数にあり、今後さらに増加することが考えられる
新しい言語の追加により、IT業界における主流の言語が変わる可能性もある
必死になって特定の言語を学んだところで、その言語を使う場面が減っていく可能性がある
特定の言語に学ぶことにのみ集中せず、新しい言語を習得する際に、よりスムーズに学習できる準備をすることにも力を割いた方がいい
そのために
あらゆる言語に共通する実行手順の構造(順次構造、繰り返し構造、条件分岐、関数など)を使いこなせるようにしておいたり、
多くの言語に共通する単発の命令の種類とその使い方を知っておけば、
新しい言語を学ぶときに、それらに対応する記述法を調べるだけで言語の習得が完了する。新しく概念の理解に苦しむことがない。
※この部分は実際のところ特定の言語をやるだけでも自然と身につくので意識して学ぶ必要はないかもしれない。
◇学ぶべき言語(これを通してプログラミング言語の主要な構造についての把握も行う)
C言語はプログラミングの原点とでもいうべきもの
C言語を学べば他の言語の習得がだいぶ楽になるのかもしれない
C言語+ほか一つ(javaやPython)を習得すれば、プログラミングの共通部分というのも見えてくる
※C言語である必要があるのかは不明
◇プログラミング言語以外の習得対象
・アルゴリズム
アルゴリズムの習得も重要である
たとえばAIで使われるディープラーニングに関するアルゴリズムを理解しておけば、新しい言語においても容易にディープラーニングの技術を活用することができる
なぜならばアルゴリズムを考え直す手間が省けるからである
情報処理技術者試験にはデータの整列のアルゴリズムなども載っているが、それらも使える
・他者の書いたコードを参考にする技術
自力で全てのコードを記述するのは手間がかかる。よって他者が作成したコードを取り入れることは多々ある。
他者が作成したコードを素早く確保するためにも一体どのような場所でコードを入手できるのかなどは知っておいた方がいいかもしれない(自分はまだ知らない)
またコードの著作権についても把握しておいた方がいい。
ITパスポート試験や基本情報技術者試験にもわずかではあるがアルゴリズムの著作権に関する記述もある
・調べる技術
例えばインターネット上での情報でもっとも多く使用されている言語は英語である(近年は中国語も躍進している)
英語を習得すれば当然得られる情報は増加する。
また、プログラミングに限らないが、何かを調べる際に最も信頼できるのは公式のサイトである。しかしアプリケーションの公式サイトは開発元が海外企業であることが多く、日本語のサイトの文章の質がいいとは言えないことも多々ある。このときも英語習得者はより質のいい情報を得ることできる。
英語を習得することで調べる力は上がる
googleなどにおいては検索する際に期間指定を行うことができる。
期間指定により最新の記事を選別することができる
IT分野の技術は、発展速度が速い。古い記事はすでに使い物にならなくなっていることも多い。
そんなときに期間指定により最新の記事を選別すれば余計な情報を遮断できる
・IT技術全般
ITパスポートや基本情報はおすすめ
プログラミングだけをやるよりもそのほかの知識を習得した方ができることの幅は広がる
ITパスポートのテキスト丸ごと理解すれば基本情報もある程度は楽に合格できる
テキストを丸ごと理解するのであれば勉強時間は一日の勉強時間次第だが多くて一か月。ITパスポートのみに集中すれば数日から一週間(正確な予測ではないので注意)
IT技術を利用した機器はすでに身の回りにあふれている。IT技術を理解すればそれらをより使いこなすことができ、大きな力となる。
◇効率的学習
お絵描きアプリはあらかじめ使い方を完全に理解してから使うようなことはしない。使いながら必要に応じて機能を調べて使用している。
新言語を使って何かをつくるときはそれと同じように必要に応じて説明書を読みながら作るようなイメージでいいのかもしれない。
☆プログラミング言語の基礎的な構造
単発の命令の種類と使い方の学習について
これらを明確にしておけば、
プログラミング言語の具体的な記述法を事前に把握しておらずとも、脳内でアルゴリズムを組み立ておけば、あとはアプリの制作の際に教科書などからそのアルゴリズムの実現に必要な命令の記述法を調べるだけでアプリを作ることができる
☆単発の命令の種類
○計算命令
+,-,*,%など
○記録媒体向け命令
変数
ポインタ
○入力装置向け命令
文字入力を受け付ける命令
マイクからの音声入力を受け付ける命令
○出力装置向け命令
ディスプレイ向けの命令
スピーカー向けの命令
など
他にはネットワークに関する命令もあるか...?
○実行手順の記述法の学習
順次、分岐、繰り返し、関数
☆メタ的考察
○多彩な機能
コンピュータそのものは演算をする装置に過ぎない
しかしコンピュータを使えば、音を出したり、ディスプレイから光を発したり、ものを印刷したりなど演算のみでは到底実現不可能な機能が実現できる
これらの多彩な機能が実現できる理由は、音を出すなどの機能をスピーカーなどの外部の装置が実現してくれるから.
コンピュータは演算し、命令を送るだけでいい。
「多彩な機能」は外部の装置が実現してくれる
↓
コンピュータを用いて多彩な機能を使いたければ、外部装置を開発し、それに命令を送ればいい
人類が新しい機器(3dプリンターなど)を作れば、コンピュータができることも増える。最新の機器開発状況についても着目した方がいい。