プログラミングが「どのようなものか」を説明するために、プログラマーでない人に見せるのに適した例は何でしょうか?
質問
先日、私の友人が、プログラミングをしているとき、私は数字のリストを見ているだけなのか、それともどのように動作しているのか、と尋ねてきました。私は、一般的には数学の公式のようなもので、奇妙な英単語が混じっており、一般的にはほとんど読むことができると説明しようとしました。しかし、それは非常に漠然とした説明で、プログラマーではない人にはあまり説明できません。
しかし、何が良い例となるかを考えるようになりました。私が彼女にプログラミングを教えたいからではなく、単にプログラム コードがどのようなものであるかというアイデアを与えるためです。
そして、何が良い例として実際に機能するのかについて考えるようになりました。そしてそれは、意外と難しいことがわかりました。
私が最初に考えたのは、明らかに単純な "Hello World" プログラムでした。しかし、これは本当に役に立つことは何も示していません。関数や変数をどのように使うのか、あるいは
if
や
while
というプログラムを作るために、実際に
何かをする
. ロジックがないんです。プログラムは何も反応しません。
だから、素数の計算のようなものが、より良い例なのかもしれません。しかし、それはあまりにも理論的で実用的でないかもしれません...(そんなことして何になる?本当のプログラムを書くことに何の関係があるのでしょうか?) そしてまた、そこには重要な制御フローのロジックはない。単なる数学の直列です。
そしてまた、どの言語を使うべきか?
理想を言えば、あまりきれいな言語である必要はないと思います。むしろ、構造をはっきりさせるべきでしょう。もしそうであれば、ある程度のノイズや乱雑さはあってもいいかもしれません。その点では、PythonよりもC++の方が良い例かもしれません。明示的な中括弧と型指定子は、プログラムがどのように構造化されているかを説明するのに役立つ、あるいは、そうでないことを強調するための明らかなフックです。 ただ のような単純なステートメントであることを強調するためのものです。
しかし、C++では、まったく奇妙な構文も出てきます。なぜ
std::cout << x
は x をプリントアウトするのに使われているのでしょうか?なぜ通常の関数呼び出し構文ではないのでしょうか?そして
printf
は、その難解なフォーマット文字列と、拡張性の欠如によって、あまり良いものではありません。
char*
を使うことでプログラムを複雑にしたいのか?それとも
std::string
を呼び出すことにして、一見不要に見える
s.c_str()
で表示できる文字列を得るために
printf
?
結局のところ、より高いレベルの言語が良いのかもしれません。しかし、どれが?そして、なぜ?
プログラミングを教えるためにどの言語/サンプルプログラムを使うかについて、ここでたくさんの似たような質問があることは知っています。しかし、ここでの要件は異なっていると思います。プログラミングを教えるとき、私たちは何よりもシンプルであることを望みます。まだ習っていないことは避けたい。生徒が理解できるようにしたいのです。 すべて を理解できるようにしたいのです。
私はシンプルであること自体に興味があるわけではありません。むしろ、外部の人間に、プログラムがどのようなものであるかのイメージを与えることに興味があるのです。そして、プログラムは単純ではありません。しかし、プログラムは を行います。 は、ある種の構造と狂気への方法を示しています。それを最もよく際立たせる言語/プログラムは何でしょうか?
編集
これまでのすべての提案に感謝します。私が意図していたのとはやや異なる角度からご意見をいただいた方もいらっしゃいました。
おそらく、例を挙げるのが適切でしょう。私は飛行機を操縦することはできませんが、コックピットがどのようなものか、そしてパイロットが飛行中に何をするのか、基本的な理解はしています。
私は大工の訓練は受けていませんが、のこぎりやハンマーを見ればわかります。
でも、たとえば映画でプログラミングに関係するものを見ると、たいていは画面がゴミで埋め尽くされているだけです(『マトリックス』の緑の文字のように)。普通の人間が実際にできるものには見えません。 する . 認識できるものは何もない。プログラマーでない人が見たら、単に黒魔術としか思えない。
私は彼女に空を飛ぶことやソフトウェアのプログラミングを教えたいわけではありません。
でも、基本的な枠組みは教えてあげたいんです。ただ、「あぁ、こういうことなんだ」と思ってもらえればいいんです。スクリーン上のランダムな記号や数字だけではないんだ」と。単純に
if
-という文を表示するだけでも、Matrix風のランダムな記号と数字に比べれば、驚嘆に値するでしょう。
アルゴリズムを説明する、あるいは疑似コードを使うという提案もありましたが、それは私が避けたいことです。私は、単純に 実際の 大工でなくてものこぎりを見て、それが何であり、どのように機能するかについての基本的な考えを得ることができるのと同じようにです。
子供の頃、イタリアにバカンスに行ったことがあります。その際、パイロットが私を飛行機のコックピットに乗せてくれたんです。もちろん、飛行機の操縦を習ったわけではありません。でも、パイロットの世界を垣間見ることができたんです。どうやって飛行機を走らせるのか、パイロットは実際に何をしているのか。
私がやりたいのはそれだけなんです。友人はプログラミングを学ぶことに興味がありませんし、無理にソースコードを理解させるつもりもありません。でも、私がどんなツールやエンティティを使って作業しているのかには興味があるようでした。マトリックス的なシンボルが画面をスクロールしているのか?純粋な数学?散文的な英語?
私が伝えたいのは、「私が働くとどうなるのか」という非常に高度な理解なのです。
どのように解決するのですか?
あなたの質問に直接答えるために - 。 プログラミングが "どのように見えるか" という質問には、大規模なアプリケーションをプリントアウトしたものを見せます。おもちゃのアプリや、haskellのqsortのようなかわいいものでは、本当に間違った考えを与えてしまうのです。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 軽量化の意味[クローズド]について
-
[解決済み] ダックタイピングとは何ですか?
-
[解決済み] なぜ関数型言語なのか?[クローズド]
-
[解決済み】NULLのない言語についての最適な説明
-
[解決済み】LOGOでカメを動かすには?[クローズド]
-
[解決済み】戻り値型による関数のオーバーロード?
-
[解決済み] スニペットからプログラミング言語を検出する【終了しました
-
[解決済み] ある言語がスクリプト言語とみなされるのはどのような場合か?[クローズド]
-
[解決済み] 何が違うの?非同期、ノンブロッキング、イベントベースアーキテクチャの違いとは?
-
[解決済み] Mathematica:シンボリックプログラミングとは?