2018年過去了,我很懷念它。java
2018年是漫長的一年,在這一年裏收穫了太多,難以細細道來。node
從一個在屎山上添屎的菜雞,到如今的用心設計代碼,飲冰二年,難涼我對編程藝術的追崇熱血。python
從「SB js, SB java」的抱怨,到後面漸漸理解各個語言的設計思想,變成了對各個語言之美的讚歎。es6
2018年,對我最重要的書是clean code,我寫的最多的是java 和 js, 熟悉了python,但最讓我讚歎的語言仍是kotlin,一門將clean code演繹在骨子裏的語言。編程
2019於此,我總結下個人2018關鍵字: 設計, 語言。多線程
設計是門藝術。架構
在年中的時候,我一度認爲代碼醜陋主要有兩個緣由:異步
因此這致使我在寫新的模塊中,大量地使用了接口,而且在暴露的接口方法中寫了十分詳實的文檔,遵循javadoc的規範。編程語言
後來我認爲這是愚蠢的作法。類能夠本身描述、表達的,就不須要爲其寫接口。代碼能夠描述的,就不須要爲其寫文檔。在我新的代碼當中,我開始控制我本身寫註釋的慾望:人們每每不會去維護註釋。post
我開始發瘋同樣,在起一個類名、方法名、變量名的時候想半天。我開始抽象大量的方法,每當我以爲我有好一段代碼有寫時,我就開始準備一個新的方法。我遵循了clean code的原則,並以爲每一句話都是聖經。
直到我看到了5分鐘原則:起名超過5分鐘的話,就妥協吧。是的,你沒辦法爲編程裏面的因此類與對象映射成一個在現實生活中有意義的事情。不少重構的書,《clean code》 或者是《重構》,都不斷地叫你:類名不要出現helper,不要出現manager,可是他們卻沒有給出解決的方案。
我開始思考:若是我不寫helper,我該怎麼命名輔助類?我不寫manager,我怎麼抽象facade?
世界上本沒有路,走的人多了,便有了路。Helper,manager原本是不可讀的,寫的人多了,他就被約定可讀了。
因此我開始爲所欲爲地寫,找不少牛人幫我code review。我開始對本身的代碼有信心,並不再怕展現本身的代碼。
也是因緣際會。當初在看DDD的時候,感受DDD是這麼一種思想:
一問都知道,一說都明白,卻歷來沒人用。
我自忖在理解能力上還行(當年語文還行),卻也看的昏頭巴腦。這更激起個人好奇心,因此我開始準備搞清楚這是個什麼玩意。
我翻閱了許多的博客,大部分的討論只是淺嘗輒止,只有一篇知乎上的美團點評的實踐還算詳盡:zhuanlan.zhihu.com/p/32459776
而後我開始讀DDD,IDDD,啃電子書是痛苦的。我一邊筆記一邊讀,勉強啃完,可是也是隻是通了幾竅。
在我讀完IDDD後,再重讀美團這篇文章,發現可能和我理解的不太同樣,因此我在評論中留下這樣的評論,可是遺憾沒有收到回覆:
一點淺見: 題中做者已經提到了, 架構和IDDD中有所不一樣, 我仔細回顧了一下, 發現可能不一樣的有點多。 在IDDD中, 領域服務是對領域模型的一種補充, 是附屬品, 至關於實在是面向過程的才放到領域服務裏, 實際上可能根本用不上, 而在本文中, 不知道我有沒有理解錯, 領悟服務變成了對領域模型的封裝? 這點感受會致使貧血, 並且和書中所描述的領域服務有所出入?望指教。
後面看到18年9月印刷了一本《領域驅動設計精粹》,我趕忙從淘寶買來,放在案頭準備有時間好好研習。
DDD給我帶來的是:在每個項目開始時,我都會細細地理通領域知識,並在分層、結構設計上更加自信。可是遺憾,我沒有真正實踐它的機會。
初識Kotlin時正好我在研習clean code。當時我就在想:設計kotlin的人必定是clean code的粉絲。Kotlin的思想,禁止空值傳遞、取消違反開閉的checked exception、 相似groovy的有表達力的dsl等,讓我以爲寫kotlin是種享受。
Kotlin太新了,因此吸取了無數的別的編程語言的智慧,而且使用富有表達力的形式展示。
Kotlin multiplatform也是強大的,雖然它仍是十分地年輕,可是我十分看好它。我也十分自豪,爲kotlin multiplatform的社區貢獻了本身的代碼。
也是因緣際會,當初接到一個需求,將一個kotlin multiplatform的項目增長node.js的支持。我開始研究這個東西,而且發現ktor這個庫沒有對node.js作支持,而這個kotlin multiplatform的項目是有依賴ktor的。因此我提了issue,提了pr,爲ktor加上了node.js的support。
js圈簡直就是娛樂圈。今年爆出幾個大事,都與js有關係,就連我經常使用的nodemon,也依賴了event-stream這個庫。
不過這改變不了js優秀的異步驅動的思想。用Js編程你能夠忘掉一切多線程的煩惱(node在18年5月份release了對多線程的支持,不過好像是經過傳遞來共享內存),而es678的語法讓你發現,你要的js基本都有。
2018年也嘗試了Typescript,將一個js的項目徹底地重構成ts,過了一把重構的癮。有人說ts和python3.5基本是一個語言,我很是認同。
18年過去,經常感受本身仍是好弱,想學的東西太多。
感受本身soft skills更是須要好好提高了。這是重中之重。沒有辦法作一個純粹的programmer。