SlideShare a Scribd company logo
1 of 204
Download to read offline
R u b y J u n i o r ⼯ 程 師 的 存 活 術
我要活下來!
洪立璿
Fred
www.spreered.com
medium.com/@spreered
spreered@gmail.com
為 什麼 要 講這個主題 ?
⿊歷史
資深助教
J u nio r ⼯ 程師的煩惱
第⼀次收到 issue 被嚇到
看著需求不知如何下⼿
不會估時間
客⼾看著成果說感覺不對
需求變來變去
第⼀次打 開 公司的專案被嚇到
專案跟學習時有落差
不知道如何追程式碼
沒有 senior 理你 或者 沒有 senior 理你
錄取 新⼯作,只 是個 挑戰開始
所以我今天會講什麼
今天我想來點 ...
• 需求溝通不求⼈
• 菜雞們在 Ruby on Rails 的救命招式
• 資料庫是你的好朋友
• 早點下班的秘訣
• 資訊焦慮
完全不會深 入探討 各項 議題
全部 都是抄 襲參 考資 料
(還 有⼀些⼼ 得)
不⼀定能救你
但希望可以給你 ⼀根救命的繩索
需求溝通
不求人
案例⼀
公務員⽇常
「資訊室,我辦公室的網路斷了」
事實上是他 的電腦 桌 ⾯
不⼩⼼被他⾃⼰ 改 成 ⿊ ⾊
案例⼆
「⼯程 師, 為什麼你講的話

別⼈總是聽不懂」
104 廣告 《⼯程師如何和他⼈有效溝通?DFS前⼯程副總黃世岱⽤35年經驗跟你分享》
以上⾔論不代表本⼈立場
⼯程 師不該被貼上

「 你就是不 會溝通」的標籤
先講⼀下有關「溝通 」的 思考 架構
Jo har i Window
公開象限 盲⽬象限
隱私象限 未知象限
我知道的 我不知道的
別⼈知道的
別⼈不知道的
先確定溝通時的 context 在公開象限
(⽇常溝通、提問、交辦事情、討論都可使⽤)
何謂有效溝通
「我的網路斷了」
電腦桌⾯變成⿊⾊
User 給錯誤的需求
真正要解決的問題
溝通誤 區: 「先說答案」
傳達者
確認問題
給答案
確認期望反應
• 理解
• 回饋意⾒、建議、判斷
• 立即⾏動
對⽅
icon made by photo3idea_studio
提出說服⼈的答案
(吵架常常吵輸 請看這 邊 )
表達邏輯的訓練
問題
答案
根據或⽅法
so what ? why so ?
MECE
不重複 不遺漏
以上參考⾃「邏輯思考的技術」
問對問 題很重要
問問題的重要性 提問的技巧
Youtube 影片 《 91APP 電商技術⼤解密 (2020 線上分享系列):DevOps 的⾦字塔原理與技術 》
五星推薦 ⭐⭐⭐⭐⭐
需求確認⼯ 具
U s e r S t o r y
• 最早是由 Kent Beck 在 XP 裡⾯提出
• 需求⽅可以⽤它來跟開發部⾨溝通
• 開發部⾨可以⽤來拆解成可執⾏的任務
• 這個是⽤來溝通⽤的!不是規格書!
User Story
作為⼀個 (⾓⾊),我可以 (做某件事情),因此可以
(達成某個⽬的)



