これまで触ってきたプログラミング言語
- N-88 BASIC
- VB6.0
- Perl
- HTML+Javascript
- Flash+ActionScript
- PHP
- C#
- Java
- Cotlin
- Python
BASICとの出会い
初めてプログラミング言語に触れたのは中学生のころだった。知り合いが会社で使わなくなったNEC PC-98Do+をもらったのだけど自分では使わないということで,それがわが家に来たことからすべては始まった。ちなみにこのPC-98Do+は88モードと98モードを切り替え可能という当時でもハイスペックなマシンだった。
当時世間ではすでにWindows95が発売されていて,WindowsではなくMS-DOSはすでに時代遅れのOSだったのだけど,そんなことは気にせずPCにはまり込んでいった。インターネットも引いていなかったので(そのそもPC-98ではインターネットには接続できなかったし,ほかにインターネットができるようなパソコンはなかった)図書館で本を借りてきて掲載されているサンプルプログラムをひたすら打ち込んで自分で動かしていたように思う。
とりわけ愛読していた雑誌がベーシックマガジンだった。読者からの投稿プログラムが載せられていて,それを見ながらひたすら打ち込む。コピペなどできないので,印刷された文字をキーボードで入力していくので打ち間違いなどは多々あり,なぜ動かないのか,どこが間違っているのか誌面とにらめっこしながら打ち込んでいたことを思い出す。
もちろんプログラミングだけでなくてソフトを買ってきて(ハードオフなどでフロッピーディスクに入ったソフトが中古で売られていた)Lotus123とかを触ったり,ゲーム(大航海時代Ⅱと信長の野望 武将風雲録,三国志(ナンバリングは忘れた))などにも大いにはまっていたけどそれはまた別の話。
そんな感じで最初は見よう見まねでほかのプログラムを丸写して動かしてみて,そのあとパラメーターを変えたりしていって改造しながら動き方を学習して言った感じ。アルゴリズムとか難しいことは考えていなかったのでひどい冗長なコードなども書いていたけど,この当時の経験がいまの私のプログラミング好きな土台になっていると思う。
Visual Basic 6.0
時は流れ,Windows PCを手に入れた私は相変わらずゲームにもはまりつつプログラミングへの熱も冷めてはいかなかった。
次に手を出したのがVB6.0。Basicを土台としているのでN88 BASICで培った知識をそのまま使えさらにグラフィカルなデザインやフォームやコンポーネントを使ってソフトが作れるVB6.0に魅力を感じいろいろなゲームを作ったりした。
簡単なレースゲームみたいなのを作ってベーマガに投稿した記憶がある。自機は棒一本,コースは1コースだけというひどいものだったけど。
Java
その次に手を出したのがJavaだったと思う。初めてオブジェクト指向言語に触れてその概念を理解するのに大変苦労した。クラスがフィールドとメソッドで構成されているあたりまではついていけても,継承とかカプセル化とかになってきてそのあたりで躓いた。今でもオブジェクト指向は完全に理解できていない。
JavaはBasicと違って型やクラスなどかなりお堅い言語なのであまり好きになれなかった。当時はJava AppletというWebページに組み込んで実行する仕組みがまだ使われていたのでJava Appletで動くゲームなどを作りかけて結局完成せずに終わった。
横スクロールアクションを作ろうとして途中まではできたけど,当たり判定やらキャラの動き計算やらマップやら当時の私には(今でも)無謀大きすぎるプロジェクトだったと思う。
GUIアプリを作るのにSwingを触っていたが,なんかVBなどと比べて直感的でないし,コンポーネントの見た目もなんか変な感じだなと感じたのを覚えている。最近でもまだSwingは使われているんだろうか・・・
その後JavaはAndroidの開発の際にも必要な言語としてメジャーになっていくわけで,もう少し極めればよかったかもと今になって思う。
C#
実は私はCと名の付くプログラミング言語はC#が初めてだった。CもC++もスルーしてしまってきていた。正直Cはプログラマの基本要件で必修科目という意見には同意するが,BasicやPerlなど楽な言語に流れて行ってどうしてもCやC++の難しそうなイメージに付きまとわれやる気が起こらなかった。
実際Cは高校の授業でちょろっとやっただけ。基礎中の基礎しかやっておらず,今は全く記憶が忘却の彼方へ行っている。
そんなC言語に苦手意識を持つ私がなぜC#をやり始めたかというと,当時新しい言語として取り出さされていた.NET Frameworkを用いたVB.NETやC#(あともう一つぐらいあったけど忘れた)などのうち,C#の持つなんとなく先進的なかっこよさにひかれたから。Visual Studioがやはり使いやすいかったのもその理由の一つ。デスクトップアプリを作るならやっぱりC#でしょ,という感じで当時はそんなノリだった。
フリーランスで仕事を始めてからC#を使ってソフト開発などに使っていたし,当時個人的に使っていたWindowsMobile機WillcomのW-ZERO3とかのアプリもC#で書いてたと思う。
ただ,それ以降C#でWindowsアプリを作成することはなく,次第に忘れてしまっていった。
HTML+Javascript
ちょっと順番は前後するが,ホームページ作成が高校生の時に流行りだし,テキストサイト(侍魂とかちゆ12歳とか懐かしすぎる・・・)など個人のホームページ全盛期ともいえる時代の流れに乗り私もいろいろホームページ作成を楽しんでいた。
ホームページビルダーなどもあったが,そういったものはほとんど使わず(NetscapeのComposerは使っていた)エディタにHTML手打ちで作成していた。
レンタルサーバーを借りて,(最初はjfastという会社のレンサバ,のちにXREAに移動)コンピューター関係のサイトを作ったり,当時よくある日記,BBSなどを備えてほかのサイトの管理人と相互リンクしたり今思うとすごい懐かしい。Javascriptでカウンターを出力してキリ番だとダイアログを出して逃げられなくしたり(すごい迷惑w)当時は全部のページをHTMLで作っていてCMSは使っていなかったのでページ間の移動リンクなどをJavascriptで出力するなどいろいろ使っていた。(今まだSSIってつかわれているんだろうか…)
Perl
フロントエンドのHTML+JavaScriptだけではやはり役不足になってくる。当時はホームページに掲示板とかカウンターを置くのが主流で,いろいろなレンタルサービスもあったが,やはり自分で作りたい派だったので,PerlをCGIとして動かし,ホームページで使う掲示板やカウンター類を作成していた。
Perlは言語としてかなり癖がある書き方だった。文字列の比較が==でなくeqを使うとか,ほかにもいろいろあって,PHPを使うようになってからはPerlは一切使わなくなってしまった。今Perlを触れと言われても丁重にお断りすることになりそう。
Flash+ActionScript
当時はFlashがまだまだ元気でフロントエンドで動きのある部分はJavascript(ただまだHTML5は普及していなかったのでJavascriptだけでは限られた表現しかできなかった)もしくはFlash,みたいな感じで私もFlashにはかなりお世話になった。
JavaScriptにしろActionScriptにしろテキトーに書いても動く緩さが好き。変数をやれ初期化しろとか型があってないとかそういうことをうるさく言わないので書きたいように書ける。動的型付け言語万歳。
FlashやActionScriptで作ったのはいろいろ。タイピングゲームとか動画プレイヤーなども作ったし,ActionScriptで書いたコードはAdobe Air上でアプリとしても動かすことができるので,それを利用してコメントビューアとかAndroidの配信アプリなどもActionScriptで作った。
ただ,AndroidアプリをAdobe Airで作ることはできるにはできるんだけど,やはりJavaやCotlinなどネイティブのアプリと比べるとできることが限られてしまう。Airが用意している仕組みしか使えない。(一応ネイティブコードとリンクさせる仕組みはあるけど)ゲームなどならいいのかもしれないけど,スマホのカメラとかそういう結構深いところを触るアプリを作るにはちょっときつく,のちにストリーミングサイトの配信アプリを作る際はCotlinで作り直した。
PHP
Perlの次に使い始めたサーバーサイド技術がPHP。Perlよりも書きやすくて手軽に使える便利な関数なんかもそろっているのが使い始めた理由だったと思う。
PHPではいろいろなサイトを作った。私が作成したWebサイトはほぼすべてPHPを使っていた。友達に頼まれてショッピングサイトを作ったりちょっとしたクローズドコミュニティサイトを運営していたりした。
タイピングサイトのバックエンドもそうだし,オークション出品支援サイト,ポイントサイト,アフィリエイト用の比較サイト,ニコ生のクルーズログなどなど生んでは消えていったサイトの数々。
PHPは手軽に書ける反面,セキュリティに注意しないと簡単に穴が開くというのを学んだのが,サイトへSQLインジェクション攻撃を受けユーザーデータが流出してしまったとき。SQL分を組み立てるときにエスケープするのは基本中の基本なのに,古いコードでそれをしておらず,不正なSQLの実行を許してしまった。そしてサイトごとにDBユーザーを分けて,アクセスできるDBを限定していなかったので,他の運営している同じサーバーに同居しているサイトのデータにアクセスされてしまった。しかもなんとパスワードを平文で保存していたという大失態。
それを教訓にWebサイトのセキュリティに気を配るようになった。パスワードはハッシュ化して保存,入力データをバリデーションし,SQLはプレースホルダを利用。これは最低限。XSSとかCSRFなどにも注意が必要。Webサービスを作るときはついつい中身を作ることにばかり集中してセキュリティ対策とかがおろそかになってしまうことがないようにしたいと思わされた
そんなこんなでPHPを使ってこれまで小規模なものから大規模なサイトまで作成,運営をしてきたのだけどフレームワークを使わず一から素のPHPを使って組むことが多かった。そのためコードがひどく複雑になり,見にくくて仕方がない,私自身が見てもなんだかわからないひどいコードばかりを量産してきた。そんなコードごとサイトを売却もしているので,あれを引き継いだプログラマさんはさぞかし大変だっただろうなと。大変申し訳ございませんでした。
最近やっとLaravelを触り始めた。やはりフレームワークを使えるか使えないかでは使えたほうがいいということで。最初は動作も重いし,ファイル多すぎ,環境作るだけで大変。モデル?ORM?SQL文書いたほうが早くない?とか思っていたのだけど,使うメリットは確かにそれなりの規模のサイトならメリットはあるんだと思う。
ただ,フレームワークを使っていて気になるのが,裏で何が起きているのかわかりにくいということ。HTTPリクエストが来てそれがどう処理されてどんなルートをたどっているのかがわかりにくくなってしまっている。そのあたりが不透明になってしまうのがちょっと気持ち悪い。
もちろんそんなこと言ったらHTTPリクエストが来てPHPが呼び出される当たりの処理とか,さらに言えばHTTPレベルよりもっと下のTCP/IPプロトコルとかまで理解してコードを書いているわけではないので,結局のところどの層までわかっているかの問題なのかなと。LaravelやDjangoなどフレームワークを使う場合はフレームワークが処理してくれるGETやPOSTからの取り出し,セッションの発行,SQLクエリーなどは隠されたものとして扱い,それ以上の層だけ扱えばいいようになるのかも。まぁそれだけだとフレームワークなしでは何もできないというのもそれはそれでちょっと困るので基礎は大事だと思うけど。
Python
とまぁこれまでWebプログラミングはPHP一筋だった私だけどPythonも使ってみようと思い立って作ってみたのがYoutubeの登録者数をLINEで通知するチェッカーサイト。Pythonもかなり人気の言語だし,これからの伸びも期待できるのでここはひとつ習得しておくのも悪くないかと思い,試しに使ってみた。
Pythonの場合はWebに特化しているわけではないので結構オールマイティに使えるのがいい。いろいろなライブラリも豊富だし。WebフレームワークはDjangoとFlaskで迷ったあげくとりあえずはフルスタックなDjangoよりも軽量なFlaskを選択。
Flaskは日本ではあまり人気がないようで(圧倒的にDjango優勢)情報も少なめなんだけど,不必要にあれもこれも用意してくれるわけではないけど,追加ライブラリで一通りのことはできる。データベース操作は普通にSQL文書かせてくれるのもGood。
Comments