タグ

プログラミングと設計に関するslay-tのブックマーク (73)

  • プログラマーのための原則(2 万字) - Qiita

    はじめに 今でも語り継がれる「原則」は、それだけ価値のあるコンセプトです。 歴史を振り返ることは、失敗を防ぐための効率の良い方法になります。 👑 DRY (Don't repeat yourself) 「同じことを繰り返すな。」 Andy Hunt と Dave Thomas の著書『達人プログラマー』(1999 年)で提唱された原則で、プログラミングに関する最も重要な原則といっても過言ではありません。 DRY 原則だけでなく、どんなデザインパターンやベストプラクティスでも、同じ処理が重複することは基的に許されていません。 これにはどういう意図が込められているのでしょうか。 🔖 表面的な理由 この原則は、コードの再利用性を高め、そのために疎結合な状態を保つことは、極めて有用なことを示唆します。 1 箇所を直せば済むべき箇所をあちこちに分散させてしまうのは、自分で事故を招いているのと同

    プログラマーのための原則(2 万字) - Qiita
  • オブジェクト指向プログラミングは終わった カプセル化が悪い(感想戦) - Qiita

    が(良くも悪くも)注目頂き、その観測で思ったことのメモです。1年後の自分用です! もっかい言いたいこと再考のポエムです。 概要 関数型には意図的に触れたくなかった 継承や再利用性への懐疑の共通認識 抽象化戦略開発戦略で補う話 タイトルは釣り 抽象化という言葉のふわっと感 カプセル化が問題 関数型言語には意図的に触れたくなかった ポリモーフィズムのくだりで、関数型のご指摘が多かったのですが、あえて直接は触れたくありませんでした。これは、オブジェクト指向 vs 関数型にしたくなかったからです。(結果、Rust/Goに被弾させました) なぜかと言えば、オブジェクト指向を(結果として)衰退させたのは、あくまでも 開発手法の変化 や設計論の精錬が主軸だと認識しています。 不確実性に適応する上で、継承やカプセル化による状態隠匿という戦略が、良い筋に動かず、オブジェクト指向なりに変化を遂げた結果だと考え

    オブジェクト指向プログラミングは終わった カプセル化が悪い(感想戦) - Qiita
  • ソフトウェアアーキテクチャの基礎

    ソフトウェアアーキテクチャとは、ソフトウェアシステムの成功に欠かせない重要な土台です。そのためソフトウェア開発者には、効果的なアーキテクチャを実現するスキルが求められます。書は、そうした効果的なアーキテクチャを設計、構築、維持するアーキテクトになるために必要なスキルや知識を、現代的な視点から整理して包括的に解説する書籍です。 ソフトウェアアーキテクチャの定義から、アーキテクトの役割、モジュールや結合、アーキテクチャスタイルといったアーキテクチャ設計の基礎、チームやステークホルダーと効果的にコラボレーションしていくために必要なソフトスキルまで、さまざまなトピックについて実践的な例とともに説明します。 正誤表 ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正

    ソフトウェアアーキテクチャの基礎
  • 「AWSの日本リージョンのデータセンターはどんな災害を想定して設計されているんですか?」に答えるためのレポート紹介 | DevelopersIO

    システム監査における安全性の観点からタイトルのような内容についてお客様よりご質問いただくことがあります。 AWSデータセンターの耐障害性については既にAWS Artifactで公開されたレポートがあるのですが、あまり知られていないのかも?と思い、あらためてご紹介しておきます。 AWS Artifact からレポートのダウンロード AWSコンソールから[AWS Artifact]-[レポート]を開きレジリエンスで検索。日におけるAWSリージョンのレジリエンスというレポートが見つかりますので、こちらをダウンロードしてください。 基的にAWS Artifactの内容はAWS機密情報であり、ドキュメントの内容を抜粋してブログに転載するようなことは出来ませんので、お手数ですがご自身の環境より入手いただきご確認ください。 10ページに満たないボリュームですのでサクッと読めます。 「どんなレベルの災

    「AWSの日本リージョンのデータセンターはどんな災害を想定して設計されているんですか?」に答えるためのレポート紹介 | DevelopersIO
  • 「Rustでやると知らないうちに詰む設計」を避けるためのTipsを集めてみる

    とりあえず、よく言われてるやつから埋めていこうと思う。 構造体にライフタイムを持たせない 構造体にライフタイムを持たせるのは「基的に」避けよ、というのが重要なのは間違いないのだけど、これをもう少し実践的な内容にしたい。ちょっと考えてみたけど、こういうのはどうだろうか。 ある関数呼び出しの中でしか絶対に使わない。returnするまでにその構造体のデータは全て破棄される。static変数に退避させることもできない。アロケーションもその関数が面倒を見る。そういう一蓮托生できる関数呼び出しに心当たりはあるか? ある→ 構造体にライフタイムを持たせてもよい。 ない→ ライフタイム禁止。 そう考えてみると、DIとかReduxとかとも通じるところがあるかもしれない。「つべこべ言ってないで全部の責務を一番外側に持っていく」という決断ができるときは構造体ライフタイムが選択肢に入る。

    「Rustでやると知らないうちに詰む設計」を避けるためのTipsを集めてみる
  • 状態、結合、複雑性、コード量の順に最適化する - valid,invalid

    There’s No Such Thing as Clean CodeのHacker Newsコメント経由でコードやシステム設計・最適化についての良いコメントを見つけた。どうやらHacker Newsで何度も引用されているらしいが日語で言及された記事が見つからなかったので取り上げてみる。 コメントは2016年のSandi MetzのThe Wrong Abstractionに関するもので、発言者のcurun1rいわく「私は設計の優先順位をこの順序で学習することで、優れた開発者になれた」。*1 4つの基準と優先順位のガイドライン 状態 > 結合 > 複雑性 > コード量 私は状態 (state)、結合 (coupling)、複雑性 (complexity)、コード量 (code) の順に削減することでコードを最適化する。 コードがよりステートレスになるなら、結合を増やすこともいとわない 結

    状態、結合、複雑性、コード量の順に最適化する - valid,invalid
  • A Philosophy of Software Design:要約 - Qiita

    概要 内容と動機 これは、「A Philosophy of Software Design」の要約になります。 書の内容としては、筆者が経験ベースで、ソフトウェアの複雑性の原因とどれにどう向き合うのかをまとめた内容です。 普段チームで開発する中でわかりづらさや、設計に関する違和感を感じることがあります。 その自分の違和感が当に正しいものなのか、仮にそうだとしたらきちんと言語化してレビューしたいという動機から書を読むことにしました。 170ページの書を完璧に要約することは困難なので、幾分自分にとって印象深かったことが選ばれていると思います。 逆に、その過程で触れられなかった章もありますので、その点ご留意ください。 また、ここでは具体例は少ないですが、ある程度大きなコードベースで開発した方であれば想像しながら読めるのではと思っています。 もし、具体例を参照したい場合は、ぜひ書を読んで

    A Philosophy of Software Design:要約 - Qiita
  • クリーンアーキわからんかった人のためのオニオンアーキテクチャ

    依存関係逆転の原則に苦しんだ方々、いかがお過ごしでしょうか。 今回はアプリ設計の話です。 アプリ設計におけるクリーンアーキテクチャについて少し語り、調べていくうえで誤解していた部分や理解しにくかった部分を語ったうえで、オニオンアーキテクチャとクリーンアーキテクチャというよく似た二種類のアーキテクチャの説明をしていく、という流れとなっています。 言葉の定義について ここではアーキテクチャにおけるインターフェイスとプログラミング言語におけるインターフェイスを区別するために、プログラミング言語におけるインターフェイスを抽象型と表記します。 それぞれの言語において、抽象型は以下のような言語機能で実現されています[1]。 Java, C#などにおける抽象クラス abstract class Java, C#, Golangなどにおけるインターフェイス interface rustにおけるトレイト t

    クリーンアーキわからんかった人のためのオニオンアーキテクチャ
  • リファクタリング自爆奥義集 - Qiita

    こんにちは、リファクタリングが大好きなミノ駆動です。 この記事は READYFORアドベントカレンダー2021 、13日目の記事です。 これはなに? コードが複雑化し、技術的負債が蓄積していくと、コードの変更が難しくなり、開発生産性が低下していきます。技術的負債の解消にはリファクタリングが必要です。 しかし、リファクタリングの実施には数々の罠やハードルがあります。 下手すると逆に負債を作り込んでしまうといった、自爆技をやりかねません。 この記事は、リファクタリングのアンチパターンと、その対策をまとめたものです。 この記事のゴール リファクタリングには様々なアンチパターンがあることを知る。 アンチパターンにハマらないためのアプローチを知る。 リファクタリングの効果を高めるにあたり、何のために実施するのか意義を理解する。 前提知識 なぜ自爆技となるのか、自爆だと理解するのに必要な前提知識を挙げ

    リファクタリング自爆奥義集 - Qiita
  • クリーンアーキわからんかった人のためのクリーンじゃないけどクリーンみたいなオニオンに見せかけたSOLIDの話

    依存関係逆転則含む諸原則に苦しめられた方々,いかがお過ごしでしょうか. 今回はアプリ設計の話です.と言っても,前回「クリーンアーキわからんかった人のためのオニオンアーキテクチャ」というZenn記事を書いて,反響が大きかったのでリメイクしたいなという気持ちになり執筆することにしました. 前回同様,調べていく上で誤解していた部分や理解しにくかった部分を語った上で,オニオンアーキテクチャという,クリーンじゃないけどクリーンみたいな玉ねぎについて紹介するのですが,今回はわかりやすい図解であったり,実際にどのような実装をしていくべきなのかを話の話題として加えていければ良いかな?って思っています. これは前回の記事である「クリーンアーキわからんかった人のためのオニオンアーキテクチャ」の記事の裏話的な話を一つさせてください. 今年の11月初め頃に,サポーターズという企業の学生が登壇できるLT会があり,私

    クリーンアーキわからんかった人のためのクリーンじゃないけどクリーンみたいなオニオンに見せかけたSOLIDの話
  • 変数(variable)と値(value) - ソフトウェア設計を考える

    はじめてScalaに触れたとき、変数宣言(var)と値宣言(val)を使い分ける言語仕様に、なるほどなあ、と思った。簡単に言えば、変数(var)は再代入できて、値(val)は再代入できない。 プログラミングのスタイルとして、var宣言は命令的なプログラミング、val宣言は宣言的なプログラミングになる。どちらのプログラミングスタイルで書いているかを、varとvalで明示できるわけだ。 Javaだと言語の基の仕組みはすべてが変数。final宣言をすることで再代入をコンパイルエラーにすることはできる。Javaは、C言語やC++などの命令的なプログラミングの系譜の言語なのですべて変数(variable)というのは、とうぜんの言語仕様だった。 命令的なスタイルから宣言的なスタイルに 命令的なプログラミングでは変数(variable)を使う。宣言的なプログラミングでは値(value)を使う。 再代入

    変数(variable)と値(value) - ソフトウェア設計を考える
  • イミュータブルでゆこうに参加してきた - 天の月

    modeling-how-to-learn.connpass.com 今日はこちらのイベントに参加してきたので、会の様子と感想を書いていこうと思います。 会で話されていたこと イベント資料 イミュータブルデータモデルの極意~川島義隆さん~ 川島さんの問題意識~Division into cases~ Dataの場合分け EventとResourceの関係性 EventとResourceのサブタイプ Resource同士の関連付けをする際のコツ 記録として残すEvent, 残さないEvent ドメイン駆動設計とイミュータブルデータモデルの素敵な関係~増田亨さん~ イミュータブルについての厳格性 必ずイミュータブルにする際の設計パターン 増田さんがイミュータブルに拘る理由 ドメインイベントの観点から再考するソフトウェア設計~かとじゅんさん~ ドメインイベントとは ドメインイベントはなぜ有用か

    イミュータブルでゆこうに参加してきた - 天の月
  • 「AWSコンテナ設計・構築 [本格] 入門」を執筆しました - horsewin's race records

    はじめに AWS x コンテナに関する商業誌を執筆しましたので、ブログにて少し内容を紹介できればと思います。 (しかし、見誌をつみあげるとなかなか圧巻でした!) amzn.to 見誌 こちら、共同執筆者の新井さん (@msy78)や、監修いただいた佐々木さん(@dkfj)のブログでも触れられている内容になります。執筆に至った経緯などはお二人のブログでも語られていますので、↓をどうぞ。 『AWSコンテナ設計・構築[格]入門』の監修しました - プログラマでありたい 「AWSコンテナ設計・構築 [格] 入門」を執筆しました - How elegant the tech world is...! このブログでは執筆者の一人である、私の視点からの書籍の紹介をいたします。 書籍について の概要 全5章で構成しています。当は付録としてECSコンテナを扱うためのツールもいくつか紹介するため

    「AWSコンテナ設計・構築 [本格] 入門」を執筆しました - horsewin's race records
  • 僕がお金を払ってでも教わりたいこと 2021

    追記 一旦締め切りました。 連絡をくださった方、書籍などのアドバイスをくださった方ありがとうございます。 文 謝礼をお支払いするので、教えて欲しいことがあります。 自習しろと言われそうですが、試行錯誤するには人生が短すぎたり、爆速突破するには能力が足りなかったりで色々辛くなってきたので何卒。 以下、学びたい優先度順です。同時に学べるのは多くて 2 つで、被った場合は優先度順でお願いすることになります。 教えて欲しいこと OCaml で Parser Combinator を 0 から作る 狙い: 関数型プログラミング言語とそれの使い方を学びたい。また、OCaml のエコシステムに詳しくなりたい。 Monadic Parser をゼロから作ることで、関数型プログラミングのテクニックや考え方を学びたいです。 すでに 教科書的な簡単な Monadic Parser を 0 dependenci

    僕がお金を払ってでも教わりたいこと 2021
  • ソフトウェアデザインにおける構造設計を実践!マネーフォワードさんとワークショップを開催しました|Goodpatch Blog グッドパッチブログ

    Goodpatchでは、UIの構造設計を重視したデザインプロセス「モデルベースUIデザイン」を推進しています。最初にコンセプト定義やユースケースを定義し、情報整理をして最終的に機能やビジュアルなどの具体的なところを詰めていく考えをとっていくプロセスです。 今回は、マネーフォワードさんと「デジタルプロダクトのUI設計のプロセスと考え方を学び、実践することでスキルのベースを身につけること」をテーマに、モデルベースUIデザインについて理解・実践するワークショップを開催しました。記事では開催の背景から当日の様子をご紹介します。 参加いただいたマネーフォワードのUI/UXデザイナーさんによるnoteもぜひご覧ください! マネーフォワードがGoodpatchさんとUIデザインワークショップを実施しました! ご相談いただいた背景 「お金を前へ。人生をもっと前へ。」をミッションに掲げる株式会社マネーフォ

    ソフトウェアデザインにおける構造設計を実践!マネーフォワードさんとワークショップを開催しました|Goodpatch Blog グッドパッチブログ
  • NoSQLデータモデリング技法 · GitHub

    NoSQLデータモデリング技法.markdown #NoSQLデータモデリング技法 原文:NoSQL Data Modeling Techniques « Highly Scalable Blog I translated this article for study. contact matope[dot]ono[gmail] if any problem. NoSQLデータベースはスケーラビリティ、パフォーマンス、一貫性といった様々な非機能要件から比較される。NoSQLのこの側面は実践と理論の両面からよく研究されている。ある種の非機能特性はNoSQLを利用する主な動機であり、NoSQLシステムによく適用されるCAP定理がそうであるように分散システムの基的原則だからだ。一方で、NoSQLデータモデリングはあまり研究されておらず、リレーショナルデータベースに見られるようなシステマティック

    NoSQLデータモデリング技法 · GitHub
  • コンポーネントを小さく・きれいに設計しよう。Vue Composition APIを活用したコンポーネント分割術 - ICS MEDIA

    Vue.jsを使った開発でよく悩まされるのがコンポーネントの肥大化です。複雑なアプリケーションになると、1つのコンポーネントが<script>ブロックだけで数百行…なんてこともめずらしくないでしょう。従来、Vue 2までの標準的な書き方では、UIとしてのコンポーネントの細分化はできてもロジックの分割や整理には限界がありました。しかし、Vue 3のComposition APIを活用すると、はるかに柔軟な整理・分割が可能です。 「Composition APIは難しそうだからまだ使っていない」という方、あるいは「導入はしているけどイマイチメリットがわからない」という方は、この機会にぜひComposition APIを活用したコンポーネントの整理術を試してみてはいかがでしょうか? なぜ、Vueのコンポーネントは肥大化するのか? 簡単な例を見てみましょう。下のサンプルはミニマムなアナログ時計のコ

    コンポーネントを小さく・きれいに設計しよう。Vue Composition APIを活用したコンポーネント分割術 - ICS MEDIA
  • リーダブルなコードを書く習慣の身に付け方・実践の仕方 - 2021-09-22 - ククログ

    結城です。 2021年9月13日から14日にかけて、東京都立大学の大学院生向け特別講義として「リーダブルコード演習」を実施しました。 演習の内容は、当社でこれまでにも行ってきているリーダブルコードワークショップを、プログラミング経験が比較的浅い・プログラミングの量がまだそれほど多くない方向けに調整した内容としました。 この記事では、実施した演習の概要と、今回意識した点を紹介します。 文が長いため、目次を用意してみました。 発端 演習の構成 座学パート リーダブルなコードを書く意義について リーダブルコードを実践するためにまず取り組むべきこと 実際の現場での「コードがリーダブルでなくなってしまった」「リーダブルになるよう改めた」実践例 最初の実装 リーダブルでなくなった実装 リーダブルさを取り戻すための改修 コードがリーダブルでなくなっていってしまう要因 壊すのが怖くて、見て見ぬフリ 恐怖

    リーダブルなコードを書く習慣の身に付け方・実践の仕方 - 2021-09-22 - ククログ
  • オブジェクト指向はすでに粒度が時代にあっていない - きしだのHatena

    定期的にオブジェクト指向disを書いてしまってるのだけど。 とりあえずオブジェクト指向の話をすると定義が人によって違いすぎるので、改めてここでの定義を書いておくと 、基的にはOMTの「データ構造と振る舞いが一体となったオブジェクトの集まりとしてソフトウェアを組織化すること」 に従うのですが 「1990年に流行りソフトウェア開発のすべてを飲み込み、いまとなっては人それぞれ定義が違って技術的議論に使えなくなった、主にオブジェクトを基単位としてプログラムを整理するやりかたを指すマーケティング用語」 という感じです。 ほとんどの場合で人によってオブジェクト指向の指す範囲が違いすぎて、技術的知見の共有には使えなくなっています。でも、いずれの定義にしろオブジェクトを基単位にするというのは重要ではないかと。 ソフトウェアの組織化の単位としてオブジェクトを使うというのが大事で、データの搬送に構造体代

    オブジェクト指向はすでに粒度が時代にあっていない - きしだのHatena
  • 『モデリングの学び方:座談会』を見たよメモ - コード日進月歩

    モデリングの学び方:座談会 - connpassを見たよメモです。ディスカッション形式だったので、話の流れになぞらえてまとめていきます。 日の話し手 この会でメインで喋られていたのは以下の方々 増田さん かとじゅんさん ミノ駆動さん hirodragonさん 藤岡さん 原田さん 高崎さん 日の趣旨説明と増田さんの考えるモデリングに関して まずは下記の資料を使いながら今日の催しの趣旨説明と増田さんの考えるモデリングに関しての話があった。 speakerdeck.com 上記の資料にもあるが以下の話が冒頭で行われた 今回の話し手の属性に関しての話(共通的な部分もありつつも自社サービスを持つ人たち3人と、受託開発を主に行う人たち3人という構成) まずは前提の話としての増田さんのモデリングの考え方のダイジェスト説明 効果的なモデリングの考え方(要点をうまく表現する名前を見つける、認知不可の軽減

    『モデリングの学び方:座談会』を見たよメモ - コード日進月歩