2019-04-11

https://anond.hatelabo.jp/20190411010447

まりにも哀れなので、釣りじゃないと仮定してプログラミングに関するアドバイスを多少。

こういうタイプの人は暗記ばかりで理解が全く足りてないと思っている。「これがきたらこうする」というパターンはわかっても、「なぜそうするのか」という部分に目がいってない。

そういう「なぜ」を考える訓練を普段からしてないから、いざ「なぜそうするのか」と詰まったときに「よくわからいから覚えてしまえ」となる。目の前の「わからない」をとことん放置して、とにかく今だけをやり過ごそうとしている。おそらく人生におけるすべてのありとあらゆることにおいてそのように一貫していると思う。たぶん現時点でのAIの方が賢い。

もちろん暗記が悪いというわけではない。i=i+1と書く理由は「作った人がそういう決まりにしたから」だから、それを理解しようとするとプログラミング歴史やらを漁らなくてはいけなくなる。だから暗記することは大事。でもなんでも暗記してしまう人は「なんでi=i+1をするんだ」ということはわかっていない。

一度「なぜ」というふうに考えられる思考さえ身についてしまえば、少なくとも今のそうした酷い状況には陥らないはず。

プログラミング言語は、突き詰めていうと数字を操るためのツール

人間数字を操ることでかなり多くのことができる。

それはなぜかというと、人間が多くのことを数値化できたからだ。たとえば音楽なら、ドレミファソラシは「261、293、329、349、391、440、493」のように表現できることが知られている。また、絵も、厳密な数値としての可視光の波長の組み合わせであることが知られている。絵が作れて音が鳴らせるということは、絵の連続である動画も数値で表現できる。

日本国旗を作るには「全体は白色」「真ん中は赤色」を作らなければいけないが、これをLEDを組み合わせて表現してみる。

電気がそれほど流れてないときは白色に光り、たくさん流れているとき赤色に光るLEDがあるとする。

また、白色に光らせるときは000、赤色に光らせるときは001のように数値を決める。この数値を入力するとLEDに対して電気を弱く流したり強く流したりできるような装置を作る。000のとき電気を弱く流し、001のとき電気を強く流す。

こうしたLED電気を流す装置を1万個用意する。

そうすると、コンピュータが000という数値をすべての装置入力すると、1万個のLEDはすべて白色に光りだす。001をすべての装置入力すると1万個のLEDはすべて赤色に光りだす。これがディスプレイの始まりだ。電光掲示板電卓想像してくれればいい。

日本国旗を作るには、その1万個のLEDを白色にするために、まず色000を1万個の装置入力する。この1万個のLEDは縦100x横100で並べる。それから縦30x横30のLEDから縦70x横70のLEDまでに内接する円の内部(x^2+y^2≦40)がすべて色001であれば、赤い円ができる。

このx^2+y^2≦40となるようなxとyを求めるコンピュータ内部で機能が作られているとして、この機能を使うには009という数値を使うとする。

このように定義してあげれば、これは次のようになる。

CODES = 000 100 100 009 040 001 030 030 070 070

この表現は今ぼくが適当でっちあげたものからまりからなくてもいいけど、いちばん言いたいのは、ぼくたちがコンピュータに伝えないといけないことは、最終的にはこういう数値であるということ。

なのでたとえば配列はとても重要だ。今、青を002と置いて、002が装置入力されるとめちゃくちゃ強い電気が流されて、かつ、LEDにめちゃくちゃ強い電気を流したらLEDが青く光るようにしたとする。

このとき、赤を青に変えるには、001の部分を002に変えれば良い。これをCODES[6] = 002と書く。そして次のようになる

CODES = 000 100 100 009 040 002 030 030 070 070

さらにここから白を赤に変えるには次のようにすればいい。

CODES = 001 100 100 009 040 002 030 030 070 070

ぼくたちが使っているスマホPCも、結局こういう数値がひたすらコンピュータ内部で計算されまくっている。

コンピュータ内部では数字で何もかもを表現する。文字も、小数も、画像も、音楽も、動画も、Webサイトも何もかも。

何をどのように表現するかは人間が決めている。「Aは41と表現する」のように人間が決めたので、41 41 41と別のコンピュータに伝えると、別のコンピュータで「AAA」というふうに表示してくれる。61は「a」なので、たとえば大文字から文字にしたい場合は、41 + 20とする。

結局、すべての機能はこの数字を便利に操るための道具に過ぎない。人間が数値をそのまま操るには限界があるからだ。

すべては結局数値に帰着する。

そのように考えれば、かなりシンプルになることが多い。iTunesに入っている曲をランダム再生したい場合は、まず自分が持っているiTunes音楽の個数を把握する。これが55個だったとする。ランダムにするのは難しいので、今の日時を参考にする。02:20:32だったら32秒だから32番目の曲を再生するとする。55秒以降のときは分を使い、55分以降のとき時間を使うとする。

これはたとえばこのようになる(もちろんこのままでは実用的ではない)

ItunesMusicList itunesMusicList = getItunesMusicList();
while (true) {
    Date date = getCurrentDate();
    if (date.seconds < itunesMusicList.length) {
        ItunesMusic music = itunesMusicList[date.seconds]
        music.play();
    } else if (date.minutes < itunesMusicList.length) {
        ItunesMusic music = itunesMusicList[date.minutes]
        music.play();
    } else {
        ItunesMusic music = itunesMusicList[date.hours]
        music.play();
    }
}

何も難しいことはしていない。あとは単に習熟度うんぬんの問題だと思う。正直個人的には、8年も何をしていたんだという感じだ。ぼくはプログラミング歴2年目なので。

記事への反応 -
  • https://anond.hatelabo.jp/20190411010447

    プログラミングまったく理解してないけど某大手の下請けでSEとして5年くらい働いてた。 今は転職して非上場の中小企業の事務職やってる。 偏差値ギリ50くらいの大学の情報系の学科で...

    • https://anond.hatelabo.jp/20190411010447

      あまりにも哀れなので、釣りじゃないと仮定してプログラミングに関するアドバイスを多少。 こういうタイプの人は暗記ばかりで理解が全く足りてないと思っている。「これがきたらこ...

      • anond:20190411023559

        元増田だけど、ぶっちゃけ書いてくれたことさっぱりってか1ミリもわかんないんだよねー 世の中の参考書とか解説サイトとかも、だいたいこういう口調のこういう説明の仕方じゃん? ...

        • anond:20190411215811

          プログラミングができるわけでもない一般人だが書かれている内容はだいたい分かった。 ただし何を言いたいのかはサッパリ分からない。 なぜ「数字」にこだわるのかも分からないし唐...

記事への反応(ブックマークコメント)

アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん