跳到主要內容

【房止無知】建築用地甲乙丙丁,傻傻分不清楚?

談談軟體開發 - Pair Programming

 

會談這個主題主要是工作上預計進行Pair Programming的模型來開發,因而蒐集了一些關於Pair Programming這方面的相關概念與執行方向,並整理讓大家共同參考、討論。

但實務上真的可行嗎? 老闆同意嗎? 在執行前個人心中的兩大疑問,那麼以底下例子來看,這個問題的確沒有絕對的答案,取決於我們的思考面向。

如果大家認同航船過程中要有船長及副船長才足夠安全,那麼Pair Programming就是這樣的保險概念,透過雙人合作、互補來保障乘客順利抵達目的地,套用到產品的開發上也是如此,雖然兩個人共同做一件事情看似很蠢,但後續的經濟效益通常是我們沒有考慮的部分,試想我們的產品如果品質不好,在客戶端老是出包,那麼相信維護人員只會疲於奔命,對公司無非是莫大的損傷,產品給客人的觀感也不佳,影響公司的名聲,只要這樣的聲量傳開來,相信競爭者看到也一定很開心吧! 我想這並非公司所樂見的,因此Pari Programming就成為了這問題的解方之一,除了改善品質之外,還能用來進行新人訓練,甚至新產品研發都是非常適合的模式。


總之,取決於我們看事情的角度,假若我們重視的是後續的維護成本及產品品質,那麼Pair Programming就非常適合導入,但若僅是為了短期專案,只要快速結案就好,那麼用Pair Programming就多此一舉了,接著就直接進入主題吧!

Pair Programming是軟體領域中經典的開發方法,源自於極限編程的一種方法,又稱為結對編程,白話來說就是兩個人一起寫Code或者是完成某項指標任務,共同合作、互補、創新,主要會由以下兩個角色組成,分別是導航者(Navigator)跟駕駛者(Driver),導航者負責觀察、規劃及回饋,而駕駛者負責實際執行。



過程中2位工程師會用同一台電腦,針對同一支程式進行開發,上圖中每個人都可能是導航者與駕駛者,因為可以互相交換角色,以不同觀點來發掘問題與提出解決方法,減少單獨開發的盲點,提升產品品質。

🔔還沒成為Potato會員的朋友點這裡加入哦,撰寫文章還能挖礦打造被動收入 🔔

優點

俗話說獨樹不成林,單打獨鬥難以成事,一個人寫程式想必存在許多盲點,而這個盲點如果有另一個人一起檢視,那麼或許問題就更容易被發現,也減少在正式環境上發生BUG的機會,但如果讓兩個工程師做一樣的事情卻沒有任何優點與回報的話,任何老闆都不會買單的,因此我們需要探討,Pair Programming究竟能帶給我們哪些優點呢? 以下整理幾個重點:

提升程式碼品質

協作的過程相當於多了一個人幫我們檢視程式碼,發現問題立刻就能夠修復,一但BUG數量減少,意味著QA的測試成本及後續維護成本也隨之減少,因此有效的Pair Programming能夠讓程式碼品質變的更好。

知識的學習和共享

雙方的認知上有所不同,因此過程中可以互相提出疑問和看法,並在即時的討論過程中激盪出新的解決方案,共同互補。

舉例來說,解決問題的演算法可能有多種,那麼假設今天獨自開發時,可能直覺的以過往經驗寫出一套自認完整的演算法,但透過第三者的檢視之後,或許對於原本的演算法能夠有新的想法,透過彼此討論後,又能產生一套效能改進後的演算法,但若沒有這種激盪的過程,或許自己就陷入了迷思之中,也難以產生創新的解決方案。

雙方在交換資訊的同時,也達到了知識共享的成果,透過這樣持續的合作,讓學習事半功倍,除此之外還會訓練彼此的溝通能力,因為我們需要跟搭檔相互溝通,以對方能理解的語言解釋,進而提升軟實力。

提升團隊效率

團隊中通常每個人都會負責一塊產品獨立的模組,假設某個功能模組的成員請假、離職時,若平常沒人熟悉該模組時,就沒有人可以接手了,那麼若專案時程又是非常急迫時,勢必對於團隊造成非常大的衝擊,效率也隨之延宕。

透過Pair Programming讓某項功能模組都至少有兩個人熟悉,專案忙碌時至少有人可以互相Cover,對於團隊以及公司都是百利無一害。

缺點

專案工時增加

