Categories
程式開發

菜鳥程序員如何用三個月將“前浪”拍在沙灘上?


編程這件事聽起來很複雜,但在大多數情況下,編程過程既輕鬆又有趣。當然,也並不是有經驗的工程師編寫的代碼就一定優於“菜鳥”工程師。那麼,作為一名開發者,如何能讓自己從眾人中脫穎而出?本文也許會給你一些啟發。

不管你是有20年的實際工作經驗的資深開發者,還是剛剛進入科技行業,沒有實習經驗的“菜鳥”,這都不重要。因為當涉及到效率、生產力和自身的編程天賦時,多年來積累的智慧和經驗可能起不到多大的作用,所以單純用資歷來定義一名開發者是極其狹隘的。

我剛進入Salesforce開發顧問行業時,基本上不知道如何在這個平台上實現解決方案和集成等問題。而現在,我卻正在創造公司記錄,被認為是行業中最有前途的開發人員之一,甚至經常有獵頭和雇主過來挖我,我幾乎完全靠自己的能力來設計解決方案,並且沒有一次失敗過。

“我招聘了比你更有經驗的開發人員,但與我招聘的其他任何人相比,你做得更快,也做得更多。”
——CEO對我說

在進入這個行業後,我只用了三個月的時間就超越了同行。在最初的三個月裡,我幾乎都在堅持不懈地訓練和學習。因為我深知自己在很多方面都存在不足:

  • 我不是天才或神童。
  • 我不是一個有天賦的開發者。
  • 我不是對編程無所不知。
  • 我不能憑直覺在一瞬間找到解決辦法。
  • 我還有很多東西要學。

儘管有著上述諸多困擾,但也阻擋不了我成為一名合格的開發者。那麼,是什麼讓我脫穎而出,並最終以其他更有經驗的開發人員都無法跟上的速度完成編程任務和項目?

儘早建立最佳編碼實踐是第一要務

回顧我為獲得計算機科學學位所花的全部時間,我可能會認為自己不是一名合格的程序員,幾乎不知道如何解決實際的編程問題。

我竭盡全力地解決分配給我的編程項目——這些項目我現在可以在一夜之間輕鬆地完成。但彼時,理解實現一個解決方案所需要的邏輯,甚至理解完成一項任務所需要的面向對象原則,對我來說都非常困難。

如果沒有去谷歌搜索解決辦法,我估計我是無法繼續攻讀計算機學位的,而是會去攻讀哲學或工商管理學位。

但突然有個時刻,我開始對我所具備的技術能力有所改觀。我開始觀察編程語言的實際工作方式,具體設計原則的使用和實現方式,以及設計代碼時要避免的事情和要採用的最佳實踐,我開始感覺到我處理問題的方式的轉變。

我開始用所學到的原則來設計和思考我的解決方案,這讓我以一種更有目的性和方向性的方式來組織我的想法。

從編程的角度來說,我讀過的對我改變最大的書是Robert C. Martin的《代碼整潔之道》,它強化了這些原則,並使它們深入我的內心。

我命名函數的方式、我簡化代碼的方式以及我構造類的方式有效地保證了我的開發方式的合理性。它讓我真正地退後一步,思考我在寫什麼,我是如何組織代碼的——時刻注意我寫的東西是否合乎邏輯,是否可讀。

在滿足需求時,我把注意力更多地放在可讀性、設計和簡單性上,根據我的經驗,這樣的結果通常是,代碼生成速度快、面向未來、可重用且易於擴展。

也就是說,作為一名程序員,你應該了解最佳編碼實踐、所使用的語言或框架的限制、SOLID原則、設計模式和敏捷實踐。

僅僅編寫有效的代碼是不夠的,而是要編寫有效的、容易理解的、模塊化的、能夠經受時間考驗的代碼。這就需要更多的思考,但總的來說,這讓你可以不斷地基於你創建的應用程序進行構建,從而創造更大的價值。

