給平庸程序員的 12 條建議

原文:https://www.infoq.cn/article/kXBaKpzLfrdxVcYh8hUV

我不是最牛的開發者,但我理解那些讓一名開發者脫穎而出的特性。


給平庸程序員的 12 條建議

1. 寫更多代碼

如果你想在某件事上做得更好,你就必須花時間去做這件事。

不管你讀了多少篇文章,讀了多少遍文檔,不付諸行動,你就不會進步。

這種設計模式一開始看上去很難,但當你在多種環境中實踐後,它就變得非常簡單。

2. 編寫測試

當第一次開始為自己的代碼編寫測試時,我驚訝地發現:自己缺乏編寫良好測試的心態。

編寫測試讓你能以起初沒有想到的方式看看自己的代碼,因為在構思測試時,你必須考慮這個東西會出什麼問題。

你意識到,自己寫的那個函數做了太多的事情,分成多個函數可能更好,因為很難想出一個測試可以測試做這麼多事的函數。

讓我們看看下面的例子:


 
function postData(data) { boolean valid = true; // 檢查 data 是否已定義 if (data === undefined) { valid = false; }// 檢查 email 的格式是否規範 if (!regex(data['email']) { valid = false; }// 檢查密碼是否至少 8 位 if (data['password'].length < 8) { valid = false; }if (valid) { http .post(`example.com/user/create`, data) .then((response) => { // 追加到列表 this.users.append(response.userid); }) .catch((error) => { // 顯示錯誤 }); } else { showValidationError(); }}

如上所示,postData方法做了許多事情,比如驗證數據、在條件都滿足時追加到用戶列表並處理錯誤。

為postData編寫單元測試會相當困難和混亂。你可以把它分解成多個方法,然後分別測試每個方法。

function postData(data) { return http   .post(`example.com/user/create`, data);}function validate(data) { // 檢查 data 是否已定義 if (data === undefined) {   return false; }// 檢查 email 的格式是否規範 if (!regex(data['email']) {   return false; }// 檢查密碼是否至少 8 位 if (data['password'].length >= 8) {   return false; }  return true;}function appendUsers(userId) {  this.users.append(response.userid);}function main() { if (validate(data)) {  postData(data)   .then(data => appendToList(data.userId))   .catch(error => handleError(error)) } else {  showValidationError(); }}

你已經看到為什麼編寫測試會帶來更高質量的代碼。

你必須將長方法分割成多個更小的單元,並且每個單元都可以進行原子測試。

3. 誠實

不管你是完全瞭解,還是不瞭解,都要誠實

假裝知道某個 API 的輸入和輸出,你就無法進步。相反,如果你因為對 API 或主題缺乏瞭解而說了一些愚蠢的話,你可能會在討論中出洋相。

4. 為開源項目做貢獻

為開源做貢獻能讓你接觸到工作中可能永遠不會出現的場景,開拓視野。

這個過程中,你可以瞭解在分佈式場景中運行一個項目需要什麼,引入非破壞性更改和其他新的開源工具等。

總之,好處說不完,我們都知道開源如何直接或間接地改變了每個人的生活。

5. 樂於助人

對自己知道的事情,幫助別人會讓你成為那個方面的“領路人”,並確定你在團隊中的價值和重要性。

如果是你可能不是最擅長的事情,也要樂於助人,因為你可能從中學到一些有價值的事情。

6. 選擇一個個人項目

個人項目是學習新框架和新技術的好方法,而你可能在工作中沒有用到過它們。

對於一個個人項目,你既是產品經理,又是開發人員和架構師,因此可以想象要做多少決策。

你可以借鑑在個人項目中的經驗,在工作或社區中建議新的框架和工具,如星星般閃耀。

7. 放低姿態

不要讓自負和你的工作頭銜阻礙學習和進步。

少考慮你是誰,多想想你每天會變成什麼樣。這個組織中的架構師,可能是其他機構中的軟件開發人員。

對自己擅長的事情,嘗試去採取新的、不同的方式。否則,你可能錯過一個更有效的算法或一個更好的特性設計。

8. 理解“為什麼”

在接受並堅定使用新框架、模式或 API 的信念前,請先理解它存在的“原因”。試著從直覺上理解一個概念的存在。

var app = new Vue({  el: '#app',  data: {    message: 'Hello Vue!'  }})

以上是你在 vue.js 文檔站點上遇到的第一個代碼示例。即使在看這個非常基本的例子時,我也試圖在我的頭腦中推斷以下的事情:

  • 為什麼要用一個new關鍵字來創建組件?為什麼它們沒有一個工廠模式來創建對象?
  • 似乎el屬性獲取了元素的id,為什麼它使用# ?這是否意味著我可以添加其他元素選擇器,比如屬性和類?
  • data似乎是Vue對象的一個非常通用的屬性名,它究竟要表示什麼?

並不是說你應該對每件事都這麼挑剔,而是說培養這種習慣有助於更好地理解事物的哲學,從而提高你的理解力。

9. 不要懶惰

懶惰會阻礙你展示自己的技能或關心的事,例如,如果你相信重構能提高性能,那就去做吧。

添加註釋節省其他開發人員的時間,記錄你新構建的 API。

你在代碼中附加的時間等於為其他開發人員節省時間,他們正在嘗試理解你所編寫的內容。

10. 解決編碼挑戰

解決編碼挑戰會迫使你去思考那些我們日常生活中習以為常的東西。

我說的是代碼的空間和時間複雜度。有些人認為,解決挑戰是不現實的,因為大多數東西都是抽象的,你只需要使用 API。

但是我不同意!這不僅幫助你仔細查看代碼,也使你有信心想出性能最好的代碼,另一個好處是,你總是在準備面試。

一些解決挑戰的網站有 hackerrank 、 leetcode 、 topcoder 和 spoj 。

11. 鼓勵他人

如果你喜歡同事的提交,那麼不要猶豫,在 StackOverflow 上留言,感謝或支持那個對你有幫助的答案,或者在 Medium 上為那篇給你帶來免費知識的文章鼓掌,或者在 GitHub 上為你看中的有趣項目加星。

鼓勵別人可以幫助他們發揮出最好的自己,最終你也會發揮出最好的自己。

12. 不要躲在技術棧的某一層後面

假如你發現了在視圖中使用 API 的一個問題,但卻不能修復它,因為你是一個“前端開發人員”。

在我看來,這是一種不好的態度。編程的基本原則,如保持代碼乾爽(DRY)、看到類的多個用例就使用抽象、捕獲所有流控制路徑的異常等等,幾乎適用於技術棧的每一層。

記住這些基本原則,它們可能會幫你解決自己認為無法解決的問題,因為你認為自己沒有處理代碼庫的這一部分。

結論

正如我上面所說的,閱讀本指南將幫助你意識到自己沒有做的事情,但要想從人群中脫穎而出,就需要付出努力和自律。

如果你喜歡這篇文章,請不要忘記與其他開發人員分享。希望本文對你有所幫助!


分享到:


相關文章: