プログラミング言語のまとめ情報

プログラミング言語』の解説

プログラミング言語(プログラミングげんご、)とは、コンピュータプログラムを記述するための形式言語である。なお、コンピュータ以外にもプログラマブルなものがあることを考慮するならば、この記事で扱っている内容については、「コンピュータプログラミング言語」(computer programming language)に限定されている。

概要

自然言語と同様、構文規則言語学で言う統語論の規則)と意味規則(同じく意味論の規則)で定義される。形式的ないし非形式的(自然言語による)な仕様が(構文規則は形式的で、意味規則はそうでない、というものが多い)実装とは独立した文書で示される言語もあれば、実装のみの言語もある。

プログラミング言語は、情報を組織し処理するタスクについての理解を容易にし、アルゴリズムを正確に表現することができる。特に、チューリング完全である事が特徴である。また、プログラミングへの応用も想定して設計されたロジバンのように、人間の言語とプログラミング言語の中間に位置するものがある。

プログラミング言語は人間同士の会話と比較して、正確性と完全性の要求性が非常に高いという特徴がある。自然言語で人間同士が対話する場合、スペルミスや文法的なエラーがあっても相手は状況から適当に補正し、正確な内容を把握する。しかしコンピュータは指示が曖昧では動作せず、プログラマがコードに込めた意図を理解させることはできない。言語仕様とプログラムとその入力データの組合せで、そのプログラムを実行したときの結果(外部から観測される振る舞い)が完全に指定できなければならない。

多くの言語は、新たなニーズを満たすべく設計され、他の言語と組み合わされ、最終的に使われなくなる。あらゆる用途に使える万能言語を設計しようという試みはいくつかあったが、そういう意味で成功した言語は存在しない

。多様な言語が生まれる背景には、言語が使われる状況の多様性がある。

  • 趣味で書く短いスクリプトから、数百人のプログラマが書く巨大なシステムまで、様々なプログラムがある。
  • プログラマも、言語に単純さを求める初心者から、相当に複雑な言語を好むエキスパートまで様々である。
  • システムにもマイクロコントローラからスーパーコンピュータまで様々あり、その中で性能、サイズ、単純さのバランスを保つ必要がある。
  • いったん開発されるとずっとそのまま使われ続けるプログラムもあれば、定期的に修正されるものもある。
  • 最終的にプログラマは好みによって言語を選ぶ場合もある。

プログラミング言語開発における共通の傾向として、より高いレベルの抽象化によって、より高い問題解決能力を得ようとしている。初期のプログラミング言語は、コンピュータのハードウェアのレベルと極めて近かった。新たなプログラミング言語が開発される度に機能が追加され、プログラマはハードウェアの命令からより遠い形でアイデアを表現できるようになっていった。プログラミングをハードウェアから分離することで、プログラマの生産性は向上する。

プログラミングにおけるプログラミング言語の必要性を排除する方法として、自然言語処理が提案されてきたという面もある。しかし、その方向性は実用化には達しておらず、議論が続いている。エドガー・ダイクストラは形式言語の使用によって意味のない命令を防ぐという立場で、自然言語によるプログラミングを批判していた。アラン・パリスも同様の立場であった。

自然言語との違い

以下の文章は、要するに「形式言語である」ということを、それではわかりにくい者のために、冗長に書いたものである。また、形式言語について一般に共通な話と、プログラミング言語以外のコンピュータ言語に関しても共通な話と、プログラミング言語に特異な話が曖昧に混濁している。

プログラミング言語は、人間がコンピュータに命令を指示するために作られており、コンピュータが曖昧さなく解析できるように設計されている。多くの場合構文上の間違いは許されず、人間はプログラミング言語の文法に厳密にしたがった文を入力しなければならない。

これに対して、一般に自然言語の文法規則はプログラミング言語にくらべてはるかに複雑であり、例外も多い。ただしこれは規則が一般にいいかげんであったり、曖昧であるということではない。一般に自然言語の規則は奥が深く、驚くほどの非合理性に裏打ちされていることもあれば、驚くほどの合理性に裏打ちされていることもある。驚くほどの非合理性でも合理性でもないものに裏打ちされていることもあれば、驚くほどの裏打ちの無さがあることもある。

また、自然言語の意味は、その文脈(コンテキスト)によって定まる部分も多い。これに対して、プログラミング言語は、コンピュータによって扱いやすいように、文脈によって意味が変わることができるだけないように設計されている。

自然言語は、誤用や流行などにより長い時間をかけ、たくさんの人間の利用により、意図せざる形で変化していく。しかし、プログラミング言語の規則は、言語設計者の意図と作業によってのみ、変更される。

