コードリーディングのお供には Doxygen & Graphviz が良いかもしれない

2014.4.9

比較的規模の大きいソースコードを見る際、何らかの目的を持った上でソースコードを読み始める。
目的の粒度は大なれ小なれ「コードのどこに着目するか」という疑問は必ず生じる。

パズルも完成形の絵柄を知らずに組み立てるのと 予め出来上がった後の形を知った上で組み立てるのとで 完成の時間が変わってくるように、ソースコードもその全体の形ができるだけ見えた方が良い。

とはいえ、数千行~数万行のコードを相手に 自分の手で一つ一つのクラスの役割や関連性を整理するのも得策ではないので、ここは一つ先人の知恵を活用した方が良さそう。

ということで、今回はソースコードリーディングのお供として活躍してくれるドキュメント自動生成ツール「Doxygen」と、構造体やクラス間の関係を図で出力してくれる「Graphviz」を紹介。
プログラミングの勉強中に何かの本のサンプルコードを読み解く上でも十二分に力を発揮してくれるので強くオススメする。

(続きを読む…)

『実践テスト駆動開発』を読む(2) – コード内に登場するツールの概要まとめ

2014.4.7

本書における概念的な部分のおさらいは終わり、ユニットテストを書きたくてうずうず。さあ、いよいよコードを書く段となった。

突如として現れる沢山のツール群。

・XMPP
・Openfire
・Smack
・Swing
・WindowLicker

ぺちぱーのぼくにはさっぱりわからない。
概要は書いてるけど、あまり詳細には解説されていない模様。
Swingに至っては「いやーまさかこのご時勢Swingも知らない人間なんていないだろうし、解説なんてしてもページ数の無駄だよね!え?わからないから詳しく知りたい?ggrks」といわれる始末(超解釈)。

何はともあれ本来の「テスト駆動開発の学習」という目的に影響が出そうだし、この記事ではそれぞれのツールの関係を整理し、解説していくことにする。

(続きを読む…)

『実践テスト駆動開発』を読む(1) – Openfireまわりの設定

まずはインストール

インストール用のファイルはここ。
http://www.igniterealtime.org/projects/openfire/
因みにこの記事を書いている時のOpenfireのバージョンは3.9.1。

インストールしたら起動。
なお、Windows環境を使用していてインストール時に「java.io.~~~」みたいなのが出てファイル見つからないよって怒られる人は一旦Openfireを終了して「管理者として実行」を試してみるといいかも。
Database Configuration関係で怒られる場合はアンインストーラでアンインストールして、C:\Program Files (x86)にOpenfireのフォルダが残っている場合はそいつも削除して再インストールを試してみる。

(続きを読む…)

プログラミング言語の違いは時代の変遷と密接に結びついている

2014.4.1

「PHPとかRubyとかあるけど、実際プログラミング言語って何が違うの?」

と聞かれた時、何が違うのかなーとちょっと真面目に考えてみた。

時代の変遷と結びついている

色んな言語があるけど、究極的にはここに帰結するんじゃないかなあと若輩者ながらに思う。

今日、RubyがどうしてPHPに比べてこれだけ流行っているかと言えば、Rubyやその周辺のツールが IT産業が発達した今の時代と親和性が高いからだよねという話。

例えば IT産業が発達して 新しい技術やサービスが目まぐるしく登場している今、如何に速いスピードで質の高いサービスをユーザに提供するかが課題になった状況下において、継続的インテグレーションアジャイル開発といった、その時代におけるニーズと親和性の高い概念の影響を強く受けたRubyまわりのツールは、Rubyを世の中に知らしめる上で大きな役割を担ったと考えられる( 例えばRailsで言うと、マイグレーションやscaffoldなんてその最たるものだし、ユニットテストを全面的にサポートしている )。

ツールに限った話ではなくて、Ruby自体が直感的に書きやすい言語を目指していて PHPと比べて比較的書きやすいと言われているのも流行っている理由の一つだと思う。ただ、Ruby自体が1993年から存在している言語であるということを考えると、Railsとの出会いを踏まえて上記のように時代が必要とする概念や哲学と親和性を高めていったのがやはり大きな理由なのではないかなと感じた。

 

古い言語はなぜ取って変わられるのか

大企業がその古い体質を変えるのに苦戦するように、言語パラダイムやフレームワークもそうそう簡単に方針を変更できないし、変更に際して苦戦を強いられる( PHPが3系から4系にシフトした時のように )からだと思う。

ただ、時代のニーズ云々とはいえど、人工知能を扱うようなLISPとかLinuxとかその他のシステムの元にもなっているCとかそういった血統を引く言語やツールが多いような言語は、一回の変遷が起こるサイクルも長いから、一般的なプロダクトのライフサイクルを考えると  こうした言語は 例え時代の変遷スピードが高速であるにせよ、今後もしばらく残り続けるだろうなあと思う( だって、もしそういうシフトが起こるとしたら そのOSやミドルウェアが「全て」影響を受けることになるのだから。もし無理に「スピード」で置き換えようと思うと、従来のシステムを使用している自動車から交通インフラ、政府機関、日常生活、何から何までに渡ってカオスをもたらす結果になるだろうと思う )

 

今後どんな言語が出てくるだろう

小型のハードウェア、様々なウェアラブルデバイスが登場する今、そのうちハードウェア関連の処理と親和性の高い言語が登場してくるんだろうなあと思う。

今で言うと CやC++、Pythonなんかが使われたりしているけれど、そのうち ハードウェアの時代のニーズを如実に反映した概念に基づくプログラミング言語がオープンソースで登場してくるのはそこまで想像が難しくない。

社会人プログラマ1年目で学んだこと20個(プログラミング言語・ツール・概念など)

2014.3.31

今日で社会人一年目が終了するので、振り返りも兼ねて一年目で学んできたことを記事にしようと思う。

そのついでに今まで勉強してきた技術書(一部勉強中の本・これから勉強する本含む)も参考文献として載せておく( 飽くまで自分のチョイスなので「いやーこの本はやめといた方いいよー」みたいなのも中には混ざっている可能性があります。購入を検討する際はWeb上でのレビューも確認の上で )。

また、「これらを全部やればレベルが上がる」類のものではないので注意してください。特に 一部時代が非常に古く、実用でほぼ使うことが無いものも含まれています

おしながき

  • JavaScript
  • Canvas
  • CSS3
  • SCSS, Compass, Grunt
  • OOCSS
  • W3C標準
  • CentOS
  • VPS
  • Ruby / Ruby on Rails
  • REST
  • Zend
  • C#
  • C
  • アセンブラ
  • ソースコード管理
  • パフォーマンスへの意識
  • 大規模サイトのインフラ構成
  • 品質への意識
  • ツールや言語におけるバージョンの違いに対する意識
  • 外に出ていくこと

「あれ?何か途中で時代逆行してない…?」とか言わないで下さい(´・ω・`)

(続きを読む…)