2003-12-15

Finding Nemo

泣けるという前評判とは裏腹に、まったくそれっぽい感じがしなかった。むしろアメリカっぽい、からっとした明るさがすごく目についた。というか単純に面白かったって感じだ。ほのぼのとした明るい話だと思う。「かわいい子には旅をさせよ」ということですな。

OKI MINI KEYBOARD 続き

やっぱりポインタの動作が実に半端になってしまう。標準のドライバで使うのでマウスを使う場合は軽すぎ、ポインタだと重すぎる。特にピクセル単位の動きに慣れた TrackPoint 使いにはこの半端な動きはけっこうつらい。ウィンドウ位置の微妙な調整にはほとんど使い物にならない。

Home, End が邪魔。カーソルキーの辺りが急に狭くなりすぎるので余計にそう感じる。通常のキーがフルキーボード並みなのにここだけ急に小さいので、指が戸惑う。慣れるだろうが、ちょっと差がでかすぎる気がする。

レビューどうしようかな

plat online に書こうと思ったら会員にならないと書けないことが判明。まー当然か。

急に面倒くさくなってきたので説教講座の方に載せようかななどと思い始める。最近また説教講座の改修を進めているのだが、いつになるのかメドが立ってないのでちょっとつらいかなぁと思わなくもない。ついでに Space Saver のレビューも書いちゃおうか、などと構想だけが膨らんでいく。

クラス設計のノウハウ

がほしい。処理を書きながらクラスに行ったり戻ってきたりするやり方でとりあえず書けたが、できあがって嬉しいってだけでかなり効率は悪かった。

で、今度はクラスをもっと楽に作れないかな、と考えたわけです。UML のツールの Dia は Win32 だとバシバシ死ぬのでこれまた困りもの。X の設定なんか分かんねーし。本を読むかなぁ。開発と UML の本は一応持ってはいるんだが。でもちょっとこれ読んでる余裕は今ないしなぁ。

うーん。

自分の考えていることをインスピや文書で整理するノウハウは身についていると思っているが、開発系の設計能力はかなり貧弱ですなぁ。

[2007-07-31 追記]あとから検索で飛んできた人と昔の自分のためにツッコミ。

「設計」能力だけ抜き出して磨くのはたぶん無理だと思う。少なくとも上で書いているような「クラス」は実装レベルのクラスであり、これは実装してみないと分からない部分がまず間違いなく残る。設計上はこっちの方がきれいなように見える1が、実装上は言語の機能やパフォーマンスなど様々な制約でこっちの方がよい、という事態はよく起きる。2

図を書く練習で図の扱いはうまくなると思うが、実際の設計は結局のところ動くものをどれだけ書くか、うまくできているコードやドキュメントをどれだけ読むかという泥臭い方法で学ぶのがいちばん確実だと思う。あるいは先輩などに教えてもらったりすることは可能だが、文章も絵も自分でかいてみることなしにうまくなることがないように、プログラムもシステム設計も自分でやってみて失敗することなしには恐らく上達しない。

プログラム言語がどれだけ楽に習得できますよと言われても、UML がどれだけ共通語としてコミュニケーションを促進しますよと言われても、それだけで出来上がるものがよくなることはないので、安心してダメクラスを作って怒られたり反省したりすればいい。

もう一つ。自分でコード「も」書く人間にとっては、恐らく設計のノウハウよりも変更に強いコードの書き方のノウハウの方が大切である。3だからまずコードを変更するテクニックを学ぶべきである。wrapper を書いてインターフェイスを変更する、あるいはインターフェイスを変えずにリファクタリングする、長いブロックを短くする、分かりにくい変数名を付け替える、これらの地道な積み重ねはのちに効いてくるはずである。そして小さいコード、オブジェクト指向、テストの自動化とリファクタリングについて学び、絶対にこれらを実践すべきだ4。ダメなコードは勇気を持って捨てることも大切。

  1. 変に複雑じゃないとか 

  2. もちろん設計通りにならなかったことがコーディングの力不足によるものでないことは前提としておく。逆に言うと、設計と実装のズレはまず間違いなく生じるが、それは仕方ない場合もあるがコーディングの力不足によるものもある。 

  3. 図しか書かない人には無用かもしれない 

  4. もちろんコードの変更が許される範囲でやってね 

About

例によって個人のなんちゃらです

Recent Posts

Categories

Tool 日々 Web Biz Net Apple MS ことば News Unix howto Food PHP Movie Edu Community Book Security Text TV Perl Ruby Music Pdoc 生き方 RDoc ViewCVS CVS Rsync Disk Mail FreeBSD Cygwin PDF Photo Zebedee Debian OSX Comic Cron Sysadmin Font Analog iCal Sunbird DNS Linux Wiki Emacs Thunderbird Sitecopy Terminal Drawing tDiary AppleScript Life Money Omni PukiWiki Xen XREA Zsh Screen CASL Firefox Fink zsh haXe Ecmascript PATH_INFO SQLite PEAR Lighttpd FastCGI Subversion au prototype.js jsUnit Apache Trac Template Java Rhino Mochikit Feed Bloglines CSS del.icio.us SBS qwikWeb gettext Ajax JSDoc Rails HTML CHM EPWING NDTP EB IE CLI ck ThinkPad Toy WSH RFC readline rlwrap ImageMagick epeg Frenzy sysprep Ubuntu MeCab DTP ERD DBMS eclipse Eclipse Awk RD Diigo XAMPP RubyGems PHPDoc iCab DOM YAML Camino Geekmonkey w3m Scheme Gauche Lisp JSAN Google VMware DSL SLAX Safari Markdown Textile IRC Jabber Fastladder MacPorts LLSpirit CPAN Mozilla Twitter OpenFL Rswatch ITS NTP GUI Pragger Yapra XML Mobile Git Study JSON VirtualBox Samba Pear Growl Mercurial Rack Capistrano Rake Win RSS Mechanize Sitemaps Android JavaScript Python RTM OOo iPod Yahoo Unicode Github iTunes God SBM friendfeed Friendfeed HokuUn Sinatra TDD Test Project Evernote iPad Geohash Location Map Search Simplenote Image WebKit RSpec Phone CSV WiMAX USB Chrome RubyKaigi RubyKaigi2011 Space CoffeeScript Nokogiri Hpricot Rubygems jQuery Node GTD CI UX Design VCS Kanazawa.rb Kindle Amazon Agile Vagrant Chef Windows Composer Dotenv PaaS Itamae SaaS Docker Swagger Grape WebAPI Microservices OmniAuth HTTP 分析基盤 CDN Terraform IaaS HCL Webpack Vue.js BigQuery Middleman CMS AWS PNG Laravel Selenium OAuth OpenAPI GitHub UML GCP TypeScript SQL Hanami Document SVG AsciiDoc Pandoc DocBook Develop Jekyll macOS Node.js Vite Heroku Transformer AI Data Cloud Wasm