兩個人共同開發相同的部分,那麼工時計算就會增加為2倍,這在老闆眼中顯然不是非常樂觀的開發方式,但增加的工時,若Pair Programming能夠有效的發揮成效,則增加的工時會在「減少的BUG」、「工作互補性」這兩塊拿回來。

消耗專注力

由於經常討論,因此容易導致開發到一半的過程中被打斷,造成專注力下降,因此一周選定幾天進行即可,不需要每天執行,否則反而帶來反效果。

如何執行?



選定目標與任務

  • 將大任務切成小任務。
  • 設定到期日,於期間內短期衝刺。

成員挑選

  • 一個資深一個資淺,切忌兩個不懂的新人共同進行,導致無效率行為。
  • 兩個理念不合,經常吵架的成員最好不要共同進行,避免耗費時間與精神在處理情緒上。

定期交換角色

  • 活化思緒,避免僵化。
  • 換位思考,以不同角色觀察不同面向。
  • 激盪想法,創造解決方法。
  • 減少盲點。

注意事項

  • 團隊不一定要採取指派的方式進行,而是有需求就可以進行結對,發揮敏捷開發的精神。
  • 當夥伴與自己已經趨近熟悉、未能再有更多突破時,就可以考慮先停止,或者重新結對。
  • 過程中應理性討論,而非互相仇視、指責、批評。

🔔還沒成為Potato會員的朋友點這裡加入哦,撰寫文章還能挖礦打造被動收入 🔔

書籍推薦

如果您正在為了專案效率而努力,或者想要了解更多關於敏捷開發的相關知識,非常推薦「SCRUM敏捷實戰手冊」,讓我們一起變強,學習更多不同領域的知識吧!

資源參考

留言

這個網誌中的熱門文章

淺顯易懂的選擇權概念

  圖片來源 選擇權到底是選擇什麼呢? 搭幾點的車? 中午吃什麼?這件工作該如何下手?這些問題我想都是每個人每天會面臨的幾個選擇,除了生活會需要選擇之外,投資市場也有「選擇」概念的選擇權,那到底是在選擇什麼呢? 📌 簡單來說就是在一段時間內選擇是否履約的權利 。 其實就可以將其想成訂金的概念,假設我們今天選擇站在「 買方 」,看到一間「 預售屋(標的物) 」,預計於兩年後完工,目前的價格也非常滿意,希望完工後仍以現在的價格買進,此時雙方就會具有一個「 約定(規則) 」,只要支付一定比例的「 訂金(權利金) 」,就能獲得「 買權 」,並於「 約定期間 」後,以目前約定的「 價格 」買進,就如同底下的選擇權組成元素。 圖片來源 那麼對於買賣雙方來說,彼此的關係什麼? 圖片來源 那麼已經了解了雙方關係之後,我們再加上價格。 圖片來源 對於雙方來說,當約定期間之後發生了價格變化,兩邊的收益、損失又是如何呢? 狀況一: 當房屋市價漲到800萬時,那麼買方一定會選擇履約,此時買方的獲利為$800-$700-$10=90萬,而賣方則$700-$800+$10=-90萬。 狀況二: 當房屋市價跌到剩下650萬時,那麼買方評估後認為放棄履約的損失較小,此時買方只有損失訂金10萬,而賣方則獲取這10萬的訂金。 圖片來源 上述的例子是以買方這邊做為視角出發,而相反的我們也可以反向思考,以賣方的視角做為出發點,進行賣權的約定。 總之不論如何,就是會有其中一方獲利,其中一方損失,加上時間的因素,誰都無法保證未來如何? 故就是一場零和遊戲,應小心審慎注意風險。 構成選擇權的四個象限 前面都在說明選擇權的基本概念,當我們了解選擇權大致上是在做什麼之後,接著就進入正題,我們將人物區分為買方與賣方,一樣照上面的邏輯套用到選擇權市場中,可以發現到會有以下四個象限。 圖片來源 站在買方的立場,有點類似買樂透的概念,以小博大,損失有限,而賣方的立場就是保險公司,負責收取保費,一旦發生事情便支付理賠金,因此獲利有限,風險無限,乍看之下是不是站在買方比較有利,但我們要思考一件事情,那就是股市常常處於盤整階段,並不會短期間暴漲暴跌,因此以統計來說,反而是賣方會有比較平穩的收益,這也就是為什麼常常散戶在買方,而法人站在賣方。 那操作選擇權有什麼好處呢? ...