As a (role of user), I want (some feature) so that
(some business value)
User Story 的範本
• 使⽤者可以將喜歡的商品加入購物⾞
• 登入使⽤者可以在影片下⽅留⾔
• 訪客可以在⾸⾴搜尋⽂章標題
User Story 範例
• 將顆粒度適中的 user story 與客⼾確認
• ⼀條 user story 可能會包含很多任務,所以不會
直接將⼀個 user story 來開 ticket
• break down to task 可能需要⼀點經驗,可以請
主管或 senior 核對 task 是否合理
將 User Story 拆成任務
《什麼是 User Story》
by ihower
《使⽤者故事 User Story》
by Ruddy
當⼀ 個 issue 開出來, 通常 我會麼處理?
1 .先搞清楚業務邏輯和 系統架構
• Who 誰在使⽤這個系統
• What 為了什麼⽬的使⽤
• How 怎麼操作
• 找到很熟系統操作的使⽤者
• 試著盡量弄清楚⼀些 domain
knowhow / 專有名詞
弄清楚業務邏輯
• 務必熟悉資料的關聯
• 專案程式架構(等等會講)
了解系統架構
2 .確 認 問題
• 「客⼾通常不會知道他們想要的正確規格」
• 「客⼾第⼀次給的答案通常是錯的答案」
• 為什麼要做這張票、操作的⼈事時地
• 問到真正想解決的問題
確認問題
3 .規 劃 作法
• 考量全局(避免不必要的需求變更)
• 依據問題提出解決⽅案
• 與 senior 討論⽅向
• 最終產出 user story
規劃作法
4 .確 認 需求
• 使⽤ user story 與客⼾核對需求
• 將 user story 拆解成需要執⾏的任務
• 依據可執⾏的任務來估算時間
確認需求
如果想要加速開發的時間,則前提是把需求弄好,
擁有好的需求品質...⽅向對了返⼯(re wo rk)的次
數⾃然變少,減少了在返⼯時所浪費的時間,減少
了浪費的時間開發作業也就⾃然地變快起來了。
— 《敏捷開發為何會比較快》 by Ruddy
解決需求變化太過頻繁的最好⽅法,就是提升需求的品
質。
— 《需求變化太過頻繁》 by Ruddy
菜雞們在
Ruby on Rails
的救命招式
R a i l s 專案初次⾒⾯
從哪裡著手認識一個專案?
‧ Readme
‧ Gemfile
‧ routes ( $ rails routes )
‧ models
‧ db/schema
‧ Assets
‧ 第三方服務
‧ git log
‧ 測試案例
Everyday Rails -
Getting started with a legacy Rails application
但是 專案很 複雜?看攏無?
先 弄清楚 Ruby Obj ect Model
class Dog
def initialize(name)
@name = name
end
end
bingo = Dog.new("Bingo")
宣告⼀個 Dog 的實例物件
名叫 Bingo
Ruby Object model
屬性在實例的物件⾝上,
⽅法在類別⾝上。
class Dog
def initialize(name)
@name = name
end
def bark
puts "woof"
end
end
bingo = Dog.new("Bingo")
bingo.bark
Ruby Object model
雖然我們沒有特別寫,但是所有我們的宣告的 Dog
預設繼承⾃ Object
Ruby Object model
def bingo.say
puts "hi, This is #{@name}"
end
bingo.say
# hi, This is bingo
我們可以為個別物件

定義專屬的⽅法
它會放在⼀個隱藏的
singleton class 裡⾯
Ruby Object model
class 本⾝也有 singleton class
Ruby Object model
include module extend module
影片《The Ruby Object Model》by Dave Thomas @ Scotland on Rails conference, 2009
五星推薦 ⭐⭐⭐⭐⭐
《Ruby 的繼承鍊 (1) - 如何實踐物件導向 》
《Ruby 的繼承鍊 (2) -
Module 的 include、prepend 和 extend》
追 code ⼩撇步
methods 列出所有⽅法
可以扣掉⽗層的⽅法
source_location 查看⽅法在哪個檔案
source 印出原始碼
super_method 找到繼承下下來的⽅法
bundle open 打開專案內某個 gem
影片《teach yourself how Rails works》by Jordan Raine @ RailsConf 2019
Debug Tool
byebug
pry
RailsPanel
https://github.com/dejan/rails_panel
Browser Extension


