どうやってプログラミングを学んだか振り返る

フォロワーがやってて楽しそうだったので。

どうやってプログラミングを学んだか振り返る - 一年中こたつ出てる
最近、プログラミングスクールについて話題になっています。 自分も今であれば、 プログラミングスクールに通わず、プログラミングを学ぶ方法 のようにスクールに通うのではなく、ProgateとN予備校をおすすめするかなぁと思います。 ただ、こう勉強していくのがいいよ、という話はよく目にするんですが、実際にどう学んできたかみたいなところを書いてる人が少ない気がして。 いい機会なので、自分はどうやって学んだきたか、をちょっと振り返ってみようと思いました。めっちゃ長いです。
どうやってプログラミングを学んだか振り返る - lifinaのブログ
ここ見て、楽しそうなので自分でもやろうと思いました。 kxn4t.hatenablog.com

この辺。

普段・今のスタイル

趣味プロが激しいのでそこそこ実質勉強をしているようなことになっていますが勉強の自覚は一切ありません。むしろ勉強は苦手だしもしかしたら勉強はしていないのかもしれない。時々GitHub Trendingで好きな言語・よく使う言語に絞り込んで流行を追うようにしています。ミーハー精神です。その他は今使ってるフレームワークの最新バージョンを追って新しい機能を積極的気に試してみたり、Twitterのエンジニアの方のツイートを流し見して便利そうな機能を趣味プロで使ってみたり、業務に取り入れたりなどをしています。プログラミングだけでなくUI/UXにも力を入れたいのでPinterestやDribbbleを見て良さそうなUIを探したり真似して実装してみたりしてます。
思考としてはこういう技術があって、これを作ってみたら面白そうだな、というのが大半です。

書籍などはあったほうが良いなとは思いつつもあんまり購入したりしてないです。なぜか。

ちなみになんですがプログラミングをすることが手段より目的と化してる部分があるので本当はプログラミングやめたいです。それでも楽しいからやってしまうのだけれど。

sunya9 - Overview
Frontend & Android <3. sunya9 has 60 repositories available. Follow their code on GitHub.
現時点でPrivateなリポジトリ含めて70ほど。今もメンテナンスしてるものは極少数です。

プログラミングし始めたとき

小学生・中学生くらいのときは作ってみたいものがあったのでそれが目標になってました。自分は新しいものを触れるときは形から入るほうが得意だったので、仕組みみたいなのは最初から理解せず、コピペして動くところから始めてました。フローとしては:

  1. やりたいことを検索する(ここでの検索力は培えば培うほど役に立つ)
  2. 似たようなサンプルコードを見つける
  3. そのままコピペして動かす
  4. 動いたやったー!✌
  5. 自分の本当にやりたいことに合わせて弄ってみる
  6. (やりたいことを実現できたかはともかく)どうしてこうなったのだろう・動くのだろうを仕組み・仕様を交えて理解してみる

みたいな感じです。最低限表面上のコードは理解したほうが良いとは思いますが、それ以上の言語レベルの仕様だったり仕組みだったりというのは深くは追求しなくも大丈夫だと個人的には思います(もちろん理解できたら発見はたくさんあると思いますが)。

いくつかの言語を触ってみると実は表現の仕方は違えど基本的にやろうとしていることやインターフェースは同じだったり似通ってたりすることに気付きました。ここら辺のあたりがつけられるようになると新しい言語を触り始めたときの抵抗感が薄れます。

自分はとにかく仕組みから理解するボトムアップ形式より形から入るトップダウンのほうがモチベーションを維持しやすかったです。「とりあえずこうやって表現する」みたいなのを念頭において作業してたので深く追求しすぎずにプログラミングに専念できたみたいなところあります。

特に検索に関しては理解が深まるとキーワードの解像度をあげることができ、より小回りの効いた検索が出来るようになっていったと思います。

プログラミング歴とか

本題からはそれる昔話です。学び方というより主に私の歴史です。長い。私が好きな人向け。

小学生時代

遡ること小学生時代ですが、4年生でPCを触り始め、6年生くらいの頃にはウェブサイトを作ってみたいと思っていました。うろ覚えなのでもしかしたら作っていたかもしれません。きっかけと言えば家にホームページの作り方みたいな本が転がっていて、このとき既に自分で何かを作って公開することに憧れていたのだと思います。また、ゲームが好きだったので自分がプレイしているゲームの攻略情報とか発信できたら楽しそうだなと考えていました。そもそもHTMLはプログラミングではない…というのはさておき、ダイナミックHTMLという概念があるのは知っていましたがJavaScriptには触れてなかったです。
では実際のプログラミングはというとどういうわけか小6にActiveBasicという言語に出会い、コマンドラインで動くプログラムをコピペして試して遊んでました。本当にHello worldを表示させるくらいだったと思います。

余談ですが2000年代の企業がゲームの攻略情報をwebで扱う前の個人の攻略サイトが好きでした。ユーザーからのTipsだったり今思えばしょうもない小ネタだったり、そういうのが好きだった(インターネット老人)。レンタルサーバーにInfoseek使ったり、ブログにFC2ブログ使ってました。
ツールはFFFTPとかYokkaSoftさんのUnEditorとか。懐かしいですね。

中学生時代

