
業界とは逆?子供にはローレベルプログラミングを教えるべきという指摘 139
ストーリー by nagazou
日本語高級すぎる 部門より
日本語高級すぎる 部門より
Kota Morishitaさんの以下のプログラムに関するツイートが話題となっている。そのまま引用してみる(Kota Morishitaさんのツイートその1、その2、本人たちによる解説動画)。
嫁「もっと子供にローレベルなプログラミング教えてよ」 俺「最初はハイレベルの方が良くない・・?」
お嫁さんの方はローレベル=入門向けという意味合いで使っているのに対し、Kotaさんの方はプラグラミング用語としてのハイレベル=高水準言語とローレベル=低水準言語の意味合いで使ってる。一般的にはお嫁さんの意味の方が通ると思うが、先の夫婦間の話題の種がプログラミングであったためにこうした微妙にかみ合わない会話となり、結果としてバズることになったようだ。
級とレベルがごちゃごちゃなんだね (スコア:4, 興味深い)
プログラミング歴もうすぐ 45 年で初心者の俺ですが、俺がプログラミングを始めたころの高級言語は、価格的にも思想的にも高級だった。
機械語はハンドアセンブルすれば、ぶっちゃけ BASIC の PEEK/POKE でもエディットできていたから思想的にも価格的に低級 (というか廉価) だった。
ダンプリスト打ち込み用のプログラムも自作が簡単だったし。
今のインタープリタやコンパイラは、ストールマン様や MIT 様たちのおかげで、価格的に高級ではなくなった。
で、それとは別に隠蔽化というか、多重継承とかの高級な概念を持つことが必要で、そういう意味での高級化が発達してしまった。
だから、低級・高級と言われれば、俺のようなオッサンでも理解できるのだが、
ローレベル・ハイレベルという言い方は、何を以てして「レベル」なのか、どうもしっくりこない。
ローレイヤー・ハイレイヤーではだめなの?
--
JavaScript だろうが Scratch だろうが、要は教え方次第だが、4 歳児にどうやって教えるかに興味がある。
Re:級とレベルがごちゃごちゃなんだね (スコア:1)
英語と算数 (スコア:3)
が、どれくらい出来るのかで決めたほうがいいと思います。構文とアルゴリズムは使っている内に学習できるでしょうし。
代入とか関数とか小学生の頃に既に勉強できてるのであればいいんですけどね。私の世代ではそれは中学生からでしたが、私の場合は先に中学生になった兄の教科書を小5の頃に見ていたので小学生のうちからBASICは問題なかったです。中学生になってからBASIC+マシン語でした。高専生になってから授業でPascalとFortran、マイコン同好会でCとアセンブラですね。
今はフリーのコンパイラやら高速インタプリタ言語が沢山あるので、どれを教えたらいいかとか贅沢な悩みですよ。本人がやりたいことをやらせるのがいいと思います。
色々すっとばしてゲームエンジン触らせるのもありかと。せっかくフリーの環境があるんですから。色々な環境で動作する様に実行コード吐けますし。
あと、今時の映画はCG部分をゲームエンジンで作っているので楽しいかと思います。とりあえずPython使えるBlenderあたりからどうでしょう?サム・ライミ監督のスパイダーマンでも当初からBlenderを使っていましたが、新エヴァのエンドロールにもBlenderのロゴがあって息が長いソフトになったなぁと思いました。
Re:英語と算数 (スコア:2)
うぁ、元ネタ見てなかったけど4歳児か。Scratchでいいかもね。
Re:英語と算数 (スコア:2)
そうですね。小学2年生の甥っ子がかなり頭の回転が良くて、大人を食ったような態度をしているので色々お話ししてあげようとしたら、会話の単語のレベルを下げるのにエライ難儀でした。何気なく普段から結構英語混ざりの会話してるもんだなぁと気付かされました。って、うわ津波速報が。湾奥の方は津波の高さが上がるので注意してください!
子供向けローレベルプログラミング (スコア:1)
ゲームのメモリ書き換えとか?
Re: (スコア:0)
バイナリエディタで*.exeファイルのどこそこのアドレスを〇〇に置き換えるといろいろ色々、ってやつですか
#古今東西、青少年の向学心に大いに効くのは「エ□の一念岩をも通ず」か
##別の意味でローレベル(law level)
Re:子供向けローレベルプログラミング (スコア:1)
CALだったかな、逆アセンブルしてモザイクルーチンをNOPで潰したっけな。
実際は、指定された領域にモザイクっぽいチラチラを表示するだけのルーチンで、
元絵には何も描かれてなかったというオチでした。
ランス3はちゃんと描いてあったな。
こちらはセーブデータにフラグ立てるだけで解除できた。
Re:子供向けローレベルプログラミング (スコア:1)
エ□の一念岩をも通ず
元ネタは普通「虚仮の一念岩をも通す」と言うな。「つうず」ではなく「とおす」。
Re: (スコア:0)
それプログラミングかね
Re:子供向けローレベルプログラミング (スコア:1)
俺はエロゲのセーブデータ書き換えと、プリンセスメーカーのコピープロテクト解除がやりたくてアセンブリを覚えました。
ローレベルの方が面白い (スコア:1)
arduinoさせなよ。
小学生にでも十分できるし、LEDぴかぴかさせるだけでも面白い。
#私が小学生の頃は電子工作の漫画(NE555でぴかぴかさせようみたいなのが色々載ってた単行本コミックス)あったけど今もその手のあるのかな
Re: (スコア:0)
ローレベルというならせめてトランジスタで実装してほしいなあ。
# 小学生の頃はみんなの科学を見て555の使い方を覚えた俺
そうか? (スコア:1)
高級言語と低級言語という言い方はするけど「ハイレベルなプログラミング」なんて言い方する?
「言語」の話としては人間寄り=高級、機械寄り=低級だけど、「プログラミング」という作業になると違うんじゃないか。
プログラマに対してレベルというと能力の高低を表すだろ。
これってプログラミング能力を測っているわけで、下手なコードを書いたら低レベルで、優れたコードを書いたらハイレベルなプログラミングなんじゃないか。
Re:そうか? (スコア:1)
言語なんだから (スコア:1)
言語はこうあるべき、教育的にどうあるべき、みたいな話は子供には関係ないし。
自分はZ80ボードのデータバスとアドレスバスにLED付けてステップ実行させながらプログラムを作ってたのが最初の経験。
自分が触ってるものがハードなのかソフトなのかも不分明のまま吸収した「なにか」が根っこにあって、それが今でも活きてる。
わからないものをわからないまま吸収できるあの能力がまた欲しいなぁ~
Re:言語なんだから (スコア:1)
ちょうどいいレベルのを教えればいい (スコア:0)
Re:ちょうどいいレベルのを教えればいい (スコア:3)
「カッコウ、カッコウ、しずかに・・・」だったかな
Re:ちょうどいいレベルのを教えればいい (スコア:1)
山口百恵「かっこかっこかっこかっこかっこかっこかっこばかり先走り♪」
-- う~ん、バッドノウハウ?
Re:ちょうどいいレベルのを教えればいい (スコア:1)
// 往時のシャレにならんネタ
Re:ちょうどいいレベルのを教えればいい (スコア:2)
(少なくとも私にとっては)Prolog のほうが Lisp よりも高水準言語
Re: (スコア:0)
Lispって、どれ?
Common Lisp ?
schemeはlispに入らない?
Re: (スコア:0)
そうか?
atomとconstとlistの概念、consとlistの関係、.記法、nilと空リストの関係、評価のルール、関数5つ、スペシャルフォーム2つ、以上。
小学生でも、2時間もあれば、ばりばり使えるようになると思うけど。
Re:ちょうどいいレベルのを教えればいい (スコア:1)
〇LISPインタプリタになる
scratch処理系においては (スコア:0)
下位が存在していないので、scratchがローレベルなのではないか?
初心者向けなら (スコア:0)
BASIC
beginners' all-purpose symbolic instruction code
Re: (スコア:0)
basicかな
昔の電源ONでいきなりbasicのフルスクリーンエディタとか
ラフに使える環境がIchigojamぐらいしか無いんだよね
※探せてないのかもしれないけど。
あのむき出しボードとかは、まだ要らないから簡単に色付きの絵がコードで描けて
動かせるのが欲しい
ローコード (スコア:0)
なら齟齬がなかった
Re:ローコード (スコア:1)
ローコードは初心者でも楽だけどC#とかF#は大変ですよね
カポタスト使うかチューニング弄らないと…
ローとは L or R (スコア:0)
raw レベルなら混乱がなかった?
Re: (スコア:0)
ハイスクール(中・高校)に対するロー・スクール(法務大学)みたいな勘違いとか
そう言えば (スコア:0)
昔やった仕事で「あるセンサから送られたデータを処理するマシン=フロントエンド」「処理結果を表示するマシン=バックエンド」って呼び方をしてた事が有った。
「フロントエンド/バックエンド」の基準が人間じゃなくてセンサ。
Re:そう言えば (スコア:2)
回路上の信号アンプやアナログ処理部を「アナログフロントエンド」と呼ぶことがありますが、逆に「デジタルバックエンド」という表現は聞いたことがないですね。業界が混ざってる予感。
Re: (スコア:0)
ニキシー管の時計だとデジタルバックエンドかなと思った。誰もそういわないけど
Re:そう言えば (スコア:2)
ところがそっちはロジック基板だとか制御部だとか、前後左右ではなくて役割で呼ぶんですよ。バックは存在しない。まあサハラ(現地語で「砂漠」)みたいなものかもしれませんが。全部バックだと思っている中にごく一部のフロントがあるから、そこだけ区別して呼ぶような……
ANDとかNANDで回路 (スコア:0)
ANDとかNANDでカウンタ回路作るとか?
Re:ANDとかNANDで回路 (スコア:1)
NANDだけで十分だろ。
Re:ANDとかNANDで回路 (スコア:1)
Switchのはじめてゲームプログラミングは回路設計に似ている (スコア:1)
switchの「はじめてゲームプログラミング」は、データフローモデルで
入力ノード: スティック値やボタン押下値を出力
演算ノード: 入力値に対して、四則演算やカウンタなどの処理結果を出力
出力ノード: 入力値に基づいて音楽再生などを行う
モノノード: 入力値に基づいて動く
といった機能を持ったノード同士を接続することで「プログラミング」します。
入出力は高度に抽象化されていて、例えば
左右値を出力する「スティック」ノードのピンを、「ヒト」ノードのX移動ピンに接続
「ボタン」ノードのピンを、「ヒト」ノードのジャンプピンに接続
するだけで、(物理シムも入ってるので)、マリオっぽい動きが実現できます。
ここまではすごい簡単なのですが、演算ノードが単機能なので、そこから先にゲームのルールを実装しようとするとすごい泥臭い。
例えば、ゲーム開始時にカウントダウン表示したりして、
それに合わせて「スタートから3秒間は動けない」ようにするためには、
・入力「スタートした瞬間」ノードのピンを、「タイマー(3秒)」ノードのタイマー開始ピンに接続
・タイマーノードの出力ピンを、「フラグ(≒RS-FF)」ノードの「オンにする(S)」入力ピンに接続
・フラグノードの「オン(Q)」出力ピンと、スティックノードの出力ピンを、演算「かけ算」ノードの入力ピンに接続
・かけ算ノードの出力ピンを、「ヒト」ノードのX移動入力ピンに接続
といったノード接続構築を行います。これで、スタートから3秒間は操作が効かなくなる。
「汎用ロジックICを組み合わせて機能を作る」という回路設計に近い感覚です。
なお、論理演算を行うノードもあるのですが、論理ゲートは AND と NOT だけ。
まあ、ORはワイヤードORで実現できますが
XORとか非常にめんどくさい。
子供にやらせるべきゲームはSHENZHEN I/O (スコア:0)
アセンブリライクなコードでLEDがそれっぽく光るだけのダミー監視カメラプログラムを作ってプログラミングを学ぼう!
Re:子供にやらせるべきゲームはSHENZHEN I/O (スコア:2)
命令数の制限が結構キツイので、オススメし難いかもしらない。
アセンブリ言語ですか (スコア:0)
CASLⅡなら宗派で戦争にならなそうなので安全かな
Re:アセンブリ言語ですか (スコア:1)
ローレベルならRedcodeでコア戦争をさせるのがいいかと思ってしまいました
Re:アセンブリ言語ですか (スコア:1)
Re:オーエスのもんだい (スコア:1)
わかった。君にはMZ-80を授ける。
Re:オーエスのもんだい (スコア:1)
// おーえす
Re:つまりヘキサダンプを教えろと (スコア:1)
いや、マイクロコードやDSP(いにしえのRISC)の話だろう
遅延分岐とかALU busの割振りに悩んだ経験はいつか糧になる!
(ワケがない)
Re:アセンブラ (スコア:1)
圏論とかドメイン論とかもブっこむのですねわかります
Re:案外 (スコア:1)
劣勢遺伝子、優勢遺伝子とかも間違えやすいよね
なんか調べてたら間違えやすいから名前変えたとか出てきた