在開發環境下可以讓你快速
找到每個⾏為的 route /
controller / view / model
Rails console ⼩技巧!
《原來 Rails Console 可以這樣⽤》 by 韓政璇 @ 5xRuby
M et ap rogramming
— https://zh.wikipedia.org/wiki/元編程
元程式設計(Metaprogramming),⼜譯超程式設計,是
指某類電腦程式的編寫,這類電腦程式編寫或者操縱其它
程式(或者⾃⾝)作為它們的資料,或者在執⾏時完成部
分本應在編譯時完成的⼯作。多數情況下,與⼿⼯編寫全
部代碼相比,程式設計師可以獲得更⾼的⼯作效率,或者
給與程式更⼤的靈活度去處理新的情形⽽無需重新編譯。
— Metaprogramming Ruby
Metaprogramming is writing code that
manipulates language constructs at runtime.
誰⽤了 metaprogramming
• ActiveRecord
• Rails routes
• Rspec
• Devise gem
怎麼做到的
• method_missing
• define_method
• class_eval / instance_eval
• 在 run time 的時後才去產⽣些程式
因為 程 式碼是程式產⽣的
有 時候你會找不到
建議:打 造⼯ 具時才使⽤本招式
菜雞不會寫 metaprogramming


也要能看懂 metaprogramming
舉例:Devise 的 current_user
devise/lib/devise/controllers/helpers.rb 
M e t a p ro g ra m m i n g Ru b y 2
五星推薦 ⭐⭐⭐⭐⭐
還不 懂沒關係
等等 蒼時會表
演給 大家看!
突如其來的業配!
資料庫是你
的好朋友
某天看到我的同事寫出了⼀段程式碼
於是我⿎(脅)勵( 迫) 她弄 ⼀個
SQL的讀書會
https://sqlzoo.net/
SQL 基礎語法刷題
資料庫概論相關
U N I O N (聯集) ∪
INTERSECTION ( 交集) ∩
SET DIFFERENCE ( 差集)
C A RT E S I A N P R O D U C T (卡⽒積) ×