人間がふだん使っている日本語などの自然言語を使ってコンピュータに指示することができるのが理想ではある、と空想する者もいる。しかし、自然言語はあまりにも複雑で曖昧で変則的なので、それを機械語にコンパイルできるようなプログラムを作成することはとても難しい(コンパイルできるできないの問題ではなく、そもそもその意味が「複雑で曖昧で変則的」であること自体が問題なのだが、それを理解できない者が冒頭のように空想するのである)。そのような研究も進められているが、未だに汎用で実用になるプログラムは作成されたことがない。

そこで、自然言語よりも制限が強く、単純で厳密で規則的な人工言語を作って代用する。これがプログラミング言語である。プログラミング言語は自然言語よりもいくらか人間には扱いづらいが、機械語よりは遥かに親しみやすく、人間の指示の手間を軽減している。ちなみにコンピュータ向けの形式性と人間向けの柔軟性を兼ね備えるロジバンなど、本来の開発目的が違えど潜在的に一つのプログラミング言語として機能しうるものもある。

大部分のプログラミング言語は、基本的には概ね文脈自由文法に沿っているが、プログラミング言語における文法的な制限は必ずしも全て文脈自由文法で表現できるとは限らず、文脈自由文法より制限されていることもあれば文脈自由文法より拡張されていることもあり、多くの場合は文脈自由文法には完全には沿っていない。

構文

thumb

プログラミング言語の見た目は、その構文(syntax・統語論)で決定される。図形などを使うグラフィカルなプログラミング言語もあるが、たいていのプログラミング言語のソースコード文字列である。ファイル形式ではプレーンテキストすなわちテキストファイルが用いられる。

また、たいていのプログラミング言語では、まず、(英語では lexical syntax などと呼ぶ)ソースの文字列から空白類を取り除き最小の意味のあるカタマリを取り出した「字句(トークン)」があり、構文は字句の並びである、という扱いのことが多い。字句を切り出して分類する処理を字句解析、その並びを調べる処理を構文解析という。

(字句解析のために)字句規則を示すのには正規表現が、そして(構文解析のために)構文規則を示すのにはバッカス・ナウア記法が使われることが多い。

下記はLISPの構文のごく小さなサブセットである。

expression ::= atom | list

atom ::= number | symbol

number ::= ?+

symbol ::= .*

list ::= '(' expression* ')'

これは、次のような規則である。

  • expressionatomまたはlistである。
  • atomnumberまたはsymbolである。
  • numberは1文字以上の数字列であり、オプションとして符号が前置される(空白は含まない)。
  • symbolはアルファベットで始まる任意の文字列である(空白は含まない)。
  • listは括弧記号の対であり、その間に0個以上のexpressionがある。

これに従った例として、'12345'、'()'、'(a b c232 (1))'などがある。

構文上正しいプログラムが全て意味的に整合しているとは限らない、という設計の言語も多い。また、意味的に整合していても、それを書いた人が、自分の意図を正しく反映できていない場合もある。

以下のC言語のコード断片は構文上は正しいが、意味的には問題がある。pヌルポインタなので、p->realp->imを評価しようとすることは「未定義」であり、この場合はおそらくセグメンテーション違反をひきおこす。

complex *p = NULL;

complex abs_p = sqrt(p->real * p->real + p->im * p->im);

意味

自然言語の言語学に構文論(統語論)と意味論があるように、そのプログラムが表現しているものは何か、というのが、プログラミング言語の「意味」である。たとえば「a + b という式の値は、aの値とbの値を加算した値である」といったような規則の集まりであり、プログラム意味論という分野で形式的な意味論(形式意味論、formal semantics)も研究されているが、C言語の標準規格など、自然言語で意味を与えている言語や、形式的でない擬似言語のようなもので与えている言語もある。

型システム

型システムは、プログラミング言語において式の値となるデータ型について、型理論にもとづいて分類しどう扱うかを示すものである。

また、内部的には、ディジタルコンピュータでは全てのデータバイナリ二進法)で保持される。

型のある言語とない言語

型のある言語は、型システムによって、それぞれの値のデータ型に応じて、定義されていない操作が実行されないよう(多かれ少なかれ)チェックされる機構を持つ。

例えば、"this text between the quotes" は文字列型の値である。ふつう、数を文字列で割る操作には意味がない。そのため、そのようなプログラムは拒絶する。言語によっては、コンパイル時に検出し(静的型検査)コンパイルを失敗とする。言語によっては、実行時に検出し(動的型検査)、例外とするものもあればなんらかのコアーション(型の強制)を行うものもある。(理論的には、静的なシステムのみを指して「型システム」とすることもある)