將編程看作是藝術創作的工具

編程常常被視為一種神技——幾乎就像一門外語,很難翻譯,只有受過良好訓練的人才能優雅地用它寫作。然而,這種觀點與事實相去甚遠。從編程中抽離,重構你對編程的看法,而不僅僅把它看作是一門技術工藝。

代碼是一種工具,你可以用它來推動自己實現最終目標和你設計的解決方案。我審視代碼的方式與畫家審視畫筆、技工審視扳手、木匠審視錘子的方式相同。

偉大的藝術家與常人的區別是他們運用工具的能力,這些工具與他們的思想和想像力相結合。當你茫然地盯著空白的IDE試圖編寫第一行代碼時,請記住這一點。

重要的是,我們要了解如何使用這個工具。對我來說,真正有效的是做一些事情,不斷提高我使用這個工具的技能,而不是簡單地理解代碼的語法和理論術語。我們要重點考慮下我能做什麼,我能完成什麼,我應該走什麼路,以及我想要達到的目標,這些會為我以代碼為工具謹慎探索最終解決方案的方式帶來啟發。

在這一點上,唯一限制我的是我個人的想法和能力,在於我是否能夠找出不同的方法使用代碼來處理和解決我所擁有的特定的解決方案。

這就是為什麼我不會浪費時間去學習一種語言的所有語法,也不會無休止地閱讀文檔,試圖記住一種語言或框架必須提供的所有內容。我發現,最大的價值在於,根據測試原則、設計規則和理論,理解構建和設計代碼的不同方法。

我可能不是什麼都懂,但我什麼都可以學

這也是為什麼我不浪費時間去瀏覽和記憶文檔,不看學習編程語言的綜合教程,不無休無止學習的另一個原因。

如果我真的有什麼超能力的話,那就是快速學習並立即將所學應用到我所做的事情上的能力。是的,我確實會失敗。而且失敗了許多次。但經常失敗是我的學習方式之一,失敗可以強化學習,直到我完全理解一個主題。

通常,我不需在腦子裡準備一堆技術和初級信息,因為我可以通過我能做的大量研究和我過去處理類似問題以及失敗時積累的經驗來推動我的編程。

我根據需要學習。這樣,我就不會浪費大量的時間,用具體的細節和方法來填滿我的腦袋。你處理的每一項任務都取決於你想要達到的目標。

如果有什麼事情,我就會問谷歌搜索引擎,問題直指我要立即解決的難題。如果我不能通過谷歌搜索找到我需要的所有東西,我就會向我的CEO提出一些問題,設法解決這些更複雜的問題。然後,我會調整我發現的信息,以滿足我當前的需求。我不會因為不知道解決辦法而放棄。相反,我盡我所能去弄清楚我認為可能的事情。

秉持這種思維模式和方法,我將代碼插入我所理解的特定設計原則,並將代碼作為工具來設法實現我的解決方案。

我不是什麼都知道,我也不想什麼都知道。編程令人興奮的一點是能夠不斷地學習和擁有創造性思維,當你嘗試學習一種權威性的方法去做某件事,你會將其看成唯一的方式或方法,可以想像,那會大大阻礙你作為一名程序員的想像力和潛力。

結語

我堅信,任何人——無論其技能、天賦或經驗如何——都有能力成為獨一無二的偉大程序員。

你真正需要做的是,為了構建解決方案而完成思維和方法上的轉變,並在整個職業生涯中保持絕對的謙遜。謙遜會讓你保持初學者的心態,充滿好奇與渴望,不斷學習和適應日新月異的編程環境。作為程序員,我們在生活中表現出了不斷學習的精神,打破了以前認為不可能的障礙。如果你沒有這種精神,那麼恐怕未來你的技術水平,也不會有太大的提高。

原文鏈接:

https://medium.com/better-programming/how-i-outperformed-more-experienced-developers-as-a-junior-developer-and-how-you-can-too-19bc6206fa68