SELECT ( 選擇) σ
R O J E C T (投射) π
JOIN (合併) ⋈
D I V I S I O N (除法) ÷
關聯式代數
資料庫正規化
Transaction
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 中的⼀些效能問題
Active Record 原理
《如何在 Rails 中使⽤ A r e l
SQL》
— Lance f rom 5xRub y
ActiveRecord 會使⽤ A r e l 來建
立 SQL 的語法樹
基礎到不行
但還是常看到的 n+1 問題
善⽤ preload / eager_load / inlcudes
Sc ope
scope
scope
scope 的新⼿誤區
請記得⼀定要回傳 relation object
scope 同事踩過的雷
scope 如果是 nil 的話,會回傳 all
教學《Advanced ActiveRecord Querying》by UpCase (Thoughtbot)
五星推薦 ⭐⭐⭐⭐⭐
A cti ve Re co rd 教 學
由簡 入深
有提 供範例 練習
ActiveRecord 課程
早點下班的秘
訣
說個⿁故事
我還很 菜的 時候
接⼿的第 ⼆個 專案
沒有 rubocop
沒 unittest
H a p p y
沒有 Rubocop
• 隨便⼀個 method 都是 3 40 ⾏起跳
• 隨便⼀個 class 都是百⾏起跳
• ⼀個 object 會處理很多事情
義⼤利麵 style
• Nested condition:四到五層是家常便飯
• 要修改程式前,需要花很長得時間先把原本
的邏輯看懂。
沒有 unittest
• 只有 feature test,每次跑完需要兩個⼩時
• 不知道每個 method / class 的實際使⽤⽅式
• 每次修改完還要花很多時間驗證
• 因為沒有單元測試,所以許多物件有嚴重的
相依。
有⼀天客⼾要我修改⼀個
700 ⾏的 Class
.. . 雖 然 (很臭的)程式碼可以執⾏,但我們需要重構它只是美感
問 題嗎? 雖 然編譯器是無法辨識程式 碼的 美醜,但需要修改系統的時
候 卻需要 「 ⼈」的參與,所以「⼈」必 須要 容易看懂這些程式碼。
不 好的程 式 碼是難以修改的,甚⾄是 醜到 讓我們不知道要從何著⼿。
任何⽩痴都可以寫電 腦懂 的程 式碼
強者會寫⼈類看得懂的程式碼
在《重構 Refac torin g》⼀書提到 ...
早點下班的秘訣就是
寫出好維護的程式碼
第⼀式:辨識 Code smell
程式碼發臭了,你知道嗎
《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 ㄉ味道
《談談壞味道》系列⽂章 by Teddy Chen
h t t p s : / / r u b y s t y l e . g u i d e /
開了 RuboCop 後也許比較不那麼臭
為了短⽽短?
滿⾜ lint 好像也不⾒得好維護?
第⼆式:寫好單元測 試
為什麼需要寫測試?
要驗證結果正確
要⾃動化執⾏
. . . 「編輯 並祈禱」這種⽅式似乎意味 著「 ⼩⼼著⼿」...
. . . ⽽ 「覆蓋並修改」則是另外⼀種 ⽅式 。它背後理念在於,在我
們 修改軟 體的時候撐開⼀張安全 網 . .. 像 是⽃篷⼀樣蓋在我們進⾏
修 改的程 式碼上⾯... 覆蓋軟體即意 味著 ⽤測試來覆蓋它。當對⼀
段 程式碼 有⼀組良好的測試時, 我們 就可 以放⼼地對它進⾏修改。
— 「帶著回饋⼯作」
書《Working Effectively with Legacy Code》
保護傘
為什麼需單元測試?
單元測試
整合測試
驗收測試
顆粒
⼩
⼤
誰測
RD
QA
速度
快
慢
種類
⽩箱
⿊箱
模組功能
滿⾜需求
因為很快,可以⾺上驗證我們修改的結果
當程式越來越複雜,測試就是你的安全堡壘
測試也可以讓我們設計比較好⽤的介⾯
(當我們發現測試很難寫的時候,很有可能的原因是物件的設計不太好)
RSpec
測試案例
matcher
Matcher 在這裡查
matcher ⽤來比對
程式產⽣的值 與
期望得答案
https://relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
R S p e c 會搭配到的⼯具
Database Cleaner
https://github.com/DatabaseCleaner/database_cleaner
FactoryBot
https://github.com/thoughtbot/factory_bot
VCR
https://github.com/vcr/vcr
Timecop
https://github.com/travisjeffery/timecop
SimpleCov
https://github.com/colszowka/simplecov
《Testing With RSpec》by Aaron Sumner
在 Rails 設定測試環境
使⽤ FactoryBot 取代 fixture
製造測試資料
基本的測試招式
Feature testing with Capybara
Mock / Stub
在 Rails 寫 RSpec
可以先看這本書
RSpec 讓你愛上寫測試
https://www.slideshare.net/ihower/rspec-7394497/
五星推薦 ⭐⭐⭐⭐⭐
《 單元測試的藝術》 by Roy Osherove
第三式:好懂的程式 碼
遊戲書
… 到達了約定的地點,但是過了⼗
五分鐘他遲遲沒有出現。
你決定回家,請翻⾄第四⾴。
若你決定繼續等著,就翻到第五⾴。
如果試著從第⼀⾴翻到最後⼀⾴,你讀得懂嗎?
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
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
把功能相似的標註出來
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
整理在⼀起
Collecting Input 處理輸入
Performing work 處理主要邏輯
Delivering output 處理輸出
Handling failures 錯誤處理
Method 的四個部分
《Confident Ruby》 by Avdi Grimm
五星推薦 ⭐⭐⭐⭐⭐
「好讀的程式碼跟好讀的⽂章⼀樣」
怎麼⽤ Ruby 隱藏的招式
寫出優雅的程式碼
寫出好懂的程式碼,跟寫出好懂的⽂章⼀樣
不會⼀次到位,⽽且會不斷的重構
影片 《Refactoring from Good to Great》
by Ben Orenstein, Aloha Ruby Conf 2012 五星推薦 ⭐⭐⭐⭐⭐
• 好的 method 不⽤太長,只要能描
述到它能做的事情即可
「不⽤描述他不需要關⼼的細節」
• 重構前⼀定要寫測試
⼀個 method 不需要太多細節
影片 《Refactoring from Good to Great》
by Ben Orenstein, Aloha Ruby Conf 2012
Method naming:想不到好名字就不要拆 method
Comment:不是說不能寫註解,⽽是通常註解都會
拿來作為除臭劑。好的 method name 就可以取代那
些不必要的註解。
— 《 Refactoring 》
Tell, Don’t Ask
影片 《Refactoring from Good to Great》
by Ben Orenstein, Aloha Ruby Conf 2012
不要拿物件內的 attribute 來判斷
⽽是直接對物件 send message
釐清責任是屬於哪個物件
第四式:物件導向與 它的 ⼩夥 伴們
影片《All the Little Things》 by Sandi Metz, RailsConf 2014
精彩的表演!
五星推薦 ⭐⭐⭐⭐⭐
影片《All the Little Things》 by Sandi Metz, RailsConf 2014
影片《All the Little Things》 by Sandi Metz, RailsConf 2014
《Practical Object-Oriented Design in Ruby: An Agile Primer》 by Sandi Metz
先從了解物件導向設計開始!
五星推薦 ⭐⭐⭐⭐⭐
物件導向基礎到 Design Pattern
https://refactoring.guru/design-patterns
清楚⼜簡單描述物件導向概念
GoF Design Patten
還 不 懂 沒 關 係 

