大道理都是能用三兩句話說清的。
在我開發人員的職業生涯中,最好的決定之一就是不再滿足於只做工具的使用者。
我決定創建我自己的工具,並不是爲了賣錢,而是要了解這些技術的實際工作方式,並提升我的技術技能。
本文是關於這個決定如何改變我生活的小故事。
我的個人項目遇到的第一個重大挑戰
我一直都是玩CSS的。在2015年,對CSS的熱情讓我很快成爲了我們國家(巴西)的專家級人物。
那時,在我的朋友Raphael Amorim的鼓勵下,我接受了“每天編寫代碼”挑戰。挑戰的內容基本上就是每天都在開源項目中寫代碼,堅持1年時間。
但在我剛開始編寫代碼的時候,我的JavaScript技能水平是 非常 低下的。
當我收到在Front in Valle(我的國家舉辦的一場大型前端會議)的邀請,希望我隨意談一些話題的時候,事情就不一樣了。我冒出了一個天真的念頭, 決定創建自己的CSS預處理器,從而學習有關用JavaScript的知識 。
Banana CSS
巴西CSS超集。
在2016年,我創建了一個稱爲banana CSS的CSS預處理器,這個項目的目的是學習JavaScript,但到最後我學會了Node.js、如何創建CLI、lint、單元測試、JSDoc、持續集成、數據結構、AST、如何創建gulp插件等等一大堆知識。
Banana CSS項目: https://github.com/bananacss
深入前端開發領域
這時候,我覺得自己有必要了解更多關於瀏覽器中的JavaScript的知識,因此 我考慮了日常使用的主要工具 ,並選擇了React.js。
millenium.js
在2017年,我創建了一個名爲millenium.js的項目,該項目的描述爲:
一個用於創建函數式無狀態組件並使用虛擬DOM渲染的JavaScript庫。使用Redux創建超輕和快速應用程序的理想選擇。
或者我最喜歡的描述是:
🚀在不到12秒內渲染你的前端。
在這個項目中,我瞭解了性能相關的知識,以及創建前端庫、算法、JSX等的良好實踐。當然,我保留了舊項目中的所有優秀實踐。
Redux的在線演示。
millennium.js項目:https://github.com/millenniumjs
憑藉熱情探索新事物
在2018年,當我看完《頭號玩家》電影之後,決定用JavaScript創建一個遊戲。
使用JavaScript創建遊戲是相對簡單的任務,你有許多工具可以挑選,然後閱讀文檔,做些實驗,就可以完成了。
但對我來說,我的風格當然是: 創建一個用於創建遊戲的新工具 。
對於這個項目,我決定定義一些有趣的規則:
- 不要使用Canvas/WebGL。
- 僅使用CSS渲染動畫。
- 編寫函數式代碼。
- 嘗試編寫儘可能多的同構/通用代碼。
burnout.js
最後,我創建了burnout.js:
🎮用於管理碰撞的2D遊戲引擎。
在這個項目中,我學習了有關函數式編程、DOM性能、算法(用於計算元素碰撞)和其他很多內容的知識。
burnout.js項目: https://github.com/burnoutjs
當然,我還是保留了所有優秀實踐,例如單元測試、單元測試、單元測試,重要的事情說三遍。
做一個項目就冒出一個靈感
這時我又有了新的聯想:
拜託,我怎麼從未想到要創建自動化測試工具?
於是有了下面的項目。
N.O.M.s
🔮通用/同構JavaScript單元測試。
在開發burnout.js時,我構建了N.O.M.s(我的測試工具),並使用N.O.M.s庫編寫了burnout.js的全部單元測試。
創建測試庫的目的是什麼?
- 它應該可以用在瀏覽器和Node.js(同構/通用)中。
- 在純JavaScript中創建所有斷言(不使用瀏覽器API或Node.js模塊)。
- 使用Emojis。
- 不要將自定義CLI用於運行測試。
有趣的是:我用Mocha編寫了N.O.M.s單元測試。很諷刺,但很有趣😅!
N.O.M.s項目:https://github.com/afonsopacifer/nomsjs
值得重新發明輪子嗎?
在完成這些個人項目(以及其他許多項目)之後,在2019/2020年,我主要開發公司產品,創建複雜的前端應用程序並領導一個全棧開發團隊。
令我驚訝的是,在開源開發的最後幾年中,我的技術水平提升了,並且可以輕鬆使用React.JS、immutable.js、Web Components、flux、測試、PRPL模式、後端API(node.JS/python)、MongoDB,以及用於Web應用程序的許多工具/良好實踐來實現複雜的架構!
結論
作爲前後呼應:
在我的開發人員職業生涯中,最好的決定之一就是不滿足於只做工具的使用者,而是 成爲工具的創造者 。
原文鏈接: https://dev.to/afonsopacifer/how-i-became-a-senior-javascript-developer-with-personal-projects-1lpo