プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

自分で書けるプログラムは自分で書こう


定番アルゴリズムを徹底理解! - ソートとサーチがすべての基本

ソート(並べ替え)やサーチ(検索)などの機能は今では標準のライブラリとして提供されています。実用的なプログラムを作るときにそのものずばりをいちいち書く機会は少ないかもしれません。しかし定番のアルゴリズムは,様々に形を変えて普段のプログラミングに登場します。


 解説を読んで仕組みがわかったら,ぜひそれをプログラムにしてみてください。読んだだけではプログラムを書けるようにはなりませんし,プログラムを書いてみて初めて,実は十分に理解できていなかったと気付くことがよくあります。しかもアルゴリズムは特定のプログラミング言語に依存しないので,一度身に付ければ,後でどんな言語を学ぶ場合でも役に立ちます。


便利なフレームワークやIDEは生産能率を高めることが出来ますが、はたして作られたプログラムの品質はどうでしょう。生産性とバグが少なく性能の高いプログラムは必ずしもイコールではありません。逆に気楽にコードが書けることで、むしろバグの混入度を高めてしまい、処理も冗長になりがちになる傾向があるようです。


最終的にはプログラムの品質はそれを作ったプログラマの技術力に比例します。その技術力とは、コードを書く時にどれだけ気を使えるかということです。想定外の値が来た時の処理は?APIがエラーを返したら?メモリが足りなくなったら?処理に時間がかかりすぎた時はどうする?等々。優秀なプログラマであればあるほど、きめ細やかな処理をするコードを書くものです。そして、それはやはり多くの体験から培われていきます。


そういった(多くは苦い)体験は特に「不便な」環境から得られることが多いのです。ライブラリを自分で用意しなくてはならない。簡単にアプリがクラッシュし、原因究明も難しい。メモリリークは自分で探す。そのような環境下でのプログラミングは当然慎重になります。要所で値の範囲をチェック。かなめとなるライブラリは確実に動くことを目標に。ASSERTやデバッグ用のLogを埋め込む、等々。信頼性の高いプログラムコードは、多くの経験から作られています。


実際に訓練をするには、自分でライブラリやクラスを設計し、何人かの人に使ってもらってフィードバックをもらったり、耐久テストをしてみるといいでしょう。可能であればカーネルモードのドライバやOSカーネルそのものを書いてみるのも、よい経験が得られると思います。現場ではなかなか難しいかもしれませんが、自分で書いた経験は必ず役に立つはずです。


プログラミングが出来る人なら、やっぱり深いところが知りたいですよね。出来る限りハードやOSに近いところを目指すのがポイントでしょうか。Web ServiceよりSOAPSOAPよりSocket。SocketよりTCP/IPスタック。TCP/IPスタックよりEthernetドライバ。深くなればなるほど自分のレベルが上がっていくような、そんな気がします。