C i n d y會 表 演 給
⼤ 家 看 !
突如其來的業配!
R a i l s 中常⾒的 Pattern
Model, View, Controller
Fat Model, Skinny Controller?
商業邏輯要集中在 Model 上
專案越複雜,東⻄越不知道要放哪裡
• 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/
還 不 懂 沒 關 係 

澤 清 哥 會 表 演 給
⼤ 家 看 !
突如其來的業配!
所以那個⼀千⾏的 class 呢
(先看完了上⾯那堆書)
幫 1000 ⾏的 class 補上單元測試
找出程式碼內的單⼀職責
拆解出物件
再補上單元測試
700 ⾏
124 ⾏
+
5 個新的 class
程式複雜度⼤幅降低
資訊焦慮
更多的書
《 Programming Ruby》
by David Thomas , Andrew Hunt,
Chad Fowler
想要更深入了解 Ruby 就看它
《 Rebuilding Rails 》 by Noah Gibbs
從零開始⾃幹⼀個偽 Rails
《 Crafting Rails 4 Applications 》
by José Valim
從建造⼀個 Rails Plugin 開始
開始瞭解 Rails 原始碼
Elixir 的作者
《 Docker for Rails Developers》
by Rob Isenberg
以 Rails 為基底的
超基礎⼿把⼿ Docker 教材!
《 The Pragmatic Programmer》
by David Thomas , Andrew Hunt
Programmer 必看
程式開發的觀念⼼法都在裡⾯
五星推薦 ⭐⭐⭐⭐⭐
國外技術書商感恩節都有特價!
Blog《 復活節特價 Ruby 書敗家指南》
by 泰安
更多書籍推薦
我都買完但還沒看完!
免費仔學習資源
https://guides.rubyonrails.org/
很多⼈都忘了它的存在
https://www.driftingruby.com/
http://railscasts.com/
已經沒在更新了
但還是很有參考
價值
https://gorails.com/
https://thoughtbot.com/upcase
Take “junior” out of your title
RSS 訂起來!
http://www.rubyflow.com/
https://www.ruby-lang.org/zh_tw/
https://ruby-china.org/
https://thoughtbot.com/blog
https://weblog.rubyonrails.org/
Podcast 聽起來!
Ruby on Rails Podcast
Ruby Rogues
Remote Ruby
Rails with Jason
以上!
給想要 活下來的 Ruby 菜⿃⼯程師
還 有 懶 得 慢 慢 教 ⼈ 的 資 深 ⼯ 程 師
Special Thanks !
泰安老師哥、蒼時、昱陞、⻄瓜
卡米、阿瓊師 Cindy、聖甲蟲戰隊⼩夥伴
還有幫我活下來的各位⼤⼤

