これから、どういうプログラムを書いていきたいか
こんにちは。shundroidです。
約1年ぶりの投稿です。
ブログ開始時は、すごくたくさん記事を書いていたのに、
素数の分布みたいな投稿頻度になってしまい、誠にすみません。
さて、今日で高校生は終わりです。(※書いていたときは3/31でした)
高校での3年間で、物の捉え方や、考え方、好み、楽しいこと、などが大きく変わったと思います。
プログラミングに対する姿勢も変わったと思います。
高校に入るまで、また高校に入ってからしばらくは、
プログラミングを、あくまで何か制作物を作るための手段と考えて、
そのためにいかにパフォーマンスが良いコードを、綺麗に書くか、ということを大事にしてきました。
ですが、最近は、プログラミングそのものを目的にしたい、と考えるようになりました。
今回は、そのことについて書こうと思います。
Webプログラミングに飽きてきた?
高校では、ディベートシステム作成、文化祭の予約システム作成、
文化祭のサイト作成、発表会でのデモアプリ作成、など、
あらゆる場面で、HTML/CSS/JavaScriptを利用した、Webアプリを開発してきました。
ただ、色んなものを作っているうちに、
やりたいことを形にする過程が単調化してしまい、
もう大体どう書けばよいのか分かってきてしまったので、
タイピングゲームのようになってしまいました。
思えば、Web界隈でプログラミングを始めてからは早7年が経とうとしています。
懐古厨みたいになってすみませんが、最初のころは、まだjQuery全盛期で、
デザインではbootstrapとかが流行っていた頃でした。jQuery UIとかもありました。
Ajaxが「すげー」みたいになっていて、HTML5がこれから、という頃でした。
FlashやSilverlightから脱却しようか、という流れになった所で、
まだできることは限られており、「幕開け」という感じだったでしょうか。
(YouTubeもFlashだったんです。今の子供たちは信じてくれなさそう)
徐々に、Web「アプリ」が盛んになってきて、Web界隈は大きく進化したと思います。
「アプリ」として設計をしやすくする、Angular.jsとか、knockout.jsとかを使うようになり、
その後node.jsの台頭で、browserifyが流行りました。
requireがクライアントでも使える!という事にワクワクしていました。
盛者必衰、browserifyが衰退してWebpackが流行り始め、
それを基盤として、Angular 2、React、Vue、と目まぐるしく流行が変化する時代になりました。
Webプログラミングでできることも、増えていきました。
node.jsによるサーバーサイドプログラム、
それを応用したElectronによるデスクトップアプリ開発、
(Firefox OSはあまり流行りませんでしたが)PWAによるスマートフォン向けアプリ開発、などです。
またそれらを支える、フリーで使えるクラウドサービス(Heroku、Firebaseなど)も増えていきました。
ですが、最近はどうでしょう。僕が受験期で離れていて流行に疎くなったからかもしれませんが、
安定期に入ってきたのではないかな、と思います。
大体作りたいものは、Vue.js+Webpackで、かなり効率的に、綺麗に作れるようになってしまいました。
数あるサービスを使えば、デスクトップアプリも、スマホ向けアプリも、サーバーサイドも、これ一本でできてしまいます。
それらが発表され、最初に使い始めたときは、
新しいことができるようになり、また開発スタイルが大きく変わることに、
とても感動し、ワクワクしたものですが、
もう慣れてしまい、あまり目新しさを感じなくなってしまったのです。
Webプログラミングは、何かを作るためのツールとしては、
非常に強力なものになったと思います。
ただ、自分にとっては、そこでのプログラミング自体を楽しみとするのは、
もう終わりなのかな、と思うようになってしまいました。
Webプログラミングで学んだこと
Webプログラミングを始める前の約2年間は、
Visual BasicやC#をやっていたので、そこであらゆるプログラミングの元となる、
基本的な考え方は身に着けることが出来ていました。
その後、JavaScriptで開発するようになって、一番学べたことは、
やはり、Mozillaで、皆さんと一緒に開発することができた経験だと思います。
Webプログラミングは、そのオープン性の高さにより、
他のプログラミングと比べても、共同開発との親和性が高いな、と思います。
皆さんと開発できたことで、それまでプログラムは動けばいいや、自分が読めればいいやと思っていたのが、
どう実装したら綺麗だろうか、などの視点から考えるようになりました。
疎結合の大切さや、オブザーバーパターンなどを最初に学びました。
そして、MVCやMVVMのメリットなどを、実際の開発を通じて知ることができ、
大規模なサービス・アプリを作ることが多いWeb系だからこそ、の、
大局的な構造の整理の重要さや、その設計・実装の楽しさを感じることができました。
また、一分野が、時間を経てどのように変化するか、を生で見ていくことができたので、
言語の成長過程や、どのようにライブラリが台頭してくるのか、などを体感できました。
そのほか、GitやGitHubにも慣れることができて、よかったです。
SwiftとPythonに触れた経験
受験が終わってからなので、最近ですが、
開発の都合で、SwiftやPythonに触れる機会がありました。
この2か月、swiftとpythonを触ることが結構多かったんだけど、マジでこの2つ対極的だった
— shundroid (@shundroid_p) March 31, 2021
swiftは、文法レベルで仕様どんどん増やしていくから、if case let
みたいな意味不明構文がたくさん、自由度低
pythonは、enumでさえライブラリレベル。metaclassすげえ。自由度高
かな
これらは、結構javascriptとは趣が異なっており、またそれぞれ性格が特徴的で、面白かったです。
そして、これは受験勉強の影響な気もしますが、
社会系の教科で、「思想」や「歴史」「制度」などを体系的理解の対象としてきたのと同様に、
「プログラミング言語」そのものも、体系的理解の対象として扱ってみたい、という気持ちが強くなりました。
その言語で書かれたもの、というより、
その言語自体が、どのような要請で設計され、どういう強みを持っているか、を、他の言語との対照の中で考えてみたい、と思うようになりました。
最近色んな言語に触れることが多いのだけれど,色々比べることでそれぞれの言語が持つ特徴とかが見えてきてやっぱ面白いね
— shundroid (@shundroid_p) March 30, 2021
ただ1つ1つをもっと味わいたいとも思う
最近は、ただ綺麗だ、パフォーマンスが良い、というだけでなく、
その言語の個性を生かしたプログラムを書こう、と意識しています。
metaclassとdecoratorと__から始まるプロパティを多用した、pythonらしいコードが書けたような気がして喜んでいる
— shundroid (@shundroid_p) March 31, 2021
「目的」としてのプログラミング
今までは、プログラミングを、何か制作物を作るための手段だと考えてきたわけで、
3年前には下のような記事も書いていたようです。(今読むと恥ずかしい)
確かに、プログラミングを初めてする時は、手段として身につけた方が学びやすいでしょう。
これは確実にそうだと思います。
ただ、プログラミング自体を楽しみたい、深めたい、というふうに、目的が変化したときは、
実際に何の言語で書くか、も重要だな、と思うようになりました。
そこで、 最近作ろうと思うものがネタ切れ気味なのもあり、
プログラミングを目的とし、制作物を手段とする、という風に、
目的と手段を反転させてみてはどうか、と思っています。
例えば、pythonでmetaclassを使うために、interface的なものを実装する練習をしてみる、といった感じです。
こうすることで、プログラミングの世界が広がるのではないか、と思っています。
まとめ
他言語との比較の上、そのプログラミング言語の固有性を味わう、という経験をしていきたい、と思っていますが、
これは、やはりWebプログラミング界隈で長い時間をかけ、その風土を体感してきたことが生きると思っています。
javascriptではこういう書き方は忌避されるけど、swiftだといいんだな、という風に、その体験を様々な発見の基準とすることができると思います。
この意味では、今までWebプログラミングをやってきて良かった、と感じています。
色々と貴重な経験をさせてくださった皆さま、ありがとうございました。
大学では、新しいプログラミング生活を過ごしていきたいです。
以下、今のところ迷っていることを書いておきます。
- 新しい言語を味わう、となれば、何を味わうのか:Python, Swift, Rustあたりを考えている
- 1つをじっくり味わうのが良いのか、それとも複数を広く味わうのが良いのか