タグ

プログラミングに関するyoshidaaのブックマーク (19)

  • フィボナッチ数列 on Ruby

    はじめに 今回は、フィボナッチ数列1の任意の項を得る関数について調査・考察してみました。 そもそも「フィボナッチ数列」とは? 以下の漸化式で表される数列です。 \[\eqalign{ f(0) &= 0 \\ f(1) &= 1 \\ f(n+2) &= f(n+1) + f(n) \\ }\] ここでは一般項を “0番目” から順に 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, … と考えます。この数列の第 n 項の値を得るプログラムを考えていきたいと思います。 フィボナッチ数列の第n項を得るプログラムの例 (1) シンプルな再帰呼び出し 再帰呼び出しを用いる、最もシンプルな例を書いてみました。 # # 01_simple.rb # def fibonacci_simple( n ) case n when 0, 1 return n else return fibo

    フィボナッチ数列 on Ruby
  • 良いコードとは何か - エンジニア新卒研修 スライド公開|CyberZ Developer

    CyberZ CTO室のメンバーの森 (@at_sushi_at) です。 先日、株式会社サイバーエージェントの2021年度 エンジニア新卒研修でコードの品質に関する講義を行いました。 そこで話した内容とスライドを完全公開します。 45分の内容のため、かなり長いですが、個人的にぜひ一読して欲しい内容になっています。 はじめに こんにちは、森 篤史と言います。2019年度入社で今年で3年目になります。株式会社CyberZのOPENREC.tvというプロダクトでAndroidアプリチームのリーダをやっています。 最近はプログラムを書く仕事以外に、次世代マネジメント室という全社横断組織でDevelopers Blogの改善プロジェクトを実行したり、CyberZ CTO室で組織活性化に取り組んでいます。 あと、2019年度の未踏スーパークリエータにも認定されました。 メインの仕事としては、入社して

    良いコードとは何か - エンジニア新卒研修 スライド公開|CyberZ Developer
  • プログラミング言語の未来はどうなるか | κeenのHappy Hacκing Blog

    κeenです。最近JEITAのソフトウェアエンジニアリング技術ワークショップ2020に参加したんですが、そこで五十嵐先生、柴田さん、Matzとパネルティスカッションをしました。その議論が面白かったので個人的に話を広げようと思います。 年末年始休暇に書き始めたんですが体調を崩したりと色々あって執筆に時間がかかってしまいました。 時間を置いて文章を書き足していったので継ぎ接ぎ感のある文体になってるかもしれませんがご容赦下さい。 というのを踏まえて以下をお読み下さい。 いくつか議題があったのですが、ここで拾うのは一番最後の「プログラミング言語の未来はどうなるか」という話題です。 アーカイブが1月末まで残るようです。もうあと数日しかありませんが間に合うかたはご覧下さい。 そのとき各人の回答を要約すると以下でした。 五十嵐先生:DSLを簡単に作れる言語というのが重要。それとプログラム検証、プログラム

    プログラミング言語の未来はどうなるか | κeenのHappy Hacκing Blog
  • プログラミングのルール

    自分のルールを twitter に書いてみました。1時間半ぐらいやってたらしい。 * * * 変数名やクラス名に省略した単語でなく正しいスペルのものを使う。 他人のインデントはいじらないが、間違ってるのはなおす。同じインデントシステムを使う。勝手に発明しない。ちなみに、K&R 大域変数は使わない。Singleton も使わない。インスタンス変数経由でパラメータを渡さない。必要な場合のみに使う。 コメントは関数/メソッドの役割に対しておこなう。bug fix comment には例を含める。 測定を伴わない最適化は無意味で間違っている。 xUnit を使う。 修正前のコードを残すようなことはせず、版管理にまかせる。 fprint() ; exit() ; のようなエラー処理をせず、エラー処理ルーチンを呼ぶ。 malloc を裸で使わない。 use case 図から書き始める。 if else

  • Ruby で「Lisp脳」に迫る。 - YNote

    はじめに 再利用性の高いプログラムを書くにはどうしたらよいのだろう、と、いつも思う。 学生のころ、BASIC と C と Verilog を勉強して、社会人になってから Ruby をちゃんと勉強した。正確には学生のころも Ruby さわったことがあったんだけど、「正規表現が使えてセミコロンがいらない C 」くらいにしか思ってなくて、それよりも踏み込んで便利さを知ったのは、けっこう最近。 再利用性が高いプログラムを書くのに、Ruby はやっぱり便利だ。 Ruby が便利な理由としては「メタプログラミングが得意」とか「オブジェクト指向だから」、とか、いろいろ言われるけれども、個人的には「『DoA(Data Oriented Approach)』を気軽に実践できる」というのが大きいと思う。 DoA というのは「データ中心アプローチ」とも言われていて、データ構造の変遷を中心にプログラムを設計してい

    Ruby で「Lisp脳」に迫る。 - YNote
  • コンパイラの本: なつたん

    誰も作ってくれなかったので、自分でまとめてみた。 目次からざくっと拾っただけなので、間違いあるかも。を買うときは自分で中身確認してくださいね。 ドラゴンブック、タイガーブック、中田先生の、optimizing compilers modern architecturesの4冊は、コンパイラで使われる技術について、最適化まで含めてひととおり書いてある。 あとは作ってみよう系で適当にまとめた。当は「○○という最適化が載ってる載ってない」までまとめたいけど、まだそこまで理解が進んでない。

    コンパイラの本: なつたん
  • Pythonでいろんなバイナリファイルを覗いてみる – taichino.com

    プログラマをしていると、ちょくちょくバイナリデータから情報を読みたくなりますね。そんな時は、ブツブツ言いながらバイナリエディタと睨めっこすることになるわけですが、これが結構大変なので、何とか楽にならないかなぁと思って探していると、hachoirというナイスなpythonモジュールが見つかりました。このモジュールを使うとバイナリデータをパースして様々なデータを取得できます。かなり多くのデータフォーマットに対応している(現時点で70種類)のが素晴らしいです。 hachoirはいくつかのモジュールに分かれているのですが、大抵は以下をインストールすれば良いと思います。 $ easy_install hachoir_parser $ easy_install hachoir_metadata このモジュールにはhachoir-metadataというコマンドラインツールが含まれていて、コードを書かなく

  • モダンなC, C++の開発環境の構築方法 - 考える人、コードを書く人

    まだC, C++がないようなので書いてみた。主にLinux(DebianとかUbuntu)での環境構築について。 コンパイラ まずはapt-getでコンパイラをインストールする。UbuntuやDebianなら以下のコマンドでgccやg++および標準ライブラリ等がインストールされる。 $ sudo apt-get install build-essential デバッグツール デバッガおよびデバッグツールは少なくとも以下の三つは入れる。(あとltraceも欲しいかな?) GDB 言わずと知れたGNUのデバッガ Valgrind メモリリークや不正メモリアクセスの検出 strace システムコールのトレース $ sudo apt-get install gdb valgrind strace ビルドツール C, C++のビルドツールといえばまずmakeが浮かぶけど、最近ではSConsやCMak

    モダンなC, C++の開発環境の構築方法 - 考える人、コードを書く人
  • Graph Twiddling in a MapReduce World

  • テストを書くこととテストをすることの違い - 未来のいつか/hyoshiokの日記

    会社でレガシーコード改善ガイドの読書会をやっていて、次回で読了だ。4月に入ってから週に1回くらいのペースでやっていて、2ヶ月半くらいかかった。途中、ゴールデンウィークや所用で開催しないこともあったので、10回くらいで完走したことになる。 一人当たり、1章ないし2章くらいを担当して、その章に書いてあることを説明した後にみんなであーだこーだ議論をする。気になったことを質問したり、どうも良く分からないことをみんなで考えたりする。 テストがないコードはレガシーコードだ!というキャッチフレーズはわたしの心をとらえた。 参加者の皆さんとその価値観を共有できた事はうれしい。 現場での開発の実情をいろいろ教えてもらった。テストを書くことはあまり一般的ではないということにわたしは衝撃を覚えたのであるが、この読書会を通じて、テストを書かない開発というのがレガシーコードを作っている事に他ならないという共通の認識

    テストを書くこととテストをすることの違い - 未来のいつか/hyoshiokの日記
  • 単一責任の原則

    単一責任の原則は、英語ではthe Single Responsibility Principleといい、SRPと略されます。 これも、あなたのオブジェクト指向での物事の捉え方が最適かどうかについてのガイドとなるものです。 原則というのは、みんなそうなんですね。 ソフトウェア開発では、この捉え方が最適かどうか(少なくとも、間違っていないこと)というのは、開発の成否を握るほど重大な問題です。 常に意識すると共に、成果物に対してはこれらの原則に照らして妥当性を検証し、随時リファクタリングしていかなければなりません。コンテンツ日常にある例役割で分けるわかりやすくて扱いやすいビジネスの場での例ソフトウェア開発者の方のための追記オススメ単一責任の原則は、非常にシンプルですが、同時に、守るのが非常に難しい原則でもあります。 これは、「オブジェクトの役割(責任)は、一つでなければならない」という原則です。

    単一責任の原則
  • UNIX哲学 - Strategic Choice

    ソフトウェア開発に関する文化的な規範と哲学的アプローチのまとまりであり、UNIX OSの先駆的な開発者たちの経験に基づいている。レイモンド:UNIXプログラミングの技法モジュール性のルール クリーンなインターフェースで接続されるシンプルなパーツを書け。 明瞭さのルール 明瞭さは独創性よりも良い。 合成のルール 他のプログラムと接続できるようプログラムをデザインせよ。 分割のルール ポリシーをメカニズムから分離せよ。インターフェースをエンジンから分離せよ。 シンプルさのルール シンプルさを求めてデザインせよ。複雑にしなければならない場合に限り、複雑さを加えよ。 倹約のルール 他に方法がないことが実験により明らかである場合に限り、大きいプログラムを書け。 透明性のルール 透明性を求めてデザインせよ。調査とデバッグが簡単になる。 頑丈さのルール 頑丈さは透明性とシンプルさから生まれる。 代表のル

  • バグゼロのための設計原理

    バグゼロのための設計原理 昨今、いかにソフトウェアの不具合を減らすべきかという議論がいろいろとなされています。現状として、量産直前での総ざらい、過去トラチェックで不具合を発見しても、待ち構えているのはあまりにも大きな手戻りと、穴を空けてしまう日程への困難な交渉業務です。 そこで、よく言われるようになってきたのが、“日々の品質の作り込み”=“先手管理”が大切だということですが、スローガンとして理解できても、さて担当として何を実践すればよいのか迷うところです。もう少し、具体的にブレークダウンした方法論は、何かないのかと調べてみました。 その結果、以下の表に示す七つの実践原理をソフトウェア工学の論文より見つけてきました。[君島 浩氏(富士通)論文より部分引用] 少しでも皆様のお役に立てるようここに公開します。

  • 設計におけるオブジェクトの責務分配に有効なものさし -凝集度と結合度- | オブジェクトの広場

    1. はじめに 皆さん、こんにちは。私はオージス総研でオブジェクト指向技術を用いたSI、コンサルティングを業務とする、プロの仕事を目指す、一介のUMLシルバーレベル1のプログラマ2です。ソフトウェア業界では、オブジェクト指向も、もはや普通の技術として認知されています。有名なマイクロソフトのVB、VC++をはじめ、現在使用している開発環境のほとんどは、すべてオブジェクト指向をサポートしているといってもよいでしょう。オブジェクト指向を知らない人でも、気が付かないうちにオブジェクト指向している、なんてこともあるようです。 でもオブジェクト指向は、単にソフトウェアをより良く作るための手段のひとつですから、上手く利用しないと、そうするつもりはなくても、とんでもないソフトウェアを作ってしまうことになりかねません。悲しいことに、オブジェクト指向は結構敷居が高いと思います。オブジェクト指向のメリットである

    設計におけるオブジェクトの責務分配に有効なものさし -凝集度と結合度- | オブジェクトの広場
  • オブジェクト指向設計の原則 [それはBooks]

    アジャイルソフトウェア開発の奥義」を読んで第二弾。オブジェクト指向設計の原則に関するメモです。自分で読んで思い出せるくらいの内容しかメモってないと思われるので、もっと詳しい解説が欲しければ書を買ってください。 書には、クラス設計の原則として5つの原則が載っています。 単一責任の原則 (The Single Responsibility Principle: SRP) オープン・クローズドの原則 (The Open-ClosedPrinciple: OCP) Liskovの置換原則 (The Liskov Substitution Principle: LSP) 依存関係逆転の原則 (The Dependency Inversion Principle: DIP) インターフェース分離の原則 (The Interface Segregation Principle: ISP) パッケー

  • MSDN マガジンのバックナンバー

    このサイトでは、分析、カスタマイズされたコンテンツ、および広告に Cookie を使用します。このサイトを引き続き閲覧すると、Cookie の使用に同意するものと見なされます。 詳細情報

  • 「レガシーコード改善ガイド」のススメ 第5回:レガシーコードを攻略するための原則とプラクティス

    CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

    「レガシーコード改善ガイド」のススメ 第5回:レガシーコードを攻略するための原則とプラクティス
  • Break Free of Code Deadlocks in Critical Sections Under Windows

    This browser is no longer supported. Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support. Patterns in Practice Cohesion And Coupling Jeremy Miller Contents Decrease Coupling Increase Cohesion Eliminate Inappropriate Intimacy The Law of Demeter Tell, Don't Ask Say It Once and Only Once Wrapping Up Much of software design involves the ongoing q

    Break Free of Code Deadlocks in Critical Sections Under Windows
  • 構造化プログラミングを知らない子供たち - 新・日々録 by TRASH BOX@Eel

    それは私のことですがな*1。 サイエンス社から『構造化プログラミング』の日語訳が出版されたのが1975年で*2、それから30年以上経つ訳だけど、計算機科学とかソフトウェア工学とかそういった類の正規の教育を受けていないプログラマの中で構造化プログラミングについてそれなりにキッチリと勉強した人ってどれ位いるのだろうか? 年代や分野にもよるだろうけど、少なくとも比較的若手(20〜30代半ば?)の職業プログラマでは結構少数ではないか、と思う*3。 というのも最近は、 オブジェクト指向(例えばC++的なクラス指向なオブジェクト指向プログラミング)で開発するのが基。 だから最初からオブジェクト指向プログラミングを勉強しる。 「オブジェクト指向プログラミング > 構造化プログラミング」だから、オブジェクト指向の勉強だけでおk。 てか構造化プログラミングなんて常識だろ? 的なノリが主流らしく、わざわざ

    構造化プログラミングを知らない子供たち - 新・日々録 by TRASH BOX@Eel
  • 1