53ningen.com

@gomi_ningen's Website

単方向リストの理解とJavaでの実装

線形単方向リスト(Singly-linked linear list)は、最も基本的なデータ構造のひとつです。また色々なデータ構造に対する考え方の基礎を学ぶことができるので良い題材です。 Java の java.util.LinkedList はその実装を見てみれば分かる通り双方向(Doubly)連結リストなので、これを参考にしながら単方向リストについてざっくりと実装をして、理解を深めました。

データ構造入門:基礎用語と概念の確認

単方向リストについて考える前に、データ構造とアルゴリズム全般の基礎知識を確認しておきましょう。

  • データ構造(Data Structure) とは
    • データを効率的に使用できるように組織化する方法。配列、ファイル、連結リスト、スタック、キュー、木、グラフなど
    • 線形データ構造 要素は順番にアクセスされる。データが連続している必要はない。
    • 非線形データ構造 木、グラフなど
  • 抽象データ型(ADT, abstract data type) とは
    • 基本データ型は基本演算を暗黙的にサポートしているが、同様にユーザ定義型に...
Read More

コードの表面的な改善(リーダブルコードから)

リーダブルコード 第一部 表面上の改善を読んだまとめ。コード書く人は読んだ方が良い。

「優れた」コードの定義

  • コードは理解しやすくなければいけない
  • コードは他の人が最短時間で理解できるように書かなければ行けない
  • 理解のしやすさが正義。この正義を貫くために実践すると良い手法が本にはつらつらと書いてある。

名前に情報を詰め込む

そのためには次のようなことに注意すれば良い

  • 明確(カラフル)な単語を選ぶ
    • getは明確な単語ではない
    • 例:getPage(Url) -> downloadPage(Url) にすればより明確
    • スレッド停止処理が重ければ kill()、再開できるなら pause() などカラフルな単語へ
  • 汎用的な名前を避ける
    • foo bar などエンティティを無視した名前を避ける
    • スコープの小さな、一時保管の意味しかもたない変数はtmpでも良い
  • 抽象的な名前よりも具体的な名前を使う
    • DISALLOW_EVIL_CONSTRUCTORS
  • 接尾辞や接頭辞を使って情報を追加する
    • 値...
Read More

アジャイル的思考フレームワーク

 記事:“アジャイル入門”の続き。アジャイルサムライをベースにアジャイル開発のための思考フレームワーク的なものがまとまっていた第二部をまとめます。

インセプションデッキ

 プロジェクトがダメになる理由として大きなもののひとつに「チームメンバがそれぞれお互いに誰もいないところで合意したことを前提にしていること」があがる。お互いの指している言葉は同じでも、実は思っているものが別のものだったりするのは実はプロジェクトでもよく起こる。そうならないためには早い段階で、ゴールやビジョン、状況、背景についてチームでよく話し合っておくこととその情報をステークホルダーに提供することが大切。

 プロジェクトを始める前にチームメンバが考え、意見を共有するべき10の課題で構成されているものが次に示すインセプションデッキになります。

  1. 我々はなぜここにいるのか
  2. エレベーターピッチ
  3. パッケージデザイン
  4. やらないことリスト
  5. 「ご近所さん」を探せ
  6. 解決策を描く
  7. 夜も眠れない問題
  8. 期間を見極める
  9. 何を諦めるのか
  10. 何がどれだけ必要か

 インセプ...

Read More

“アジャイル” 入門

アジャイル開発について知るために「アジャイルサムライ」を読み進めていきました。第一部 「アジャイル」入門のまとめです。

アジャイル開発とは何か

価値ある成果を毎週とどける 〜アジャイル開発の目的〜

  • Q. 客側の立場にたつと以下のどちらが信頼できるか
    • 実態のよくわからないドキュメントや設計書・計画を納品してくれる
    • 短いスパンで動作する各重要パーツを成果物として見せてくれる

後者のほうが成果物が目に見える分、直感的に説得力があるし、わかりやすい。 仮にこういったスタンスで開発していくとすれば、その中で必要なことは 以下の6点になる。

  • 大きな問題は小さく
  1. 大事なことだけに集中して、その他は忘れる
  2. 動くものを届ける
  3. フィードバックを求める
  4. 必要なら進路を変える
  5. 成果責任を果たす

アジャイル開発の原則 顧客満足を最優先し、価値のあるソフトウェアを早く継続的に提供します。

「完了」とは何か 〜完了と進捗〜

「完了」というのは文字通り、すべてが終わったことで、 計画書・設計書を出した段階...

Read More

ウェブサービス・APIのリソース設計

 Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)という本の15章以降で、郵便番号検索サービスを例にとって、設計の具体的手法が書いてあったので、その中で重要だと思ったことをまとめました。ここでいう“設計”とはリソース設計のことになります。リソース設計は、クライアント/サーバー間のインターフェースの設計、すなわちWebサービスやWeb APIの外部設計のことを指します。

 リソース設計をするときに大切なことは、WebサービスとAPIを分けて考えないことが大切だそうです。両者は人間用、プログラム用と用途は違うものの、どちらも同じWeb技術を使ったインターフェースだからです。

リソース指向アーキテクチャ

 ソフトウェア開発にはさまざまな設計手法がありますが、リソース設計にはまだ一般的な設計手法が存在しないそうで、設計の指針として唯一「RESTful Webサービス」の中で「リソース指向アーキテクチャ」というものが推奨されている程度です。これは次のようなステップで設計していく方法です。

  1. Webサービスで提供するデータ...
Read More

Copyright © 53ningen.com