何が良いプログラムかという点はもちろん人やコンテキストによって異なりますが、少なくともプログラマーとしての私の信念としては、 機能拡張や変更が容易なプログラム 単体試験によって正しく動作することの検証が容易なプログラム どういった内容が記述されているか理解しやすいプログラム といったものこそ、「品質の高い」プログラムが持つべき性質として、まず真っ先に挙げるべき事項であると考えています。もちろん、前提として顧客の要件に従うということは大切なことです。しかし、一般に要件は長期にわたって変更されるものですし、使い捨てのプログラムを除けば、プログラムを長期にわたって保守するコストという点も見過ごすべきではありません。したがって、ユーザーの目には触れない上記の性質をもっと重視すべきだと思うのです。 DRYの原理 上記のような性質を満たすプログラムを作る上で大切になってくる原理として、DRYの原理とい
サンフランシスコのプログラマLaurie Voss氏が書いた見逃せない記事が賑わっています。近年のフレームワークやライブラリの定番中の定番ORマッパーが既にアンチパターンなのではというのが彼の主張です。この記事を書くきっかけになったのはこのツイートだそうです。 I cannot overstate the degree to which ORM is a dangerous antipattern. — Laurie Voss (@seldo) June 9, 2011 ORM が危険なアンチパターンだっていうのはどれだけ言っても言い過ぎることはない このツイートに対して各方面(ActiveRecord, Doctrine, Hibernate)から多くの(激しい)返信が寄せられて書かれたのが問題のエントリです。まずはアンチパターンとは何かの定義として下記の2つを挙げています。 当初は有益
豚 @butabuta_bot ベンチャーナウに本気でアタマにきた。向こうが電話取材でJavaとJavaScriptについて聞き間違えたくせに「鍵括弧内の修正には一切応じられない」と。僕がJavaとJavaScriptを間違えるわけないだろ!記事の確認もさせなかったくせに http://ht.ly/55L3C 豚 @butabuta_bot 挙げ句、なんだよ「Java(Script)」って。めちゃくちゃだ。ベンチャー媒体を語る資格すらない。恥ずかしくないのか? Javaのワケないだろ。記者が不勉強なせいで僕まで馬鹿だと思われてしまうだろうが。しかも削除要求には応じないということなので法的手段に訴えることにした
なお、メモリ消費量はtopコマンドで測ったので、かなり大雑把な数字だ。また、Cで同様の処理のコードを書くと、ほぼC++と同じ速度になる。 追記(2011/02/17 8:50):Rubyによるベンチマークを追加。 追記(2011/02/17 11:00):Smalltalkによるベンチマークを追加。ソースコードは「Smalltalkのtは小文字です」のループ回数を修正した。 追記(2011/02/17 16:00):Perlによるベンチマークを追加。 追記(2011/02/18 10:30):Java 1.6.0_22で実行した、Scalaによるベンチマークを追加。また、clang/llvmでC++とObjective Cの値を取り直し、改善が見られないのを確認。 追記(2011/02/18 14:30):Ruby 1.8.7によるベンチマークを追加。1.9.2との速度差については、@IT
はじめに ソースコードは設計であり、コードの記述は品質に直結するのは言うまでもない。ちなみに、プログラマにとって特に重要なのは保守性だ。コードは書いた直後から保守対象となるからだ。コードは要求文書の範囲で動けばいいと思っている人がいれば今すぐ、ソースコードをコピペして100klに増えるプラグインがいつの間にかインストールされる呪いをかけてあげよう。幸い、ここを読んでいる人にはそんな人はいないだろうと思うけれども。 ということで、コードの品質を下げる要因、すなわちシステム全体の品質を下げる要因となり、かつ使われやすいアンチパターンを挙げ、対策を検討していくことにする。対象は以下: 出力パラメータ 処理状態返却 意味のある配列 無意味な初期化 多すぎるtry-catch 暗黙の順序 コンパイラ警告の無視 過剰なコメント e.printStackTrace() 出力パラメータ メソッドの引数にオ
私自身は10年以上も前(JDK1.1の頃)にSJC-Pの認定を取って以来、Javaプログラミング関連の認定試験は受けていないのですが、昨日たまたまネットを検索して、SJC-Pとは別にJavaプログラミング能力認定試験という試験が存在していることを知りました。結構メジャーな認定試験のようですので、現役のJavaプログラマーやJavaプログラマーを目指している学生さんで、今後受験に向けて勉強されている方々も多くいらっしゃるのではないかと思います。 試験は難易度に応じて3級から1級までランクが分かれており、2級まではJava言語の知識に関する筆記試験ですが1級の試験では実際のプログラムの修正を行う能力が実技試験として課せられます。試験範囲は以下で公開されています。 Javaプログラミング能力認定試験(試験範囲) 私は(自分で言うのも変ですが)、Javaプログラミングについてはこの道15年近くのキ
AndroidがiPhoneに構造的に勝つのが難しい点がある。その点と比較すると、タッチパネルのレスポンスなどのユーザビリティや、アプリケーションの数、ハードウェアの薄さや、バッテリー持続時間などは表面的な優劣でしかない。 iPhoneがAndroidに対して持つ最大の長所は、アプリケーションの実行速度の速さとメモリ消費量の少なさだ。これは、iPhone(iOS)の開発言語であるObjective Cがネイティブ・コードを生成する特性に依存するため、もっと本質的な違いとなる。 1. AndroidはJavaの亜種を用いる Androidの開発言語は、大雑把に言うとJavaだ。Java SEのサブセットで作成されたバイト・コードを、Dalvik仮想マシン用のバイト・コードに変換して使う。やや変則的な構成になっているのは、SUNに支払うJavaのライセンス料を節約したかったとも、モバイル機器向
UPDATE AppleとOracleは米国時間11月12日、これまで長い間Appleが社内プロジェクトとして開発してきた「Java for Mac OS X」をOracleに移管すると発表した。 2010年1月にOracleがSun Microsystemsを買収したことにより、Javaの支配権はJavaサーバソフトウェアなどの製品も取り扱うOracleへと移った。 Oracleへの移管に伴い、Appleは同社が開発したJava環境を、Java開発のためのオープンソースプロジェクトOpenJDKに提供する予定である。「Mac OS X 10.6」(Snow Leopard)と「Mac OS X 10.7」(Lion)向けの現行の「Java Standard Edition 6」はAppleが管理するが、Mac向けの「Java SE 7」はOracleがリリースすると両社は述べた。 この動
ジェネリクスでは、「型」を変数にした「型変数」というものを取り扱う。型変数で何が嬉しいかというと、メジャーな例ではコレクションAPIが挙げられる。java.util.Listとかjava.util.Mapとかのデータを格納するタイプのユーティリティクラスのことだ。 2004年にJavaのバージョンが5.0となるまでは、Javaにはジェネリクスの機能はなかった。なので、Listにデータを格納し、取得する場合は List list = new ArrayList(); list.add("hello!"); String str = (String) list.get(0); といったソースコードになる。 add()の引数はObject型で宣言されており、どんな参照型でもadd()することができた。 get()の戻り値もObject型で宣言されておりキャストが必要だった。このキャストはプログラ
今日のこちら(米国西海岸)でのもっぱらの話題は、Oracleの「Android訴訟(詳細)」だが、これに関しては、私も含めて「やはり来たか」と見ている専門家は多い。 そもそも、スマートフォン以前の携帯電話用のJavaがプラットフォームとして成功しなかった理由の一つは、J2MEが根っこのところで、NTTドコモ独自のDoJaとモトローラ主導のMIDPに分岐してしまったことにあるし、同じJ2ME間でも実装の差異が大きく "write once, run everywhere" が机上の空論になってしまったことにある。Sunがちゃんとリーダーシップを発揮できなかったためである。 その意味では、J2ME/MIDPとコンパチビリティがなく、Sunから正式にJavaをライセンスしていないAndroidはけしからん、というのは(今はOracleの一部になった)Sunから見れば当然のこと。 「J2MEの時に
2010/06/29 「エンジニアはみんなオブジェクト指向言語を使っているのに、なぜオブジェクトデータベースを使わないんだろう? まるで、高級なポルシェに乗っているのに、ガレージではバラバラに分解して格納しているみたいだ」――そんなジョークが社内ではやっていると話すのは、インターシステムズソフトウェア開発担当副社長 ロバート・ネーグル(Robert Nagle)氏だ。オブジェクトデータベースであるCaché(キャシエ)を販売する同社の取り組みについて、開発者でもある同氏にインタビューを行った。 オブジェクトデータベース市場は拡大している ネーグル氏はインターシステムズの状況について「2009年、経済はリーマンショックで縮小した。そのころインタビューを受けていたなら、弱気な発言をしていたかもしれない」と述べる。しかし同社はこの状況においてあえて投資を行い、730名だったスタッフを1000名に
サーブレットやJSPの“バージョン”意識してますか?:現場にキく、Webシステムの問題解決ノウハウ(7) 本連載は、日立製作所が提供するアプリケーションサーバ「Cosminexus」の開発担当者へのインタビューを通じて、Webシステムにおける、さまざまな問題/トラブルの解決に効くノウハウや注意点を紹介していく。現在起きている問題の解決や、今後の開発のご参考に(編集部) 10年で「J2EE 1.2」から「Java EE 6」へ 1999年にJ2EE 1.2がリリースされてから10年以上経過し、2009年12月には4回目のバージョンアップ版であるJava EE 6がリリースされた(参考:米Sun、軽量、モジュラー化を進めた「Java EE 6」を公開)。 この間、多くの技術が実装され、またエンハンスされてきたが、エンハンスに伴って以前のバージョンと振る舞いが変わってしまったケースが少なからず存
システム開発がますます複雑化していく中、エンジニアには、テクノロジを理解して、さまざまな場面に適した選択が求められます。本連載では、Javaと.NETの基本的な仕組みから最新の傾向や技術などについて、数回に分けて紹介します いまさら聞けない、Javaと.NETの違い 今日、アプリケーション開発・実行のプラットフォームは、大きく2つのテクノロジに収束しているといえるでしょう。 1つは、エンタープライズ・アプリケーション開発の定番ともいえる「Java」です。 実行環境、開発環境の無償提供、OSを自由に選べること、フレームワークや開発環境が充実していることが人気の理由です。大規模アプリケーションの採用実績も多く、ほかのプラットフォームをリードしてきました。 もう1つは、マイクロソフトが発表した「Microsoft.NET」構想に基づいた「.NET」です。 プラットフォームが主にWindowsに制
起きてから寝るまで、息を吸うのも、厠(かわや)での一連のアクションも.NET Frameworkで構築している私だが、実は少し前まで目を閉じるとまぶたの裏でJavaのマスコットである“Duke”がゴーゴー・ダンスを踊っちゃうくらいにJavaな日々を送っていた。そんな私が過去の資産を捨てて.NET Frameworkに転んだ理由は簡単。.NET Framework、特にC#の設計思想が私のし好に合っていると感じたためだ。 本稿では、私がJavaからC#に乗り換えた理由を示し、それを基にC#の“正しい”使い方について考察する。C#に興味のあるJavaプログラマや、どう使えばよいのか悩んでいるC#プログラマに読んでいただきたい。そうそう、アーキテクトにも。プログラミングできないアーキテクトなどあり得ないのだから。 C#とJavaは似ていない。確かに表面上は似ているが、C#にはJavaにはない文法
Microsoft .NET(以下.NET)が登場した頃は「.NETかJavaか?」といった議論が起こった。しかし、現実には両者はどちらかで完全に置き換えられるようなプラットフォームではない。J2EEも.NETもアプリケーションやサービスを実装するためのプラットフォームといえるが、その周辺に存在するツールやミドルウェアなどを含めて考えれば、現状、同様のソリューションを提供しているとはいえない。よって、ユーザーのニーズによって自由に選択されるべきものであるし、必要に応じては共存して利用することもあるだろう。 本稿では、後者のJ2EEと.NETが共存・連携して利用されるケースを扱い、その意義に簡単に触れたあと、実際の連携例をコードレベルで解説する。 J2EEと.NETの連携として最近最もポピュラーなケースは、.NETベースのWindowsアプリケーションをクライアントに配置し、サーバ側のJ2E
前回のコラムでは勇者を定義した。しかし、まだまだ課題は山積みである。ひとつずつ片付けていこうと思う。設計と実装を同時に行えるのも趣味のプログラムならではの魅力である。まだ、わたしの頭の中にしか設計図は存在しない。ぶっちゃけ、完成するか破綻するのか分からない。それも含めて楽しんでもらえるとうれしい。 ■Singletonパターン 勇者インスタンスが複数作られては困る。Singleton パターンを適用して勇者は世界でただ1人を表現したい。まずは勇者クラスをstaticで宣言し、クラス変数とする。
デザパタの前に継承の話をしていなかったことに気付く。プログラムの入門書を書くつもりはないので、基本的に順番はデタラメである。技術はつまみぐいが面白いのだ。 ■継承 インヘリタンス 第1回、第2回で勇者クラスについて考えてきた。このまま肉付けして作り込んでいくのもいいが、このあたりでざっくり大枠を決めておきたいと思う。 Heroクラスに、いくつかの属性を定義してきた。しかし、まだまだ足りてはいない。ドラゴンクエストI 公式ガイドブックによると、ちから、すばやさ、みのまもり、攻撃力、守備力、経験値、Gというパラメータを持っている。 一方、モンスターにはHP、MP、すばやさ、攻撃力、守備力、経験値、Gがある。共通の項目を見つけたら抽象化のチャンスだ。 勇者とモンスターの共通項目として、Battlerクラスを定義する。ひとまずメソッドは考えないで、共通要素を属性にする。Battlerクラスは実体が
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く