More Related Content

What's hot

깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)Jay Park
 
SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)Tomoaki Uchida
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceXionglong Jin
 
신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]Yurim Jin
 
Owasp Top 10 - A1 Injection
Owasp Top 10 - A1 InjectionOwasp Top 10 - A1 Injection
Owasp Top 10 - A1 InjectionPaul Ionescu
 
Up is Down, Black is White: Using SCCM for Wrong and Right
Up is Down, Black is White: Using SCCM for Wrong and RightUp is Down, Black is White: Using SCCM for Wrong and Right
Up is Down, Black is White: Using SCCM for Wrong and Rightenigma0x3
 
SRE Conference 2022 - How to Build a Healthy On-Call Culture
SRE Conference 2022 - How to Build a Healthy On-Call CultureSRE Conference 2022 - How to Build a Healthy On-Call Culture
SRE Conference 2022 - How to Build a Healthy On-Call Culturesmalltown
 
Laravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのかLaravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのかShohei Okada
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해중선 곽
 
Advanced nGrinder
Advanced nGrinderAdvanced nGrinder
Advanced nGrinderJunHo Yoon
 
Cross Site Scripting: Prevention and Detection(XSS)
Cross Site Scripting: Prevention and Detection(XSS)Cross Site Scripting: Prevention and Detection(XSS)
Cross Site Scripting: Prevention and Detection(XSS)Aman Singh
 
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기Sangik Bae
 
Burp better - Finding Struts and XXE Vulns with Burp Extensions
Burp better - Finding Struts and XXE Vulns with Burp ExtensionsBurp better - Finding Struts and XXE Vulns with Burp Extensions
Burp better - Finding Struts and XXE Vulns with Burp ExtensionsChris Elgee
 
Secure code practices
Secure code practicesSecure code practices
Secure code practicesHina Rawal
 
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計Andrew Wu
 
Windows privilege escalation by Dhruv Shah
Windows privilege escalation by Dhruv ShahWindows privilege escalation by Dhruv Shah
Windows privilege escalation by Dhruv ShahOWASP Delhi
 
신입 SW 개발자 취업 준비
신입 SW 개발자 취업 준비신입 SW 개발자 취업 준비
신입 SW 개발자 취업 준비인서 박
 

What's hot (20)

Practical Celery
Practical CeleryPractical Celery
Practical Celery
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
 
SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
 
신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]
 
Owasp Top 10 - A1 Injection
Owasp Top 10 - A1 InjectionOwasp Top 10 - A1 Injection
Owasp Top 10 - A1 Injection
 
Up is Down, Black is White: Using SCCM for Wrong and Right
Up is Down, Black is White: Using SCCM for Wrong and RightUp is Down, Black is White: Using SCCM for Wrong and Right
Up is Down, Black is White: Using SCCM for Wrong and Right
 
SRE Conference 2022 - How to Build a Healthy On-Call Culture
SRE Conference 2022 - How to Build a Healthy On-Call CultureSRE Conference 2022 - How to Build a Healthy On-Call Culture
SRE Conference 2022 - How to Build a Healthy On-Call Culture
 
Laravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのかLaravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのか
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해
 
Advanced nGrinder
Advanced nGrinderAdvanced nGrinder
Advanced nGrinder
 
