3個不可看輕的軟技能 (Soft Skills) 讓軟體工程師職涯走得更遠


本篇原文(標題:3 Highly Underrated Software Engineering Skills)刊登於作者 Medium,由 Anupam Chugh 所著,並授權翻譯及轉載。

軟體工程 (software engineering) 是一個廣闊的領域,包含多個子學科。當然,軟體工程有那麼多子學科,那麼根據你工作的學科,你就會需要不同的技能。

比如說,如果你想做前端開發者 (frontend developer),有良好的 UI/UX 技能可能有優勢,但是後端開發者 (backend developer) 就未必有這個需要。

我看到有些開發者,尤其是那些剛接觸某個領域的開發者,都會傾向專注於自己的技術技能 (technical skills),像是資料結構 (data structure)、演算法 (algorithm)、設計模式 (design pattern)、數據庫維護 (database maintenance) 等,數也數不完。

然而,現在公司在招聘軟體工程師時,不會單單看一個人的技術技能。你可能也看過這種情況:那些編程技術普通的人比技術嫻熟的人晉升得更快。

那是因為技術技能只佔了軟體開發者工作的一部分,軟技能 (Soft skills) 其實也同樣重要。

當然,編碼能力是開發者必須具備的條件,這對推動你的職業發展非常重要。但是,當就到要晉升或完成夢想的工作時,你就需要更多技能。

無論你是剛剛起步的開發者,還是正在尋求從中層職位晉升的人,又或是正在尋找理想求職者的面試官,以下三個就是你應該優先考慮的技能。

1. 簡化複雜問題的技能

通常,剛開始編程的開發者都會先學習多種編程語言、框架、和新穎的工具。

網絡上有那麼多資源,難怪開發者會想掌握所有新技術。而且,如果你了解各種語言的語法和概念,確實會有更多就業機會。

但是,專注於技術也有缺點。

許多有抱負的開發者最終都花很多時間,在 Google 還是 Stack Overflow 上尋找解決方法,這導致很多經常在 Google 搜尋答案的人,其實都無法好好地解決問題。

很明顯,這些開發者缺乏分析能力和策略思考 (strategic thinking)。如此一來,當他們遇到外來的問題,就會成為障礙。因此,只花時間閱讀教程來增強技能,可能不是最好的規劃。

大部分語言的基礎概念都相同,它們都有像英語的語法、條件敘述 (conditional statement)、和其他構造。

因此,從一種語言切換到另一種語言不會花費很多精力。而且,任何語言都不會永遠處於主流。解決問題才是你所需要的元技能 (meta-skill),這比起學會一堆編程語言更為重要。

但是!我們該如何訓練解決問題的技能呢?

對於初學者來說,要培養好解決問題的技能,方法就是在有問題要解決的時候,不要急著編寫程式碼,而是先在紙上解決問題,並試著將其分解為不同的小問題。

面試官經常使用虛擬程式碼 (pseudo code) 來評估求職者是有原因的。

另外,你也要記住,沒有開發者可以記住所有事情。即使是最高級的人,都會需要在 Google 上搜尋所需資料。因此,不是說你不可以在 Stack Overflow或其他教學中尋找答案,但更重要的是,我們不是僅複製和貼上,而是要了解事物的真正運作原理。

處理並簡化複雜問題的技能經常被看輕。一個肯定可以訓練這項技能的方法,就是構建自己的專案。

構建自己的專案可以讓你學習分解問題,如此一來,你就可以更深入地了解開發的基礎知識,同時還可以培訓你識別模式的能力。

如果你懂得識別模式,就可以快速診斷問題,也就是說,當你發現新問題的時候,很快就會知道甚麼方法行得通。

開發者學習編程語言,就像是作家學習詞彙一樣,學習是好事,但是你不應該把所有時間花在記字典上。

你必須具備基礎知識才能開始溝通,但是,到了某一個時間點,更重要的是表達思想的技能,而不是花哨的語言。開發者也是如此,一個懂得解決問題的人,遠遠比只懂一堆語言的人更有價值。

2. 為程式碼測試及除錯的技能

眾所周知,開發者不喜歡為自己的程式碼編寫測試 (testing),而且他們對軟體測試者可以說是又愛又恨。

因此,測試是開發者經常忽略的領域。這主要是因為開發者通常過於樂觀,而不現實。你可以試試與一個 iOS 開發者交談,你未必會聽到他們提及 XCTest 框架。即使他們說自己沒有使用過這個框架,我也不會感到意外。

我說的樂觀,是指許多開發者對自己的程式碼很有感情,並認為當中不會有錯誤。因此,通常會找不同的人來編寫程式碼和測試。儘管如此,測試仍然是軟體開發週期一個重要的部分。

那麼開發者如何說服自己編寫測試呢?首先,測試是證明你的程式碼有效的唯一方法。其次,編寫測試後,你就不用再測試舊的功能,而且可以確保程式碼不會破壞其他內容。最後,編寫測試一個的重要好處是,可以幫助開發者覆蓋程式碼中的極端案例 (edge case),從而讓程式碼更加強大。

