軟體工程人員應培養的 10 項技能

當你的職業或興趣跟軟體或系統程式設計相關時,除了會碰觸到專業資訊書籍外,當然還會有不少專精領域的學者或資深人員所提出的「經驗法則」。記得 Inside 於 2011 年三月的一份專欄主題中提到“程式設計師應讀的十本好書”,是經由Stack Overflow的討論內容所帶領出的十大好書,相信 Inside 讀者們應該都還有印象。
評論
評論
 

(Reference: shatterbox)

投稿作者:Leon Lu ([email protected])

新鮮活運動! 喜歡研究軟體架構的美、專案管理方法論的妙、與三五好友大談移動科技的樂 ^^

 

當你的職業或興趣跟軟體或系統程式設計相關時,除了會碰觸到專業資訊書籍外,當然還會有不少專精領域的學者或資深人員所提出的「經驗法則」。記得 Inside 於 2011 年三月的一份專欄主題中提到“ 程式設計師應讀的十本好書 ”,是經由 Stack Overflow 的討論內容所帶領出的十大好書,相信 Inside 讀者們應該都還有印象。

因為一直記得當時的那篇 Inside 好文章,這次就借題發揮,回顧一些筆者看到所謂的「經驗法則」,記得 Alex Iskold 曾列舉過“ 十大高桿開發人員特徵 ”, 以及最近有一位軟工專家 Markus Sprunck 也分享所謂的“ 十大軟體人員須養成 特質”。其實這二篇分享文,若不去嚴格追究其立論基礎,單純以身為軟體開發的愛好者去看待它,真的是滿有意思的文章。所以筆者特地作了綜合分析,並且摘錄下“ 10 項軟體工程人員應培養的技能 ”與各位 Inside 讀者們及軟體工程同好們分享。

訓練情緒智商 (Emotional Intelligence)

 (Reference: harmonicagoldfish)

EI 這個名詞,單純就 Wiki 上的定義 ,是指有能力去識別、評估和掌控自己或是他人的情緒,甚至是對群體的影響。就軟體工程的角度來看,「情緒智商」是一種 Soft Skill,是需要仰賴經驗以及個人特質的一種養成。尤其在專案經理或是軟體架構師的作事方式中可以窺見。

經營與專案利害關係人之間的互動、仔細去觀察客戶或合作夥伴們的真正需求及意圖,更重要的是自己要能以理性去看待這些需求及變更,因為很多需求往往是 Business/Sales 訴求,站在軟體開發人員的眼光來看待可能會感到不 Make Sense,所以在血壓上升準備解釋被抱怨的前因後果時,請先花個幾秒鐘思考一下會有那些衝擊,這就是 EI 的訓練。

釐清根本需求 (Business of Customer, Be reasonable and realistic)

 (Reference: brizzle born and bred)

當我們不知道 WHAT 時要如何定義 HOW?故軟體工程的藝術在於將客戶需求反映成實體化,通常經由 Prototyping 是一種最為熟悉的方式,還有一些 Agile 方法論中的 Iteration 其目的也是要確切抓住客戶的業務需求。故釐清根本需求,在合理需求以及現實作法間取得平衡點,才能設計出符合商業價值的系統。

抓住程式設計精髓 (Multi-paradigm programming)

(Reference: stebulus)

如果您的唯一工具是鐵槌,那所有的問題對您而言都會像是釘子。一位好的軟體人員要努力的方向是了解「程式設計精髓」,而不要固執或沉迷於某種程式設計語言 (雖然筆者也特別喜歡 Java)。

