オレオレコーディングガイドラインのすすめ

最近はCocoa(iOS)のコードを主に書いているが、まとめ兼覚え書きとしてコーディングガイドラインと題して自分用またはプロジェクト用に作っている。

1人でコーディングするときは、それをそのまま使い、プロジェクトなど2人以上でコーディングするときはそれをベースに修正したものを共有するという格好だ。

ずっとCocoaをやっているならいいのだが、たまに離れることもあるので再び戻ってきたときに細かいところを忘れてしまうのだ。それにWebでTipsを見つけたときにReadLaterしても良いのだが、どうせ自分は後で見ないので、自分で修正しながら加筆すると忘れてしまわないし、ノウハウが溜まってよい。

今までに作成したものはこんなところ。(オレオレばっかりでダサいが…)

履歴も保存され、Markdownなどのリッチテキストにも対応しているので今のところGistを使っている。ブログでやっても良いのだが、構文の色つけなど見た目の綺麗さはgithubには敵わない。

1 note

設計の設計: 柄沢 祐輔, 田中 浩也, 藤村 龍至, ドミニク・チェン, 松川 昌平, メディア・デザイン研究所: 本

5人の建築家(クリエイター)がそれぞれ設計のプロセスや考え方について論じている本で、インタビュー(座談会)から始まり、各人の論、インタビューで終わる。

建築・都市設計の本でありながら、設計(=デザイン)やWeb・ソフトウェアに多く触れられている上うえ、それ自体にも関係する話である。

その中で、「超線形設計プロセス論」というモデルが提唱されている。

「ジャンプしない」「枝分かれしない」「後戻りしない」を前提として、最初にゴールイメージを抱かずに、改良を重ねながら進めていくという方法…

重要なのが模型を保存するということ…

改善するポイントは一ヶ所に絞る…

よくLeanやAgileと言われているが、どうやったらいいか分からない。これがまさにその具体的なメソッドのように思える。

ソースコードレベルではリファクタリングなどによって、後戻りすることもあり得るかもしれないが、プロダクト(サービス)レベルでは後戻りを許さず、改良だけをして、ゴールイメージを抱かないということになるだろう。

特に模型を保存するのはバージョン管理システムでコミット(Gitならブランチを切る)することであるし、一ヶ所に絞って、レビュー→改良のプロセスをより頻繁に回すことが大事なのだろうか。

そして、面白いのは、この方法が大学教育にどう応用されるか、実際に実施してみての話なども交えていることである。これに対する批判に対する回答もある。

60年代〜近代に建築の考え方がウェブに使われるようになってきた。そして、近代〜今になってウェブの考え方が建築に逆輸入されるようになってきた。この本で、アーキテクトというものを建築、それからウェブの視点の両方から俯瞰できると思う。

c.f.

4 notes

色彩工学入門―定量的な色の理解と活用: 篠田 博之, 藤枝 一郎: 本

色彩というと色や色彩検定など、いわゆるデザイン(美術)のカテゴリ分類される本がよくあるが、これは工学的に色について勉強できる本である。

  1. 色の利用 (波長的な基礎知識から反射など)
  2. 色発現 (網膜、神経細胞、計算)
  3. 表色系 (種類、計算)
  4. 光と色の測定 (基礎知識、フォトセンサーの半導体工学)
  5. 光源 (基礎知識、LEDの半導体工学)
  6. カラー画像入出力装置と色管理 (コンピュータ上の話、カラープロファイルなど)

内容的には色の基礎知識から始まり、生物学的な話、また半導体工学的な話も載っている。中身は説明と定量的に示すための式・グラフ・図が多い。

色についての一連の知識をここまで網羅している本はなかなか無いので、帯にもあるように、エンジニアやWeb(DTP)デザイナーは読んでおくとよいと思う。

2 notes

オブジェクト指向言語を使ってもオブジェクト指向にはならない

当たり前だ。特に次の条件の場合最も酷くなる。

  • オブジェクトは1つしか生成されない(またはシングルトン)
  • そのオブジェクトには大量のメソッドとインスタンス変数がある
  • そのオブジェクトのインスタンス変数はそのオブジェクトの色々なメソッドからアクセスされる

結局オブジェクトという名の.cファイルの上で、インスタンス変数という名のグローバル変数を使っているということである。

