GakujiTamaki@July Tech Festa運営スタッフ/ #bosyu芸人
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    # Fundamentals of Software Architecture Preface, Chap.2 - イベントページ - [READING.8 #技術書を英語で読む会](https://reading.connpass.com/event/194144/) - 課題図書 - [Fundamentals of Software Architecture: An Engineering Approach](https://learning.oreilly.com/library/view/fundamentals-of-software/9781492043447/) - 貼っている画像の引用先 - [Updated Fundamentals of Software Architecture Images](http://fundamentalsofsoftwarearchitecture.com/images.html) - これまでのイベントで扱ったHackMDのリンク集 - [技術書を英語で読む会の雑談メモリンク集](https://hackmd.io/@gkzz/H1fdY9jOP) ### written by @gkzz - Preface - Chap.1 - ARBなるものを初めて知った - cf.[効果的なアーキテクチャレビューボードを構築する](https://hub.appirio.jp/tech-blog/architecture-review-board) > 要するに、ARBは社内で現在実装中の機能を見える化するための効果的な方法となりうるのです。 - 以下は、自分にとって新しく学ぶ技術との付き合い方を示唆してくれる記述。「手になじんだ技術を増やす、類似する技術のメリデリを知る」と理解。 > One of the best ways of mastering this expectation is for the architect `to stretch their comfort zone`. it is far more valuable (略) and the associated `pros and cons` of each rather than to be an expert in only one of them. - アーキテクトとしての`Technical breadth`を強調していたので、手になじむまで行かなくても、詳細は分からないけれどもプロダクトとそれに関するメリデメリットを知り、ユースケースに応じて検討/提案ができる状態をイメージした。 > `Technical breadth includes the stuff you know about, but not at a detailed level, combined with the stuff you know a lot about.` - SOAとMicroservicesの考え方の違いを調べた - cf.[「マイクロサービス」のメリットをざっくり言うと「変化に対応しやすい」こと](https://knowledge.sakura.ad.jp/3377/)によると、「複雑さ」 - SOAの考え方が使われた当時はXML。現在の主流であるRESTful Web APIより複雑な仕様 - Webサービスによりシステムコンポーネント間を結ぶためには、ESB(エンタープライズサービスバス)と呼ぶ複雑な(高価な)ミドルウェアが必要だったとのこと。 - Part I. なし - Chapter 2  - `Balancing Architecture and Hands-On Coding`で紹介されている`to do frequent proof-of-concepts or POCs. `に関わるという記述は、今後の自分のキャリアを考えるヒントとなりそう。 ### written by @fujiwara - Preface - `Expectations of an Architect` - `Have business domain knowledge` 課題感として大きい。SIで入っていると線を引いていたり、その関連のミーティングや、メーリスなどに入ってない場合が多々あり得る。アンテナを張ると共に、適宜認識合わせや合意が必要。 >Without business domain knowledge, it is difficult to understand the business problem, goals, and requirements, making it difficult to design an effective architecture to meet the requirements of the business. - `Possess interpersonal skills` 「技術的に解決したい問題も漏れなく人の問題が付いてくる」と実感していたので、納得。 >As technologists, developers and architects like to solve technical problems, not people problems. However, as Gerald Weinberg was famous for saying, “no matter what they tell you, it’s always a people problem.” - `Understand and navigate politics` 正にこれ。相手の要望に沿うか、目的を達成できるか、その目的自体が問題解決につながっているのか、を常にヒアリング/検証しながら進めていく必要がある。依頼者/アーキテクトがミーティング時点でゴールが見えていない場合もあり、複数の選択肢を並べた上で要件に応じたその時点でのベストを出していく必要がある。そして、その決断の観点/根拠/プロセスをドキュメントとして残す必要あり。 >The main point is that almost every decision an architect makes will be challenged. Architectural decisions will be challenged by product owners, project managers, and business stakeholders due to increased costs or increased effort (time) involved. Architectural decisions will also be challenged by developers who feel their approach is better. - Chap.2 - Stuff you know → Stuff you must maintain - 唯一の専門性よりも、特定の問題を解決し得る5つの解決策の存在を知っている方が重要。 - A large part of the value of an architect is a broad understanding of technology and how to use it to solve particular problems. For example, as an architect, it is more beneficial to know that five solutions exist for a particular problem than to have singular expertise in only one. - 器用貧乏と賞味期限切れの専門性 - an architect tries to maintain expertise in a wide variety of areas, succeeding in none of them and working themselves ragged in the process./ stale expertise - Frozen Caveman Anti-Pattern - While risk assessment is important, it should be realistic as well. - Architecture is the stuff you can’t Google. - business drivers ### written by @y-wat - Chap.1 Introduction software architectのパスが何故無いのか? 1.良い定義がない 2.スコープが大きく、かつ広がり続けている 3.対象の移り変わりが速い 4.ソフトウェアアーキテクチャに関するマテリアルは概して「歴史的(時代背景依存)」な関連しか持たない アーキテクチャは状況依存的なものとしてしか理解できない。状況による産物である。 - Defining Software Architecture ソフトウェアアーキテクチャを考える4軸 1.構造 2.アーキテクチャ的な諸特徴 3.アーキテクチャの諸決定 4.デザイン諸原則 構造: システムが実装されるアーキテクチャ形式のタイプ(マイクロサービス、レイヤード、マイクロカーネルetc) アーキテクチャ的な諸特徴: システムの成功基準を定義する(ex: 可用性、信頼性、テスト可能性、スケーラビリティ、セキュリティ、アジリティ、耐障害性、エラスティック、復旧可能性、パフォーマンス、デプロイ可能性、学習可能性) <- 非機能要件に近いか? アーキテクチャの諸決定: システムがどのように構築されるべきかのルール(レイヤ間でのアクセスルールとか)。複数システムに影響が出る決定は組織のアーキテクチャレビュー委員会またはチーフアーキテクトが判断する。 デザイン諸原則: ガイドラインでありルールではない。開発者が適切な手法を選ぶガイドになるもの。マイクロサービス間ではパフォーマンスのために非同期通信を採用しましょう、とか。 - Expectations of an Architect - Make Architecture Decisions 技術的な決定をチームが行うためのガイドとなるアーキテクチャの決定を行う。ガイドを決定するのであって、個別フレームワークの選定等を行うのではない。個別アーキテクチャ的特徴を保持するために細部に入ることも有る。 - Continually Analyze the Architecture 昔構築したシステムが今どの程度存続可能なアーキテクチャであるかをビジネスと技術の両面から評価し続けること。アジリティのためにテストとリリース環境を維持し続けることも忘れない。 - Keep Current with Latest Trends 知識は日々最新化しましょう。アーキテクトが行う決定は長く影響を持ち、変更も難しい。 - Ensure Compliance with Decisions アーキテクトの決定に開発チームが従っている状態を維持する。 - Diverse Exposure and Experience 様々なテクノロジを広く知ること。コンフォートゾーンを広げていくこと。 - Have Bussiness Domain Knowledge ビジネス課題を解決するアーキテクチャを建てるにはドメイン知識が必要。 - Possess Interpersonal Skills 人間関係スキルは重要。チームワーク、リーダーシップ、ファシリテーション。 - Understand and Navigate Politics アーキテクトの決定は組織を横断する影響を持つ事がある。そういうときは交渉も必要になる。 - Interssection of Architecture and... (交差領域) - Engineering Practices ソフトウェア開発プロセスとエンジニアリングの実践は区別すべき。 プロセス: 人々を組織しインタラクトさせる機構 エンジニアリングプラクティス: プロセス不可知論的な実践。Unknown unknowns. 決まったトラックをなぞる類の活動ではない、ということかな。 アーキテクチャとエンジニアの実践は共生的な複雑な機構である(マイクロサービスを選択すると自動プロビジョニングや自動テストが想定される、みたいな)。 進化的アーキテクチャが最新の形式。アーキテクチャ的な適合関数(?)を構築する。客観的な統合アセスメントの構築。これをアーキテクチャの評価に用いる。 - Operations/DevOps 運用は外注されてきた。しかし今日の運用におけるエラスティックスケーリングはアーキテクトの関心対象である。 - Process アーキテクチャもイテレーティブな活動になってきている。アーキテクチャもどのようなプロセスでチームが運営されるかの影響を受ける。 - Data ソフトウエアはいろいろな外部データベースに依存します。アーキテクトはデータレイヤを無視してはいけない。 - Laws of Software Architecture アーキテクチャはトレードオフとの戦いである。whyを常に考えること。 - Chap.2 Architectural Thinking -- アーキテクチャ的な考え アーキテクチャについて考えるよりも広い アーキテクチャ的に考え、アーキテクチャ的に見る - Architecture Versus Design アーキテクトの関心: アーキテクチャ的な関心(xx性)、アーキテクチャパターンやスタイル、コンポーネント構造 開発者の関心: クラス設計、UI、コード アーキテクトから開発者へ一方的な関係では開発側で成功しなかったりフィードバックが無い メンタリングやコーチングができる環境を築きましょう - Technical Breadth 技術的な深さと技術的な横幅 知っている要素、知らないと知っている要素、知らないことを知らない要素 知っている要素: エキスパートであることが期待される領域。ここの大きさが深さ。 アーキテクトの価値は幅広い技術理解と、問題解決のための利用法の知識。知らないと知っている領域もアーキテクトにとっては重要。 幅広い全てのエキスパートであろうとしたり、古い知識のままエキスパートと思い込んではいけない - Analyzing Trade-Offs アーキテクト的に考えるとは、全てのソリューションや技術その他のトレードオフを見て、ベストなソリューションを決定を決定するために分析することである。「ググって出てこないこと」はアーキテクチャの要素である。 アーキテクトはベネフィットとトレードオフの両方を知らなければならない。 キュー設計は現行でやってるからわかるわ〜。 - Understanding Business Drivers システムの成功に必要なビジネスドライバを理解し、アーキテクチャに盛り込む必要があります。 - Balancing Architecture and Hnads-On Coding アーキテクトもコーディングを行い、一定の技術的深みを維持するべき。 しかしアーキテクトのコーディング作業がクリティカルパスのボトルネックになってはいけない。しかし開発することでペインが見えるのは良いこと。 技術的深さを維持するために 1.PoCをいろいろやりましょう。アーキテクチャ的決定の検証になる。アーキテクチャ的特徴の比較作業もできる。プロダクションコード品質からは落とさないこと。PoCはそのまま事例になる。それ自体も良い品質のコーディング練習になる。 2.技術的負債を巻き取る(強気だな?)。 3.バグ改修。 4.簡単なツール開発による自動化テコ入れ、開発チームの日々のタスク分析。 5.コードレビュー。アーキテクトの決定が受け入れられているか確認したり、メンタリングやコーチングの機会にもなる。 ### written by @hodagi - Chap.1 - > “Hey, I have a great idea for a revolutionary style of architecture, where each service runs on its own isolated machinery, with its own dedicated database (describing what we now know as microservices). So, that means I’ll need 50 licenses for Windows, another 30 application server licenses, and at least 50 database server licenses.” - ここ好き。少し前までは何をするにも費用がかかった時代だった - > Architecture consists of the structure combined with architecture characteristics (“-ilities”), architecture decisions, and design principles - アーキテクチャは、下記の四つから成り立っているという 1. Structure: アーキテクチャのタイプ.モノリシック?マイクロカーネル 2. Architecture characteristics: アーキテクチャ特性。システムの機能性 3. Architecture decisions. : アーキテクチャ内の各システムに設けられた制約。ルール。DBに接続できる層はDaoだけにしましょう、的な。 - アーキテクチャレビューボード(ARB)やチーフアーキテクトが使用するバリアンスモデルってなんのこと? 4. 設計原則。規則というよりもこうしたらいいよというガイドライン。 - > アーキテクトに求められる素養 - アーキテクチャを決定する アーキテクチャを継続的に分析する 最新のトレンドを常に把握する 意思決定の遵守 多様な露出と経験 ビジネスドメインの知識がある 対人スキルを持っている 政治を理解し、ナビゲートする - > 大規模な顧客関係管理システムを担当するアーキテクトが、他のシステムからのデータベースアクセスの制御、特定の顧客データの保護、および他のシステムがCRMデータベースを使用しているためにデータベーススキーマの変更を行う際に問題が発生しているシナリオを考えてみます - 想像するだけで胃が痛いやつ... - ![](https://i.imgur.com/dFOjgw2.png) - >Another axiom is that software architecture is mostly orthogonal to the software development process; the way that you build software (process) has little impact on the software architecture (structure). - Chap.2 - >アーキテクチャとハンズオンコーディングのバランスをとる アーキテクトが直面する困難なタスクの1つは、ハンズオンコーディングとソフトウェアアーキテクチャのバランスをとる方法です。私たちは、すべてのアーキテクトがコーディングし、一定レベルの技術的深さを維持できる必要があると固く信じています(「技術的幅」を参照)。これは簡単な作業のように思えるかもしれませんが、達成するのがかなり難しい場合があります。 - これだー!! - ArchUnit - dependencyのチェック ### 雑談メモ - 「デジタル変革企業へと転身、2022年度はDX事業で3000億円の売上を目指す」、富士通が会見 https://it.impress.co.jp/articles/-/18597 - アーキテクトはチームでやりたい - 専門性とチームプレー、集合知の合わせ技 - エンジニアからマネージャーへ上位互換ではないことと同様に、エンジニアからアーキテクトへ転向することは難しいことと似ている - デベロッパーからアーキテクトに転向する方は準備することが必要 - システム開発者と利用者との間には「よいシステム」の定義に隔たりがある - e.g. アウトプットファイルは jsonファイルか、csv, スプレッドシート

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully