2003-what-is-programming
プログラミングを理解し使うとは
プログラミング言語の違い
プログラミング言語の分類
実行デバイス
- Desktop
- Web (Browser)
- Backend
- Batch
- Mobile
処理手続き(process with procedures)を書く
プログラミングは、順次と分岐とループのフローコントールすれば、全ての処理手続きが記述できる。が、それだと、人にとって可読性とか、保守性が悪いという問題があり、関数とか外部ライブラリとかが導入された。そして、より人にとって扱いやすいように、Object指向という概念が、プログラミング言語に取り入れられた。
基本的に、現在のプログラミング言語は、C言語以外は、オブジェクト指向の考え方が取り入れられている。一つのオブジェクト指向言語を覚えれば、他の言語にも応用が効く。
プログラムを書く能力とは、文系の能力
プログラミング言語は、人工言語とはいえ、言語である。ただ、一般に書き言葉や、話し言葉で使われる言語(自然言語)と異なり、曖昧さはゼロであり、syntaxに従って書かないと、syntaxエラーとなる。し、プログラムに書かれた手順にしか、命令が届かず、その手順で実行される。
プログラミングができないヒトは、syntaxを理解していない(ここにハードルがある)状態であることが多い。
ただ、そこから先に、文章を、構造立てて書くという能力が重要になる。
特に、書き言葉の場合は、論理構成が、意見を伝えるためには、重要である。その論理構成で、特に、段落などが正しく構成される必要がある。これは、筋道立てて、曖昧さのない、それなりに大きな文章を、他人が読んで理解できるレベルで書くというスキルになる。
プログラミングは、この段落構成で表される一つの機能が、functionや外部libraryを、使うことで表さられる。
プログラミングに求められる能力は、文系
文章をきちんと書くには、文章の構造を、明確にして、論理的につながるように書くことが求められます。
文系でも、論理についての能力を求められ、論理学は哲学の一種だし、論理的な文章の展開は、文系的な素養ともとらえられます。
プログラムをきちんと書くには、プログラムの構造を、明確にして、プログラムが、順次・分岐・ループで論理的につながるように書くことが求められます。
プログラミングで取り込まれているObject指向も、もともと、認知心理的なObjectという空間の把握を、Programの空間に適用したものです。
つまりは、理系と文系の境目にあるのが、プログラミングとも言えるのです。
プログラミングそのものは、物理学とか化学とかの知識はいらないし、必要な数学の知識も、さほどない。
どちらかと言えば、命名とかで、英語ができた方が、メリットが高い。
プログラミングは、ターゲット指向
プログラムが実行後に、何を出力するかという視点は、「目的指向」と言える。Target-Orientedに、プログラミングする。つまり、インプットに対して、変換、導出、加工、定数化などを行い、目的とするアウトプットを出すのが、プログラミングである。
プログラミングは、順次と分岐とループのフローコントロールをすれば、全ての処理が記述できる。
その構造の中で、インプットに対して、プロセッシングして、ターゲットとするアウトプットを出す。
プログラミング空間
プログラムが実行される実行環境は、特有のプログラミング空間が生成されている。そのプログラミング空間は、以前は、内部空間だけで、外部ライブラリという概念がなかった。ので、Syntaxを理解し、イチから、全ての機能を実装する時代があった。
ただ、インターネットが普及し、外部ライブラリがフリーで、GitHubなどに公開されることで、プログラミングの空間把握は、インターネット上まで考慮する時代になっている。
rubyやnode、pythonなどは、その言語の成立後、すぐに、インターネット上のrepositoryと連携して、ライブラリを配布する機能が標準に搭載されている。つまり、プログラミングをする際に、外部ライブラリの理解と活用は、重要なスキルとなっている。
外部ライブラリとして活用されているコードは、十分に品質・機能が確保されているといえる。例えば、週に、10000ダウンロードされているようなライブラリは、自分が作るよりも、そのライブラリを使う方が良いと言える。
プログラミングの覚え方
オブジェクト指向な言語の効率的な学習法について
まず、変数定義とリテラル表現を理解する。 次に、組込のデータ型(string, number, boolean, Array, HashMap, Error, etc)を理解する。各標準データ型のmethodを使えるようにする。
で、フローコントロール(loopと分岐)と、外部化、関数化を使って、テンプレート・コードの書き方を練習する。
よく使われるライブラリを漁る。 ・iniやconfig等を扱うライブラリ ・log4系のライブラリ ・基本のデータ型を補完するライブラリ(String系Util、Date系Util、等) ・パス、ファイル操作を扱うライブラリ ・外部フォーマットを扱うライブラリ(xml, csv/tsv, json, markdown, xlsx, etc) ・通信系ライブラリ(XHR, url, query, file upload, email, etc)