更多服務
軟件工程師生存指南:面試准備、工作經驗和實用工具
作者:Valeri Alexiev 來源:medium.freecodecamp.org 日期:2018-11-19 浏覽


我職業生涯的前幾年是一個學習激烈的時期。


我遇到了成爲軟件工程師的現實,並且不得不獲得許多我不知道需要的技能。回想起來,知道我現在所知道的事情肯定會很好。


所以,我寫這本指南是爲了幫助其他人根據我在最初幾年作爲專業人士,以及我自己和我的一些同事所指導的開發人員的經驗。


我將介紹:

  • 如何充实利用面試,
  • 如何在軟件工程師的工作中生存(並茁壯成長),
  • 在考慮持續改進時需要考慮哪些資源。

面試

當您從事軟件工程的職業生涯時,您將不得不面對一個無可爭議的事實。采訪很糟糕。

他們對所有參與者都很糟糕。既然是面試官又是受访者,我可以证明面試是一个很大的时间,非常紧张,是未来工作体现的一个非常糟糕的指标。然而,它們是你和你的簡曆最好的准備所必须的邪惡。

准備戰鬥

如果您正在考虑从事软件工程,请务必学习一些最常见的编程面試问题,例如'FizzBuzz':

“編寫一個程序,打印從1到100的數字。但對于三個打印'Fizz'的倍數而不是數字和五個打印'Buzz'的倍數。對于三個和五個打印'FizzBuzz'的倍數的數字。“
(編碼恐惧片

聽起來很簡單吧?


嗯,絕大多數受訪者都沒有通過這個簡單的測試,更不用說它更複雜的變種了。


我個人看到許多高級職位的候選人在完全上網的同時未通過此測試因此,請確保如果您的簡曆中列出了編程語言,您至少知道如何使用FizzBuzz。否則,你只是在浪費每個人的時間,包罗你的。


当然,您需要了解的不仅仅是FizzBuzz才气在面試中幸存下来。您還需要確保您知道:

  • 基本數據結構和算法:例如鏈表,數組,樹和排序。
  • 您選擇的語言中常見的“陷阱”,例如字符串是否不行變,以及如何治理內存。
  • 面向對象的編程概念,如類與對象和繼承。

在你的職業生涯開始時,你需要發現這些問題,因爲你沒有經驗證明你會擅長這份工作。在准备面試时,我总是推举两种资源:

  • “破解编码面試”,一本精彩的書,包罗許多編碼問題及其解決方案,以及解決這些問題需要了解的內容摘要
  • CodeWars,一个包罗大量编码问题的网站,您可以使用多种语言在浏覽器中解决这些问题。最有用的部门是了解其他用戶如何解決同樣的問題。您將看到針對同一問題的差异方法,並使用您選擇的語言學習新工具。

給自己額外的優勢

你可以做幾件事情,給你一些額外的東西。

首先,

學會傳達你的經曆你應該有一個電梯音調,將你的簡曆概括爲一個連貫而引人入勝的敘述。


另外,要了解自己的簡曆!這聽起來很愚蠢,但我看到很多受訪者都在努力解釋他們的簡曆中的特定項目。您應該能夠回答有關您在簡曆中列出的任何經曆的問題,並解釋它是如何使您成爲更好的候選人。


接下來,讓代碼示例顯示在Github或其他公共存儲庫)上。


眼见为实,面試官能够看到你的代码会制造奇迹。此外,它還表明您對版本利用系統有所了解。


代碼示例不必太複雜,但它們確實需要幹淨並顯示出良好的編碼實踐。这是您在没有编码面試时间压力的情况下展示编码方式的机会。


完成上述所有操作後,就可以考慮參與一個開源項目了它將顯示您可以在現有代碼庫中工作並與其他程序員協作。


這將是您在行業環境中進行編程的最接近的實際環境。到目前爲止,這是迄今爲止最難和最耗時的項目,所以保留它直到你完成我上面討論過的較低的懸挂水果。