7 notes

さらに踏み込んだオブジェクト指向での設計

  • そのオブジェクトはミュータブルかイミュータブルか
  • 想定されるオブジェクトの寿命はどのくらいか
  • 想定されるオブジェクトの生成個数はどのくらいか
  • オブジェクトがミュータブルの場合、オブジェクトのステートは可変か不変か
  • オブジェクトのインスタンス変数の変化を通知する必要があるか(あるならばその方法はあるか)
  • サブクラス化の想定
  • 継承やアブストラクト化をパターンで解決できないか

5 notes

テラソに行ってきた

まちとしょテラソは小布施町立の図書館である。

昔ブログで図書館カフェについてのエントリを書いたが、実際に行ってみるとその構想に、より近いように思う。ただ、図書館の機能として見るとまだまだ普通の図書館を踏襲しているが、空間のつくりが図書館とは少し違う感じ。

以下メモ。

  • 天井の広い空間、一貫性のある空間
  • 照明はぶら下げで小さいものがたくさん
  • 図書館自体小さいので文献はあまりない
  • 文献は相対的に地元の本が多め
  • 地元の広報誌
  • 県内の電話帳
  • 地元の情報誌
  • 子ども、小学生多め
  • 子ども用のスペース
  • 水飲むのOK
  • 本を入れるカート
  • トイレは面白い構造
  • あんまり静かでは無い
  • BGMあり

※写真はまあありますが、本当はアレなので上げれません。

0 notes

学校では教えてくれないことは….

微分方程式の解きかたでも、
半導体の仕組みでも、
古典の楽しみかたでも、
ルネサンス時代の文化でも、
TOEICの攻略法でも、
東大への入りかたでも、
オブジェクト指向プログラミングでも、
ソーティングのアルゴリズムでも、
IPv4ネットワークのパケットの中身でも、
ラプラス変換でも、
光の二重性でも、
ブートローダーの書きかたでも、
研究室の選びかたでも、
単位の取りかたでも、
卒業のしかたでも、ない、

問題の見つけかた

である。

結局はこれが日本とアメリカ等の教育の違いなのではないか。

0 notes

コーディング時間の8割はモデル化

コードを書いて問題解決をするとき、動くものを作る時、どうやっているか。

理想的な思考の手順は

  1. 入力と出力を考える
  2. 入力と予想される入力を考える
  3. モデル化する
  4. アルゴリズム化する
  5. 具体的なインターフェースを考える
  6. コーディングする
  7. 実行する
  8. テストする

のようになるだろう。

どんなプログラムでも入力と出力を持ったシンプルなモデルに落とし込むことができる。モデル単位で評価もする。テストもする。モデルの集合はそのままオブジェクト指向のオブジェクトともなり得る。

いきなりコーディングをし始めるひとがいるが、それでは*良い*コードは書けないだろうし、結局のところ時間もかかる。コーディングにかける時間はほんの少しである。コーディングなんてルーチンワークでいい。

2 notes

デザインとアートの違い

何をもってデザインと言い、何をもってアートと言うか。その境界線はどこか。

デザイン

  • 客観的でなければならない
  • ファンクション(機能)が存在する
  • コンクリート(具体的)でなければならない
  • 客観的に評価できる
  • 数式や数値、統計で評価できる
  • モデル化できる
  • 文章で表現できる
  • モデルやファンクションとグラフィックが分離できる

アート

  • 主観的でよい
  • 機能は要らない
  • 具体的でも抽象的でも良い
  • 客観的評価が不可能
  • モデルや数値は存在しない(ことが多数、元になった物や人という意味のモデルは存在するが)
  • グラフィックである
  • 文章で表現できない
4 notes

"

「日本人はいつも、美味しい所だけをツマミ食いして、他の連中には食べカスだけ残しておく」と言った話もありますね。つまり、外国の新しい技術革新を真似して、それを改良する訳です。

確かに、半導体製品の製造技術では素晴しい成果を挙げて来ました。しかし一方、日本のエンジニア達一人ひとりの技術革新への貢献、つまり「新しい技術を発明する」と言う事になると、日本はまだまだ米国に遅れを取っていると思いますね。

"

NHK 電子立国 日本の自叙伝 vol.6 (1991) via @dennichibot

0 notes