タグ

ブックマーク / nowokay.hatenablog.com (90)

  • オブジェクト指向は禁止するべき - きしだのHatena

    プログラムがまだ不慣れな人が「プログラムちょっとわかるようになったけど、まだぜんぜんオブジェクト指向とかできてません」のように言ったり、ちょっと慣れた人が「このソース、ぜんぜんだめ。オブジェクト指向ができてない」にようなことを言ったり、まるで、オブジェクト指向ができてるかどうかがよいプログラムかどうかを表すことになってるようだ。 Javaのアルゴリズムのに、「Javaなのにオブジェクト指向ができていない」のような書評がついているのを見たときには、お前は何を求めてるんだと思ったりもした。 そのようなオブジェクト指向は、窓から投げ捨てるべきだ。オブジェクト指向はプログラムのよしあしの基準にならない。 むだにHogeインタフェースとHogeImplクラスがあったり、むだにnewするだけのcreateメソッドがあったり、どこで値が設定されてるかわからないオブジェクトがひきまわされてたり、ソースコ

    オブジェクト指向は禁止するべき - きしだのHatena
    yuiseki
    yuiseki 2014/07/19
  • ひどい記事のリンクを貼らないほうがいい3つの理由 - きしだのHatena

    よくありますよね。 「93%の人が間違える計算問題」みたいなタイトルで、開いてみたら この計算問題解けますか? 27+83=? 簡単に見えるこの問題、なんと93%の人が間違えるのです! みたいな。 ここで「バカにすんな!」みたいなコメントと一緒にTwitterに投稿しそうになりますが、ここでぐっとこらえるほうが良いという理由を3つあげてみます。 ひどい記事のリンクをガマンすればインターネッツから消えてくれる ひどい記事、この世から、インターネッツから消えてほしかったりしますよね。 もう見たくない。 でも、「こんな記事載せるなや! http://example.com/easy_problem」みたいにリンク貼っちゃうと、その記事の生存どころか増殖に加担してしまいます。 コンテンツにとって、インターネッツ上に存在するというのは、リンクがどこかから貼られていることと等価です。そして、リンクが多

    ひどい記事のリンクを貼らないほうがいい3つの理由 - きしだのHatena
    yuiseki
    yuiseki 2014/03/22
  • プログラムの生産性を高めるためになにを勉強するか - きしだのHatena

    用語は形式的なものではなく感覚的なものであることをお断りしておきます。 言語・フレームワーク・プラットフォーム まず最初に触れるものでとっつきやすい。何か使えないことには話になりません。多くの人が、勉強というとまずここ。 何かすでにつかえる人が新しく勉強することは、生産性をあげない。そのプラットフォームを初めて採用するときの準備が減らせる。どちらかというと仕事の選択肢を増やす感じですね。 深く知ることは、最適なコードを書きトラブルを減らしトラブルが起こったときの対策も早くなるので、生産性があがります。ただ、ある程度の深さ以降は生産性への寄与度がさがるので、その点では深くまで勉強する必要はありません。 プロダクトの使い方なので、プロダクトの寿命が勉強成果の寿命です。実際に使わないものの勉強は無駄になるし、使われなくなったら無駄になる。寿命もそう長くないです。 「プログラマは勉強してもすぐ使わ

    プログラムの生産性を高めるためになにを勉強するか - きしだのHatena
  • アルゴリズムの勉強のしかた - きしだのHatena

    この記事で、アルゴリズムの勉強はアルゴリズムカタログを覚えることじゃないよということを書きました。 プログラムの理論とはなにか アルゴリズムの勉強というのは、スポーツで言えば腕立て伏せや走り込みみたいな基礎体力を養うようなもので、「ソートなんか実際に自分で書くことないだろう」とかいうのは「サッカーは腕つかわないのに腕立ていらないだろう」とか「野球で1kmも走ることなんかないのに長距離の走り込みいらないだろう」とか言うようなものです。 Twitterでアルゴリズムの勉強とはなにかと尋ねられて、「アルゴリズムの基的なパターンを知って、それらの性質の分析のしかたをしって、いろいろなアルゴリズムでどのように応用されているか知って、自分が組むアルゴリズムの性質を判断できるようになることだと思います。 」と答えたのですが、じゃあ実際どういうで勉強すればいいか、ぼくの知ってるからまとめてみました。

    アルゴリズムの勉強のしかた - きしだのHatena
    yuiseki
    yuiseki 2014/03/03
  • 計算量を具体的に見てみる 2009-01-06 - きしだのはてな

    アルゴリズムの話では、計算量の解析がかかせません。 計算量はオーダー記法で表されますが、これは、データの入力量に対してどのくらい時間がかかるかをあらわしたものです。 こういった話はどのアルゴリズムのにも載ってるはずですが、具体的にどのようなプログラムを書くとそのオーダーになるかという記述はあまりありません。 ということで、やってみました。 計算時間表示のための共通処理を行うクラスは、一番最後に書いてます。 O(1) 計算時間がO(1)のアルゴリズムは、処理が入力の量によらない場合です。 配列の要素のアクセスや、ハッシュテーブルによるデータ検索、連結リストへの追加削除などがこれにあたります。 コードには入力量でのループが含まれません。 public class O1 extends ViewCompFrame{ @Override void compute(int n) { proc();

    計算量を具体的に見てみる 2009-01-06 - きしだのはてな
  • 関数を扱えることはどのようにプログラミング言語の能力をあげるか - きしだのHatena

    Java8で関数が値として扱えるようになりました。 このことが、「関数が渡せると便利だよね」という観点ではなく、プログラミング言語としての能力をどのようにあげるか考えてみます。 圏論からのテクニックが使いやすくなる 集合論はどちらかというと値にたいする理論でしたが、圏論は関数呼び出しに関する理論です。 プログラムには、関数呼び出しを連結させて値を変換していくという側面があります。 そのような関数呼び出しの扱い方を整理するのが圏論で、圏論の考え方を使うことでより安定したプログラムを書くことができます。 モナドなど圏論由来のテクニックを使うには、どうしても関数を値として扱う必要があります。 関数を値として扱うことで、圏論のテクニックが使いやすくなり、安定したプログラムの書きやすさにつながります。 型の証明能力があがる 動的な型付の言語にくらべて、静的な型付の言語はプログラムが間違いにくいといわ

    関数を扱えることはどのようにプログラミング言語の能力をあげるか - きしだのHatena
    yuiseki
    yuiseki 2013/08/09
  • DDD(ドメイン駆動設計)に関する資料 - きしだのHatena

    ちょっとまとめ。 ドメイン駆動設計・開発の実践 Eric EvansがDDD(ドメイン駆動設計)を語る Domain-Driven Designのエッセンス -目次- ドメイン駆動設計 ( DDD ) をやってみよう DDD時代の設計 - DDD-memo エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践) 作者: エリック・エヴァンス,今関剛,和智右桂,牧野祐子出版社/メーカー: 翔泳社発売日: 2011/04/09メディア: 大型購入: 19人 クリック: 1,360回この商品を含むブログ (131件) を見る エンタープライズ アプリケーションアーキテクチャパターン (Object Oriented SELECTION) 作者: マーチン・ファウラー,長瀬嘉秀,株式会社テクノロジックアート出版社/メーカー: 翔泳社発売日:

    DDD(ドメイン駆動設計)に関する資料 - きしだのHatena
  • TDDで「テストばかり書いて間に合うのか?」と質問されたときの正解 - きしだのHatena

    TDDにおいて、顧客などから「テストばかり書いていて間に合うのか?」などと質問されることがあると思います。 そんなときには、後ろからそっと抱きしめて 「そんな質問させてごめんな」 が正解です。 https://twitter.com/kis/statuses/350279800600018944 テスト駆動開発の効果はどのくらいある? − Publickey テスト駆動開発 作者:Kent Beckオーム社Amazon

    TDDで「テストばかり書いて間に合うのか?」と質問されたときの正解 - きしだのHatena
    yuiseki
    yuiseki 2013/06/28
  • FPGAのおすすめ教材 - きしだのHatena

    ここ最近のエントリを見て、モテたくてFPGAを触りたくなったという人もいるだろうと思います。 ただ、FPGAを触るといっても、どこから始めればいいのか、何を買えばいいかわからない人も多いのではないでしょうか。 そこで、FPGAを触るために用意するもので、おすすめのものをまとめてみます。下書きでずっと放置していたのですが、ばたばたと公開しておきます。 前提としては、今までハードウェアを触ったことのないソフトウェア技術者が、今後FPGAでデータ処理をしてモテるための準備をするということを想定してます。 「まず3万円用意します」 最初に、FPGAの評価ボードが必要です。 いろいろ安い評価ボードもありますが、ある程度最初からデバイスがついていないと楽しくないし、勉強もやりにくいです。また、その評価ボードを使ったテキストも必要になります。 そういう点で考えると、いまはDE0一択になると思います。 D

    FPGAのおすすめ教材 - きしだのHatena
    yuiseki
    yuiseki 2013/04/07
  • ソフトウェア工学は失敗している - きしだのHatena

    特に学術的にソフトウェア工学に触れたことはないのですが、むしろそうではなく現場にいる身としては、ソフトウェア工学は失敗しているように見えます。 「成功していない」ように見えるのではなく「失敗している」ように見えるのです。 もちろん、いまソフトウェア開発で使う技法やツールなど、ソフトウェア工学の産物はたくさんあり、現在のソフトウェア開発がソフトウェア工学から生まれたもので支えられていることには間違いありません。 でも、そうやって築き上げてきたものが、1999年以降ガラガラと崩れて、そしてうまく再構築できていないように見えます。 1999年、なにがあったかというと、XPエクストリーム・プログラミング入門というが発行されたのです。リンク先は2版ですが、日語版でも初版は2000年12月になっています。 ここからソフトウェア工学がガラガラ崩れた気がしています。 では、ここまでソフトウェア工学がど

    ソフトウェア工学は失敗している - きしだのHatena
    yuiseki
    yuiseki 2013/03/23
  • FPGAチップが今後バカみたいに安くなるかもしれない話 - きしだのHatena

    ふと、今後5年でFPGAはバカみたいに安くなってくるかもしれないと思ったので、まとめておきます。 ただし、材料はブログで見た話とか人に聞いた話とかで、しかもそれをいいように解釈しての話なので、妄想レベルであることを最初に断っておきます。 用語として、FPGAのようなプログラム可能なチップに対して、出荷段階で回路が決まっているようなチップをまとめてASICと呼びます。(ASICの正確な定義は知らない) 今のFPGAは「なんでもできるけど高くて遅い」 前に、「CPUはオワコン」というタイトルでFPGAが来るよという話を書いたときにあった意見として、「CPUは終わらないでしょう」という話よりも「FPGAだけじゃないでしょう」という話が多かったように思います。 その根底には、FPGAはチップとしては遅いということと、もっと大きい要因として高いということがあります。 FPGAは、同じ回路であればAS

    FPGAチップが今後バカみたいに安くなるかもしれない話 - きしだのHatena
    yuiseki
    yuiseki 2013/03/01
  • CPU、GPU、DSP、そしてFPGA - きしだのHatena

    前のエントリでのコメントへの返信として書いたものを、エントリとしてもあげておきます。 それぞれのデバイスの使い分けのイメージです。 タイトルこそあおってますが、実際にCPUが完全に駆逐されるとは思っておらず、少なくともアプリケーションに関してはCPUを使った逐次処理で実行するのが向いていると思います。つまり、大部分のコードはCPUで動くことになると思います。 また、これは単にイメージなのですが、ストックデータに対する処理、たとえば画像処理は、セルごとにメモリの割り当てられたGPGPUが強いだろうなと推測してます。 FPGAが必要になるのは、レイテンシを最小化させたい処理で、ディスクやネットワークなどのI/O部分に、中継としてデータ処理をさせる用途ではないかと考えています。いま流れてるデータにだけ注目するのであれば、メモリは多く必要ありません。 多数のSSDFPGAつないで、MapRedu

    CPU、GPU、DSP、そしてFPGA - きしだのHatena
    yuiseki
    yuiseki 2013/02/24
  • CPUはオワコン - きしだのHatena

    FPGACPUを組んでると、フェッチ部やデコーダ部で足し算や掛け算をしようとして、そんなことしたらCPUの意味ないなーと思ってしまうことがありました。 で、よく考えたら、FPGAでロジックを組むならCPUの意味はないんです。 だいたい、ひとつの処理実行するのに何クロックかかってんですか!と。 CPUでは、計算効率をよくするためにパイプラインという仕組みが使われています。 最近では、18段とかのパイプラインもあるようです。 ここで、18段のパイプラインのうち、実際に計算を行うのは2段か3段だったりします。残りの15段くらいは、命令や計算結果を読んだり書いたりしているだけです。 このパイプラインも、ほとんどはメモリの読み書き、それも命令の読み込みに多くが使われます。 であれば、CPUにしなければ、18段全部計算に使えるんじゃね?という話になりますね。 決まりきった計算を行うのに、いちいちメモ

    CPUはオワコン - きしだのHatena
    yuiseki
    yuiseki 2013/02/21
  • FPGAとArduinoとRasberryPIの違いと、FPGAを勉強する理由 - きしだのHatena

    はたから見てると、FPGAとArduinoとRasberry PIって、なんか小さくてデバイス挿して使ってて似たもののように見えるかもしれません。 そんな中、どこが違うの?って思ってる人もいるかと思ったので、それぞれの違いと、そしてそこから得られる技術者としての知識をまとめてみます。 まあ、得られる知識として「それぞれのデバイスの使い方と周辺環境」ってのはありますが、それは当然として。「それぞれのデバイスの使い方と周辺環境」を得るメリットがわかる比較としてまとめたいと思います。 根底は「なんで最近FPGAをやってるか」っていうことの説明なので、そういうバイアスがあると思ってください。 FPGAというのはチップの種類なので、実際にはDE0などのFPGA評価ボードとの比較ですが。中でもDE0-nanoは大きさや価格を考えると、豪華なArduinoくらいの位置づけとして出してきたようにも見えます

    FPGAとArduinoとRasberryPIの違いと、FPGAを勉強する理由 - きしだのHatena
    yuiseki
    yuiseki 2013/02/19
  • Sencha Touchの本を書きました - きしだのHatena

    JavaScriptリッチクライアントフレームワークのSencha Touch解説を書きました。 Sencha Touchではじめるモバイルアプリ開発―無料で使える「HTML5」&「JavaScript」開発フレームワーク (I・O BOOKS) 作者: きしだなおき出版社/メーカー: 工学社発売日: 2012/11メディア: 単行購入: 1人 クリック: 24回この商品を含むブログ (7件) を見る 表紙になぜかコーヒーカップとJavaって書いてあるのは、ぼくの管轄外です・・・。あと、キャプチャ画面、もすこしいい感じのを使ってもらうことはできなかったのか・・・。ただ、実物の色合いはもうすこし落ち着いています。 Amazonでは15日発売だけど、公式サイトによると19日発売、らしいです。どっちが正しいかは、まだ聞いてません・・・ ともあれ、目次はこちらから。 ���Ҿ�����Senc

    Sencha Touchの本を書きました - きしだのHatena
    yuiseki
    yuiseki 2013/01/08
  • FPGAで遊ぶとたのしかった - きしだのHatena

    FPGAをずっと触ってみたかったんだけど、いろいろ準備するのがなーと思いつつ、だけ買っていたのだけど、kazunori_279さんがFPGAで音をだしたりしてて、入門書というのがぼくが買ったと同じだったので、同じ学習キットを買ってみた。 「AlteraDE0 開発・学習ボード - Soliton Wave Shop」 http://solitonwave.shop-pro.jp/?pid=15835753 「DE0で音を出してみた。 - スティルハウスの書庫」 http://d.hatena.ne.jp/kazunori_279/20121204/1354631391 すぐに発送されて2日ほどで届いた。 んで、届いた日は触れなかったのだけど、昨日ちょっと触ってみました。 とりあえず電源いれてみた。 LEDがちかちかしつつ、ディスプレイになんか表示されてます。 ちゃんと動くことが確認でき

    FPGAで遊ぶとたのしかった - きしだのHatena
    yuiseki
    yuiseki 2012/12/18
  • 文章に向いてない構造をいかに文章に向いた構造に直列化するかが大事 - きしだのHatena

    Software Design 12月号の特集が「なぜエンジニアは文章が下手なのか?」というタイトルだったので、読んでみたら、ちょっと残念な内容だった。 「それは文章で書くべき情報なのか」という章があって、直列化した論理構造であれば文章には書きやすいけど、分岐やループがあるような構造だと書きにくいということが書いてあった。そこで文章化しにくい構造の例として地図があげてあって、暗にそういう構造は文章化をやめて図であらわせと言っているように読める。 けれども、図に書いたところで、書く側は文章化から逃げれて満足かもしれないけど、それを読み取る側は結局どこかから順番に解釈していく必要がある。図に逃げるのは、読み手に責任を押し付けているだけだと思う。 で、「ですから文章を書く前にまず論理構造を考える必要があります」と続いていて、では考えた論理構造が「文章に向かない論理構造」だったらどうするの?逃げる

    文章に向いてない構造をいかに文章に向いた構造に直列化するかが大事 - きしだのHatena
  • かわいいリレーショナルデータベースでサブクエリ的なものを実装 - きしだのHatena

    勉強用にかわいいリレーショナルデータベースを作ってみてます。 http://d.hatena.ne.jp/nowokay/20120817#1345197962 こいつにインデックスを実装してみようかなーと思ったんですけど、そうするとちょっとソースコードを整理しないといけなくて、いろいろいじってたら、サブクエリー的なものが使えるようになりました。 こんな感じで、fromとleftJoinにクエリが使えます。 System.out.println(Query .from(Query.from("shohin").lessThan("price", 250)) .leftJoin(Query.from("kubun").lessThan("kubun_id", 3), "kubun_id")); こんな感じでそれっぽいものができました。 |shohin.shohin_id|shohin.sho

    かわいいリレーショナルデータベースでサブクエリ的なものを実装 - きしだのHatena
    yuiseki
    yuiseki 2012/08/18
  • かわいいリレーショナルデータベース作った - きしだのHatena

    リレーショナルデータベースの勉強用に、最低限の機能をもったリレーショナルデータベースを作ってみました。 今回実装した最低限の機能というのは、射影(select)・選択(where)・結合(join)です。 テーブル作成 テーブル作成は次のようになります。 Table shohin = Table.create("shohin", new String[]{"shohin_id", "shohin_name", "kubun_id", "price"}); shohin.insert(1, "りんご", 1, 300) .insert(2, "みかん", 1, 130) .insert(3, "キャベツ", 2, 200) .insert(4, "わかめ", null, 250) .insert(5, "しいたけ", 3, 180); System.out.println(shohin);

    かわいいリレーショナルデータベース作った - きしだのHatena
    yuiseki
    yuiseki 2012/08/17
  • プログラマならいつかは読んでおきたい(と言っておけばかっこいい)本10冊 - 2010-11-26 - きしだのはてな

    昨日の技術力をあげたいプログラマが読んでおかないと話にならない10冊は自体にはあまり意味がなくでその技術分野が大事で、あとエントリーレベルのものが多かったので、今日は読み甲斐のあるを。 棚に飾っておくとかっこいいです。あと、屋でまとめて買って持って帰れるなら、値段的にも重さ的にも、尊敬します。 ぼくが持ってないや持っててもほとんど読んでないがかなり含まれてます。「この人こんなも読んでるんだー」などと無用に尊敬したらダメですよ。むしろ、そのように誤解させて尊敬させるためのです。 アルゴリズムデザイン 作者:Jon Kleinberg,Eva Tardos共立出版Amazon読んで面白いし、アルゴリズムカタログじゃなくて設計方法の解説が多いので、とてもいいです。途中までは読んでるので続きを読まねば。 あとアルゴリズムのとしてはアルゴリズムイントロダクションが定番ですが、

    プログラマならいつかは読んでおきたい(と言っておけばかっこいい)本10冊 - 2010-11-26 - きしだのはてな
    yuiseki
    yuiseki 2012/07/15