小学生の時のActiveBasicはCLIレベルでしたが、ActiveBasicでWindowsアプリケーションを作成出来たのでWin32APIを触るようになります。ところでなぜActiveBasicかといえばあの時代に無料かつ簡単に環境を構築できるものがなかなかなかったからだと思います。今の時代は無料で品質の良いものたくさんあり簡単に見つかる気はするので環境構築簡単そうで羨ましい。
ちょこちょこ形になりそうなアプリケーションは作ってて、巷にあるフリーのソフトを模倣した上でオリジナリティをもたせたりしてました。とは言っても大したものではなく

  • メモリを開放するやつ: これは自分のアプリでメモリを大量に確保して解放することで…みたいなロジックだったはずだけど詳しいことは忘れた🤔
  • ランチャーアプリ: ショートカットキーでウィンドウを表示・コンボボックスに登録したアプリケーションが並んでるのでタイプしてEnterして起動
  • FLVからMP3を抜き出すやつ: これはちょっと大したことあるやつかも…?今FLVから仕様を見返すと大したことはやってないのでそう思ってしまいますが、当初は英語の仕様書をGoogle 翻訳とかに投げて読んでたと思います。今と違って翻訳の精度はあまり良くなかったのでふんわりとしか理解できてなかったと思う🙃

最後のやつは未だにVectorに載ってたりします。掲載してる意味はほぼないのでやめても良いのですが、なんとなく思い出があるので載せっぱなし。ちなみにVetctorでそれっぽいツールを載せるとWindowsが100%系な雑誌から掲載してもいいですかみたいなのがきたりします。私は嬉しかったので喜んでOKしました(どういう項目か忘れましたが端っこに載ってました)。ちゃんと献本ももらえました(嬉しい)。
そもそもFLVを抜き出したいと思ったのがニコニコ動画にはまっていたからです。どんな音声を抜き出して聞いていたのかはアレですが…。巷に同様のフリーソフトは溢れていましたが(中3の頃でしたがCraving Explorerみたいなのあった気がする、本当か?)、このときもやっぱり自分でやってみたいからという理由でゴリゴリやってました。おかげで受験は失敗したんですが。

高校生時代

高1の頃はあまり思い出せないのですが、2年の頃はAndroidが世の中でメジャーになり始めたのでDesireHDを購入しました(写真立て付き)。ここでもやはりアプリ作成欲があったのでAndroidアプリ開発をするようになりました。この頃はTwitterにドハマりしてたのでTwitterクライアントを作ってきゃっきゃしてました。ちなみに続編は多分出ません。xsTus…?はて。SNSクライアント作りが嫌いになったわけじゃないのでpnut.ioのスマフォアプリ、Gammaは存在しますのでそちらを使ってくれると喜びます。使ってくれるというかそもそもある程度人がきてほしいSNSではあるんですが。

Gamma - Apps on Google Play
Gamma has below features. - View each stream.- View profile.- Support multiple accounts.

(ここまで書いて同じような文章を以前も書いたような気がするんですが、大丈夫ですかねこれ)

高校自体はちょっとばかしキリスト色の強い普通高校でした。理系クラスに進学したこと以外は学校にプログラミングに関係ありそうな概念は基本的になかったです。部活も軽音楽部の幽霊部員だったので…。

大学時代

1年の余白が有りますが大学は情報系の学部に進学しました。人生の中で始めて情報系らしい要素です。大学で何学んだかというと、ほとんどの講義がヌルゲーで(本当か?)(これは自分が入った大学のレベルの問題です)片手間で済ましてる嫌なやつだったので(ラップトップ触れる講義は講義中趣味プロしまくってました)、あんまり具体的に何を学んだかを覚えてない・定義できないのですが、信号処理とか電子回路とかはあまり触れてこなかった概念だったので苦労しました。ネットワーク・マルチエージェントシステムとか今流行りの人工知能の基礎の基礎みたいなのもやってこなかったのでそのへんも新鮮でしたね。色々雑にやって若干後悔してなくもないですが。もっと言えば統計とか線形代数学のようなベースになるような部分はもっと真面目にやりたかったです。いや、真面目にやってましたが普通に難しくて心折れそうでした(落単は免れた)。

よく文系だったから…みたいなことを人が言ってると独学塗れの自分は文系理系あんまり関係なくない…?とか一瞬思っちゃうときがあるのですが、こう書き起こすと大学でも情報系の技術は一通り勉強してるんだなって(小並感)。

部活のようなものではwebアプリケーション作って遊んでたり、競プロやってたりしました。今は全く競プロやってないです(辛い)。

1社目

院試をやめ大学時代にバイトとして入った会社に正社員として雇用してもらいました。主にフロントエンド(HTML/CSS/Vue)触ってましたが、Railsもちょこちょこやってた感じ。後半はAndroidアプリ開発(Kotlin)、Nuxt、Scala(ちょこっと)みたいな怒涛な感じになってました。基本SIerの会社だったので降ってくる案件ごとに要求される知識が違ったので、そこが楽しかったり辛かったです。余談ですがクラウド周りはAWSと諸事情でAzureが多かったです。自分はほぼ触りませんでしたが!

2社目(今)

ドメインが服と限定的になりましたが、服と言っても服(概念)みたいな感じでクソ幅広く、え?クラウドがほぼGCPになったこと以外は引き続きフロントなので仕事として扱う技術が変わったみたいなのはあんまりありません。React触るようになったくらいか。まだ半年だし服のことは何もわからん。


めちょめちょ長くなった…。ところで最近の興味はモーショングラッフィックスとSVGアニメーションです。題材・目標があればやれる気はするんですが素のプログラミングに比べて目標設定がしづらい…。After effectsとLottie使って…みたいなのもやりたいんですがAfter effectsと動くぱしょこんどこ。

人類習得が早すぎて時々自分は即追い抜かれるんじゃないかという危機感があります。それがモチベーションにもなってるし、実際には積み上げてきたとされるバックグラウンド知識がそこそこあると信じたいので表面上抜かされても自分は負けていないと思いたいところ(勝ち負けの話か?)。この辺は地頭の良さにも繋がりますがそこを突かれるとコンプレックスが爆発してしまうのでこの話はここで終わり。人類皆私より聡明。