我總是不太善於做營銷這一塊,骨子裡有點舊時窮酸知識分子的調調,內心裡認定好的東西不需要做過多的修飾,說太多大話我會不好意思。

但我一個朋友言之鑿鑿的說,這個時代就是個浮躁的年代,你要善於製造焦慮,誇大效果,什麼都得學,不學就落後,落後就要捱打。

反正課又不是葯,喫不死人。

按照這個說法,長此以往,人人都得是蘇東坡,音樂家、書法家、畫家、文學家,噢,他還是個美食家。放在計算機領域,恨不得要求你,上能搞人工智慧,下能搞操作系統。

然而世上只有一個蘇東坡。人還是得認清自己,事事跟風,樣樣都學,反而落下個附庸風雅的名號。

所以,認清自己的現狀,理智選擇知識來學習,這一點尤為重要。沒有那麼多不學不行的知識,也別指望學個什麼課就能脫胎換骨,達到Px,Tx。琴棋書畫3年起步,5年入門,10年小成,20年大成,憑什麼編程就能速成呢?

這世道,缺的就是清醒。

現在的營銷都講究「以德服人」,然而我覺得,知識這種事兒不能迷信權威,必須以理服人。講道理,是本篇廣告的「獨特氣質」。

新課是關於Node.js Koa的課程。那麼問題來了,借用姜文的話就是:你XX的給我說說,我XX的到底要不要學XX的Node.js?老子學不動了。

沒辦法,這行就這樣。你不學Vue,總不是跑去學React/小程序/演算法與數據結構/TS去了,不斷學習根本避免不了。一入編程深似海,從此女神是路人。所以關鍵在於把時間投在學什麼上比較划算,利益可以最大化。從經濟學的角度考慮問題,兼顧短期、中期與長期的利益,纔是上上佳策。

明確表達我的觀點,前端學習node.js,短期小收益,中期高收益,長期必然趨勢

實的講,一個前端學習服務端編程,短期收益不大。但是考慮到中長期,投入一門課時間,收益還是很可觀的——關鍵是它保留了你未來進階/轉型的可能性,而這僅僅只需要耗費你18個小時左右的時間。

短期來看,對於絕大多數前端開發者,將服務端技術直接應用到工作中的可能性不大。但短期最大的收益我認為是可以讓你獨立完成一個項目,比如自己開發一個完整的小程序。

不求人的感覺,真的很好。想想,接個外包項目,以前要分人一半,現在你自己照單全收,棒不棒;自己有個好的idea,挽起袖子就是幹,爽不爽。

開個玩笑。但獨立完成項目對於每個開發者來說,意義確實太挺重大的。這並不是外包只拿一半的問題,而是程序員價值的問題。能獨立開發意味著你具備了不求人,不受人限制,甚至是未來獨立工作、創業的可能性;獨立開發也可以讓你去踐行自己的各種想法,不再因為好的想法由於不懂服務端而不能落地;獨立開發也可以增強你編程的成就感,弄個項目只有fake的假數據有啥意思。

能自己獨立做一個完整的Web項目,感覺就像一個熬了幾個通宵的人,洗了個熱水澡,伸了一個很爽的懶腰,舒服到骨子裡去了。

中期來看,學習服務端編程,符合前端要將「傳統後端」趕盡殺絕的氣勢。趕盡殺絕是不可能的,數據和高並發的架構設計依然是傳統服務端開發者的領地。但前端現在的發展確實迫使web開發呈現出了」後端靠後,前端靠中「的趨勢。服務端蛻化(不是退化,這種變化是良性的)成數據的提供者,大量的業務與數據合併交給前端來處理,這也是三大框架流行的一個因素。前端的重要性愈發明顯。

現在的前後端界限非常的模糊。在中大型的項目中,整體架構是三層的,而不是典型的前後雙層的。」後端更後「表達了傳統的後端將蛻化到純數據管理的角色,也就是我們說的「服務」的角色,它只提供比較乾淨的數據,而數據的整合,傳輸給前端的最終數據模型,都將由前端開發者自己定義。

簡單點來說,前端開發者需要會寫「API」介面。前端需要什麼數據結構,前端開發者自己是最清楚的,所以業務數據結構的定義交給前端開發者是比較好的做法,這也是為什麼很多中大型項目都有「中間層」這個概念。後端是微服務,專心做並發、性能與數據一致性;中間層整合成業務數據,並向前端提供API輸出數據。

