《Disney +》 迪士尼、Marvel、彼思、星球大戰…  你快死吧!「鬼滅之刃 火神血風譚」蟲柱「胡蝶忍」確定參戰!   「Fight of Animals: Arena」新動物參戰!兩腳行走毛茸茸的那傢伙來了!   在《暗影火炬城》中探索街機式的戰鬥體驗   《Hood: Outlaws & Legends》——14大攻略助你展開完美行搶   【情報解禁】KOF XV新角色「不知火舞」公開角色介紹影片!   延伸遊玩優惠優惠進駐PlayStation Store   如何在《Disco Elysium》成為巨星偵探?——最終剪輯版於3月30日登陸 PS5   睽違19年!KOF XV 新角色宣傳影片「七枷 社」! 

沒神奇公式和捷徑,這 11 步驟就是成為優秀 Coder 的必備條件

商業

原文作者 John Sonmez 為資深軟體開發者,同時也是軟體社群 Simple Programmer 的創辦人。以下文字以作者第一人稱撰寫。

我收到不少郵件,基本上都在說:「我怎麼成為一位優秀的軟體開發員?」

這類郵件,通常我會直接刪掉。因為這讓我感覺,當你在問這些問題時,你正尋找某些神奇藥水,能讓你一躍成為天才開發員。

我猜想在這類郵件中,應該只有極少數人,真正想知道如何成為一位優秀的軟體開發者,而不是想從我這得知捷徑或一個簡單的答案。

另一方面我認為,也有一些真的很有誠意的開發者,他們只是不知道該問哪些問題,去指引他們達到理想目標。我覺得這些開發者,尤其是初學者,他們正尋找一步一步的指導,繼而成為一位優秀的開發人員。

我想,我會嘗試用我的經驗、我的知識,去提供這一步步的指導。當然,我知道這是沒有神奇的公式和捷徑,所以接下來我要說的步驟,是被大家認同,成為優秀開發者必備的條件。

  • 步驟一:選擇一個程式語言,掌握其基本知識

我們必須先學會走路,才懂得跑步,就像你可以計畫如何學習單一的程式語言,但不要一次性學太多,那樣你會跌倒。

我看過太多的程式設計師試著一次搞定一切,而且沒有耐性去學單一的程式語言。他們認為,他們只要知道所有最熱門的科技新知,就能得到一份工作,但事實上,你需要知道得不僅僅只有單一程式語言的基礎而已

挑選一個你認為,未來工作會時常碰到的程式語言,你不應該只是選一個「簡單」的作為開始;學習你感興趣的程式語言,我相信幾年後可以看到你自己編寫的。

一旦你選擇某語言,請你試著尋找一些相關書籍和教學課程,並將程式語言的部分隔離出來,我的意思是,你不希望找到什麼都教的教材;你只想要找在講語言的初學者教材,而不是一推技術。

在你結束教材和課程的學習,請確保你能真正寫出程式碼,並盡你所能地練習,另外,你還可以試著運用你所學的概念,將東西放在一起。我承認,這是一種痛苦!但,如果你真的想學,那麼你就需要這麼做。

當你在寫程式時,請確認每一行的程式碼你都了解其意義,這同樣適用於你讀其他程式碼。在你接觸程式碼時,放慢速度並確定你都懂了,如果你卡在某個地方,那就抬起頭來休息一下。

從來沒有人,一開始就懂什麼是程式設計,失落、懊惱是必經的過程,接受但不需掛在心上,重要的是,從開始到學會你必須一直接觸程式碼,了解它是怎麼一回事。

  • 步驟二:創建一些小東西

現在,你有了基礎,該嘗試去學以致用,像創建一些小東西等,你會從中發現哪部分是你不足,需要加強的。

不需花太多心思在這,但也不能太隨便;想個點子,花些功夫,做出簡單的應用程式,盡可能只用到程式語言就好,不須做到「全端能力 (full stack )」,它的意思是,掌握從前端的使用者介面,到後端資料庫的所有技術。

你的第一個項目,可能要考慮去複製一個已經存在,如 To-Do List(待辦事項工具),不要讓你的設計巧思去阻撓你學編碼。

我會建議你創建手機上的 App,因為多數都很簡單,你可以只用程式語言來創建;另外,學習手機開發技術很實用,現在越來越多公司需要開發手機 App。

你也可以創建一個小型的 Web 應用程式,通常建議你從手機 App 開始,是因為 Web 開發需要較高成本,且至少要知道一些 HTML、JavaScript 和後台架構。

不論你選擇創建什麼,可能會不得不學一點框架,這是件好事,但不要太拘泥於細節,可以等到以後再慢慢深入,例如:你可以寫一個非常簡單的 Android 應用程式,但無需浪費太多時間去了解所有 Android APIs。

一開始你會困惑該怎麼學習,直到你理清頭緒並找到答案,這個過程對於你的未來是很好的訓練,如果你跳過它,你永遠不會成為一名軟體開發者

  • 步驟三了解框架

現在,你熟悉至少一種程式語言,及擁有手機或 Web 應用程式的工作經驗。

那麼你想成為什麼類型的開發人員,就選擇什麼樣的框架來學習;如果你想成為手機 App 的開發員,那你需要了解手機的架構,連同它的操作系統一塊學。

還有,試著花點時間,深入了解框架,但不要嘗試學太多種,這樣只會讓你分心。

  • 步驟四:掌握數據庫技術

多數軟體開發人員,都需要了解一些數據庫技術,因為大多應用程式背後有一個後台數據庫,所以不能忽略這領域的投資。

即便你打算工作用 NoSQL 數據庫,如 MongoDB 或 Raven,來處理海量數據,但學習 SQL,會讓你在工作上有很好的基礎,而且事實上有很多工作需要 SQL 的知識多過於 NoSQL。

不同的 SQL 技術,它們的本質其實是相似的,當你掌握一個 SQL 技術的基礎時,你要在它們之間做切換,是不太會有問題。

對於 SQL 你有足夠的認識時,你可以:

1. 創造表格 (tables)

2.Ÿ執行基本的查詢

3.Ÿ加入表格取得數據

4.Ÿ了解索引如何運作

5.Ÿ插入、更新和刪除數據

此外,你會需要學關係映射 (ORM, Object Relational Mapping),它是一種「抽象化資料庫映射方法」。

尋找可以配合你所學(框架)的 ORM 技術,可能會有幾個選項,挑出最流行的那一種。

  • 步驟五:找到一份支持你學習的工作

現在,你有足夠的知識和技能,可以得到一份軟體開發者的工作。

如果你能表現出,你熟悉程式語言的基本知識、了解數據庫,以及能夠創建屬於你自己的應用程式等,我當然會想僱用你!

但一開始先不要到你理想目標工作,因為目前的你還沒有資格;相反地,你應該先嘗試找符合你以往學習(不管是程式語言、框架,還是數據庫技術)的工作。

即使沒有太多經驗,但如果你具有相配的技能,且願意擔任維護程式設計師,我想你應該會找到一份工作。

你或許會嫌這樣的工作有點無聊,因為它幾乎不會去創造新的東西,但這個工作目的是為了學習和累積經驗。與開發團隊一起為現有的應用程式工作,你可以學到一些技能,像如何修復 bug 或新增小功能等,你還能觀察到大型軟體系統怎麼被建構。

不要想著錢、升遷等,目前你只須要專注在完成有意義的生產工作,並投入全部心力,我相信你將學到一切。

  • 步驟六結構典範實務

現在你需要學習如何寫出清晰簡潔的程式碼,並且要做到容易理解、維護這點,你需要閱讀大量、優秀程式碼的例子。

我建議你的書櫃可以增加下列書籍:

1.《Code Complete

2.《Clean Code

3.《Refactoring

4.《Working Effectively With Legacy Code

5.《Programming Pearls

還有語言的特定結構書籍:

1.《JavaScript: The Good Parts

2.《Effective Java

3.《Effective C#

  • 步驟七:學習第二種程式語言

現在,我希望你把重點放在一個新的語言上面,最好與你之前學的,有明顯差異。為什麼?

當你只有 A 語言相當熟練時,你用 A 語言開發的軟體概念,別人會很難理解那些超越語言或技術的部份。如果你花時間在新的語言,你會以不同的方式去看待,並開始學會「實用性」,而不是「慣例」。