(型のある言語の特殊例として、単一型言語がある。REXXSGMLといったスクリプト言語やマークアップ言語は、単一のデータ型しか扱わない(多くの場合、そのときのデータ型は文字列型である)。それ以前の話として、そもそもSGMLはプログラミング言語ではない

アセンブリ言語などの型のない言語は、任意のデータに任意の操作を実行可能であり、データは単にある長さのビット列として扱われる。後者では、コンパイラが式の型を文脈から推論する。C++Javaなどの主な静的型付き言語では、型を明記する。完全な型推論は主流でない言語に使われている(HaskellML)。ただし、型を明記する言語でも部分的な型推論をサポートしていることが多い。たとえば、JavaC#では限定された状況で型推論を行う。

動的型付け(動的型付言語, dynamically typed language)では、型の安全性は実行時に検査される。言い換えれば、型はソース上の式ではなく、実行時の値に対して付与される や Scheme がある。

その他

他に、以下のようなスタイルで仕様が与えられている言語もある。

  • その言語の処理系のリファレンス実装やモデル実装として示されているもの
    • その言語のコンパイラ(FORTRAN)
    • その言語のインタプリタ(Ruby(cruby、ただしRubyの標準化以前の場合))
    • 対象言語自身で書かれることもある(例えば、LISPPrologANSI REXX)Meta-circular evaluator も参照のこと。

処理系

プログラミング言語の実装は、プログラミング言語処理系と呼ばれる。コンパイラは、ソースコードなどの入力を中間表現などの、より解釈実行しやすい表現に変換する処理系である。また、インタプリタは、入力されたプログラムを解釈実行する処理系である(ハードウェアのプロセッサは、機械語を解釈実行するインタプリタである、と見ることができる)。

コンパイラとインタプリタの関係は、理論的には二村射影により美しく定式化されている。

なお、「大きく分けて2つの方法がある。コンパイラインタプリタである。一般にある言語をコンパイラとインタプリタの両方で実装することが可能である。」などといったように(従来書かれた通俗的解説書などには大変多いが)理解していると、Javaなど近年の多くの言語処理系のスタイルが全くわからない、ということになる。

機械語にまで変換するもののみを指してコンパイラと呼びたがる向きが一部にあり、その立場にもある程度は理もあるのだが、そうするとJavaの一般的な実装を指す用語が無くなる)

「コンパイラの出力したものをインタプリタで実行する方式は、コンパイラとインタプリタの区別が曖昧な場合もある。」などという変な説明をする者もいるが、前述したように、そもそも間違った2分法で考えているから、そのような変な考え方になるのである。

一般に、機械語に変換したもの(実行ファイル)を直接ハードウェアで実行する方が、インタプリタで実行するよりもずっと高速である。インタプリタでの実行を改善する技法として、実行時コンパイラなどの動的コンパイル手法がある。

意義と目的

(コンピュータ)プログラミング言語は、おもに英語の単語と記号を組み合わせた(英語である必然性はひと欠片も無いが)、特殊な文法(正確には「構文」。誰にとって特殊かは不明だが)で記述される。その意義は、人とコンピュータの意思疎通を容易にするため、数字の羅列に代えて人間に扱いやすい言語形式を提供することにある。プログラミング言語があれば、人は扱いやすく理解できる言葉でコンピュータへの指示を書くことができる。プログラミング言語で書かれたコードは、アセンブラコンパイラインタプリタなど「プログラミング言語処理系」と呼ばれるプログラムによって処理(機械語あるいは中間表現に変換されたり、解釈実行されたり)される。

プログラミング言語は、コンピュータ企業や技術者により目的に応じて開発され、様々なプログラミング言語が、毎年のように生み出されている。2008年2月時点で、「コンピュータ言語辞典」には8152種のプログラミング言語が記載されていた。

定義

機能
プログラミング言語はプログラムを書くのに使われる言語であり、それによってコンピュータは何らかの計算やアルゴリズムを実行し、場合によってはプリンターロボットなどの外部装置を制御する。
対象
自然言語は人間同士の対話に使われるのに対して、プログラミング言語は人間が機械に指示を与えるのにも使われる。場合によっては、装置が別の装置を制御するのにも使われる。例えば、PostScriptプログラムは別のプログラムが生成し、プリンターやディスプレイの制御に使われる。
構成要素
プログラミング言語には、データ構造を定義し操作する構成要素と、実行の流れを制御する構成要素がある。
表現能力
計算理論では、言語はその計算表現能力で分類される(チョムスキー階層参照)。チューリング完全な言語ならば、同じアルゴリズム群を表現可能である。

計算を記述するのではない言語(HTMLのようなマークアップ言語など)はプログラミング言語ではない(しばしば誤解されているが)。なお、JavaScriptやPHPのように、何らかの形でそういった言語に埋め込まれるプログラミング言語、といったようなものは存在する。

初期の発展

