読者です 読者をやめる 読者になる 読者になる

ami_GS's diary

情報系大学院生の備忘録。ネットワークの勉強にハマっています。

毎日コードを書いたよ

Github 日記

はじめに

こんにちは。研究楽しいマンです(^q^)。
さて、以下の通り、GitHubの連続コミットが1年達成したのでレポートします。
f:id:ami_GS:20150124101938p:plain

実際、1年間コミットし続けた方は僕以外にも沢山いらっしゃいますが、プログラミング能力がほとんど無い状態からの連続コミットは僕が初めてだと思います。
その視点で自身が得たものをツラツラと書いていきましょうかね。

そもそもなんでこんな…

なんでこんな面倒くさいことしたのか、疑問しか無いですね。
理由は2つあって、

  1. 毎日コードを書くこと - snowlongの日記 この記事に触発された
  2. 自身の能力を高め、尊敬する技術者さんに近づきたかった

からです!!

プログラムを書き続けるというのは実装力を向上させるだけかと思うかもしれませんが、コーディングを通してコンピュータサイエンスの知識の習得にも繋がるのです!

1〜100日

この時期はいろいろと試行錯誤をしており、git、emacsPythonの様々なモジュール、Raspberry Piの使い方等を勉強していました。
gitなんて、

  1. git add * して、
  2. git commit -m "commit message" して、
  3. git push origin master

するだけでした。
ほとんど意味がわからずにおまじないコマンドを打っているだけでした。


Pythonのモジュールの練習ではsocketに楽しさを感じ、画像、音声データの送受信をしていた事を思い出します。
この当時、たまたま研究室の先生がRaspberry Piを買ってきたのでひたすら弄くり回していました。
Linuxをほとんど触った経験が無く、試行錯誤の連続で良い勉強になりました。
ネットワークやソフトウェアの設定を全て手作業で行ったのでとても苦労しましたが、その分成長したと感じています。


101〜200日

この頃から具体的なプログラムを書き始めたと思います。

  • Raspberry Piを使った遠隔カメラ
  • キャッシュ、フィルタリング機能付きのプロキシサーバ
  • 信号処理

これをネタに企業のインターンに応募した覚えがあります。
プロキシサーバの受けが良かったぽいです

201日〜

企業のインターンでプログラムを書きまくり、さらにそこで得た知識からプログラムを書きまくりました。
具体的にはプロトコルの仕様を読んで実装してみるというのが多いです。(HTTP2、MQTT等)
これがほんとうに楽しくて、プログラミングだけでなく、ネットワークの知識がゴリゴリ付くのが実感できました。

gitも上手く使えるようになり、上記おまじないの意味がわかるようになったり、rebaseやらmergeやら、バージョン管理の恩恵を受けれるようになりました。

結局何ができるようになったの?

適当に言うと、
「なんとなくできることが増えた」
と思います。
固く言うと、「基礎力がついた」ですね。

例えば、
Q, TCPUDP)で通信するときはどうするんだったかな?
A,

socket.socket(socket.AF_INET, socket.SOCK_STREAM) # TCP

でソケット開いてbindしてlistenしてacceptでアクセスを待ち受ければおk
のように、簡単に答えられるようになります。

勉強するものによりますが、特に低レイヤの技術であれば、どの言語でも似た方法の解決法が見つかるんですよね。
例えばGolangであれば、
A,

serv, err := net.Listen("tcp", "address:port")

してserv.Accept()でアクセスを待ち受ければでおk

というのは調べればすぐにわかりできますし、Pythonでツラツラと書く必要がある部分は内部で完結している事も理解できます

基礎力がつくと単純に問題解決にかかる時間が減りますし、新たに調べる事の足がかりになるので、調べる事の時間短縮にもなります。これは大きい。

最後に

まとめると、

  • コードを書くと、コンピュータサイエンスの知識が付く(定着しやすい)
  • 基礎力をつけると、新たな技術の学習コストを下げることができる
  • 新たな技術を勉強する事への抵抗が減る(慣れる)

これらが大きいです。

技術を勉強し続けると、今まで”おまじない”でやっていた事の理解が出来ますし、さらに新たな技術(上記Golangしかり)に対する学習コストは線形的(指数関数的?)に減ると思います。

皆さんも毎日コーディング計画やってみましょう!良い勉強になると思います!!