作為一位菜鳥程式設計師,你可能被指定用一種特殊的方式,但你卻不知道為何要用這種方式來做事。在你擁有第二種程式語言,及一堆技術時,你會開始看到更多的為什麼。相信我,如果你做到這一點,你會成長很多,特別是你選擇你所厭惡的語言。

另外,記得確認你有使用此語言創建一些東西,不必太大型,但需要夠複雜,可以讓你動動腦筋。

  • 步驟八:建立實質性的系統

這是真正考驗你的軟體開發能力的時候,你可以靠自己創建出實質性的系統嗎?

挑選一個能展現你全端能力 (full stack ) 的項目,並試著讓它收費,如此誘因,是繼續工作的動力。

如果你沒有什麼企圖心,那麼選一個對你來說具有挑戰,但不是不能完成的項目,這將會是你職業生涯中重要的轉折點。

  • 步驟九:找到一份能創造新系統的工作

是時候該換工作了,在此之前確認你應該摸透上一個崗位,尤其是你的工作內容,還是只有維護方面。

尋找一些對你來說具有挑戰性,但不是太困難的工作,因為你還有很多東西需要學習;理想情況下,你得到一份可以和開發團隊,合作創建新東西的工作機會。

你可能不是該應用程式的設計師,但作為參與應用程式開發,將幫助你擴展你的技能,並以不同的方式挑戰你自己。

現在的你應該有建立新系統的自信,因為你剛剛自己創建出實質性的系統,所以在面試時,你不需要過於焦躁不安,你要相信你可以得到這份工作,這份自信,會讓你申請什麼工作,就得到什麼!

  • 步驟十:設計典範實務

這階段是初級開發者晉身為高級開發者;初級開發人員負責維護系統,高級開發人員則負責建構、設計它們(這只是一般來講,事實上一些高級開發人員還是有在負責維護系統)。

你現在需要學習如何設計它們,專注你的研究於設計典範實務,如:

1. 設計模式

2. 控制反轉 (IOC)

3.Ÿ測試驅動開發(TDD)

4.Ÿ行為驅動開發(BDD)

5. 軟體開發方法論:Agile、Scrum 等

6. 消息總線和整合模式

此列表還可維持一段時間(你永遠更新、學不完這領域的技術),只需從最重要的(你感興趣的)開始,並藉此開啟職業生涯。

你的目標,不只要能建構出別人已經設計的系統,還要有自己的觀點 —— 如何設計軟體?什麼樣的架構對各種問題是具有意義?

  • 步驟十一:繼續走下去

如果你能做到這點,你應該是位不錯的軟體開發者,或者是位優秀的。

它帶我到今天這地位有多久?可能有十幾年的時間,我也忘了。它只是取決於你多麼用功,並利用機會表現自己。

最好的捷徑,是身於憂患(想像你的同事都比你優秀,你還有很多地方需要學習),那麼你將不會死於安樂。

  • 一路走來,你該做些什麼

有幾件事情,是你一路走來必須遵守的,我把它歸類成十項,但我很難 一一 列舉這十項的每個步驟,所以我只在這簡短提一些:

教學:你所有的時間都在學習,也該嘗試教導別人,不管你是一位專家或只是一位初學者,你總有一些值得傳授的東西,再說,教學是學習的最佳途徑之一;它記錄了你學習的過程,並幫助別人前進。

行銷自己:我覺得這是非常重要!懂得如何行銷自己,並不斷地在職業生涯中這麼做。如何創造個人品牌,並在業界建立自己的名聲?你不再渴望得到一份工作,如果你學會行銷自己,將由你自己決定你的未來,前提是需要一些工作基礎,但是值得的。

閱讀:不要停止學習!不要停止閱讀!在這,能找到你工作的方式;從這,你能提升自己。學習是沒有盡頭,如果你在職業生涯中不斷地學習,那麼你將不斷地超越同齡人。

執行:這一路,不只是學習,還有執行,把你所學付諸行動,另外,撥出時間來進行任何你想做的事,像閱讀、打高爾夫等。

延伸閱讀:

想學程式設計,你怎麼能錯過這 31 個學 Coding 的網站

(資料來源:Simple Programmer/圖片來源:kirainet,CC Licensed)

Source: techorange.com

隨機商業新聞

Micorsoft