2021-8-15

プログラミングの遍歴

初めに

今回は私がどんなプログラミングの経験があるかを語っていこうと思います.キーワードは飽きっぽい,とりあえずやってみよ,うっかり借りて(買って)しまった,です.

小学校

4 年生ぐらいの時 - BASIC

家の iPad に BASIC のアプリを入れて,親が遊んでるのをみてた.行番号が 10,20,30…となっていたのが謎だった.print 命令ぐらいしか覚えてない.

4 年生ぐらいの時 - MOON Block

市の図書館でMOON Blockの本を新刊コーナーで発見.BASIC をみてプログラミング難しそうと思っていたけど,ビジュアル言語ならいけるかもと思ったのと,ビット調の挿絵に惹かれ,早速家でとりあえずやってみる.しかし,くまを大量出現させたり,パラパラ漫画の容量で歩かせたりするぐらいですぐ飽きる.ビヘイビアという謎の用語が出てくるのが腑に落ちてなかった記憶がある.(今なら behavior ってわかるんだけどね)

4,5 年生ぐらいの時 - Scratch

Scratch は言わずと知れた子供の教育用ビジュアル言語である.子供用ではあるが,私はガチの初心者でプログラミングに抵抗感を持っている人にもこれを勧めたい.まじでこれほどわかりやすい言語はない.

MOON Block で挫折したのち,新聞で Scratch を発見する.早速親のメアドを入力してもらってアカウントを作成.小学生から始めるわくわくプログラミングという本を買ってもらって,とりあえず写経した.

当時はまだ Scratch が ver.1.0(ローカルにダウンロードするやつ)から 2.0(web 版)に変わったばっかりだった.今思えばあの頃が今騒がれてるプログラミング教育の黎明期だったのかもしれない.

写経を終えると,なんとなくプログラミングというもののやり方がわかったので,自分で色々作ってみた.しかし,いかんせん飽きっぽいので大きなプロジェクトを作ろうとすると必ず挫折していた.だから,今公開されているのも一つの機能しかないものばかりだ.(最新のテンキー入力は休校期間に暇すぎて作った)

この Scratch が私のプログラミング経験の基礎であると言っても過言ではない.後述の Smile Basic をやっている時は特に,文字で書いてある命令を Scratch のブロックに置き換えて考えたりしていた.これは文字の言語を理解するのに大いに役立った.

Scratch は小学生の時から中学校ぐらいまでちょくちょく触っていた.

小学 6 年生 - プチコン(Smile BASIC)

ディズニーに行くことが決まり,待ち時間に 3DS でやろうと思ってダウンロードしたのがこのソフトである.ディズニーという楽しい空間で私はなぜか逆張りがしたかった.結局待ち時間だけでは説明書を解読することができなくて,ずっとどうぶつの森をやっていた.

このプチコンというソフトでは,Smile BASIC という BASIC を元にした言語を使うことができる.キャラクターとか背景画像がドット画像であらかじめ用意されていて,それを簡単に呼び出してプログラムに組み込むことができる.

私はゲーム作りには今も昔も興味がないので,まず最初は文字だけの乱数発生機なんかを作って,キャラクター画像の呼び出し方法を覚えてサイコロをふるコードを書くぐらいで満足してしまった.あとは,3DS のボタンが押された情報も受け取ることができたので,それで遊んだりもした.

ここで,小学生の私に足りていなかったのが座標の感覚だ.プチコンでは確か,画面左上に原点があって,右に x 軸,下に y 軸が取られていた気がする.それがどうしても覚えれなくて,思った場所にキャラクターを出すのに苦労した覚えがある.

プチコンで遊んだことで,文字でもプログラミングはかけることや,変数には型があること(と言っても数字と文字だけ),エラーメッセージは意味わからんこと,print で変数表示してデバッグに生かせること,GOTO 命令で無限ループができること,コメントを書いておけば次見た時にコードがわかりやすいことなどなど色々学ぶことができた.

中学生

あんまり記憶がない.FireAlpaca で絵を描こうとしては挫折してアナログに戻ることを繰り返していたような.Scratch とプチコンはちょくちょく触っていた.

高校生

一年生 - VBA, MySQL(情報の授業)

