私的プログラミング史

# 私的プログラミング史

大学で友達と話していたら「プログラミングってどうやって学んだの?」みたいなことを聞かれて、せっかくならブログにしてやろうと思って、書いてみた次第です。

技術的文書というよりは暇つぶしの読み物として読んでいただけるといいんじゃないかなぁと思います。これを読んで、プログラミング始めてみようかなと思っていただければ最高の喜びです。

この記事では僕が今までどんなプログラミング言語を触ってきたのか、どういう流れで学んできたのか、どんな教材で学んだのかを思い出せる範囲内で綴ってみようと思います。

# 最初はVBScript

この記事を読んでいるあなたはVBScript(VBS)を知っていますか?きっと知らないと思います。VB(Visual Basic)とかVBA(Visual Basic for Application)は有名ですね。VBは最近はあまり流行っていないような気がしますが、天下のMicrosoftが開発した言語で、VBAはMicrosoft Officeのマクロを記述する言語ですね。どちらも有名な言語です。

ではVBSってなんぞやと言うと、僕はVB系の構文でかけるスクリプト言語くらいの理解しかしていません。詳細はWikipediaにお任せしようと思います。その当時は適当なテキストファイルの拡張子をvbsにしてダブルクリックしたら走りました。最近は廃止される方針が発表されました。比較的最初期に触った言語として思い出深いものですが、ついに廃止されてしまうのは少々残念な気もします。

VBSを触っていたとき、僕は中学1年くらいだったと思います。学校図書館の本でばったりVBSに出会いました。環境構築不要で簡単に走らせられることに驚いた記憶があります。

僕がVBAで作ったのはヒットアンドブローと言う簡単な数当てゲームです。ヒットアンドブローは数学の授業で論理的思考を学ぶと称してやったときに初めて知りました。問題を自動生成してヒントを返して答え合わせをするプログラムを組みました。色々調べたり、アルゴリズムを考えたりしながら作った思い出深いプログラムです。

プログラミング初心者の方々には、こんな感じの簡単なゲームみたいなのを作るとプログラミングが上手になるんじゃないかと思います。

一応、VBSはまだ規定のWindows11の環境では動くみたいなので、とりあえずなんかプログラミングしてみたい人は雰囲気を掴むためにVBSを触ってみるのもありなんじゃないでしょうか?動作させるために必要な環境構築がゼロで済むのでお手軽です。

# 一太郎Officeの三四郎のマクロを書く

正直記憶が曖昧で最初はVBScriptと順番がごっちゃになっています。どっちが先だったかなぁ。

Microsoft Office全盛で、一太郎Officeが何かわからない人もいると思います。ざっくりいうと、日本語に適したワープロ「一太郎」をメインに据えたJust System製のオフィスソフトです。日本にWindowsが到来する前までは、この一太郎がワープロソフトの一強(だと思う)で、今でも上の方の年代で愛用されている人が多くいるみたいです。個人的には国産IMEのATOKが気になります。

ご多分に漏れず、僕の祖父も一太郎Loveなユーザーの一人だったようで、僕が当時使っていたパソコンが祖父のお下がりみたいなWindowsXPマシンだったのですけど、そのパソコンに一太郎が入っていました。Microsoft Officeのライセンスがなかったので、そのパソコンで表計算をしようと思うと三四郎を使わざるを得ませんでした。

細田守監督のサマーウォーズの影響で僕のその当時のマイブームが花札でした。その時にそれぞれの役がどんな確率でできるのか気になったのですが、僕のアタマでは数学的な計算でその確率を出すことが出来なかったので、統計的な手法でアプローチしようと考えました。そこで、とりあえず大量のデータを収集しないといけないので、花札のプレイデータの収集を簡単にするプログラムを書くことを思いつきました。一定のフォーマットで記録する入力フォームを作りました。Excelのマクロを解説している本やサイト、リファレンスはたくさんありますが、三四郎のマクロの解説やリファレンスは、ソフトにくっついてくるヘルプの中のみでした。今思うとよくやったわぁと思いますが、そのヘルプだけで700行くらいのプログラムを書きました。懐かしい思い出です。

# C#でデスクトップアプリを作る

この辺になってくると、父親とか母親のお下がりのWindows 10マシンを手に入れて色々やり始めています。

環境構築と入門は確か図書館で借りてきた本でやったような気がします。その後は未確認飛行Cとかを参考にしながらデスクトップアプリをいくつか作りました。自分の時間管理のために作ったTimerとか、父親が欲しがっていたから作ったPDF_to_Jpegとかを作りました。

C#ではオブジェクト指向プログラミングの基礎を学びました。インターフェイスとかジェネリック型とかラムダ式とかLinQとかは未だに理解しきってないですけど…

# Webサイト制作に手を出した

