タグ

programmingに関するsatojkovicのブックマーク (355)

  • 適切に抽象化されたコードとはなにかって話 - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く

    適切に抽象化されたコードを書く、というのはまさに言うは易し行うは難しだ。 最近私が心がけていることのうちのひとつに、「未来を予測しない」というのがあって、「ここはあとから変更とか追加があるかもしれない」と思って抽象化しておくみたいなことはやめようと思ってる。ひとことで言うと、よくYAGNIとか言われるアレです。 そもそも、なんのために抽象化するのかというということを考えると、ひとつは「一塊の手続きに名前を付けて隠蔽して外から中を意識しないで済むようにする」ってことと、その副産物として「交換可能性が高まる」っていうのがある。 抽象化して実装を隠蔽することで、 コードが理解しやすくなる インターフェイスさえ合ってれば交換可能な部品として扱えるようになる という利点があるから、わたしたちは抽象化を行うわけだ(だからこそ「名前重要」なわけですね)。 この後者の利点に注目すると、ついつい「あっあとか

    適切に抽象化されたコードとはなにかって話 - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く
  • 浮動小数点数型と誤差

    有限桁 C言語で扱える実数値は,2進数の有限小数で表された数値である.例えば次のようなものである. 1.5(10) = 1.1(2) 3.25(10) = 11.01(2) 理論的には小数が無限に続く値でも,そのうちの有限個の桁数でその値を表すしかない. 例えば,0.1 を2進数の小数で表すと 0.1(10) = 0.000110011001100110011...(2) と無限に続くが,コンピュータの内部では有限桁で丸められている. このような場合には,当の値ではなく,近似値でしか表すことができない. 指数表記(浮動小数点表記) 科学計算では非常に大きな実数値や非常に小さな実数値も扱うことがある. そのようなときには,通常の10進数の表記ではなくて,次のような指数表記で表すれば 無駄な 000...000 という桁を表記しなくてもよくなる. 1234567890000000000000

    浮動小数点数型と誤差
  • TomDoc for Ruby - Version 1.0.0-rc1

    TomDoc for Ruby - Version 1.0.0-rc1 Purpose TomDoc is a code documentation specification that helps you write precise documentation that is nice to read in plain text, yet structured enough to be automatically extracted and processed by a machine. The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to

  • インスタンス変数 - Wikipedia

    インスタンス変数 (instance variable) とは、Smalltalk等のオブジェクト指向言語において、オブジェクトのインスタンスごとに割り当てられた変数のことである。フィールド (field)、データメンバ (data member)、メンバ変数 (member variable) とも呼ばれる。それに対してクラス変数は、同じクラスに対する全てのインスタンスが同じ値を共有する。 インスタンス変数は、インスタンスフィールド (instance field) あるいは、略して「フィールド」と呼ぶこともある (来、この「フィールド」の意味には、「クラス変数」も含まれるが、プログラミング言語によってはインスタンス変数のことを「フィールド」と呼び、クラス変数とは名前を区別しているもの[要説明]もある)。UMLではインスタンス変数のことを属性 (attribute) とも呼ぶ。 Jav

  • インタフェースの表裏を意識する: GNU getopt & autotools - ny23の日記

    公開しているコードについて問い合わせを受ける機会が増えてきたので,もう少しソフトウェアとして導入・利用し易くしようとインタフェース周りを作り直した.自作の(コマンドライン)オプション解析と手書きの環境依存 Makefile が利便性を損ねているのは明らかだったので,標準的なオプション解析ライブラリとビルドツールに対応することにした.オプション解析を書き換えたのはだいぶ前(自作の学習器が MacPorts から導入可能になっていた - ny23の日記)のことだけど関連するのでまとめてメモしておく. C++ で使えるオプション解析ライブラリは古典的な GNU getopt を初めとして getoptpp, google-gflags, boost::program_options, cmdline など色々あるが,最近のもので定番と呼べるほどのものはないようだ. How to Parse Co

    インタフェースの表裏を意識する: GNU getopt & autotools - ny23の日記
  • ソースファイルとヘッダーファイル

    VCで初めてC言語に触れた人にとって、「ソースファイルとヘッダーファイル」という概念はかなーり難しいものだと思います。特に「インクルードしてるのになんで”定義されていない識別子です。”なんて言われるのーっ!?」と苦しんでいる方もいるのではないでしょうか。 そこで、今回はこの2ファイルの関係について見ていこうと思います。 まず「ソースファイル」について見てみましょう。 コンパイラはソースファイルをコンパイルします。コンパイルを行うプログラムCL.exeは、引数としてソースファイルひとつを取り、そのファイルをコンパイルします。つまり「ヘッダーファイル」はコンパイルしません。これが重要。ただし、「インライン関数」と「テンプレート関数」については別。これはあとで解説します。 また、ソースファイルはひとつずつコンパイルされます。複数のソースファイルがくっつけられてまとめてコンパイルされることはなく、

  • 安全な DLL の中にあるC++ のクラスのエクスポート

    最初に DLL とは? Windows には Dynamic Link Library ( 以下 DLL ) という、プロセス開始時・起動中に動的にライブラリをリンクする機能があります。このDLL を使うことで、 プログラムを他のアプリケーションと共有してメモリの節約になる 普通のライブラリとしても使え、アイコンやダイアログなどのリソースも格納することが出来る。 DLL の中にある処理やリソースを変更して DLL の変更のみでプログラムを修正することが出来る プロセス間でのメモリ共有を行うことも出来きる UNIX系にも似たような動的リンクライブラリがありますが、UNIX系のはコンパイラ側での対応であり、C言語のソースコードで互換性を保っているUNIXのアプリケーションで、動的にバイナリをリンクしにくい性質があるため、それほど使える機能ではないでしょう。 逆に DLL の欠点 DLLのバージ

  • 社会人になってから始めるTopCoder - firewood's diary

    これはCompetitive Programming Advent Calendarの11日目の記事です。 Advent Calendarには入門記事が意外となさそうなのと、自分自身初心者なので、紹介記事を書きます。 きっかけ 今年の4月から競技プログラミングをはじめました。「人材獲得作戦」や「コーディングスキル判定」をやってみたらめちゃくちゃ時間がかかったりして漠然とどうにかしたいなと思っていたところ、Google Code Jam勉強会というのを取引先の人から教えてもらい参加しました。問題が面白いし、あまりにもコードが書けないのでTopCoderに登録してそれ以来はまっています。 TopCoderとは 競技プログラミングは文字通りプログラミング能力を競うものです。TopCoderは競技プログラミング環境を提供する会員制サービスで、要は、コーディングの速さと正確さを競うオンラインゲーム

    社会人になってから始めるTopCoder - firewood's diary
  • EffectiveC++入門

    C++プログラマにとって、『Effective C++』はバイブルのような存在です。どれくらいバイブルかというと、皆さんの使っているGNUのGCCコンパイラには、EffectiveC++のコーディングガイドラインに従っているかどうかチェックするためのコンパイラオプション『-Weffc++』が、あるくらいです。 しかし、その内容は決して初心者向きではなく、実際に買ったはいいが、書棚の肥やしになっているような人たちも多いと思います。そこで、そのような初心者の人たちに EffectiveC++ を読み解くために各章のエッセンスをまとめたガイドラインを書いてみました。 C++はもう時代遅れとよく言われますが、組み込み系からビジネスシステムまで、幅広くカバーできる言語は、C++以外にありません。C++を知っていれば、おそらくどのような業界にも通用するでしょう。ITプログラマを自負するのであれば、C+

    satojkovic
    satojkovic 2012/07/08
    勉強になる
  • 「リーダブルコード」が良書すぎて胃が痛い - As a Futurist...

    インフラ系のエンジニアは、あまりリファクタリングとかクラス構造といった視点でコードを読む機会が少なくて、勢い作ったスクリプトやツールはそれはそれはひどいものになりがちです(体験談)。 僕もエンジニアになって以来、まともなコードなんか書いたことなくて、従ってる原則といえば、「グローバル変数は悪」とか「短いことはいいことだ」とか「コメントは書かない方がいい」とか、なんか学生の時にたまたま目にしたよくわからない何かに従ってる程度。 少し大きい規模を書き始めると、昨日の自分と今日の自分で命名規則が全然一貫性なくて、「getHoge()」と「makeFuga()」がおんなじようなことをやってたりしていつも嫌悪感に駆られてました。 ちょうど 1000 行くらいのアプリ書いてたところだったので毎日吐き気をこらえながら「まずは動くものをつくるんだ。全てはそれからだ」と言い聞かせて汚いコードをゲロゲロしてた

    「リーダブルコード」が良書すぎて胃が痛い - As a Futurist...
  • リーダブルコード

    美しいコードを見ると感動する。優れたコードは見た瞬間に何をしているかが伝わってくる。そういうコードは使うのが楽しいし、自分のコードもそうあるべきだと思わせてくれる。書の目的は、君のコードを良くすることだ。(書「はじめに」より) コードは理解しやすくなければならない。書はこの原則を日々のコーディングの様々な場面に当てはめる方法を紹介します。名前の付け方、コメントの書き方など表面上の改善について。コードを動かすための制御フロー、論理式、変数などループとロジックについて。またコードを再構成するための方法。さらにテストの書き方などについて、楽しいイラストと共に説明しています。日語版ではRubyやgroongaのコミッタとしても著名な須藤功平氏による解説を収録。 正誤表 ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作

    リーダブルコード
    satojkovic
    satojkovic 2012/06/09
    良さそう
  • メンバ変数(インスタンス変数)の命名 - 神様なんて信じない僕らのために

    職場で話題になったこと。 m_value mValue this.value(self.value) _value value_ value と色々あるわけですが、 世の中では 「m_ or mでメンバである事を明示する派」(m派) 「mは冗長だから_だけで表すよ派」(接頭辞アンダースコア派=マーチン・ファウラー派) 「言語機能に乗っ取ってthisつけて表すよ派」(this派) 「前置_は言語処理系に予約されている(c/c++)ので後置_にするよ派」(接尾辞アンダースコア派) id:nattowさんの指摘で追記。 「つけないと区別できないのは設計がまずいから俺はつけないよ、てか接頭辞も接尾辞もきもいよ派」(設計上正しければ区別必要ないよ派) がいるような気がします。 (Rubyの@派とかは知らぬ) で、割と最近「後置_派」(C++ Coding Standardsの影響)になったんですが、

    メンバ変数(インスタンス変数)の命名 - 神様なんて信じない僕らのために
  • Primer

    Primer is a set of guidelines, principles, and patterns for designing and building UI at GitHub. It provides a shared language and standardized approach to delivering cohesive experiences.

    Primer
  • クラス設計の考え方

    ソフトウェアの開発において、クラスの設計は、大切なポイントの1つです。どのようなクラスや関数を作るのか。ソフトウェアのデザインは、それによって決まります。 現在のソフトウェア工学で主流となっているのは、オブジェクト指向の考え方です。開発言語も、C++Javaといったオブジェクト指向言語が広く使われています。しかし、いくらオブジェクト指向言語を使って開発していても、クラス設計の考え方が誤っていれば、まったくオブジェクト指向的でないソフトウェアができてしまいます。 貴方が、あるちょっとした機能の追加を頼まれたとしましょう。さて、いくつのクラスや関数を作れば良いのでしょうか。また、そのクラスや関数の名前は、どのように付ければ良いのでしょうか。貴方なら、どのように考えを進めて、クラスや関数を設計していきますか? ここでは、ワイルドカードを使った文字列の検索を例に、クラス設計をする際の考え方を紹介

  • Social Codingの世界

    デブサミ2012の講演スライド, 2012/2/17 http://seshop.com/se/timetable/21 http://togetter.com/li/258035

    Social Codingの世界
  • googletestではじめるC++の単体テスト - シリコンの谷のゾンビ

    今年度になって初めて単体テストなるものを使うようになったゆとりであるが,人間変われば変わるもので,コードを書いたら一緒にテストを書かないと不安を感じるようになった.それまでprintfデバッグでなんとかしてきたC/C++のコーディングもこのままではまずいと思って,巷で評判のgoogletestなるものを使うことにした. 家のページから最新版をダウンロード(orレポジトリからチェックアウト)して % ./configure % make % sudo make installすればいいんでしょフフン,と思っていたらmake installで怒られた.どうやらv.1.5あたりからgoogletestのアーカイブファイルをその都度作成することを推奨するようになったらしい.ゆとりは想定外の挙動に大層弱いので,これで一晩費やしたことは秘密.というわけで二晩目に何とか動いたので,作業メモ. さて,こ

    googletestではじめるC++の単体テスト - シリコンの谷のゾンビ
  • テスト駆動開発とかよくわからない人のための今すぐ使えるCppUnitテンプレ - EchizenBlog-Zwei

    時代はテスト駆動開発(TDD)らしいので有名な単体テスト用フレームワークCppUnitを試してみた。 これまでテスト用コードは自前で書いていたのでフレームワークのありがたさを実感するなどした。ただCppUnitは「必ず書かないといけないコード」の量が何気に多くて初見でめげそうになる気もした。なので主に自分用にCppUnitコードのテンプレをメモしておく。 まずはCppUnitを入手する。例えば Download CppUnit - C++ port of JUnit from SourceForge.net から入手できる。入手したらインストする。 $$ tar xzfv cppunit-1.12.1.tar.gz $$ cd cppunit-1.12.1.tar.gz $$ ./configure $$ make $$ sudo make installでここから解説。CppUnitでテ

    テスト駆動開発とかよくわからない人のための今すぐ使えるCppUnitテンプレ - EchizenBlog-Zwei
  • 競技プログラミングと問題解決能力 - 発声練習

    競技プログラミングで鍛えられる「問題解決能力」とソフトウェア開発で求められている「問題解決能力」は微妙に違う。前者は端的に言えば試験を突破する能力、後者は試験を突破する能力+作問能力を指すことが多い。 Togetter競技プログラミング論争 なので、「競技プログラミングにおいて優秀な成績を残したから、彼/彼女は優秀なソフトウェア開発者だ」というのは言い過ぎ。でも、「競技プログラミングにおいて優秀な成績を残したから、彼/彼女は優秀なソフトウェア開発者になれるかもしれない」というのは十分に説得力を持つ話。 水泳部だった人がライフセイバーに適しているかいわれれば、泳げない人よりは適性があると考えるのは普通。でも、水泳部だったからといって、ライフセイバーの仕事をすぐにこなせるかといえばそんなことはない。泳げるというのはライフセイバーの技能のひとつでしかない(でも、とても基的な技能)。 ウェイト

    競技プログラミングと問題解決能力 - 発声練習
    satojkovic
    satojkovic 2012/01/19
    資格も同じかも。このことを認識しておくことが重要かな。
  • テストとデバッグ

    The document discusses product architecture and its role in manufacturing firms. It defines product architecture as the scheme by which the function of a product is allocated to physical components. Product architecture impacts a firm's ability to achieve strategic goals like innovating new products, responding to market changes, and lowering production costs. The author argues that understanding

    テストとデバッグ
  • ソフトウェア開発に携わるすべての人に捧げる、アジャイルにソフトウェアを開発する為に読むべき15冊 | Act as Professional

    私は夏休みの宿題のやり方を教えてもらったことがありません。約2ヶ月という限られた時間で、どういう風に消化していくと良いのかを学習したことがなかったのです。 夏の終わりに24時間テレビが放送されますが、あれを見ながら、答えをチラ見し、綺麗なドリル(*1)を1冊消化するのは忘れられない子供の頃の思い出です。 この経験はソフトウェア開発にも似ていて、開発の手法を知らなければ、良い結果を生むのは難しいのです。不幸なことに、夏休みの宿題のように明確に何をやるべきなのか、明確では無いのです。 夏休みの苦い思い出と、ウォーターフォールっぽい大失敗プロジェクトの経験をいくつか得た上で、アジャイルソフトウェア開発を学ぶことによって、ソフトウェアのつくりかたを学びました。 これは、中小のSIerでも、イケてるWEBサービスを提供している会社でも教えてくれたことではありませんでした。そう、夏休みの宿題のやり方を

    ソフトウェア開発に携わるすべての人に捧げる、アジャイルにソフトウェアを開発する為に読むべき15冊 | Act as Professional