「コンピュータ」(という語)の定義次第ではあるが、それを「コンピュータ・プログラムによって駆動される機械」とするならば、コンピュータ・プログラムはコンピュータとともに生まれ、育ったということになり、そのプログラムの記法としてプログラミング言語があった、ということになる。チャールズ・バベッジ階差機関に続いて計画した解析機関は、パンチカードの先祖と言えるような穴の開いた厚紙の列によって制御されるという機構を持っていたため、その特徴から「19世紀のコンピュータ」「蒸気動力のコンピュータ」などと呼ばれることがある。

20世紀初頭には、タビュレーティングマシンによってパンチカードを使ったデータの機械処理が始まっている。そういった実際面ばかりではなく計算理論としても、1930年代から1940年代にかけて、アルゴリズムを表現する数学的抽象表現を提供するラムダ計算アロンゾ・チャーチ)とチューリングマシンアラン・チューリング)が考案された。ラムダ計算はその後の言語設計にも影響を与えている。

1940年代、世界初の電子式デジタルコンピュータ群が製作された。1950年代初期のコンピュータであるUNIVAC IIBM 701では機械語を使っていた。機械語によるプログラミングは、間もなくアセンブリ言語によるプログラミングに取って代わられた。1950年代後半になると、アセンブリ言語でマクロ命令が使われるようになり、その後 FORTRANLISPCOBOLという3つの高水準言語が開発された。これらは改良を加えられ現在でも使われており、その後の言語開発に重大な影響を与えた。1950年代末、ALGOLが登場し、その後の言語に様々な影響を与えている。

改良

1960年代から1970年代末ごろまでに、現在使われている主な言語パラダイムが開発されたが、その多くはごく初期の第三世代プログラミング言語のアイデアの改良である。

これらの言語のアイデアは様々な言語に引き継がれており、現在の言語の多くは、これらのいずれかの系統に属する。

1960年代と1970年代は、構造化プログラミングに関する論争が盛んに行われた時期でもある。この論争で特に有名なものは、1968年にCommunications of the ACMに掲載されたエドガー・ダイクストラのレターGo To Statement Considered Harmfulであろう。その後の反論と指針としてはクヌースStructured Programming with go to Statementsがある。

1960年代と1970年代は、プログラムのメモリ使用量を削減し、プログラマやユーザーの生産性を向上させる技法も進展した時期である。初期の4GL(第四世代プログラミング言語)は、同じプログラムを第三世代プログラミング言語で書いたときよりもソースコードの量を劇的に削減した。

統合と成長

1980年代は、相対的な統合の時代であった。C++は、オブジェクト指向とシステムプログラミングの統合である。アメリカでは、軍需に使うことを目的としてAdaというシステムプログラミング言語が標準化された。日本などでは、論理プログラミングを応用した第五世代言語の研究に資源を費やした。関数型言語コミュニティではMLとLISPの標準化の動きがあった。これらはいずれも新たなパラダイムを生み出そうというものではなく、それまでに生み出されたアイデアに改良を加える動きであった。

1980年代の重要な言語設計傾向の1つとして、大規模システムのためのプログラミングを目的としてモジュールの概念を採り入れた点が挙げられる。1980年代にモジュールシステムを採り入れた言語として、Modula-2、Ada、MLがあるが、それ以前には、既にPL/Iがモジュラープログラミングをサポートしていた。モジュールシステムはジェネリックプログラミングの構成要素とされることが多い。

1990年代中頃には、インターネットの急激な成長によって新たな言語が生み出される機会が生じた。Perlは1987年にリリースされたUNIX上のスクリプト言語だったが、ウェブサイトの動的コンテンツ作成に使われるようになった。Javaはサーバ側のプログラミングに使われるようになった。

言語利用状況の計測

どのプログラミング言語が最もよく使われているかを判断することは難しい。また、利用という意味も文脈によって異なる。プログラマの工数、コードの行数、CPU時間などが尺度として考えられる。ある言語は特定分野のアプリケーションだけでよく使われているということもある。例えばCOBOLは企業のデータセンター(メインフレームであることが多い)では今でも使われているし、FORTRANは科学技術計算でよく使われ、C言語は組み込みシステムやオペレーティングシステムで使われている。

以下のように言語利用状況の尺度は様々であり、どれを選択しても一種のバイアスがかかっていると考えた方がよい。

  • プログラマなどの求人広告で言語が言及されている回数
  • 言語に関する書籍(入門書など)の販売部数
  • 言語ごとの既存のコード行数の推計。公開調査で見逃しやすい言語は少なく推定される傾向がある。
  • 検索エンジンが見つけた各言語への参照の回数

分類

プログラミング言語の完全な分類法は存在しない(前述の、COBOLは事務計算用途向け、FORTRANが科学技術計算用途向けといったような、ある程度の方向性はあるが)。あるプログラミング言語には大抵複数の起源(影響を与えた言語)がある。言語は一般に複数の既存言語の要素と新たなアイデアを組み合わせて生み出される。ある言語を起源とするアイデアはその系統の言語群に広まっていき、あるときギャップを飛び越えて全く別の系統の言語で使われるようになる。

