週刊人生詰んだマガジン

フリーランスフロントエンドエンジニアTinyKittenのブログ

自分のプログラミングの学んだ道

f:id:tinykitten:20200121004416p:plain

開発中のSNS「Snovel」

satoru-takeuchi.hatenablog.com

mizchi.hatenablog.com

なんか知らないけど自分のプログラミングの履歴に対して書くのが流行ってるらしいので便乗。

自分が最初にコードを書いたのはだいたい小学3~4年生のCかJava(その後普通に使ったのはC#)だったのでまあそれがプログラミングと言って良いのかわからないけど、プログラミングを学び始めてから(中高生の時はほとんど何もしてなかったけど)10年位経ってる気がする。

その上で躓いたこと、学んだことを綴っていきます。

tinykitten.hatenablog.com

上記とかぶる点が少々あるかもしれないけど上記の記事はあまり読むのをおすすめしないので気にせず書いていきます。

ちなみに、私はJS/TS実務2年(前々職?社内ニート1年含む)くらいしか能力のないヘボヘボプログラマです。

 プログラミング歴

先述したとおり初体験は小学3年か4年。ここだけ見るとめっちゃ色んな意味でマセてんな。

  • 小学3年か4年:
    Cの本を親に買ってもらい、数分読んで飽きて読まなくなった。Javaもネットで勉強しようとするが、よくわからないのでさわりだけ読んでやめた。このJavaの勉強をしていたときに学習サイトの運営者に質問のメールを投げたら「小学生なのにJavaの勉強ですか?すごいですね」と返事が帰ってきた。なんとなく得意げな気持ちになった。どうでもいい・・・。
    その後(多分小4か小5)Visual C# 2008? Expressを使ってC#を勉強し始めた。その当時は「木の葉」という名義で活動していた。今となっては色々ひどいコードを書いてたと思うが、当時にはそれなりに一日ぶっ続けでやっても飽きないレベルに楽しかった。当時不登校だった自分には十分すぎるおもちゃ。メモ帳、電卓などを作ってた。まだベクターに載ってるのがなんとも言えない気分にさせられる。
    ただこの頃は本当に何も知らなくて、ライブラリを入れるという概念自体自分にはなくて(多分当時はNuGetとかなかったと思う)、全部独自実装でやってた気がする。動けばいいじゃん!!的なノリでコード書いてた。

www.vector.co.jp

  • 中学生・高校生の頃
    これと言って何かをしていた覚えがない。ただ高校生の時は友人と動画制作とかしてた覚えがある。Minecraftが当時流行っていて(今もか?)そのときにJavaとか勉強してたら色々変わったかもしれない。
  • 専門学生の頃
    自分よりPCができる人と初めて出会った頃。この頃はJSのCordovaとかで遊んでた。何をするにも地元群馬の温水に浸かった精神でいてやるやる詐欺で、持病の過眠的なものでいじめの対象になってたりしてた。いけないけない。これはプログラミングの記事。
  • 社会人なりたて
    門中退後病気療養を経て地元の会社でバイトとして入った。そこではSwiftとかUnityとかを使ってゲームアプリとかスマホアプリを作る会社だった。そこで設計書書いてたりとかNode書いたりしてた。これと言った学びもなく次の会社へ転職。
  • 青山のスマホアプリ開発会社に転職
    ここでは研修でSwiftとかを勉強しただけで退職した。持病が悪化したりなんとなく雰囲気が合わなかったのもある。
  • 神戸のWebフロント開発会社に就職

    正直、自分のフロントエンドエンジニアとしての基礎を築いたのはここが最初。
    この会社で何があったかは前記の記事を見ていただくとして、Angularを専業でやってる会社だった。
    Angular?SPA?なにそれ?美味しいの?ってレベルの人間を採用したのもスゴいと思うが、そこでどんどんフロントエンドエンジニアとしての技術を勉強・吸収していった。
    勉強会のためなら旅費全額支給してくれる会社だったので、社長と一緒にいろんなイベントに出たりしてた。
    TypeScriptを触れたのは初めてだったし、フロントエンドの領域を触れたのも当時が初めてだった。
    いろいろな刺激があった。自分の書いたコードがどのデバイスでも動くのがとても嬉しかったし、Webの可能性を再発見した。
    あと、当時いまのTrainLCDの原型となるMetroNavigatorっていうアプリのプロトタイプを作ってた。MetroNavigatorは、東京メトロオープンデータを用いた地下鉄乗車支援アプリ。乗り換えアプリとも言ってたけど最終的に乗り換え用のデータは取れなかったので断念した。バックエンドのAPIの設計思想は今でもほぼ同じで、言語が当時Nodeで今はElixirってくらい。この構想がなかったらStationAPIもなかったし、TrainLCDも作ってなかったかもしれない。
    当時のセッションがあるので興味があったら見てください。

youtu.be

  • 独立し、まずは地元のIT系デザイン事務所にて働く
    ここではいろんなことを任せていただきました。
    あまり大きな声では言えないですが、SPAフレームワークを適材適所に使ってシステムを構築したりしていました。
    この頃から開発中のSNS「Snovel」のプロトタイプを制作して友人にテストしてもらったりしていました。
  • 都内でほぼフルスタックエンジニアとして働いている
    こちらもあまり大きな声で言える事はありませんが、Angular+Ionicを使ってスマホアプリ開発をしつつ、Ruby on RailsAPIを書いてます。
    Ruby on Railsを実務で触ったのは初めてなので色々戸惑うところはありますが、せっせと勉強しながら仕事しています。
    なんとなく必要そうな雰囲気があるのでRustも勉強し始めたりしています。

言語別に詰まったこと

  • C/C++
    殆どやってないからわからんけどとりあえずポインタとかメモリ管理とかが難しかった覚えがある。
  • C#
    大昔に触った言語で自分が理解してないことすら理解してなかった気がするのでよく覚えてないが、意味不明だったことは覚えててる(適当)
    Unityとかそのうち使いたいと思ってるので触ると思う。
  • Java
    長ったらしい文法は逆に自分としては好きで、それっぽいものを書いてる感があって好き。そんなことは置いといて、Java最初触ったときはインターフェイスとかクラスの意味がよくわからなくて詰んだ。そもそも当時はオブジェクト指向自体ろくに理解していなかったからかもしれない。
    Javaデザパタも網羅しているわけでもないし、今度まとまった時間があったら勉強してみたい。
  • JS
    Promiseとかない時代に勉強したので、Callbackの概念をまず理解する必要があった。これが正直色々理解に難しかった。
    かといってPromiseに関してはPromise<T>をTにする方法を知りたくて1日潰したが、当時にはそんな方法はなかった(async/awaitがない時代)
  • TS
    動的言語のほうがキツいと思っていたので型があったほうが好都合だった。ただ、Genericとかは使い始めてから1年くらいしか経ってないし、Genericを使う上での嬉しさを当初あまり理解していなかった。
  • Go
    書き方が少々怪訝だったけど、慣れてしまえばスイスイ書けた。わからないのは他の言語にない書き方だった気がする。
  • Elixir
    StationAPIをPhoenix Frameworkで書いた程度なのでほとんどわからないが、これも全く他の言語とパラダイムが違うのでもっと勉強しないとスイスイ書けるようにはならないと思う。
  • Rust
    思想がとてもいいと思う。が、コードの書き方がちょっと特殊なのと新しい概念が多いので今勉強中。難しい・・・。

学んだこと

適切な粒度を心がける

個人のコードとは違って、仕事のコードはいろいろな柵がまとわりつく。その柵に対しての銀の弾丸はないが、適切なコードや仕様の粒度を心がければテスタブルになると思うし、変更にも強くなるはず。

テストを書こう

個人で書いてるコードならまだしも、仕事で書いてるコードはバグる影響範囲が広くなる。テストを書こう。テストを書けば、よりきれいでテスタブルなコードを書く習慣ができると思うし、本当に仕様に沿ってるか確認しながらプロダクトを完成させることができる。

趣味でコードを書く重要性

趣味でコードを書かないエンジニアをdisってるわけではないですが、やっぱり趣味でもなんでも素振りしておけば要領がわかってくるのでおすすめします。

おわり

割と書き出してみるといいものだね