タグ

関連タグで絞り込む (206)

タグの絞り込みを解除

programmingに関するNyohoのブックマーク (441)

  • 継承はなんでダメ? - まめめも

    「オブジェクト指向の継承を使うな」という主張が広まっているようです。なんでダメになったんでしょうか。 インターネットで見かけた「継承はダメ」という主張をいくつか眺めて、友人と議論しつつ、考えてみました。 「コードが読みにくくなる」 継承があると、メソッド呼び出しが実際にどのメソッド定義を呼び出すのか字面でわからない。 デバッガを使って、親クラスのメソッドに飛んだり、子クラスに飛んだりするのを追いかけないと行けない。 つらい。という主張。 めっちゃわかる。わかるんですが、これは「高度に共通化されたコードは読みにくい」という一般的な側面がかなり大きいような。 たとえば継承の代わりに高階関数を使うと、関数呼び出しがどのクロージャに飛ぶか字面でわからなくなる。 ひどいとコールバック地獄になって何が何やらになります。 継承がことさらにまずい理由を想像すると、すべてのメソッド呼び出しがポリモーフィック

    継承はなんでダメ? - まめめも
  • オブジェクト指向はコードを複雑に読みにくくする - きしだのHatena

    「オブジェクト指向するとプログラムが読めなくなるから禁止」のような話は昔からあって、新しい技術についてこれない人を揶揄するようなニュアンスで使われていましたが、実際にはこれはオブジェクト指向迷路にうんざりした現場での率直な意見だと思います。 オブジェクト指向は、まじめにやるほどプログラムを読みにくくするという性質をもっています。 ※ 使い方次第というコメントついてますが、だからこそちゃんと性質をしっておく必要があると思います。 オブジェクト指向の代表的な指針を3つあげると次のようなものがあります。 オブジェクト同士の連携としてプログラムを組む 単一責務の原則 インタフェースと実装の分離 まず、オブジェクト同士の連携でプログラムを組むと、コードが飛びまくって追いにくくなります。そして単一責務の原則により、小さいクラスが大量に生成されて、追いにくさがさらにあがっていきます。 ダイクストラ先生が

    オブジェクト指向はコードを複雑に読みにくくする - きしだのHatena
  • Pythonは遅い遅い言われてJITとか中途半端なことせずにフルネイティブコンパイラを作ったらどうですか?

    回答 (13件中の1件目) JIT方式は中途半端なものではありません。もちろん万能でなんでも優れているわけでもありませんが以下の利点があります。 * プログラムは単一の機械独立、OS独立の形式で配布できる(実行時に実行環境の機械語に変換できる) * 配布形式が小さくなる。マシン中立なバイナリ表現にした場合は特に。 * 全体をネイティブコンパイルするのではなく、速度にシビアに関わる最内周ループや何度も実行される場所に限ってネイティブコンパイルすることで実行に必要なメモリフットプリントを減らすことができる。 * 実行時だけわかる情報を元にした最適化やコード生成が可能。例えば、 *...

    Pythonは遅い遅い言われてJITとか中途半端なことせずにフルネイティブコンパイラを作ったらどうですか?
    Nyoho
    Nyoho 2023/05/07
    「なので質問者さんが中途半端と言われてる3が実はかなり有望なのです。」
  • Charts showing the fastest programs by language (Benchmarks Game)

    Fastest contributed programs, grouped by programming language implementation As the median line for Rust fastest contributed-program times is outside the IQR box for C#, there's likely to be a difference between those two groups of measurements. There's likely to be a difference between the Dart fastest contributed-programs and the Racket and PHP groups : : and there's a big difference between mea

    Nyoho
    Nyoho 2023/01/21
    これか。Benchmarks Gameの箱ひげ図。
  • Examples of floating point problems

    Hello! I’ve been thinking about writing a zine about how things are represented on computers in bytes, so I was thinking about floating point. I’ve heard a million times about the dangers of floating point arithmetic, like: addition isn’t associative (x + (y + z) is different from (x + y) + z) if you add very big values to very small values, you can get inaccurate results (the small numbers get lo

  • この10年のプログラミング言語の変化 - 西尾泰和のScrapbox

    @nishio: あ、そうか、10年前からあったけど10年間の間に勢力を拡大したケースがあるからあんまり厳しく切らない方がいいのか(TypeScriptの登場が2012年、Rustの登場が2010年だった)

    この10年のプログラミング言語の変化 - 西尾泰和のScrapbox
  • たのしいコーディングのための「CUPID」特性 - iki-iki

    当初はちょっとしたSOLID批判のつもりが、「藪を突ついて蛇を出して」しまったのですが、物事はそこから具体的で目に見えるものへと発展しました。仮に、近頃はSOLID原則が役に立たなくなっているのだとしたら、何に置き換えればよいのでしょう? あらゆるソフトウェアに通用する原則はあるのでしょうか? そもそも「原則」とは何を意味するのでしょう? 私は「仕事がたのしくなるソフトウェアならではの特性や性質がある」ということを確信しています。コードでそのような質が高まれば高まるほど、仕事もどんどんたのしくなります。しかし、何事もトレードオフですから、自分の置かれている状況をつねに考慮する必要があります。 そうした特性はたくさん存在しており、互いに重なりや関連がありますし、説明の仕方もさまざまです。ここでは私がコードで気にかけている要素を強く支えていると思える5つを選びました。選ぶ数はこれぐらいが丁度良

    たのしいコーディングのための「CUPID」特性 - iki-iki
  • 「オブジェクト指向神話からの脱却」という特集をWEB+DB PRESSで書きました - きしだのHatena

    「オブジェクト指向神話からの脱却」というあおり気味タイトルの特集をWEB+DB PRESS vol.132で書きました。 12/24発売!クリスマスプレゼントです WEB+DB PRESS Vol.132 作者:きしだ なおき,加藤 尋樹,斉藤 洸紀,牟田 裕太郎,吉澤 政洋,朝日 リナ,鈴木 僚太(うひょ),川島 義隆,五十嵐 進士,末永 恭正,佐藤 雄太,吉井 健文,牧 大輔,西山 和広,吉田 花春,古川 雅大,岡林 大,池澤 春菜,和田卓人,日高 正博,はまちや2,竹原技術評論社Amazon 大まかには、「オブジェクト」でソフトウェアをぜんぶ考えるということに無理があったので、パーツそれぞれ適したやりかたでやっていこうぜ!という内容です。 ソフトウェアを切り出したときのパーツとしてのオブジェクトの特性が同質であるという暗黙の前提があって、だから「オブジェクトの話をすればソフトウェア開

    「オブジェクト指向神話からの脱却」という特集をWEB+DB PRESSで書きました - きしだのHatena
  • コードは2回書きたい - Mitsuyuki.Shiiba

    TDD についておさらいしておきたいなと思ったので読んだ t-wada.hatenablog.jp とても良かった。自動テスト、テストファースト、テスト駆動開発のそれぞれについて、どういうものなのか・効果・注意点が分かりやすく説明されている。たしかに、自動テストは必ず使うけど、テストファーストやテスト駆動開発は状況に合わせてやったりやらなかったりする 書籍「テスト駆動開発」の付録Cと対になっているということなので、付録Cも読みたくなって読み直しておいた。そちらにはテスト駆動開発のこれまでとこれからについて書いてあるので、頭の整理ができてとてもよかった Checking Driven Development 付録Cでは、開発者自身が書く自動テストはテストではなくてチェック、ということについて触れられている。そうだなぁって思う。自動テストでは、自分が考えたとおりに動くかどうかをチェックしている

    コードは2回書きたい - Mitsuyuki.Shiiba
  • 自作したRISC-V向けCコンパイラでセルフホストまでこぎつけた - 詩と創作・思索のひろば

    低レイヤを知りたい人のためのCコンパイラ作成入門 まさに低レイヤのことが分かっておらず、以前から気になっていたこの。取り掛かってみたところ思いのほかスイスイ進められて、勢いに乗ってセルフホスト(自分が書いたコンパイラで自分自身をコンパイルするところ)までいけたので記念に書いておく。正確には C コンパイラのサブセットです。 GitHub - motemen/mocc 全体的な進め方は、 上記のの通りに進めていく。 それ以降は自作の 8queen が普通に書けるように機能を強化。 それ以降はセルフホストを目標に進める。 プリプロセッサやリンカは作らず、C からアセンブリまで。 という感じ。自分は手を動かさないと進んでる気がしないので、まずは書いてみつつわからない所があれば調べる、というスタンスでいく。 あと、せっかくなので RISC-V の勉強もしたかったのでこれ向けに書く。なので実行は

    自作したRISC-V向けCコンパイラでセルフホストまでこぎつけた - 詩と創作・思索のひろば
  • 【計算結果が正しくない!?】案外知らない、計算誤差の話 - Qiita

    ■なぜ、正しく計算できないのでしょう? まず、最初の $333.75b^{6}$ を手計算してみましょう。 $b^{6}$ は、$1,314,174,534,371,215,466,459,037,696$ なので、$438,605,750,846,393,161,930,703,831,040$ です。 次の項のカッコの中を計算していきます。 $11a^{2}b^{2}$ は、$72,586,759,116,001,040,064$、 $b^{6}$ は、$1,314,174,534,371,215,466,459,037,696$、 $121b^{4}$ は、$145,173,518,207,904,485,376$ なので、 カッコの中は $-1,314,174,606,957,974,558,362,483,010$。 それに$a^{2}$ を掛けて $-7,917,111,779

    【計算結果が正しくない!?】案外知らない、計算誤差の話 - Qiita
    Nyoho
    Nyoho 2022/11/06
    計算誤差
  • 我々向けの Algebraic Effects 入門

  • 独学でも教えてもらってもダメ、プログラミングができない本当の理由

    今はプログラミングができないけれども、ゆくゆくはできるようになりたい。そう思っている人は多いだろう。そうした人が知りたいのは「独学でプログラミングができるようになるのか」ということではないだろうか。 こうしたことを考えているのは、「独学コンピューターサイエンティスト Pythonで学ぶアルゴリズムとデータ構造」(日経BP発行)という書籍を読み始めたからだ。著者のコーリー・アルソフ氏は、大学の政治学科を卒業し、独学でプログラミングを学んで職業プログラマーになったという。前著の「独学プログラマー Python言語の基から仕事のやり方まで」(日経BP発行)は、そうした経験を通して同氏が得たプログラミングの知識をまとめたもの。そうした知識の中から、特にアルゴリズムやデータ構造といったコンピューターサイエンスに焦点を当てて解説したのが書だ。 もっとも同氏がいう「独学」は、大学でコンピューターサイ

    独学でも教えてもらってもダメ、プログラミングができない本当の理由
  • How I/we got 2k stars - ゆーすけべー日記

    Honoという僕が作っているWebフレームワークのGitHubスター数が2,000に迫ってきた。これまで作ってきたOSSのソフトウェアでは最高で revealgo の221、次点で gh-markdown-preview の134だ。それが一気に2,000である。 もちろん、スターの数がソフトウェアの良し悪しを決めるものではない。 それに2,000はとりわけ多いわけではない。 でも、以前の自分には遥か彼方に見えていた数を獲得できたのは、とても嬉しいことだ。 去年12月から作り始めて9ヶ月間、552コミット。 今や使ってくれる人も増えた。 cdnjs のAPI Serverのバックエンドにも使われているし、 HonoをきっかけにGitHubスポンサーをしてくれている企業や人も現れている。 なにより、いろんなことを勉強させてもらった。 今回はHonoというプロダクトがどうやって2,000のスタ

    How I/we got 2k stars - ゆーすけべー日記
  • こわくない関数型プログラミング

    関数型プログラミングは全部理解しようとすると難しいですが、簡単な部分の中にも有用な知見がたくさんあります。 関数型プログラミングにまだ親しんでいない人向けに、明日からのプログラミングにすぐ役に立つ考え方をできるだけわかりやすく伝えます。

    こわくない関数型プログラミング
  • 設計の考え方とやり方

    #asken_dev「設計の考え方とやり方」勉強会 https://asken.connpass.com/event/254709/ ・良い設計は悪い設計より変更が楽で安全である ・ドメインモデル方式のクラス設計 ・イミュータブル方式のテーブル設計 ・設計スキルの身につけかた ・設計のためのモデリング

    設計の考え方とやり方
    Nyoho
    Nyoho 2022/08/05
    変更が楽、安全、の2つを満たす設計を目指す
  • Use Singleton Pattern Or Not?

    In this article, I will go through the cons and pros of the singleton pattern, and in much more detail, I will answer the question above. Where are Singletons Supposed To Be Used?Let’s start with a definition of this pattern by referring to refactoring.Guru. Singleton is a creational design pattern that lets you ensure that a class has only one instance while providing a global access point to thi

    Use Singleton Pattern Or Not?
    Nyoho
    Nyoho 2022/07/20
    SOLIDの原則、依存性逆転の原則
  • 【続】ソフトウェア設計についてtwada技術顧問と話してみた 〜 A Philosophy of Software Design をベースに 〜 - NTT Communications Engineers' Blog

    はじめに 記事は前回の記事である「ソフトウェア設計についてtwada技術顧問と話してみた 〜 A Philosophy of Software Design をベースに 〜 - NTT Communications Engineers' Blog」の続編です。 前回の記事の内容がベースとなっていますので、「APoSD って何だっけ?」という場合はぜひ前回の記事をご覧になってから、以下にお進みください。 ということで、後編の対話パートにさっそく入っていきましょう! Pull Complexity Downwards iwashi: APoSD では、複雑性を下に追いやる(Pull Complexity Downwards)という話が出てきます。何らかの処理が複雑になる場合、それを隠蔽してインターフェースを極力シンプルに保つ、というのがAPoSDの主張です。 こちらに関しても、社内勉強会中で

    【続】ソフトウェア設計についてtwada技術顧問と話してみた 〜 A Philosophy of Software Design をベースに 〜 - NTT Communications Engineers' Blog
    Nyoho
    Nyoho 2022/07/07
    「New Jersey派のほうが生き残りやすいだろうという算段があるためです」のくだりとかおもしろいな
  • Value Object (値オブジェクト) でリファクタリングしたら結構良かった

    ドメイン分析とモデル化ここで「モデル化」と呼ぶのは、実装者が理解しやすいように重要な側面に注目して、端的な形に抽象化する行為であると定義します。 また、実際に実務で行なっている自身のモデル化を行う時の書き振りを近しく再現(中身は変更)しているため、わかりづらいかもしれませんが、”実務ではこうやっている” というのを理解していただければ。 先の要件を整理すると、数という概念に金額とポイントという2つのドメインモデルが含まれる。 金額とポイントという異なる概念を計算して最終的に獲得ポイント数を導き出す必要がある。 存在する制約 金額が負の数になることはありえない。ポイントが負の数になることはありえない。金額は日円のみを考慮し、外貨は存在しない。ポイントは文脈によって呼び名が変わるが、単位は変わらない。支払い金額合計以上にポイント利用数が設定されることはない。金額に小数点は存在しない。ポイント

    Value Object (値オブジェクト) でリファクタリングしたら結構良かった
  • ガチャプログラムの実装(中級者向け) - Qiita

    ガチャの実装はおそらくあなたが思っている以上に難しい。 稿では、最終的に以下の機能をもつガチャを作る。最初は簡単なものを作り、徐々に難しくしていく。言語は JavaScript。ES6もバリバリ使うので初心者には難しいかも。 - ピックアップ対応: 特定のキャラをあたりやすくさせる - 10連特典対応: 10連の場合には、★4 一体以上を保証 - 天井対応: 99 回連続で★5 がでてない場合、★5 を保証 - メンテが容易 - コードの変更が一切不要 - 設定ミスしにくい設計 1. 超基からはじめよう。1% で大当たり, 10% で当たり、 89% ではずれのガチャはこんな感じで実装できる。乱数はガチャ関数の外に出して純粋性を保つことで、テストをしやすくするのが重要: function gacha(rval) { if (rval < 0.01) return { id: '大

    ガチャプログラムの実装(中級者向け) - Qiita
    Nyoho
    Nyoho 2022/04/08
    おもしろ