如果開發者具有良好測試技能,就可以脫穎而出。增強測試技能還可以幫助你進行批判性思考、發現錯誤、並提高除錯 (debug) 技能。實際上,這對於開發者來說是另一項重要技能。

但是錯誤總會發生,因此我們就要除錯了。

如果說測試就像是程式碼庫的警察,那麼除錯就像是偵探。

除錯是一種需要實踐的技能,要訓練這種技能,你需要摒棄一切先入為主的概念和假設 (assumption)。假設是編碼的盲點 (blind spot)。開發者(包括我自己)經常會因為認為錯誤的程式碼段是正確的,而浪費很多時間進行除錯。為了避免這種錯誤,在證明到程式碼是正確之前,我們必須一直抱著懷疑的態度。

除錯除了消除錯誤外,還可以提升你閱讀和導航不熟悉的程式碼庫的速度。如果你培養出良好的除錯技能,將能夠成為一個更好的開發者。

不止是軟體開發者,就連面試官都有時會忽略了求職者的除錯技能。要測試求職者的這項技能,面試官可以提供一個假設情景來作評估。面試官甚至可以在編碼測試中添加大量錯誤,來觀察求職者的處理方法。

軟體開發者很可能花更多的時間來為除錯,而非開發新功能。

除錯技能不好的開發者可能會浪費很多時間,並在發佈週期造成瓶頸。因此,培養好的除錯技能、以及尋找具有這些技能的開發者非常重要。

3. 與人有效溝通的技能

作為開發者,你很有機會需要與專案經理和設計師以團隊方式一起工作,甚至有可能會參與結對程式設計 (pair programming)。這讓溝通變成了開發者非常相關卻未被重視的技能。

我看過很多軟體工程師只專注於個人的技術技能,卻完全忽略了日常交流所使用的自然語言 (natural language)。

口語和書面溝通的能力非常重要。不論是進行演示 (demo)、彙報 (presentation) 和執行 Scrum,都需要出色的溝通技能。

這項技能不僅是讓你向同儕解釋觀點。要成為能與團隊好好合作的人,你還要知道如何讓身邊的人輕鬆自在、面對有建設性的批評、以不挑釁的態度解決爭執、以及積極聆聽 (Active Listening) 等技巧。

你也可能要與非技術方面的同事進行合作,因此能夠清晰地與他們溝通也很重要。

如果你能夠解釋你的工作,讓外行人都能夠理解,你的發展就會更加全面,並對公司更有價值。

在職場上,良好的溝通技能也很重要,面試官通常會對沉默寡言的求職者扣分。

面試官可能會認為求職者無法表達自己的想法。因此,請記得要適時表達自己和發問,尤其是在遇到問題時。

寫作是開發者經常忽略的另一項寶貴技能。有了出色的寫作技巧,我們才可以寫出好的文檔、有說服力的 Email Pitch、以及表達清晰的專案建議書。

軟體開發者也經常遠程工作,因此書面溝通非常重要,畢竟這就是你與其他團隊成員互動的方式。

良好的寫作能力也可以提高你編碼的能力,讓你寫出有意義的變數、函式名稱、和有用的註釋,為程式碼提供上下文,讓別人可以輕易理解你的程式碼庫。

好的程式碼不是最聰明、最有效的;而是簡單、清晰、而且易於理解的。
同事不會根據你寫的程式碼來判斷你,但是你與他們溝通的方式,就有助於讓你在他們心目中留下良好的印象。畢竟,任何機器人都可以編寫程式碼,軟技能才是我們與機器人的分別。

總結

對於軟體工程師來說,編碼能力當然是一個工作崗位最重要的事。

但是,大家都看輕了軟技能的重要性。解決問題、批判性思考、溝通、和合作等,都在現今編程工作中扮演著重要的角色。

這聽起來可能很奇怪,但是隨著你培養軟技能的時候,你也會變得更善解人意,並努力為真實的人編寫程式碼,如此一來,你的軟體工程技能也會得到提升。

更重要的是,培養好軟技能,你就有機會在事業上更上一層樓。

本篇原文(標題:3 Highly Underrated Software Engineering Skills)刊登於作者 Medium,由 Anupam Chugh 所著,並授權翻譯及轉載。

作者簡介:Anupam Chugh,深入探索 ML 及 AR 的 iOS Developer。喜愛撰寫關於想法、科技、與程式碼的文章。歡迎到我的 Blog 閱讀更多文章,或在 LinkedIn 上關注我。

譯者簡介:Kelly Chan-AppCoda 編輯小姐。


此文章為客座或轉載文章,由作者授權刊登,AppCoda編輯團隊編輯。有關文章詳情,請參考文首或文末的簡介。

blog comments powered by Disqus
Shares
Share This