Upgrade to Pro — share decks privately, control downloads, hide ads and more …

我要活下來 - Ruby Junior 工程師的存活術

Spreered
September 01, 2023

我要活下來 - Ruby Junior 工程師的存活術

Spreered

September 01, 2023
Tweet

Other Decks in Programming

Transcript

  1. R u b y J u n i o r

    ⼯ 程 師 的 存 活 術 我 要活下來!
  2. 今天我想來點 ... • 需求溝通不求⼈ • 菜雞們在 Ruby on Rails 的救命招式

    • 資料庫是你的好朋友 • 早點下班的秘訣 • 資訊焦慮
  3. 不 ⼀ 定 能 救 你 但 希 望 可

    以 給 你 ⼀根救命的繩索
  4. 「 資訊 室,我辦公 室 的 網 路 斷 了 」

    事實 上是他 的電腦 桌 ⾯ 不⼩ ⼼被他⾃⼰ 改 成 ⿊ ⾊
  5. • 最早是由 Kent Beck 在 XP 裡⾯提出 • 需求⽅可以⽤它來跟開發部⾨溝通 •

    開發部⾨可以⽤來拆解成可執⾏的任務 • 這個是⽤來溝通⽤的!不是規格書! User Story
  6. • 將顆粒度適中的 user story 與客⼾確認 • ⼀條 user story 可能會包含很多任務,所以不會

    直接將⼀個 user story 來開 ticket • break down to task 可能需要⼀點經驗,可以請 主管或 senior 核對 task 是否合理 將 User Story 拆成任務
  7. • Who 誰在使⽤這個系統 • What 為了什麼⽬的使⽤ • How 怎麼操作 •

    找到很熟系統操作的使⽤者 • 試著盡量弄清楚⼀些 domain knowhow / 專有名詞 弄清楚業務邏輯
  8. 從哪裡著手認識一個專案? ‧ Readme ‧ Gemfile ‧ routes ( $ rails

    routes ) ‧ models ‧ db/schema ‧ Assets ‧ 第三方服務 ‧ git log ‧ 測試案例 Everyday Rails - Getting started with a legacy Rails application
  9. class Dog def initialize(name) @name = name end end bingo

    = Dog.new("Bingo") 宣告⼀個 Dog 的實例物件 名叫 Bingo Ruby Object model
  10. 屬性在實例的物件⾝上, ⽅法在類別⾝上。 class Dog def initialize(name) @name = name end

    def bark puts "woof" end end bingo = Dog.new("Bingo") bingo.bark Ruby Object model
  11. def bingo.say puts "hi, This is #{@name}" end bingo.say #

    hi, This is bingo 我們可以為個別物件
 定義專屬的⽅法 它會放在⼀個隱藏的 singleton class 裡⾯ Ruby Object model
  12. 影片《The Ruby Object Model》by Dave Thomas @ Scotland on Rails

    conference, 2009 五星推薦 ⭐⭐⭐⭐⭐
  13. M e t a p ro g ra m m

    i n g Ru b y 2
  14. 還 不 懂 沒 關 係 等 等 蒼 時

    會 表 演 給 大 家 看 ! 突如其來的業配!
  15. 資料庫概論相關 U N I O N (聯 集 ) ∪

    INTERSECTION ( 交 集) ∩ SE T D I F F ER EN C E ( 差 集 ) C A RT E S I A N P R O D U C T (卡 ⽒ 積 ) ×
 SE LE CT ( 選 擇 ) σ R O J E C T (投 射 ) π JOI N (合 併 ) ⋈ D I V I S I O N (除 法 ) ÷ 關聯式代數 資料庫正規化 Transaction
  16. Active Record 原理 《 R a i l s 探

    索: A c t i v e R e c o r d 篇 》 — Johnson fr om 5 xRuby • 實 作⼀ 個簡 單的 A c t i v e R e c o r d • 了 解 Relation Object 原 理 • 幫 助理 解在 Rails 中使 ⽤ A c t i v e R e c o r d 中 的 ⼀些效 能 問題
  17. Active Record 原理 《 如何 在 Rails 中使 ⽤ A

    r e l S QL》 — Lance f rom 5xRub y A ct iv eR e cor d 會 使⽤ A r e l 來建 立 SQL 的 語 法樹
  18. 教學《Advanced ActiveRecord Querying》by UpCase (Thoughtbot) 五星推薦 ⭐⭐⭐⭐⭐ A cti ve

    Re co rd 教 學 由簡 入深 有提 供範例 練習 ActiveRecord 課程
  19. 沒有 Rubocop • 隨便⼀個 method 都是 3 40 ⾏起跳 •

    隨便⼀個 class 都是百⾏起跳 • ⼀個 object 會處理很多事情 義⼤利麵 style • Nested condition:四到五層是家常便飯 • 要修改程式前,需要花很長得時間先把原本 的邏輯看懂。
  20. 沒有 unittest • 只有 feature test,每次跑完需要兩個⼩時 • 不知道每個 method /

    class 的實際使⽤⽅式 • 每次修改完還要花很多時間驗證 • 因為沒有單元測試,所以許多物件有嚴重的 相依。
  21. .. . 雖 然 (很 臭 的 ) 程 式

    碼 可 以 執 ⾏ , 但 我 們 需 要 重 構 它 只 是 美 感 問 題嗎? 雖 然 編 譯 器 是 無 法 辨 識 程 式 碼的 美醜 , 但 需 要 修 改 系 統 的 時 候 卻需要 「 ⼈ 」 的 參 與 , 所 以「 ⼈ 」必 須要 容易 看 懂 這 些 程 式 碼。 不 好的程 式 碼 是 難 以 修 改 的 , 甚 ⾄ 是 醜到 讓我 們 不 知 道 要 從 何 著 ⼿ 。 任何⽩ 痴都可 以寫 電 腦懂 的程 式碼 強者 會寫⼈ 類 看得 懂 的 程 式 碼 在《 重 構 R e f ac t ori n g》⼀書提到 ...
  22. 《Refacoring Ruby Edition》 Duplicated Code Long Method Large Class Long

    Parameter List Divergent Change Shotgun Surgery Feature Envy Data Clump Primitive Obsession Case Statement Parallel Inheritance Hierarchies Lazy Class Speculative Generality Temporary Field Message Chains Middle Man Inappropriate Intimacy Alternative Classes with Different Interface Incomplete Library Class Data Class Refused Bequest Comment Meta Programming Madness Disjointed API Repetitive Boilerplate 聞聞看 Code smell ㄉ味道
  23. h t t p s : / / r u

    b y s t y l e . g u i d e / 開了 RuboCop 後也許比較不那麼臭
  24. . . . 「編輯 並 祈 禱 」 這 種

    ⽅ 式 似 乎 意味 著「 ⼩⼼ 著 ⼿ 」. . . . . . ⽽ 「覆 蓋 並 修 改 」 則 是 另 外 ⼀ 種 ⽅式 。它 背 後 理 念 在 於 , 在 我 們 修改軟 體 的 時 候 撐 開 ⼀ 張 安 全 網 . .. 像 是⽃ 篷 ⼀ 樣 蓋 在 我 們 進 ⾏ 修 改的程 式 碼 上 ⾯. . . 覆蓋 軟 體 即 意 味著 ⽤測 試 來 覆 蓋 它 。當 對 ⼀ 段 程式碼 有 ⼀ 組 良 好 的 測 試 時 , 我們 就可 以放 ⼼ 地 對 它 進 ⾏ 修 改 。 — 「帶著回饋⼯作」 書《Working Effectively with Legacy Code》 保護傘
  25. 單元測試 整合測試 驗收測試 顆粒 ⼩ ⼤ 誰測 RD QA 速度

    快 慢 種類 ⽩箱 ⿊箱 模組功能 滿⾜需求
  26. 《Testing With RSpec》by Aaron Sumner 在 Rails 設定測試環境 使⽤ FactoryBot

    取代 fixture 製造測試資料 基本的測試招式 Feature testing with Capybara Mock / Stub 在 Rails 寫 RSpec 可以先看這本書
  27. def keys_of_null(hsh, check_only) if check_only.nil? result = [] hsh.each do

    |k, v| result << k if v.nil? end if result.empty? "all good" else result end else result = [] hsh.each do |k, v| result << k if check_only.include(k) && v.nil? end if result.empty? "all good" else result end end end
  28. def keys_of_null(hsh, check_only) if check_only.nil? result = [] hsh.each do

    |k, v| result << k if v.nil? end if result.empty? "all good" else result end else result = [] hsh.each do |k, v| result << k if check_only.include(k) && v.nil? end if result.empty? "all good" else result end end end 把功能相似的標註出來
  29. def keys_of_null(hsh, check_only) check_only = check_only.nil? ? hsh.keys : check_only

    result = [] hsh.each do |k, v| result << k if check+only.include(k) && v.nil? end result.empty? ? "all good" : result end 整理在⼀起
  30. 影片 《Refactoring from Good to Great》 by Ben Orenstein, Aloha

    Ruby Conf 2012 五星推薦 ⭐⭐⭐⭐⭐ • 好的 method 不⽤太長,只要能描 述到它能做的事情即可 「不⽤描述他不需要關⼼的細節」 • 重構前⼀定要寫測試
  31. Tell, Don’t Ask 影片 《Refactoring from Good to Great》 by

    Ben Orenstein, Aloha Ruby Conf 2012 不要拿物件內的 attribute 來判斷 ⽽是直接對物件 send message 釐清責任是屬於哪個物件
  32. 《Practical Object-Oriented Design in Ruby: An Agile Primer》 by Sandi

    Metz 先從了解物件導向設計開始! 五星推薦 ⭐⭐⭐⭐⭐
  33. 還 不 懂 沒 關 係 
 C i n

    d y會 表 演 給 ⼤ 家 看 ! 突如其來的業配!
  34. • Service Objects • Value Objects • From Objects •

    Query Objects • View Objects ( Serializer / Presenter ) • Policy Objects • Decorators 我們需要更多的 pattern in Rails ! https://www.sitepoint.com/7-design-patterns-to-refactor-mvc-components-in-rails/
  35. 還 不 懂 沒 關 係 
 澤 清 哥

    會 表 演 給 ⼤ 家 看 ! 突如其來的業配!
  36. 《 Programming Ruby》 by David Thomas , Andrew Hunt, Chad

    Fowler 想要更深入了解 Ruby 就看它
  37. 《 Crafting Rails 4 Applications 》 by José Valim 從建造⼀個

    Rails Plugin 開始 開始瞭解 Rails 原始碼 Elixir 的作者
  38. 《 Docker for Rails Developers》 by Rob Isenberg 以 Rails

    為基底的 超基礎⼿把⼿ Docker 教材!
  39. 《 The Pragmatic Programmer》 by David Thomas , Andrew Hunt

    Programmer 必看 程式開發的觀念⼼法都在裡⾯ 五星推薦 ⭐⭐⭐⭐⭐
  40. 給 想 要 活下來的 Ruby 菜 ⿃ ⼯ 程 師

    還 有 懶 得 慢 慢 教 ⼈ 的 資 深 ⼯ 程 師