采访你的面試官

在求职的匆忙和压力下,许多考生忘记了面試是一条双向的街道。當公司試圖弄清楚你是否適合這份工作時,你應該弄清楚公司是否適合你。


確保您可以詢問下面的一些問題,即使它是在後續電子郵件中。請注意,通常情況下,公司可能會嘗試不遵循最佳工程實踐作爲福利,因此請在各行之間進行閱讀。


以下是您可以提出的一些示例問題:

“典型的工作日對我來說會是什麽樣的?”


了解特定職位的期望非常重要,因爲軟件工程的工作變化很大。例如,您可能需要維護服務器或直接與客戶端通信。


紅旗: “ 我不確定。”→意味着面試你的人不会出现在你的团队中,或者他们不清楚他们为什么雇用你。


“你如何測試你的軟件?”


理想情況下,應使用單元測試,手動測試和自動測試的組合來驗證代碼的質量。


紅旗: “ 我們只是不寫錯誤,哈哈。” →那些人正是那些寫錯誤的人。


“你使用什麽版本的利用系統?”


版本利用系統對于協作非常有用,沒有理由不在專業環境中使用它。


紅旗#1:“呃,版本利用系統?” →跑得遠,很遠。


始終使用版本利用。


紅旗#2:“<插入模糊或自定義VCS>”→体现他們很可能跟不上時代,並且很長時間沒有更新他們的基礎設施。


“你做同行評議嗎?”


同行評論,或讓其他人在進入代碼庫之前检察您的代碼,是發現愚蠢錯誤的絕佳方式,並且在開始您的職業生涯時是一個重要的培訓機會。


紅旗: “我們只相互信任!”→很可能高級開發人員非常保護他們的代碼,並且不太善于接收反饋。


“你有什麽課程可以繼續教育?”


作爲一名軟件工程師意味著隨著技術的出現,成熟並以令人眼花缭亂的速度過時而不斷學習。因此,許多公司都有培訓預算,用于支付大學和在線課程,會議或內部會談。


紅旗:“你的意思是在空閑時間在網上閱讀東西?” →該公司要麽現金緊張,要麽認爲開發商可以替代,而不是長期投資。

“你使用的軟件開發過程是什麽?”


無論實際細節如何,流程對軟件工程至關重要。什麽構成最佳過程的細節受到激烈的爭論,但僅僅存在一個商定的項目工作方式可以最大限度地減少混亂,並確保每個人都在同一頁上。


紅旗: “我们的過程受到自由形式爵士乐的启迪。” →很可能整個部門處于滅火模式,從緊急情況跳到緊急狀態沒有任何明確的目標。


“你如何解決技術債務?”


技術債務是代碼庫中過時技術和快速而肮髒的解決方案的積累。解決它對于代碼的長期健康很重要,應該持續進行。

紅旗: “我們專注于新功能。” →他們的代碼庫很亂或很快就會出現問題。


“你的公司文化是什麽樣的?”


公司文化可能是一個非常模糊的概念,但即使像開放式辦公室與小隔間這樣的小事,也會以顯著的方式改變與同事的日常互動。沒有一般的危險信號,但要確保他們的答案是你可以忍耐多年來每周40多個小時的事情。


擔任軟件工程師

在这个阶段,如果你在面試中体现良好而且喜欢面試官如何回答你的问题,那么你很可能会被录用。

恭喜,你是正式的工程師!


怎麽辦?好吧,是時候重新學習很多關于編碼和工作的東西了。既然我們是程序員,那麽我們首先討論代碼。

良好的行業准則