【商業與行銷系列】讓消費者感受物超所值的訂價策略

  錨定訂價法 我們的生活中應該常常看到促銷、周年慶...等活動,通常小資族的我們都會選擇在折扣的日子去進行消費,讓我們思考一下,為什麼要特別將原價標示出來呢? 腦海中進行比較的過程中,會拿一些特定的數值來進行比較,並決策是否購買,因此業者才會提供原價跟打折後的價格,讓我們更容易下定決心購買,創造雙贏,消費者認為賺到,賣家多銷售一件商品。 畸零訂價法 我們的大腦通常在看複雜的數字時會利用整數來進行標準與比較,例如底下有一個商品$300,另一個商品標價$299,通常我們的第一印象就是3與2的差異,因此明明只差1元,確讓人感覺起來差很多。 三欄式定價 提供消費者三種不同規格的價格,讓消費者可以根據自身需求來決策,就像有些人覺得50吋太大太貴,那麼就可以選擇較低一皆的40吋,那有些人可能覺得24吋太小,因此可能傾向往上一點的40吋,透過三個等級的訂價法讓消費者更容易進行比較與決策。 結語 不同的訂價方式可以讓消費者感受大不同,透過一點點訂價技巧讓成本在控制範圍內,也吸引消費者購買意願,以上介紹的訂價技巧相信我們在日常生活中應該常常見到,這也就是為什麼有些東西都要賣$99,或者打著年終大特賣,把很高的價格劃掉透過折扣讓我們感覺到撿便宜,進而購買,如果我們能夠在開店前先了解這些訂價策略,那麼相信在開店後會相對順利。 如果你有更多的商業訂價策略,歡迎留言在底下,讓我們一起學習商業訂價知識。 📝 商業與行銷系列 【商業與行銷系列】 Link in bio 是什麼?背後蘊含什麼商業價值? 喜歡撰寫文章的你,不妨來了解一下:「 Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入? 」歡迎加入一起練習寫作,賺取知識,累積財富! 📚 如果想看更多精選文章,或者關於我的相關資訊請來這裡... 💬 如果您有任何問題,也歡迎底下留言告訴我,讓我們一起學習 💬

【時事觀點】 LLM大型語言的幻覺可助長惡意套件散布

  當無辜的AI技術成為駭客幫凶時, 對於過度依賴於AI的我們又有什麼影響呢? 相信近來,大家不論在工作、生活、娛樂都已經大量的使用ChatGPT來輔助我們了, 也發覺到奇怪, 怎麼常常答非所問甚至答案可能都是用猜測的, 它剛開始讓我們感覺是無所不能的知識博士, 但實質上在零背景知識底下可能引發出一本正經胡說八道的幻覺, 而這種幻覺產生出來的回答可能被有心人士拿來利用, 比如說開發人員詢問一個關於URL的處理套件, 可能由於訓練的語料仍未更新, 因此回答出舊有的錯誤資訊, 輕則影響當事人的判斷決策資訊,重則被有心人士利用, 製作有害的套件庫讓開發人員使用,進而引發更大的連鎖效應。 就在2023/06/10時發布了這樣的消息,Vulcan安全風險管理廠商研究報告指出Chatgpt的幻覺將為開發人員帶來系統開發的漏洞… 來源: Researchers Warn That ChatGPT Can Be Used To Spread Malicious Code 安全風險管理廠商Vulcan怎麼做 圖片來源 首先, 它們蒐集了許多程式語言開發的問題, 將問題縮小到「如何做?」, 在最短的時間內獲得最多的不存在套件回答, 獲得這些套件之後, 接下來… 高達 35 %的套件庫都是幻覺的 圖片來源 “在 Node.js 中,我們提出了 201 個問題,並觀察到其中超過 40 個問題引起了至少一個尚未發布的包的響應。 我們總共收到了 50 多個未發布的 npm 包。 在 Python 中,我們提出了 227 個問題,其中 80 多個問題,我們至少收到了一個未發布的包,總共提供了 100 多個未發布的 pip 包。” 概念驗證 這個程式將會將裝置的主機名稱、套件來源以及包含模組檔案的目錄絕對路徑傳送到威脅角色的伺服器… 接著,一位「受害者」出現,問了和攻擊者相同的問題,ChatGPT建議了包含「惡意」程式碼的套件以及如何安裝它, 確實如預期,該套件被安裝並啟用。 研究人員解釋了接下來發生的事情: 「受害者按照ChatGPT的建議安裝了惡意套件,攻擊者根據我們對node index.js的預安裝呼叫,從受害者那裡收到了資料,其中包括了長主機名稱。」 雖然並不構成真正威脅,但這樣的概念展示已經證明了攻擊的可行性, 因此我們開發或者使用時也應該非常小心, ...