私の高校の情報の先生は,エンジニアとして仕事でプログラムを書いてから先生になったという人だった.だからなのかわからないけど,情報の授業は色々やった.ちなみに,その先生は吹奏楽部の顧問でトランペットがめっちゃ上手くて,謎にたくさん楽器を持っている.

高校の授業は結構すやすやしていて,情報の授業も結構 nap time になっていた.でも手を動かす時だけは起きてた.

情報の授業はまじで楽しかった.概念だけじゃなくて,ちゃんと手で計算させるから理解が深まった.あと,二進数の計算はめっちゃやらされた(そのせいで数学で n 進数のところ飛ばされた).サブネットマスクとか計算させられた.TCP と UDP の違いとかもやったの覚えてる.ネットワーク関連は結構詳しくやったっぽい.

まず,Excel の VBA を触った.今資料(わら半紙)見返したら,逐次探索と二分探索,バブルソートもやってた.Dim A as integer って宣言してる.めっちゃ懐かしーー!

それで,3 学期には MySQL をやった.命令とかは全く覚えてないんだけど,正規化っていう概念だけはなんとなく覚えてる.共通のキーを設定して表をできるだけ分割しようみたいなやつ.(あってんの?)

一年生 - C++ (AtCoder)

三学期ぐらいに,生物の先生がプログラミングを始めたっていうのを授業で言ってて,貧血の仕組みか何かを聞きに行くふりをしてその話を聞きに行った.(まじであの生物の先生何者なんですか………ちなみに確か当時先生は茶色でした)

そしたら,先生がわざわざパソコン持ってきて見せてくれて,AtCoder いいよ!C++楽しいよ!!蟻本いいよ!!って教えてくれた.早速家に帰ってC++入門を始めた.

(追記) この生物の先生は神で,Google の本のプレゼント企画に応募して図書室にプログラミング関係の本を大量に入れてくれてた.まじで神.感謝しかなかった…!

これは言い訳だけど,部活が結構忙しくて全然それから進捗が生まれなかった.部活の自己紹介に C++をちゃんとやりたいです!って書いたけど,全然ちゃんとやらんかった.C++入門が永遠に終わらんかった.

多分 2 年の時も C++と VBA ちょくちょく触るぐらいであんまり進捗なかった気がする.XCode で C++をやるっていう本もやったけど,飽きてやめちゃった.

三年生 - Swift

休校期間にやった.なんとなく iOS アプリ開発がしたいと思って図書館行って,一番簡単そうな本を借りた. ここは switch,case っていうのがあるのをしれたのがよかったってぐらい.基本構文やっているうちに飽きちゃった.というより,基本構文をまとめるためにルーズリーフにピッタリ印刷できる Word のテンプレを B5 と A5 どっちも作ってるうちに Swift に興味を失ってしまった…

もう Swift はなんも覚えてない

三年生 - Arduino

夏休みに Arduino と加速度センサを使ってロケットの運動を記録しようっていう SSH の講習会に参加した.実テの前日か何かだったけど参加しちゃった.(このテストの結果が意外とよかったので,調子に乗って秋に大失敗をする)

この会はとりあえず一緒にやった人がつよつよだった思い出しかない.同じ部活で忙しかったはずなのにめっちゃ色々知ってるのが悔しかった.昼休みになぜか四元数について語られた.ちなみにうちの高校の図書室に苦しんで覚える C 言語を入れたのはこの人です.

この会でやったこと自体は先生の準備が完璧すぎたおかげで,そんなに難しくなかった.配られたすっごく丁寧なプリント通りにプログラムを打ち込んで,先生が自分で作った(ほんとになんでできるの!!??)プリント基盤に部品を差し込んで(しかも部品さす穴も先生が開けてくれていた…!),はんだ付けして,電池つけて,ロケットに入れて,発射した.発射ボタン押させてくれて楽しかった.ちゃんとパラシュートが開いてふわふわ落下してきた.

SD カードに保存されたデータをエクセルにぶち込んで,グラフにしたりして解析した.z 軸が垂直方向なんだけど,その値が机の上で静止させた状態で-1(つまり重力加速度の分)になっているのを考慮するのにちょっと苦慮した.めっちゃ綺麗にデータが取れていて,x 軸,y 軸の様子から機体が回転してる様子がわかったりした.