さらに事を複雑にするのは、言語は様々な観点から分類可能という点である。例えば、Javaはオブジェクト指向言語であると同時に、並行性言語でもある(言語仕様としてスレッドを複数並行して生成可能であるため)。Pythonはオブジェクト指向言語であると同時に、スクリプト言語でもある。

プログラミング言語の大まかな分類として、プログラミングパラダイムによる分類と想定している利用分野や用途による分類がある。パラダイムには、手続き型プログラミングオブジェクト指向プログラミング関数型プログラミング論理プログラミングなどがある。言語によっては2つのパラダイムの性格を併せ持つこともあるし、マルチパラダイムの場合もある。アセンブリ言語は、マシンのアーキテクチャを直接モデル化したものであるため、パラダイムとは言わない。用途による分類では、汎用、システムプログラミング言語、スクリプト言語、ドメイン固有言語、並行/分散言語(あるいはこれらの混合)などがある。汎用言語の一部は教育目的で設計されている。

プログラミングパラダイムとは無関係なパラメータで分類されることもある。例えば、多くのプログラミング言語は英語のキーワードを使っているが、ごく一部の言語はそうではない。また、難解かそうでないかという分類もある。

低水準言語と高水準言語

機械語アセンブラ言語は、よりハードウェアに近い言語であり、このようなプログラミング言語を低水準言語という。また、それ以外の言語は、機械語と一対一で対応せず、より人間に近い言語であり、高水準言語という。

参考文献

  • Daniel P. Friedman, Mitchell Wand, Christopher Thomas Haynes: Essentials of Programming Languages, The MIT Press 2001.
  • David Gelernter, Suresh Jagannathan: Programming Linguistics, The MIT Press 1990.
  • Shriram Krishnamurthi: Programming Languages: Application and Interpretation, オンライン版.
  • Bruce J. MacLennan: Principles of Programming Languages: Design, Evaluation, and Implementation, Oxford University Press 1999.
  • John C. Mitchell: Concepts in Programming Languages, Cambridge University Press 2002.
  • Benjamin C. Pierce: Types and Programming Languages, The MIT Press 2002.
  • Ravi Sethi: Programming Languages: Concepts and Constructs, 2nd ed., Addison-Wesley 1996.
  • Michael L. Scott: Programming Language Pragmatics, Morgan Kaufmann Publishers 2005.
  • Richard L. Wexelblat (ed.): History of Programming Languages'', Academic Press 1981.

プログラミング言語』に 関連する人気アイテム

独学プログラマー Python言語の基本から仕事のやり方まで

初めてPythonを学ぶ自分にとって、基本から応用までを簡潔に効率良く学ぶことができました。
良い点は、各章にプログラミングの課題があり、インプットだけでなくアウトプットする事が出来、各章の内容をしっかり定着させる事が出来ました。そして、おさらいのような章があり、複数の章で学んだ内容を纏めたプログラミング例題が適切な箇所にあり、振り返りと理解を深める助けになりました。
また、プログラミングの文法の解説のみではなく、アルゴリズムの大切さやWebスクレイピングにも触れることができ、プログラミングの楽しさを味わいながら読み進められました。学習を継続的に、より良く学ぶための方法や書籍、サイトの紹介もあり、独学する本として、内容が充実しており、とても満足出来るオススメの本だと思います。

「あるようです」というのは、私自身がほぼ初心者で、一読しただけのためです。 ひとまず細かいコードは後回しで全体像を俯瞰することにしました。 その上で、もう一回転きちんと読んでみようと思ったからです。 簡単に読んだだけではプログラムが書けないのは本書を読もうと思っている方ならすでにお分かりかと思いますが、そうしたことも言及しつつ、最終的には職業プログラマーになるための道標を示してくれている本だと感じました。 独学プログラマー Python言語の基本から仕事のやり方まで

pythonについての基本的な文法が丁寧にかつ浅く書かれているので、 全くの初心者でも読み切ることが出来ると思います。 この本を読んだからと言って何ができる分けではないのですが、 次へのステップへの基礎にはなるでしょう。 コードを書く上での重要な事や、心構えなども書かれています。 githubやプログラムを学ぶ上での便利なサイトなどの紹介もあります。

スッキリわかるJava入門 第2版

5つ星のうち 5.015万部突破!?

(参考になった人 1/1 人)

帯に15万部突破とあります。初版が2014年で、現在2018年ですから
5年で15万部、1年で3万部売れている計算になります。すごいです。
高橋麻奈さんの「やさしいJava 第6版(初版2000年)」には
100万部突破て書いてあります。1年で5万部くらい売れている。
こちらもスゴイ。流石にJavaの人気を感じます。

本の内容ですが、読みやすくてよいと思います。練習問題もついて
いるので問題を解いて正解すると自信もつきます。本書ではインス
トールが難しい人向けにdokojavaを提供しているようですが、私は
使っていません。

最近はネットにインストール方法に関しても情報
が満載ですから、インストールの敷居も下がっているんじゃ無いで
しょうか。「やさしいJava」と比較すると、こちらの方がより初心
者向けになっているので、これまで全くプログラミングをしてこと
がない人は、こちらの方がオススメです。

5つ星のうち 5.0最初の一冊に最適

(参考になった人 2/2 人)

今日は数多くあれど、これだけ初心者に寄り添いながらもしっかりと理解させてくれる本はないと思います。 普段はVBAを使っており、もう少し他の言語を…っと思い購入しましたが、満足です。 このシリーズをしっかり理解出来れば、基本的な部分は全て網羅出来る気がします。 説明が親切です。

現在javaではなく、他の言語の勉強をしている者です。 この本を読んで思ったのは、オブジェクト指向を理解する上での説明が非常に丁寧であるること。 javaで解説されていますが、他の言語でつまづいている人も、この本を読んで、まずオブジェクト指向を理解するのもアリだと思います。

子どもの才能を引き出す最高の学びプログラミング教育

小学校でのプログラミング教育の必修化を見込んでなのか、2013年くらいから小学生向けのプログラミング教室がどんどん増えてきていて、この著者も自社で2017年4月から小学生向けのプログラミング教室を始めたそうです。で、この本は「プログラミング教育は役に立ちまっせ!うちとこの教室に来なはれ」という宣伝本っすね。

プログラミングの教育によって「IT人材」「プログラミング的思考の育成」が出来るとかいうことですが、本当でしょうかね?IT人材の不足というのは随分前から言われているようですが、そもそも不足してるのは、底辺のプログラマーが「IT土方」とか言われるように、低賃金で長時間働かせられる仕事で人気が無いからってだけなのではないですか?それを小学生から洗脳してIT土方を増やそうというのが役人の考えてることだったら怖いっすよね。



この本では盛んに「プログラミング教育によって論理的思考が身に付く」と主張していますが、この本を書くまでには一年弱しかプログラミング教室をやっていないのに、なんでそんなに声高に主張できるのかも不思議です。また、この著者が論理的思考を持っているのかどうかというのも疑問です。

著者の石嶋洋平氏は、経営コンサルタントの小山昇氏に師事して経営改善を行っているようなのですが、そもそもこの小山昇氏自体が非論理的思考の持ち主なのではないかと思われます。(ちなみにこの本の出版社のあさ出版も小山昇のコンサルタント会員企業ですね)

小山氏は「朝一番の掃除で、あなたの会社が儲かる! 」という本を出したりして、「環境整備で会社は儲かる」と主張している方ですが、その内容はとても論理的とは感じられません。例えば、小山氏は「パチンコと経営は一緒だ」と言って、「パチンコでは出る目などからデータを取って当たる法則を見つけているから8割は勝つ」と主張し、石嶋氏を含むコンサルタント会員の社長さん達をパチンコ屋に連れて行って大当たりする所を見せたりしているそうです。しかし、パチンコの出る目と当たりには相関関係は無く、単に確率の問題だけなのですよね。石嶋氏に論理的思考が備わっていれば、小山氏の主張が間違いだとすぐに気が付きそうなものですが、お二人は一緒に講演などまでしているので、どうも小山氏の根拠の無い非論理的主張にも首肯しているのでは無いかと思われます。

石嶋氏自身も小山昇氏の著書で取り上げられていますが、「1日36万円のかばん持ち」では石嶋氏の本業のWebコンサルティングで顧客がGoogleやYahoo!に支払う代金を自身のクレジットカードで立て替えていて、1年間で9億6000万円もクレジットカードを使っていたのに会社の預貯金は48円だったというエピソードまで載っていますが、これも論理的思考があるなら他の手立てを考えるところなのではないでしょうかね?

また、転職情報サイトの「転職会議」で石嶋氏の会社のミスターフュージョンを検索してみると
「サビ残・休日出勤当たり前。日曜の夜中でも平気で社長から電話がかかってくる。出なければ恫喝。労働基準法という観念すらない会社だった(30代女性)」
という口コミ情報までありました。8年前の話のようですが、私が小学生の親でしたらそんな代表がやってる教室は大丈夫なの?と思ってしまいます。また従業員さんからもプロスたキッズの運営は疑問視されているようで、Vorkersという転職情報サイトには元従業員さんが「色々のものに手を出しすぎて従業員が混乱しています。新しいものを始めるのは従業員の負担が大きいですが、通常業務をこなしつつ準備をすることを求められます。子供向けプログラミング教室はノウハウのない状態でフランチャイズを始めたためかなり雲行きが怪しいです」
と書いてもいました。

