タグ

programmingに関するkknsdのブックマーク (433)

  • コードの臭い - リファクタリングの必要性を示す兆候

  • プログラマはプログラミングをしていないという現実

    フロリダのRubyプログラマのSteve Clayさんがブログに投稿した「プログラマーはプログラミングをしている、はずが実際はそうでもない」という記事が話題になっていました。 神話:プログラマは一日中、プログラムを書いている。 現実:多くのプログラマは下記の事に多くの時間を費やしている。(順不同) 外部のプログラマーのMLへのメールやテックでない人へのメールを用心深く書く ミーティングに参加、モックアップやDBスキーマの作成、要求された機能へのパフォーマンスの心配 バグレポートを書く、過去のバグを検索 複雑なシステムの障害の原因を何ギガもあるログを探索して調べる ダウンタイムについてユーザーや上司への説明 他人の問題の解決へ協力 ドキュメント、、ブログ、リリースノート、脆弱性アナウンスを読む 必要な既存の名前の分からないようなコードを探す 見つかったコードが自分の環境に互換性がありライセ

    プログラマはプログラミングをしていないという現実
  • わがままなプログラマにならない為の10のルール

    「エゴレスプログラミング」という言葉があります。アメリカのコンピューター科学者、ジェラルド・ワインバーグ氏によって『プログラミングの心理学』にて取り上げられた思想です。プログラマ同士が協調する事で最終的なコードの品質が向上するという思想です。プログラマが協調できていないムードだとコードの品質が下がると言い換えてもなんだか思い当たるフシのある感じです。1970年代からある考え方ですが、ちょうど話題になっていました。さてそのエゴレスプログラミングの為の十戒は下記のようになっています。 自分が失敗をする事を認める コードは自分自身ではない どれだけ空手を知っているかは重要ではない。他にもっと知っている人がいる 相談なしにコードを書き換えない 自分よりも知識が無い人に対して尊敬と敬意と忍耐を持って接する 唯一不変な事は、世界は変わるという事 権威は立場からではなく知識から生まれる 自分が信じるもの

    わがままなプログラマにならない為の10のルール
  • 美しいプログラムを書く(脱添字職人編) | Webシステム開発/教育ソリューションのタイムインターメディア

    あらすじ あなたはとある業務用アプリケーションの開発・保守を任されています。 このアプリケーションはC#で記述されており、 とある企業におけるプロジェクト(Project)の管理を主目的としています。 プロジェクトには何名かの社員がアサインされており(AssignedStaffs)、 プロジェクト内には必ずマネージャーが1名存在します(ManagerStaffId)。 大まかなイメージとしては以下のようなコードになっています: public class Staff { public String Id {get; set;} public String Name {get; set;} ... } public class Project { public ArrayList AssignedStaffs {get; set;} public String ManagerStaffId {

    美しいプログラムを書く(脱添字職人編) | Webシステム開発/教育ソリューションのタイムインターメディア
  • Strategic Choice

    Problemこのクラスは大きすぎて、もうこれ以上大きくしたくありません。「単一責務の原則」を適用してクラスを分割しようと思います。分割の具体的な方法がわかりません。Strategy「クラスの抽出」を適用します。どんなとき?「単一責務の原則」を適用してクラスを分割しようと思います。責務を把握したので、分割の実装を行いますが、具体的な方法がわかりません。どうする?「クラスの抽出」リファクタリングを適用します。ほとんどのレガシーシステムにおいて、最初にできることは、「実装レベル」で単一責務の原則を適用することです。つまり、大きなクラスから「クラスの抽出」をして、抽出クラスに委譲することです。「インタフェースレベル」で単一責務の原則を導入するには、より多くの作業が必要です。クラスの呼び出し側を変更しなければならず、テストも必要になります。まず、実装レベルで単一責務の原則を導入しておくと、将来イン

  • IIJ Research Laboratory

    ネットワークの計測と解析 インターネットの使われ方やネットワークの挙動を把握する事は、ネットワークを運用し、その技術開発を行う ために欠かせません。しかし、観測で得られるデータ量は膨大ですがノイズが多く、また、観測できるのは極めて限られた部分でしかありません。そこで、膨大なデータから意味のある情報を抽出したり、部分的な観測からより一般的な傾向を推測する事が必要となります。... インターネット基盤技術 速くて、安全で、信頼性が高く、使いやすく、など、インターネットサービスへの要求はますます高まっています。これらの要求に応えるために、インターネットの 基盤技術も日々進歩しています。いまやインターネットはつながるだけのサービスではなく、高度で複雑な機能を備えた社会基盤となりました。IIJ技術研究所は、インターネットの基盤として実現が期待される機能を提供するために、さまざまな技術課題に取り組んで

  • Amazon.co.jp: デザインパターンとともに学ぶオブジェクト指向のこころ (Software patterns series): アラン・シャロウェイ, ジェームズ・R・トロット, 村上 雅章: 本

    Amazon.co.jp: デザインパターンとともに学ぶオブジェクト指向のこころ (Software patterns series): アラン・シャロウェイ, ジェームズ・R・トロット, 村上 雅章: 本
  • Amazon.co.jp: 良いコードを書く技術 -読みやすく保守しやすいプログラミング作法 (WEB+DB PRESS plus): 縣俊貴: 本

    Amazon.co.jp: 良いコードを書く技術 -読みやすく保守しやすいプログラミング作法 (WEB+DB PRESS plus): 縣俊貴: 本
  • モンテカルロシミュレーション

    このホームページは、乱数をたくさん発生させ、確率実験を行なう手法――これをモンテカルロ・シミュレーションといいます――のオンライン教科書です。あなたのパソコンを用いて、実際にプログラミングしてWEB上で実行することができます。 C言語版はこちら 1994年に、著者はソフトバンク社から「Cによるシミュレーションプログラミング」 というを、出版しました。現在それは絶版となっています。しかしながら、その後、それを大学などの教科書に使いたい、再版しないのかなどの問い合わせが ありました。出版したときの電子ファイルが残っていたので、それのすべてをホームページで、公開することといたします。その際、ホームページ上から、直接 プログラムを実行出来るように、CプログラムをJavaアプレットに変換し、公表します。 このホームページが、シミュレーションに興味をお持ちの方、トラヒック理論の研究者などのお役に立て

  • diffの動作原理を知る~どのようにして差分を導き出すのか | gihyo.jp

    UNIXの基的なコマンドの1つであるdiff。 これに実装されているアルゴリズムは実に興味深い世界が広がっています。 稿では、筆者が開発した独自ライブラリ「dtl」をもとに「diffのしくみ」を解説します。 はじめに diffは2つのファイルやディレクトリの差分を取るのに使用するプログラムです。 ソフトウェア開発を行っている方であれば、SubversionやGitなどのバージョン管理システムを通して利用していることが多いかと思います。稿ではそのdiffの動作原理について解説します。 差分の計算の際に重要な3つの要素 差分を計算するというのは次の3つを計算することに帰結します。 編集距離 2つの要素列の違いを数値化したもの LCS(Longest Common Subsequence) 2つの要素列の最長共通部分列 SES(Shortest Edit Script) ある要素列を別の要

    diffの動作原理を知る~どのようにして差分を導き出すのか | gihyo.jp
  • 業務系のJavaプログラマーが知っておくべき10個のBad Partsとその対策 - 達人プログラマーを目指して

    Java: The Good Partsののタイトルに触発されて、逆にJava言語の使いにくい部分をいくつかピックアップしてみました。Java EEなどの業務系のアプリケーションプログラマーの視点で書いていますので、別の立場ではここで指摘している事項が必ずしもBad Partではないという指摘もあるかもしれませんし、他にもいろいろなポイントがあると思いますが、とりあえず、私の独断で思いついたものを10個説明したいと思います。 1.標準APIのチェック例外が扱いにくい Java言語のチェック例外は当にGood Partなのか? - 達人プログラマーを目指してでも取り上げましたが、Bad Partの第一番目として標準APIのチェック例外が扱いにくいという点を指摘させていただきたいと思います。チェック例外については、理屈上コンパイラーによって例外の処理をプログラマーに強制させることができるす

    業務系のJavaプログラマーが知っておくべき10個のBad Partsとその対策 - 達人プログラマーを目指して
  • 意図に関係する大事なことがら - かとじゅんの技術日誌

    最近、DDDの"意図の明白なインタフェース"というパターンの章を読みなおしています。このパターンが一環して主張していることは"名前が重要"ということです。その名前の重要性について、いろいろな文献からの引用を用いて考えてみたいと思います。 名前重要 "名前が重要"といえば、「プログラマが知るべき97のこと」で、まつもと ゆきひろ氏が 「名前重要」というタイトルで名前の重要性について語っています。 適切な名前をつけられると言うことは、その機能が正しく理解されて、設計されているということで、逆にふさわしい名前がつけられないということは、その機能が果たすべき役割を設計者自身も十分に理解できていないということではないでしょうか。 名前が設計と強く結び付いていることがわかる、深イイ言葉です。 名前の決定が難航すると「えぃ、面倒だから適当に名前を付けてしまえ」となりがちです。油断すると結構適当になるもん

    意図に関係する大事なことがら - かとじゅんの技術日誌
  • 達人プログラマーに学ぶ リファクタリング | Act as Professional

    ガーデニングのメタファーはソフトウェア開発の現実にかなり近いものです。あるルーチンが大きくなりすぎたり、色々なことを実現しようとしすぎている場合、2つに株分けする必要があるのです。また、計画通りうまくいかないものは雑草を抜いたり剪定してやらないといけないのです。 こういったコード記述のやり直し、再作業、再設計を総称して「リファクタリング」と呼びます。 リファクタリングのきっかけDRYの原則に反している直交していない設計時代遅れの知識をつかっているパフォーマンスがわるいクラス、メソッドが長い名前がしっくりこない同じようなコピペコードがいくつも見られ、UIを直すとロジックを直して、DBもなおすとか。非推奨のメソッドを使っていたり。ループ分が多いし、やってることとメソッドの名前があっていないとか。みなさんも、思い当たるようなことはありませんか? タイミングとガン細胞の切除 きっかけを見つけたら、

    達人プログラマーに学ぶ リファクタリング | Act as Professional
  • プログラマが知るべき97のこと - Wikisource

    あなたは以下の条件に従う場合に限り、自由に 共有 – 作品を複製、頒布、展示、実演できます。 再構成 – 二次的著作物を作成できます。 あなたの従うべき条件は以下の通りです。 表示 – あなたは適切なクレジットを表示し、ライセンスへのリンクを提供し、変更があったらその旨を示さなければなりません。これらは合理的であればどのような方法で行っても構いませんが、許諾者があなたやあなたの利用行為を支持していると示唆するような方法は除きます。

  • レガシーコードをライブで扱う際のポイント試案

    twitter で TDDBC Hokuriku (2010) のレガシーコード改善を Coding Dojo で行った際の Ruby チームは比較的うまくいってたけど、あれって○○な流れだっけ的な話をしているうちに気になってることをまとめておこうと思い立ったので、できるだけ書き出してみる。 何かのきっかけになれば嬉しい。 素材(レガシーコード)のポイントまず動くこと触ったことがあること1ある程度でいいので機能別に書かれていること オブジェクト指向であるとなお良い(使える技が増える)小規模であること ただし完全に単機能だと余地が少ないのでテストを足しにくい外部 API 依存しまくりの場合は単なるレガシーコード改善とはまた別なテクニックの習得に繋がってよいかも自動実行できるテストがないこと :-)1 については「えっ」て思うかもしれないけど、放置してるものは依存ライブラリの関係や、そもそも動

  • LZO圧縮は速い - maachangの日記

    最近圧縮ファイルの速度について気になるので、いろいろ調べてみると、圧縮率は低いが、速度は爆速だと言われているLZOと言うのがあるみたいだ。 HTTPの圧縮にも使われているGZIPは結構オーバーヘッド小さいと思っていたのだが、実際にLZOをJavaのJNI経由で呼び出すJava実装をSeabassNativeIOに追加して、それぞれの速度を量ってみる。 ちなみにGZIP圧縮解凍は、java.util.zip.GZIPInputStream,java.util.zip.GZIPOutputStreamで処理する。 これらをそれぞれ、java.io.ByteArrayInputStream,java.io.ByteArrayOutputSteamをかまして処理する。 private static final int LEN = 20 ; /** * @param args */ public s

    LZO圧縮は速い - maachangの日記
  • 継承は害悪か。

    くっくっkura 🇯🇵🦀 @PG_kura OOP で継承は害悪だとは思うけども、実際に継承を言語から消去したとして一般 PG に受け入れられる言語になり得るだろーか。 2010-12-31 18:04:33

    継承は害悪か。
  • Don't Tell, Ask - 求めよ、命じるな - @katzchang.contexts

    えーと、どんな因果か、レビューされる側よりもする側になることが多くなってしまった。 対象となる生産物の欠点を指摘することは、レビューの大事な役割の一つであるとされている。だが、レビュアーとして一番怖いのは、間違った指摘や無意味な指摘をしてしまうことだったりする。そう、レビュアーもまた間違いを犯すんだよ。恐ろしいことに。 そこで有効なのが、"Don't Tell, Ask."「求めよ、命じるな」の原則。 レビュー対象物の「至らなさそうな点」に対して、なぜそこはそうなっているのかについて答えるよう求める。自分がより良いアイデアを持っていれば、それを伝え、どちらが優れているか判断を求める。「ここは、こうしてよ」のような命令(出す側は「アドバイス」と呼ぶ)は出さない。だって、レビュアーの意見の方が優れている保証なんて、何もないんだからね。 そもそもレビューをするのは、そのアドバイスに黙って従う初級

    Don't Tell, Ask - 求めよ、命じるな - @katzchang.contexts
  • プログラマーが選ぶプログラミングに関する名言ベスト10

  • 2010-12-26

    リアクティブプログラミングは、「時間とともに変化する値」=「振る舞い」同士の関係性を記述することでプログラミングを行うパラダイムです。 GUIなどのようにインタラクティブなシステムや、シミュレーションやアニメーションのようにダイナミックに状態が変化するようなシステムを宣言的に記述することができます。 これらの「変化する状態」や「外部とのやりとり」が支配的なシステムは、純粋関数型言語が、その強みを発揮しにくい部分でもあります。 稿では、リアクティブプログラミングが副作用を含む系を宣言的に記述することを可能にし、状態の管理という厄介な問題からプログラマを開放する可能性があることを示したいと思います。 (割と独自研究に基づく解釈ばかりなのでその点ご了承ください。あと例としてでてくるコードは、Pythonベースの擬似コードで具体的なライブラリに基づくものではありません。) Why Reactiv

    2010-12-26