你成天噴服務端介面垃圾。好!你自己來寫!

長期來看,30歲,算了,算35歲,是一個挺難的點。而這一點對於前端開發者來說尤為具有不確定性。

30來歲還能踏踏實實任勞任怨和大把大把年輕人比賽寫代碼的人真的不多。別聽那些跟你說,50歲還能寫代碼的鬼話。50歲寫代碼,那可以是因為興趣,但絕對不能是因為生活。就像我沒事兒畫會兒畫,那是陶冶情操,靠畫畫生活,我怕不是要餓死。

對於一個程序員來說,逐步走向技術管理/技術總監的路是比較靠譜的一條程序員之路。不是說,35歲後你就不能寫代碼了,而是35歲之後,只寫代碼啥都不管的人,你所貢獻的價值必定達不到你35歲時的薪資要求。薪資達不到,怎麼平衡而立之年」老男人「的自尊心,又如何負擔沉重的家庭負擔?這個年紀的人需要做團隊的決策者,給團隊提供超越技術的價值。

不要類比尤大這種星光一樣的人物,這並不多見。換個角度,能做出點名氣的,混的還不錯的,哪個是一點服務端都不懂的呢?

業界有一條不成文的定律,誰離數據更近,誰纔有話語權。一個公司掌控技術全局的人必然是偏」後「的。所以我們可以看到大多數公司的核心技術管理者都是服務端出身,純前端出身完全不懂服務端的CTO/技術總監,少之又少。但只懂服務端,完全不知道啥是三大框架的技術總監遍地都是。是不是不公平?但這就是現狀。

不是前端就不能做技術總監/CTO,而是前端獨立發展的時間太短。純前端入門編程,在過去是沒有的,絕大多數年紀在30歲以上的都是Java/C#/PHP語言入門編程的。所以,純前端能否勝任全局的技術管理者,還無法得到有效的驗證。

所以35歲這道坎,前端開發者怎麼邁過去,還是個未知數。儘可能向伺服器靠一靠,是一個不錯的選擇。反正也不是讓你精通伺服器開發,也不是讓你去搞高並發分散式,但你必須要了解,要能自己獨立做做中小項目。

退一萬步講,熟悉服務端API的開發絕對是面試加分項

以上建議僅針對走技術路線的同學,未來要去做生意的、搞藝術的,或者家裡有礦的,不在建議範圍內。

此外,學習服務端編程也不是隻有Node.js這一個方向,事實上,如果你心大一點,我覺得Python比Node.js更好,反正這兩兄弟都差不多,服務端都搞不過Java。但如果你不想學其他語言,Node.js是你最低成本進階服務端開發的選擇。學一門語言並不是像你想像中的那麼容易,如果會JavaScript,選擇繼續依附這個語言也挺好,至少你不用擔心它」死「掉。

前端是框架競爭太殘酷,但JavaScript一統天下;而服務端是語言競爭太殘酷,昨天還是」世界上最好的語言」,今天就莫名其妙被唱衰了,我他喵的也不知道為啥。青出於藍勝於藍到未必,那大概就是一代新人勝舊人吧。

好了,最後要詳細講下課程。《純正商業應用——Node.js Koa2開發微信小程序後端》到底講了什麼?Node.js有三大應用,前端工程化、Web開發和中間層。本課程主要是講最為實用的Koa Web開發,並會給大家講解中間層的概念和意義(不是重點)。工程化和Node.js原生介面基本沒講。

1. 新課程在業務上將配套我去年的小程序課程《純正商業應用——微信小程序開發實戰》,完成《舊島小樣》小程序的服務端開發,幫助同學們對完成完整的項目。前後分離,非必須配套購買,但在前端課程中講過的知識點不會在新課程中重複。比如回調、Promise、部分ES語法。如果JS基礎不好,還是建議看看前端課程。

當然,這都是業務。但熟悉我課程的同學應該知道,我的課,從來不以業務為主。編程思維、優質代碼、更好的應用框架纔是課程的核心。