本の冒頭には、著者の経営するプロスタキッズというプログラミング教室に子供を通わせてる親子さんの「子供が変わった」という感想が複数載っていますが、これらの感想とプログラミング教育の相関関係は分からず、そもそも開校して一年ほどの時点ですからそんな短期間に何かかわるものなのか?とも思いました。具体的な例では「どうやってこの教室まで来たの?」と訊くと最初は「お母さんと一緒に来た」「親に連れて来てもらった」と答えていた子供が、3ヶ月後には「お母さんと一緒におうちを出て、自転車で大井町駅まで行って、大井町の駅から京浜東北線に乗って、品川駅で降りて、品川駅の港南口から歩いてきた」と答えるようになってプログラミングで「筋道を立てて考える力」が身に付いたというのが載っていますが、コレもちょっと説明が細かすぎてプログラミング教育の悪影響じゃないの?と思ってしまいます。

で、最後まで読み進めると、なんとこの石嶋洋平氏は自社がWebコンサルティングの会社なのにプログラマーでも無かったようで、「数年前までは、プログラミングに関して全くの素人でした。」と書かれています。おいおい、今まで延々とプログラミング教育について語ってきたのは、たった一年の教室運営と数年のプログラミング経験だけに基づいたものだったのかよ?と肩透かしも良い所です。しかし、その2ページ後には「佐野日大高校で安藤昇先生にプログラミングを学んだこと(中略)を感謝しています。」とあります。えっ、数年前まではプログラミングは全くの素人と言ってたのに、高校の時に学んだんすか?えっ、どっちなの?と混乱します(笑
う〜ん、私の国語読解能力が低いのでしょうか?

ちなみにこの安藤先生はプロスタキッズの顧問でカリキュラムを作っている方だそうですが、自身の高校で高校生相手にプログラミングを教えても、のめりこむのは100人に1人くらいしかいないそうです。高校生だと自我がある程度発達しているから好き嫌い得手不得手によってプログラミングに抵抗を覚えてしまうので、柔軟な思考の小学生から学ばせるほうが才能が開花しやすいとも書かれています。でも、この先生は高校でしか教えていないようなんですよね。なんで教えたこともない小学生のことが分かるんでしょうかね?まぁ、プロスタキッズを1年やって分かったんだと主張されるかも知れませんけど。

あと極め付けは、本に蛍光イエローの紙が挟んであって、プロスタキッズの生徒募集と、フランチャイズ募集の広告が打ってあることですね。
まあ、生徒募集は良いですけど、1年しかやっていない教室をフランチャイズで300教室まで拡大しようとしているようで、凄い商魂っすね。曰く「プログラミングの知識が無い方でも、もちろん大歓迎。」だそうです。加盟金300万円、保証金50万円、備品110万円〜、研修費用30万円だそうなので、興味のある方はプログラミング教室やってみるのも良いかも知れませんね。私が親なら、そんな素人がやってる教室に子供通わせようとは思いませんが(笑

小学生の男の子を持つ親です。2020年に必修になるとのことで周りでも話題になり、気になっていました、近所にもプログラミング教室がいくつか出来ていますが、正直どこの教室がいいかすらわからない、、、
そもそも、プログラミングを学ぶことで何を学べるの?と初歩の初歩からの疑問でした。そんな時、書店でのオススメコーナーでこの本を見つけました。
とにかく私の様な素人にも読みやすくあっという間に読み終わりました。
物事には手順があり、手順を踏むと、物事をうまく解決できるといった、論理的に考えていく力がプログラミングで養えることがわかりました。
私の中のモヤモヤがクリア出来た一冊でした!
ぜひ、オススメです。

5つ星のうち 4.0さて今後どうなるか

(参考になった人 0/0 人)

2030年には、ITエンジニアだけでなんと80万人不足と予測されている。 今現在でも18万人近く不足と言われている。 10年後には、プログラミングを知らない人は、もはや仕事として成り立たなくなる可能性があると思わせる内容です。 この本を読んでどう判断して、どう動いていくか。 早めにプログラミングを触らせるか。 小学校に入ってからで十分か。 意見が分かれるかと思う。 教育の現場に関わって10年になるが、1つの答えとしては、子どもに教育費をかけられる家庭の選択肢が増えることになるだけだと思う。 そうでない家庭にとって、残念ながら格差が広がってしまうだけになる。

スラスラ読める JavaScript ふりがなプログラミング

プログラムにフリガナを振って、どういう文でどういう挙動をさせようとしているのかということを明確にして、プログラムは決してワケのわからないものでは無いということを初心者に示すような構成の、プログラム自体を全然知らないような人が対象だと思う本です。

他言語はちょっと知ってるけど、JavaScriptは全然知らないという方の場合は、この本の方向性とはちょっと合わないと思います。「プログラムの初心者」にJavaScriptを題材にして「プログラムとは何か」を説明しているというのが、本書の位置づけだと思いました。



本書の中では、フリガナと読み下し文で説明と言っていますが、たとえばこんな感じで解説されています。(プログラム文には本当は空白部は無いのですが、フリガナとの対応がわかりやすいように、わざと空白スペースを入れました)

フリガナ: コンソール 表示しろ 文字列「ハロー!」
プログラム: console . log ('ハロー'!) ;
読み下し文: 文字列「ハロー!」をコンソールに表示しろ

分岐やループについてもこんな感じで解説されていますが、他言語が多少なりともわかる方は、このようなフリガナや読み下しを心の中でやっていると思うので、わざわざこの本でその習得を繰り返さなくてもなのですが、プログラムに初めて接する方にとっては、オールカラーで、初心者の女性と指導者の男性の会話などがあったりで、親しみやすく作られていると思いますし、変数ってなあに?みたいな、プログラムに必要な知識もきちんと身に付くようになっている構成だと思いました。

「なか見!検索」で本文が少し読めるので、自分のフィーリングに合うかどうか判断できるのも良い点なので、じっくり見てみてほしいと思います。

★が4つの理由は、もしかしたら、超初心者の場合は、これでもまだ難しいと思うかもしれないという気がしないでもないためで、その点で★をひとつ引いてあります。例えば超初心者の場合はプログラマからすれば「なぜここでひっかかる!?」という、予想もつかないところでつまづくもので、この本も充分親切ではあるものの、所詮はプログラムがわかる人が書いたもので、「わかる人には、わからない人の気持ちや思考がわからない」のかもしれないなあと感じる部分もありました。

例えば、自分で定義する変数や引数と、用意されている関数との違いがよくわからなかったりなど、一応は説明されていてもピンとこない、というつまづき方をしている人が結構いたりすると思いますし、ページ数の都合で、4章や5章あたりがドンドン進んでしまい、ついていくのに悩む人もいるかと思います。

とりあえず、この本にフィーリングが合うと感じたら、まずこれを読んでみて、手を動かしてみて(簡単に入力可能で、結果も出せるようになっています)、それでプログラムが面白いと感じたら、次の本に進まれると良いと思う本でした。

5つ星のうち 4.0初心者中の初心者向き

(参考になった人 3/4 人)

JavaScriptについて手を出したものの、変数だなんだと一度離脱したデザイナーさん向きの本だと感じました。

初心者の中でも他のプログラミングなどの経験が無いさらに初心者向きの優しい内容で、各構文に意味としてルビが振ってある面白い構成になっております。

これによりただ読むだけでも意味が頭に入り、読み下しのレベルが上がります。
例えるなら、ジャンプを読んでいるウチに気付けば「小宇宙」という漢字が「コスモ」、「漢」が「オトコ」と読めるようになっている感覚でしょうか笑

またちゃんと説明はしつつも、
「console.logもよく使うけど、promptも大切なんですね!絶対にマスターしないと!!」
という初心者キャラに対して
「勿論覚えた方が良いけど、学習用だから別に覚えなくても」
みたいなベテランキャラの熱冷ましが入るのが、初学者にありがちな「なんでも詰め込んで覚えよう」という失敗を防ぐ意味でとても効果的だと思いました。



覚えるのは大切だけど、それよりもコードが読めるようになる。というのが最重要課題なんだと再認識できる良い作りになっておりました。

仮に購入を迷っている方が、既にある程度コードは読めるようになった後、手を動かして覚える段階なのであればこの本では役者が不足していると思いますが、コードを眺めてもぼんやりとも理解できない初学者にはとてもオススメの書籍でした。

タイトルのとおり、スラスラ読めるのは間違いないです。 説明文の漢字さえ読めれば小学生でも読めるはず。 Javascriptの入門書というよりは、入門書の前半3分の1ぐらいを徹底的に丁寧に説明した、という感じのの本です。 補助輪付きの自転車みたいなもの。 ただ、非常に残念な誤植があり、Javascriptの本であるにもかかわらず、Pythonの用語(メソッド名や関数など)が混ざっている箇所(p.42、p.103)があります。 軽微な間違いで本筋には影響がないですが、星を一つ減らしておきました。

プログラミング言語』の解説 by はてなキーワード

コンピュータプログラムを記述するために使われる人工言語のこと。

文法や意味が厳密に定められている点が自然言語と異なる。

プログラミング言語の数々↓

などなど。(他あったら書き加えてください…)

プログラミング言語の歴史

http://www.shos.info/develop/oo/prglng.html

も参考になる。

プログラミング言語』by Google Search

This page is provided by Matome Project.
Contact information.