良好的行業代碼按以下順序具有以下屬性:

  • 可讀,因爲代碼的讀取和維護頻率高于編寫代碼。在您編寫代碼之後的幾年內,代碼的目的必須清楚。
  • 防禦性,如下面的防禦性編碼的最佳實踐。防禦性編碼自己就是一個主題,但它的要點是:你必須確保不正確地使用你編寫的類和方法不會導致你的代碼崩潰軟件。
  • 優化,這是這個列表的最後一個,因爲大多數時候,你不會真的需要擔心它。這並不意味著當存在線性解決方案時,您應該編寫在O(n?)中執行某些操作的錯誤代碼。但是开发人员通常在不需要时实验过度優化,通常会损害代码的可讀性和可防备性。您应始终能够证明实际需要牺牲这些属性的某种優化。

既然你知道如何編寫好的行業代碼:

你不會做很多編碼

這可能會讓人感到驚訝,但大多數時候你不會編寫新代碼,相反,你會:

  • 調試
  • 閱讀現有代碼
  • 在會議或寫電子郵件
  • 研究如何做,你編寫代碼

因此,編碼以外的技能對您的職業生涯至關重要。

調試和阅读代码

  • 除了使用print语句进行調試之外,您还需要更多。所有廣泛使用的語言和技術堆棧都有各種強大的工具。学习使用它们,因为它们可以使調試变得轻而易举,为您节省数不清的时间。
  • 理解代碼庫。大多數技術堆棧都有某種代碼圖生成工具,可以幫助您理解代碼庫的結構。企業IDE通常具有內置的功能。您還可以使用ReSharper,grep或Sourcegraph等工具來探究代碼。
  • 了解産品。? ou'll驚訝有多少開發人員不知道該軟件是如何認爲他們試圖“修複”之前的工作。只需閱讀文檔。

組織你的想法

由于您將大量時間用于溝通,研究和多任務處理,因此您需要一些工具來幫助保持一切順序。

  • TODO列表/任務:您的公司應該已經擁有某種類型的任務軟件,但它也有助于建立個人系統。使用便利貼或Trello或Todoist等軟件。
  • 注意:始終在會議中記筆記,努力改進現有文檔並創建個人知識庫。使用Evernote,OneNote或筆記本電腦,就像以前一樣。這看起來有點矯枉過正,但是一年之后,当你重新审视这个模糊的构建過程时,你会感激自己,这个過程花了你3天的时间来弄清楚。我從未見過一位沒有做過大量筆記的優秀軟件工程師。
  • 圖表/可視化:人類是視覺生物,創建流程和架構圖表將幫助您和其他人理解複雜的主題。在與非技術同事溝通時,圖表特別有用。使用Lucidchart,Visio或一般白板。

知道何時使用庫

簡短的回答:幾乎所有的時間。

答案很長:99%的時候,你不應該重新發明輪子。在大多數軟件工程職位中,實施特定類型的分類是完全浪費時間。這並不意味著你不應該知道你使用的算法和數據結構如何工作,因爲這將幫助你決定使用什麽和何時使用。

爲了成爲一名高效的軟件工程師,您需要了解您擁有的庫。大多數流行語言的標准庫非常有用,並且比您期望的大。此外,代碼庫還可以使用其他專用庫。閱讀他們的文檔並知道何時使用它們。

如果能節省時間,您也不應該害怕建議額外的庫。但是,您需要確保選擇一個適合行業使用的好庫。一個好的圖書館是:

  • 開源,因此您可以自己驗證代碼的質量,並可能修複對您的應用程序至關重要的錯誤。
  • 根據麻省理工學院和BSD等許可許可進行許可,因此貴公司不會因使用它而遇到任何問題。小心使用GPL,以免意外地打開整個代碼庫。
  • 成熟,即它已經出了一段時間並且具有豐富的功能。
  • 維持,新版本經常出現。
  • 由其他公司或項目使用,作爲批准印章,並確保其爲持續維護提供行業支持。

連續的提高

除了學習能使您在日常工作中更好的技能外,您還需要不斷提高自己的技能並學習新技能,以便爲自己創造新的就業機會。