開放的去收納那些有特質、有潛力的程式語言,架構或特定用途的語言 (例:對 Parsing 特有力的 Perl、對跨平台跨前後端皆合宜的 Java、對 Usability 以及函式庫特豐富的 C#、XSLT、RoR 等等)。依據適當的產業、專案需求、個人喜好的綜合評估下,從您的工具箱中用適合的工具,去解決問題將是事半功倍 (例:要拔釘子嗎? 請放下鐵槌用老虎鉗試試)。

專注易使用性及維護性 [Focuses on Usability and Maintainability]

(Reference: x-ray delta one)

如果認知上,我們開發中的軟體系統是要給自己使用的,則會很自然的思考到易了解、易操作 (Usability) 的問題,當然具規模的專案會有 UX 工程師參與,但多多充實 UX 思維是軟體工程人員不可或缺的基礎,若開發人員不能了解用戶是如何與系統作互動,將是軟體專案上的嚴重隱性風險。

若把這個軟體系統當成我們的參賽作品來設計,則架構設計上、程式模組上的維護性 (Maintainability) 便會自然的去仔細考量。無論是命名規則、鬆散偶合的模組設計等 Coding Discipline,不只是習慣培養,亦是軟體工程人員跨入軟體架構規劃的養成重點。

測試是信賴基礎 [Don't Trust Code without Adequate Test]

(Reference: Anthony DeLorenzo)

相信具有經驗、或受過 De-bug 折騰的軟體人員,應該很認同測試是信賴基礎,無論是對自己的交付項目負責,也是團隊之間協同合作及客戶驗收的基礎。業界有測試導向的方法論 (例:TDD…) 以及測試項目 (單元測試、整合測試、壓力測試、程式碼覆蓋率…),無所謂的必要與否,端視軟體開發過程中如何去調適現實環節中必需被驗證的測試項目。

關注設計模式及演算法 [Uses Design Patterns and Algorithms]

(Reference: mrbill)

現今的高階程式開發提供了大量的 Library(Data Structures, List, Vector, Binary Search, Graph Traversals…) 供使用,一位優秀的軟體人員要關注設計模式及演算法嗎? 看來好像不需要,但擁有這方面的 know-how 能讓我們更正確的作出軟體設計規劃。並且有些時候,為了應付商業需求是需要建立獨特的解決方案,故多涉獵這方面的知識,將獲得更多軟體設計上的正確思維。

了解工具或操作工具 [Use and Know your Tools]

(Reference: illum)

在軟體開發、專案管控、需求管理等系統開發過程中,有太多工具軟體值得我們去學習及使用 (例:RM、CM、Debugging、Performance Tuning、Log Analysis…),但重點是了解這些工具的特性及關鍵技術,當有需求發生時,才有挑選合適工具的能力。

其次是對自己主要的工具更要熟悉操作及應用,這將是影響生產力和開發質量的關鍵因素 (例:MS Excel 不只是記錄,更要懂得運用函數或巨集去簡化例行公事)。

善用方法論及衡量指標 [Management Concepts and Key Metrics]

(Reference: Panda Face)

除了安排個人的工作、對於專案的管控、對技術團隊的指導,很多時候是需要軟體工程上的經驗,藉由 PM Skills 或是 Scrum 方法論的應用,將會對自己以及團隊合作上大大提昇品質。

很多時候當您在評估團隊成員所提的開發時程時,大部份情況有 80% 是低估該項工作的 Efforts 或 Risks。更有趣的是當團隊成員告知您該項工作完成時,有時候所指的是該項工作在技術面的需求已完成。

所以對那些精采的軟體衡量公式 (例:可維護性指數 MI),當我們不是 100% 了解它以及如何去應用它時,請不要貿然使用於開發過程中,反而是找出合適於您軟體開發過程中的真實衝量指標 (Real-World Measure) 更為重要。

持續整合及重構 [Continuous Integration and Refactoring]

(Reference: psiaki)

如同藝術家持續的雕刻著作品一般,針對程式代碼進行調整就是“重構”。重構並不是要改變業務需求,或是目前的設計架構,而是如同藝術家的雕刻工作將部份代碼稍作調整或精煉的過程。持續重構作業,讓我們有機會解決部份只經由 Black Box 測試的舊有程式碼問題。

持續整合 (CI) 是近年來滿火熱的議題之一,簡單的說就是經由 CI 可以讓系統開發過程中,提早嗅出那個環節有壞味道,進而提早清潔的軟體品質概念。持續整合及重構,雖然是整個開發團隊要一起進行及養成的,但對自己的代碼作 Refactoring、對自己每次的代碼變更試著作 CI,將是建立軟體品質思維及架構師的重要養成。

完成與完美的迷思 [Get things done than to be perfect]

(Reference: yakobusan Jakob Montrasio)

一位優秀的軟體開發人員,是指花費大量時間或精神去設計出複雜的、具備彈性的 Library 來符合軟體系統需求嗎? 答案有可能不是。但會嘗試著找出最簡單的作法,在有限時程及資源下解決專案問題或需求的軟體人員,將會是大多數 Project Stakeholders 所認為的優秀開發人員。

或許在軟體領域中沒有“完美”的解決之道,但存在著“完成”需求並達到高測試品質的解決方案,方法就在前述的九大特質之中 (根本需求、善用工具、注重易用性、測試、持續重構…)。

不曉得這十項軟體工程人員的技能,有多少已經融入在您的工作型態之中了,這些想法無關乎正確與否,僅在於是否適用於您或是您的團隊之中,若您也有一些受用,並且不吐不快的經驗法則,請留言分享,讓所有關注的 Inside 讀者們一起成長。


上雲猶如太空探險之旅,iKala Cloud AIOps Services協助企業輕鬆穿梭多雲環境

人類從上個世紀積極探索外太空,為了將太空人送上天際必須克服各式挑戰,而現代企業要從「地端」飛向「雲端」,困難程度有過之而無不及。iKala Cloud AIOps Services 提供多項關鍵服務,幫助 IT 團隊輕鬆悠遊多雲環境。
評論
評論

探索外太空,曾經是國際間的科技競賽,近年 Tesla 創辦人馬斯克更準備把太空旅行當成商業服務,預計 2026 年要帶著人類登陸火星。完成一趟星際旅行,需仰賴嶄新的科技及跨科學精密計算,但你知道嗎?現代企業要從「地端」飛上「雲端」,其實挑戰程度不亞於飛向太空。

對企業資訊管理者來說,有限的 IT 資源無法應付繁重的維運項目,加上同時管理公私有雲架構更顯困難、資安管理複雜,例如需要人工執行過濾警示,各種大大小小挑戰不勝枚舉。換言之,企業想航行雲端,就像打造火箭需要龐大資源及人力。不過,現在有更輕鬆穿梭雲端的方式,就是使用雲端技術服務商 iKala 所提供的 AIOps Services(自動化雲端託管服務)

火箭升空前的全盤規劃:iKala AIOps 擬定系統架構規劃、教育訓練

完成一趟太空之旅,必須做足各種研究,例如精準計算飛行軌道、降落定位點、燃料耗用數、與地球通訊設定…等。

對沒有雲端架構經驗的企業來說,就如同當時的科學家,必須用土法煉鋼的方式檢查數據是否有誤。換言之,企業 IT 在升級之前,就需要有經驗的「雲端顧問」來釐清需求、協助規劃「升雲」之旅。而 iKala 就是企業的最佳雲端顧問,旗下 iKala Cloud AIOps Services 會搭配一位專責的技術客戶經理,協助企業提供即時的技術服務與專業建議。

究竟 IT 升級之前,iKala Cloud AIOps Services 有哪些服務?首先是「系統設計規劃」,涵蓋系統架構規劃書、系統上線/遷移計畫書,可因應客戶產業需求,提供對應的解決方案以及顧問服務。而越來越多企業會使用到 Google 的雲端資源,iKala 也有提供 Google 雲端平台訓練服務。

GCP 教育訓練課程多元,包含 GCP 基礎架構(網路設定規劃、權限控管、計算資源等)、大數據與機器學習(大數據分析 Pipeline、BigQuery、ML 模型訓練與應用)、軟體開發技術與流程(容器化、CI/CD、DevOps)等。因為 iKala 團隊取得 10 多項 Google 專業技術證照,才能在企業規劃雲端轉型的前期就一步到位,規劃出整體藍圖,提供更全面的解決方案建議。

火箭升空中的精密操作:iKala AIOps 輔助即時技術維運、資安管理

當火箭準備就緒、升空倒數之際便是決定這趟太空之旅能否成功的關鍵時刻。從太空人的行前訓練與身體檢查,到火箭的引擎測試完成,如果有靜電或一點火花都可能引發爆炸事故。光是在升空階段,太空總部就要有結構、熱控、姿態控制、資料處理、電能、遙傳指令、推進以及飛行軟體等龐大的系統工程師在旁待命。

換言之,企業 IT 移轉雲端過程就像火箭發射的當下,需要有專業、經驗足夠的工程師,才能即時協助企業順利上雲,甚至快速排除緊急的狀況。對此,iKala Cloud AIOps Services 提供兩大關鍵的幫助:技術維運、資訊安全管理。

iKala Cloud AIOps Services 的技術維運服務內容,提供 7 x 24 的 Help Desk,像是緊急 GCP 問題報修、產品使用技術諮詢;或是事故管理,如搭建監控系統、設定規劃告警政策、規劃日誌收集與留存。每月也會提供企業維運報告,報告書有營運效率檢討、流程優化、新服務項目、營運系統建議等。

至於資訊安全管理方面,除了基本的 GCP 專案權限控管掃描、應用程式 OWASP(Open Web Application Security Project)前 10 大項目資安弱點掃描,同時也針對近年相當受重視的 DDoS 防護,iKala 可協助企業導入 GCP 平台的 DDOS 防禦機制。iKala 掌握多年軟體開發和雲端管理經驗,可分享給客戶 DevOps、AI 第一手實務的作法與經驗。

火箭升空後啟動自動導航:iKala AIOps 提供 AI 自動化監控、帳務管理

當火箭成功升空後,太空人為了執行下一階段任務,這時候火箭就需要轉換成自動駕駛模式,或在探索其他星球時,出動機器人來協助執行人力無法負荷的任務,讓太空人專心處理更關鍵的工作。換言之,上雲後的 IT 架構就像升空後的火箭,應該減少 IT 人員的負擔,甚至不需浪費例行時間,就能夠快速掌握整體資訊系統的運作狀況。

不過要讓 IT 架構像火箭具備自動駕駛功能,勢必需要相當高的技術門檻,而 iKala Cloud AIOps Services 正好有相對應的服務。如此一來,IT 人員的生產力就能投入在更具商業價值的研發專案,讓 IT 部門轉型成可創造產值的單位,而非單純的後勤支援角色。

盤點 iKala Cloud AIOps Services 在此環節共有三大類服務。其中一項是 AI 自動化監控與通報服務,幫助 IT 成員主動監控系統,掌握是否有異常操作狀況。其二是帳務方面的管理,幫助企業產出雲端服務月用量帳務分析報告,針對軟體授權需求,整合出帳至  Marketplace 與第三方服務商,自動化做到 License 採購管理。

第三項則是針對服務級別協定(SLA)iKala Cloud AIOps Services 提供 24 x 7、5 x 8 兩種模式,在重大 GCP 服務異常中斷服務時,提供電話、e-mail 聯繫。而且每月會舉辦 1 次月會(以 on-site 或遠端視訊會議方式)提交書面報告。目前 iKala 的企業客戶服務超過 400 多家、涵蓋數 10 種產業,可說是企業成功上雲,最能安心託付的合作夥伴。 

事實上,雲端託管服務(CMS)是目前最夯的新趨勢,根據市調公司 MarketsandMarkets Research 報告指出,全球雲端託管服務的市場規模,預計從 2020 年的 624 億美元,到 2025 年成長至 1,162 億美元,複合年增長率(CAGR)為 13.3%。代表未來有大量企業採用 CMS,以降低 IT 基礎設施的投資成本及風險,藉此提升企業營運的競爭力。

由此看來,企業的數位轉型,就像上個世紀的太空軍備競賽一樣。「時間就是決勝點」,越晚起步的公司與其他數位能力領先群的企業相比,差距只會越來越大。現在就攜手 iKala 嘗試 iKala Cloud AIOps Services,打造穩定的 IT 系統、邁向數據驅動的商業模式,讓企業在數位世代站穩腳步,輕鬆穿梭多雲之間。

了解更多 iKala Cloud AIOps Services