Cross Site Scripting: Prevention and Detection(XSS)
Cross Site Scripting: Prevention and Detection(XSS)Cross Site Scripting: Prevention and Detection(XSS)
Cross Site Scripting: Prevention and Detection(XSS)
 
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
 
Agile and Secure SDLC
Agile and Secure SDLCAgile and Secure SDLC
Agile and Secure SDLC
 
Burp better - Finding Struts and XXE Vulns with Burp Extensions
Burp better - Finding Struts and XXE Vulns with Burp ExtensionsBurp better - Finding Struts and XXE Vulns with Burp Extensions
Burp better - Finding Struts and XXE Vulns with Burp Extensions
 
Secure code practices
Secure code practicesSecure code practices
Secure code practices
 
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
 
RSpec & TDD Tutorial
RSpec & TDD TutorialRSpec & TDD Tutorial
RSpec & TDD Tutorial
 
Windows privilege escalation by Dhruv Shah
Windows privilege escalation by Dhruv ShahWindows privilege escalation by Dhruv Shah
Windows privilege escalation by Dhruv Shah
 
신입 SW 개발자 취업 준비
신입 SW 개발자 취업 준비신입 SW 개발자 취업 준비
신입 SW 개발자 취업 준비
 

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

Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型Justin Lin
 
A brief introduction to Machine Learning
A brief introduction to Machine LearningA brief introduction to Machine Learning
A brief introduction to Machine LearningWen-Tien Chang
 
Djt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comDjt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comdrewz lin
 
Djt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comDjt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comdrewz lin
 
Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016Kirk Chen
 
如何利用Jira + structure 做需求管理
如何利用Jira + structure 做需求管理如何利用Jira + structure 做需求管理
如何利用Jira + structure 做需求管理howie YU
 
程序员与技术
程序员与技术程序员与技术
程序员与技术ligaoren
 
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生appuniverz
 
Ops X Serverless (GCPUG.TW meetup 20180627)
Ops X Serverless (GCPUG.TW meetup 20180627)Ops X Serverless (GCPUG.TW meetup 20180627)
Ops X Serverless (GCPUG.TW meetup 20180627)Earou Huang
 
Mopcon 2021 Scrum 是新的死亡行軍嗎?
Mopcon 2021   Scrum 是新的死亡行軍嗎?Mopcon 2021   Scrum 是新的死亡行軍嗎?
Mopcon 2021 Scrum 是新的死亡行軍嗎?Jen-Chieh Ko
 
拒絕再寫無效規格,來學學實例化需求! (Agile Summit TW 2023)
拒絕再寫無效規格,來學學實例化需求! (Agile Summit TW 2023)拒絕再寫無效規格,來學學實例化需求! (Agile Summit TW 2023)
拒絕再寫無效規格,來學學實例化需求! (Agile Summit TW 2023)Fong Liou
 
尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)
尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)
尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)Dahui Feng
 
构建可维护的Javascript 小米网
构建可维护的Javascript 小米网构建可维护的Javascript 小米网
构建可维护的Javascript 小米网yang alex
 
數學系的資訊人生
數學系的資訊人生數學系的資訊人生
數學系的資訊人生Jintin Lin
 
Legacy code 讀書會 1st (Ch1 - Ch5)
Legacy code 讀書會 1st (Ch1 - Ch5)Legacy code 讀書會 1st (Ch1 - Ch5)
Legacy code 讀書會 1st (Ch1 - Ch5)Fong Liou
 
Scrum Gathering 2012 Shanghai_团队合作与团队指导分会场演讲话题:自组织?你开玩笑吧!(艾永亮)
Scrum Gathering 2012 Shanghai_团队合作与团队指导分会场演讲话题:自组织?你开玩笑吧!(艾永亮)Scrum Gathering 2012 Shanghai_团队合作与团队指导分会场演讲话题:自组织?你开玩笑吧!(艾永亮)
Scrum Gathering 2012 Shanghai_团队合作与团队指导分会场演讲话题:自组织?你开玩笑吧!(艾永亮)JoXuZi
 