2. 在新課程中,我們將二次開發KOA。說實話,KOA簡直就是裸奔,精簡的讓人髮指。我們當然不能裸奔,所以我們必須穿上漂亮的衣服,舒舒服服的去逛街。二次開發是非常要必要的。我說的二次開發並僅僅只是用上koa-body-parser,koa-router,koa-static這些常見的必備中間件。我們需要巧妙使用koa-router分離路由;需要做路由的自動載入來偷懶;需要編寫Lin-Validator中間件來構建驗證層;需要編寫全局異常處理中間件;需要為每個錯誤編碼還需要為許可權編寫中間件。

很多同學應該知道egg.js這個知名的Koa框架,但本課程解決的問題是egg.js沒有解決的。事實上egg.js給出的只是一個企業級別的框架,但並沒有給出像TP、SpringBoot、Flask框架中那些及其有用工具類、校驗器、專門針對API優化的異常處理,甚至ORM層也沒有給出範例代碼。因為目標不一樣,egg.js給出的是一個宏大的架子,怎麼寫代碼並沒有限定。但我的這門新課程給出的是一套小而優雅的Web API解決方案,我始終認為對於項目開發,沒有選擇就是最好的選擇,先讓自己開發更有效率是重中之重。有興趣的同學,可以在未來把這門課程中代碼的寫法、工具類移植到egg.js中,兩全其美。

3. 課程中少不了要深入理解下Koa三件套:中間件、洋蔥模型、async和await。這個應該都被講爛了,但新課中會讓大家知道:

  • 為什麼一定要保證洋蔥模型?不保證洋蔥模型的後果是什麼?
  • Koa中的中間件調用到底是同步還是非同步?是不是一定要在中間件調用時加上async和await?不加又能怎樣?
  • asnyc和await大家都會用,但當我們面臨複雜的非同步嵌套調用的時候,當我們面對Promise的時候,如何轉化成async和await呢?await的本質到底是什麼呢?

相信你聽完課程後會有一些不同的理解。

4. 非同步編程模型。排除語言的門檻,Node.js其實相對於Python、PHP等動態語言的同步框架,編程難度是比較高的。async和await降低了非同步的難度,但是非同步編程依然非常容易出錯,尤其是在鏈式嵌套調用和非同步異常處理上。這也是本課程要講的重點。

5. Node.js中間層的概念。雖然新課程不是以中間層為主的項目,但對於Node.js中間層這個重要的應用還是必須要講講的。由於新課程需要調用後端的數據服務,所以剛好可以體現中間層的概念。

6. Sequelize 以ORM的方式操作MySQL。沒有選擇MongoDB。一個公司不可能招聘一個只懂MongoDB不懂關係型資料庫的後端開發者。可以不學MongoDB,但是不能不學關係型資料庫。不懂關係型資料庫,談不上入門了服務端。當然,如果你Mongo+MySQL文體兩開花,那更好。

7. JSON序列化。凡是要做API,必然要給出一個靈活的JSON序列化方案,新課程講給出幾個層級的序列化方案來,包括Sequelize實體層,Scope層,Koa層。

8. 與微信小程序的對接方案,這裡涉及到令牌的處理與無感知登錄方案。小程序中的無感知方案和Web有所差異,它更簡單一些。

9. 加強對JS這個語言的應用和理解。非同步編程太能體現JS的特點了;原型鏈的理解也是本課程的一個重點。

最後,是最重要的一點。整個課程的Koa核心庫構建思路其實來源於Lin-CMS-Koa這個開源項目。換句話說,學完這門課程,基本上入門了Lin-CMS的服務端開發,因為從介面到寫法,新課程都和Lin-CMS保持同步。事實上我們推出Lin-CMS-KOA就是為了讓前端開發者能夠獨立完成一整套CMS,必須是一體化的JS技術棧。

當然,Lin-CMS前端是Vue構建,如果還不瞭解Vue的同學,慕課網黃軼老師和DellLee老師的Vue課是絕佳的選擇。

趕在新課程上線的前一天,我們發布了Lin-CMS Vue/Koa/Flask的beta穩定版。新版本重寫了路由機制,優化UI佈局方案,新版UI看起來更加清爽整潔。未來的Java版本也已經提上了日程。

demo傳送門:

http://face.cms.7yue.pro

github傳送門:

github.com/TaleLin

感謝一路有你們!祝你們前程似錦,快意人生!


作者:7七月

鏈接:imooc.com/article/28628

來源:慕課網

本文原創發佈於慕課網 ,轉載請註明出處,謝謝合作


推薦閱讀:
相關文章