HTML自体は中学の時から興味があったのですが、実際にWebサイトを作ったのは2022年の3月みたいですね。皆さんご存知個性派文庫の爆誕です。ToYamaプログラミング史的ゴミコードです。というかHTMLを書くことはマークアップだし、CSSはスタイリングって言うから実際はプログラミングではないんですけど、全くコンピューターに手順を命令していないのでそうなんですけど、まぁそのへんは御愛嬌を。

この当時はHTMLとCSSのみでJavaScriptは謎の苦手意識で一切使わずにやっていました。なんかイメージ悪かったんですよね。関数の書き方がやけに多かったり、非推奨な書き方が多くて……あとはおそらくその当時Pythonもやってて、比較しちゃってたのかなぁ。

まぁ、このWebサイト制作の僕の経験というか経緯もまた1つ記事が書けちゃいそうというか、書くつもりだった時期もあるので、また軽く書くかもしれません。その時はよろしくお願いします。

# Pythonにハマる

この辺もまた記憶が混濁していて、Webサイト制作に手を出したとの順番がいまいち覚えていないんですよね。もしかしたら同時にやっていたかも…

さらに重ねて、Pythonを始めた経緯も思い出せないんですよね。成果物だけは残っているんですけど、一番最初の成果物がどれか覚えていないんですよね。

きっとこの記事を見つけるくらいのあなたならPythonが何かくらいはわかると思うので割愛。初心者によくおすすめされるプログラミング言語です。実際僕も学んで体験しましたが、初心者におすすめできると同時に、色々面白いというか、深堀りしがいのある機能がたくさん詰まっていて発見がいっぱいある言語でもあります。TypeScriptを触り始めた僕としては、型がないのが恐怖ではありますが、簡単に書き始められるのは非常に魅力的です。

Pythonでは日常的によくやるというか、やりたい操作に適したソフトを探すのが面倒だったり、ニッチ過ぎて既存ソフトが存在しないようなことを実現するために使っていた感じです。MediaFolderingとか典型例ですね。探すより自分で実装したほうが早いときはPythonが楽です。

# ついにJavaScriptに入門

ここからついに大学生編です。入ったサークルがIT系もやっているサークルで、そこのJS学ぼうという方針に乗っかったら、いつの間にかJSを習得していました。

具体的には、サークル内でハッカソンと称して適当になんか開発しよう!みたいな機会があったので、rishu-appを作ったら、JSを結構理解できるようになりました(それと非同期)。

現在もJSは勉強中というか、何を学んでいても完璧になることなんてないんですが、JSは特にそんな感じがします。

# ハッカソンに参加する

サークル内ハッカソン的なやつとは別に、サークルの仲間とハッカソンに参加しました。詳細はこちら

ハッカソンに参加すると否が応でもコーディングするし、他人が書いたコードも見るので、飛躍的な成長ができるので参加することは非常におすすめです。

# Next.js&TypeScript&MUIをいっぺんに触る

この記事を書いている今現在やっていることですね。さっきのrishu-appをNext.jsを使ってTypeScriptで書き直していますというか、作り直しています。React UIコンポーネントにはMUIを採用して、開発環境にはdevcontainerを利用しています。

Next.jsを採用した理由は、単に使ったことはないけど周りで、それこそサークルのWebサイトとかハッカソンで使われているので馴染みがあって、更にSPAとかSSGとか使える強強フレームワークなので採用。既存のrishu-appはAPIからデータを取ってくるのにちょっと時間がかかるって若干遅いので、そのへんが爆速になればいいなと思っています。

TSを採用したのは、とりあえずJSは制覇したので、その上位互換たるTSに挑戦してみようと思った次第。あとはJSより良い開発体験ができそうという見込み。型があるありがたみとめんどくささを体験しています。

MUIを採用したのは、単にCSSを書きたくなかったって感じです。別に書いてもいいんですけど、作り直しなので既存のやつからCSSパクってきてもいいんですけど、それだけだとなんか見た目に変化がなくて物足りなかったので試してみた次第です。正直良くわかんない。

devcontainerはハッカソンで環境構築するときのお世話になりましたが、自分で一からdevcontainerを使った環境の整備は初めてでした。ローカルの環境を汚さないのはいいんだけど、いかんせん電力消費が激しくてノートをモバイルしたい僕としてはちょっとつらいです。やっぱりwslくらいでいいのかなぁ……

制作の詳細はまた別記事で書こうかと今思ったので、書いたらそのときはよろしくお願いします。

# 今後の展望

プログラミング言語は今後、RustとかLispとかに興味があるので学んでみたいですね。言語ではないですが、データベースとかバックエンドに馴染みがないので、rishu-appのAPIを自作して学んでみたいと思っています。

# 終わりに

とりとめもなくダラダラと書いてしまいましたがいかがだったでしょうか?技術の参考文書というよりは、暇つぶしの読み物程度に読んでいただけたのであれば幸いです。

以上、帰省のバスからお届けしました。