【1110ROS社群開講】如何打造與人一起學習的機器檯燈_鄭凱文
【1110ROS社群開講】如何打造與人一起學習的機器檯燈_鄭凱文【1110ROS社群開講】如何打造與人一起學習的機器檯燈_鄭凱文
【1110ROS社群開講】如何打造與人一起學習的機器檯燈_鄭凱文MAKERPRO.cc
 
軟體專案管理與開源精神
軟體專案管理與開源精神軟體專案管理與開源精神
軟體專案管理與開源精神承澤 林
 
有效面對技術債
有效面對技術債有效面對技術債
有效面對技術債Kirk Chen
 

Similar to 我要活下來 - Ruby Junior 工程師的存活術 (20)

Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
 
A brief introduction to Machine Learning
A brief introduction to Machine LearningA brief introduction to Machine Learning
A brief introduction to Machine Learning
 
Djt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comDjt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.com
 
Djt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comDjt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.com
 
Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016
 
如何利用Jira + structure 做需求管理
如何利用Jira + structure 做需求管理如何利用Jira + structure 做需求管理
如何利用Jira + structure 做需求管理
 
程序员与技术
程序员与技术程序员与技术
程序员与技术
 
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生
 
Ops X Serverless (GCPUG.TW meetup 20180627)
Ops X Serverless (GCPUG.TW meetup 20180627)Ops X Serverless (GCPUG.TW meetup 20180627)
Ops X Serverless (GCPUG.TW meetup 20180627)
 
42qu thrift1
42qu thrift142qu thrift1
42qu thrift1
 
Mopcon 2021 Scrum 是新的死亡行軍嗎?
Mopcon 2021   Scrum 是新的死亡行軍嗎?Mopcon 2021   Scrum 是新的死亡行軍嗎?
Mopcon 2021 Scrum 是新的死亡行軍嗎?
 
拒絕再寫無效規格,來學學實例化需求! (Agile Summit TW 2023)
拒絕再寫無效規格,來學學實例化需求! (Agile Summit TW 2023)拒絕再寫無效規格,來學學實例化需求! (Agile Summit TW 2023)
拒絕再寫無效規格,來學學實例化需求! (Agile Summit TW 2023)
 
尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)
尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)
尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)
 
构建可维护的Javascript 小米网
构建可维护的Javascript 小米网构建可维护的Javascript 小米网
构建可维护的Javascript 小米网
 
數學系的資訊人生
數學系的資訊人生數學系的資訊人生
數學系的資訊人生
 
Legacy code 讀書會 1st (Ch1 - Ch5)
Legacy code 讀書會 1st (Ch1 - Ch5)Legacy code 讀書會 1st (Ch1 - Ch5)
Legacy code 讀書會 1st (Ch1 - Ch5)
 
Scrum Gathering 2012 Shanghai_团队合作与团队指导分会场演讲话题:自组织?你开玩笑吧!(艾永亮)
Scrum Gathering 2012 Shanghai_团队合作与团队指导分会场演讲话题:自组织?你开玩笑吧!(艾永亮)Scrum Gathering 2012 Shanghai_团队合作与团队指导分会场演讲话题:自组织?你开玩笑吧!(艾永亮)
Scrum Gathering 2012 Shanghai_团队合作与团队指导分会场演讲话题:自组织?你开玩笑吧!(艾永亮)
 
【1110ROS社群開講】如何打造與人一起學習的機器檯燈_鄭凱文
【1110ROS社群開講】如何打造與人一起學習的機器檯燈_鄭凱文【1110ROS社群開講】如何打造與人一起學習的機器檯燈_鄭凱文
【1110ROS社群開講】如何打造與人一起學習的機器檯燈_鄭凱文
 
軟體專案管理與開源精神
軟體專案管理與開源精神軟體專案管理與開源精神
軟體專案管理與開源精神
 
有效面對技術債
有效面對技術債有效面對技術債
有效面對技術債
 

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