この会に出たことで,Arduino 意外と簡単!って思えたし,自分と似たような生活をしているはずの人でももっとつよつよの人がいることを学べたのがよかった.

三年生 - Processing

上記の Arduino の会で SD カードに情報を保存するのに Processing を使っているというのを聞いて,触ってみたくなった.勉強のために図書館に行ったはずなのになぜかProcessing をはじめようを借りた. でも流石に受験生なので最初の章ぐらいやって返しちゃった.

Processing はコードの結果が視覚的にすぐにみられるところがいいと思った.

三年生 - M5Stack

10 月ぐらいにテストが終わった開放感でうっかり買ってしまった.夏の講習で Arduino IDE の使い方を覚えたのでマイコンが触ってみたくなっちゃった.でも家の PC の諸々の関係で結局まともにコードを書き始めたのはもうちょっと後で,いつかは言えません...

書いたと言ってもUIFlowを使って Scratch みたいなことをしただけです.ここでは M5Stack をポモドーロタイマーにして,1 ポモドーロごとに IFTTT を経由して Google SpreadSheet に記録されるようにした. 記録をグラフで表すと勉強時間の少なさが可視化されて病みそうになった.ちゃんと勉強するようになってからは M5Stack のポモドーロタイマーなんて使わなかった.

この M5Stack の経験から学んだのは,マイコンにはタイマー割り込みがあることと意外と IoT の敷居が低いこと.PC の処理速度が高速なので忘れがちだけど,プログラムを処理するのには時間がかかる.つまり,正確に一秒を刻むものを作りたいと思うと,処理 →60 秒待つ → 処理…だといけない.そこで,タイマー割り込みが必要になる. IoT は IFTTT と Webhook いうサービスを使って,いろんなことがめっちゃ簡単にできます.ググってみてください.

大学生

大学一年生 - HTML,CSS,JavaScript

春休み,身分が高校生のうちにと思って,高校生からはじめる プログラミングという本を借りた(改訂版出てた).表紙が SAO だけど,中身にはほとんど出てこないよ.実践的に解説してあってよかった. 大学始まってからはほとんど Progate で勉強してる.

大学入学早々のゴールデンウィークに jack のハッカソンで洗礼を受けた.このイベントのおかげで結構書けるようになった.後,GitHub とか VSCode とかの使い方も教えてもらった.VSCode まじ神... あと,web 系のバイト(NUOCW のスタッフ)でも色々勉強させてもらっている.

大学一年生 - GAS

大学の図書館でGoogle Apps Script 完全入門をうっかり借りてしまって,触り始めた触ってるうちに,NUCT から Google カレンダー,そこから ToDo にスケジュールの情報を移せるんじゃないかと思ってそのコードを書いて公開した.

大学一年生 - Python

情報リテラシーとセキュリティ2で勉強した.授業以外ではあんまりなんもしてない. 初めて触った時は js もそうだけど動的型付けだから,C++と比べて型のゆるゆるさにびっくりした.あと,スコープがインデントで分けられてるのも衝撃だった.最近流行ってるイメージがあるから若い言語なのかなと思ったら 1991 年からあるみたいでびっくり. いつか Tkinter で GUI アプリ作りたい.

大学一年生 - LaTeX

プログラミング言語じゃないけどね.情報リテラシー(理系)でやった.コンパイルのたびに生成される謎のファイルと,頑張って調べてね!みたいなエラーメッセージにイライラしながらやってた.でも,だんだんレポート書くなら TeX が意外と便利かもしれないと思うようになった.(A4 一枚分とか指定されてると,私の環境だと余白が大きい分文章が短く済む.)

終わりに

クッソ長い自分語り(ブログとはそういうもの)を読んで下さった人,ありがとうございました.プログラミングというものに触れていた期間のわりに,その深さがうっすいことに気づかれたでしょうか.冒頭でも申しました通り,いろんなことに手を出すわりに,そんなに深くやらないうちに,適当な成果が出たところでやめてしまう飽き性なのです. でも,大学では情報学部,jack や NAFT に入って周りにプログラミングしている人がいるという状況があり,幾分飽き性も改善したと思うので,これからも今学んでいることをやり続けていきたい所存であります.