軟件工程師永不過時的五項技能
作為一名軟件工程師,你身邊肯定充滿各種新技術、設計模式、架構原則,新的UI 和 API 框架、新庫、實現軟件的新方法、存儲數據等,但是無論你周圍的技術發生何種變化,有些技能永遠不會過時,深入了解這些技能將使你的軟件工程師的職業生涯更加光明:
1. 算法和數據結構
在基礎層面上,軟件程序從各種來源捕獲數據,并以更可讀、更易于理解的格式呈現給人類或機器。如果沒有數據,也沒有需要處理的東西,也許就不需要軟件程序。根據你所學的語言,你會遇到數組、堆棧、隊列、鏈表、雙鏈表、哈希表、字典、圖、二叉樹、堆、列表、集合、元組等。學習數據結構是沒有捷徑的,算法是解決特定問題的步驟。
如果你想從A點到B點,你有多種選擇。你可以走路、跑步、騎車、乘汽車、飛、坐輪船……為什么不爬呢?算法的問題就是解決這類問題,同樣的問題不止一個解決方案,軟件工程師最需要的就是找到一個最優解,通過消耗最少的處理機制來執行更快的任務,因此,深入了解算法和數據結構是必不可少的。
2. 隨時做好面試準備
跳槽是加薪最快的方式之一,隨時做好面試準備是非常必要的,做好面試準備涉及到很多方面,你的面試回答是否是正確的,面對一個問題,你是否可以想出多種選擇和解決方案,最后實現推銷自己,以及你的穿著是否得體,這一些其實都可以在你的日常工作中得以體現:
- 開會時要集中注意力(遠程工作更是如此)并做筆記
- 當你的老板提出問題時,你都能提供一個解決方案。
- 不要成為你老板的問題。就像在面試中,如果他們發現應聘者在面試過程中存在問題,沒有公司會招聘他們。
- 每天都以得體的穿著形象出現在辦公室,撇開技能不談,人們都會更喜歡和外在形象好的人相處
- 就像你在面試解決問題的時候一樣的,你需要想辦法解決工作中潛在的問題
- 成為一個不斷學習的人,就像你在準備面試一樣,每天都花一些時間來學習新東西
3. 協作
當遇到危險的時候,動物只有兩種選擇戰斗或逃跑,但是人類還有第三個選擇,那就是合作,劍橋大學對合作的定義是兩個或更多的人一起工作來創造或實現相同的事情,合作的目標很明確——“安全到達目的地”。合作的最大殺手是自負。自信和自私是有區別的。想象一下,在路上,你前面的司機突然停下來,因為他/她該休息了,或者突然在沒有指示燈的情況下轉彎。然后后面的車輛會停止或遇到事故,造成整個交通故障的情況。在企業界,你經常會遇到這種行為。缺乏合作是耗費精力和金錢的最大原因。
合作其實很簡單。如果你曾經踢過足球,如果你不關心誰得分或誰得分,你會毫不猶豫地傳球。最后,團隊贏了。根據經驗法則,如果你不關心誰得到了榮譽,而是專注于達到最終目標,你就是一名優秀的合作者,只要目標明確,寫作自然會出現,下次當你遇到難題時,不妨全面分析一下,是不是你們的團隊合作出現了問題。
4. 表達能力
我覺得表達能力是最容易被忽視的,它是一種以觀眾能夠理解的方式展示數據、信息和概念的能力,這并不代表你會做一些PPT就可以。
馬克·吐溫曾經說過:“如果你想讓我給你做兩個小時的演講,我今天就準備好了。如果你只想要一個五分鐘的演講,那我需要兩周的時間來準備。”以下是一些提高演講技巧的建議:
- 了解你的聽眾:不像在公共場合演講,在公司里,大多數時候你會了解你的聽眾,你的同事、同事、經理、組長地需求是非常不同的,對錯誤的耐心程度和可接受性會隨著時間的推移而降低。快速切入主題,,使用數據支持你想要傳達的內容,通過相關類比使其易于理解,這些技巧通常是非常有用的。
- 練習:演講前練習一遍可以讓你的演講成功率提高80%,分析你想在哪里花更多的時間,你想強調什么詞,你想傳達什么信息,你想讓你的聽眾在演講后有什么感受。記錄和聽練習過程也是一個很好的練習,但是過度的練習反而適得其反。
- 數據的困境:在沒有數據的情況下,很少會提出一些想法或概念。顯示數據的最簡單方法是通過表格,但通常這不會傳達任何信息。
5. 批判性思維
批判性思維是一種清晰而理性地思考應該相信什么以及你需要做出什么決定的能力。有時候,我們的直覺會幫助我們做出決定,這樣我們就不會重復造輪子。這沒有什么不對,直覺使決策過程變得容易,因為我們的大腦編碼了數百萬年的人類生存經驗。對于一些瑣碎的決定,比如穿什么、在餐館吃什么或看什么電影,憑直覺是可以的。但是在一些重大決定里面,批判性思維是必要的,現在讓我們看看批判性思維如何幫助軟件工程師。這些都是值得我們每天思考的問題:
- 我每天都在做什么,有價值么?還能把功能實現的更好么?
- 我在處理什么類型的數據?數據的來源是什么?如果沒有資料,我該怎么辦?
- 誰是我的用戶?如果應用程序不可用,他們會怎么做?
- 當API關閉時,我需要提供什么樣的用戶體驗?
- 這是最好的數據結構或算法嗎?有更好的方法嗎?
- 如果我是用戶,我會喜歡使用我創建的東西嗎?
- 在我構建的模塊中會出現什么問題?
- 問題的根本原因是什么?為什么我的用戶對我的應用程序不滿意。