一起幫的開發直播已經告一段落:一是主體的功能差不多都實現了,二是用到的架構技術都展示得差不多了。以後就算繼續開發,也應該都是一些“技術上”重複的工作而已。整個直播過程耗時近半年,SVN提交1062次,視訊錄影60.5G,涉及到一個專案開發的方方面面,想來還真是有那麼一點小小的成就感。
從包工頭到程式猿,一晃就是快十年了。
想想我當初“三個月學會程式設計”的計劃,不覺莞爾。計劃從三個月變成一年,又從一年改到三年,再然後從三年到十年……我就這樣磨磨蹭蹭的一路走了過來?
回過頭來看看,有沒有什麼彎路?是不是耗時太長?有沒有什麼心得體會?
其實心裡有點亂。
可能也捋不出個一二三,就想到哪兒說到哪兒吧。
一起幫的所有功能,我捋了一下,其實也沒什麼複雜的。僅從功能來看,五年前,甚至七年前,我都應該能夠做出來了吧?那我這些年,究竟在幹嘛呢?
所以有一個非常流行的問題:“程式設計師三十/三十五(以及五年後的四十?O(∩_∩)O~)歲之後在幹嘛?”或者,換言之,“程式設計師是不是隻能吃‘青春飯’?”因為,做了一段時間之後,你就會非常悲催的發現,好像每天都在重複勞動,乾的都是體力活,技術上的提高非常有限……
有上面這種想法的人,其實還是比較幸運,不,只能說比較舒服的,因為他們多半是在一些比較穩定的單位/職位上,使用比較成熟的技術,所以才會有這種感覺。而另外一些更悲催的同學,可能一年到頭都在學習各種新技術,他們追得更累,他們的疑問大概應該是:“十年之後究竟還有多少技術是有用的?”
這些問題,確實不怎麼好問答。
先說技術的更新換代吧。
- 我最早進公司的時候,人家的老程式碼還是ASP,Html和VBScript混在一起,眼睛都要開花了的那種,真真不堪回首……
- 還好很快就升級成ASP.NET 2.0 WebForm,控制元件開發,頁面和後臺分離,那一個爽啊;那時候以PetShop為範本,“三層架構”滿天飛;是用DataReader還是DataSet吵得不可開交……
- 安生日子還沒過幾天,Ajax來了,“富客戶端”和“富伺服器”端吵得天昏地暗,最後還是富客戶端贏了,WebForm式微,迎來了ASP.NET MVC;資料庫操作早就換成了Linq to SQL,雖然還有不少人言之鑿鑿的說Linq效能不行……
- 這MVC一出來,感覺又回到了ASP時代一樣,View上面亂得一塌糊塗,但靈活啊,和各種前端框架結合方便啊;後臺又蹦出一個Entity Framework,好在我用的是NHibernate,這玩意我沒怎麼接觸……
- 還沒有接觸的,現在火得一塌糊塗的,還有各種前端框架,什麼Vue啊React啊之類的;以及萬眾矚目的.Net Core
- ……
也就不到十年的時間,回過頭來看看,確實是眼花繚亂——這還就ASP.NET這一塊!
我不是經常以“野生程式設計師”自居嗎,有人看了我的經歷,說,“呸!你都培訓班出來的,你好意思說你是‘野生程式設計師’?”我仔細琢磨琢磨,培訓班學的那點東西,和我現在用的這些技術,不知道哪裡哪裡了喲!
其實啊,不管科班的,還是野生的,做程式設計師,最終還是靠自學,否則根本走不遠,是不是?
可能有些剛入行的同學被嚇著了,呵呵。但其實呢,也沒你們想像的那麼恐怖。我說幾點:
1、技術是漸進地演化的。每一個新技術,都不是憑空出現,而一定是構建在之前的技術上的。這就有兩個結果:
- 有基礎的老人,可以更輕鬆的學習新技術。比如有了ASP基礎的老鳥,學習ASP.NET,不管是WebForm,還是MVC,你這些元件,直接一跑看生產的html,就已經懂了一大半,其他的GET/POST,cookie,session,門清兒得很。對於老鳥來說,很多東西,換湯不換藥,上手快得很。
- 直接學習新技術的新人,紮實程度上比不上老人。這一點,我發現很多“外行”真沒搞懂。我轉行那年,才26歲,我表姐就說,“搞IT,是年輕人的事,你都這麼一把年紀了……”當時我還真被她給嚇著了,但入行越深,才越發現不是那麼回事。
這裡乾脆多說點。
我是那種看了“21天精通ASP.NET”視訊就死皮賴臉混進IT隊伍的,拖控制元件的時候覺得簡單,但很快,各種具體問題就出來了。我記得當時有一個問題,是後臺取不到前臺傳回來的值,記得我滿頭大汗,無計可施,只好找我們 team leader,他是從ASP做過來的,“這簡單啊,不要急不要急,方法很多!最簡單的放一個hide input,或者放在cookie裡,或者給個url引數……”
我印象特別深刻。一方面,他那種氣定神閒的架勢;另一方面,就在那一刻,我明白了那種“在基礎層面上的差距”,不知道怎麼形容,大概就是所謂的“底蘊”吧?
所以那時候ASP.NET開發人員被人看不起,“除了拉控制元件,啥也不會”。但這話是不對的,“除了拉控制元件,啥也不會”的,是我這種一開始就學ASP.NET WebForm的人。這也是沒有辦法的事,那時候凡是講ASP.NET 2.0的,不管是書籍,還是視訊,基本上就只講控制元件,其他的就一筆帶過。確實啊,講ASP.NET 2.0的,不可能給你從Html開始講起吧?但沒有這些東西,你的知識,你的技能,其實是“浮”著的。
這裡面,最關鍵的,是“技能”。“知識”吧,你還可以補,我回頭學就是了;但日積月累形成的“技能”,是很難很難短時間內補上的。
其實我做一起幫的直播,就是想的讓觀眾通過觀看一個真實的專案開發過程,來彌補“工作經驗”上的不足。但越做到後來,越覺得這基本上是不可能的——除非有人願意跟著做,甚至跟著做都不行,要換著花樣的做,要遇到困難並解決困難,才能得到磨練並形成能力。
我在直播中,遇到了各種稀奇古怪的問題。這些問題,才是衡量一個人能力的試金石。大家回想一下自己工作中搞不定的問題,是不是甩給了老大?那老大是怎麼把它們解決了的呢?老大怎麼就能把它解決了呢?大家都是用的C#,語法類庫你都沒問題,在知識層面上,你和你們老大可能是差不多的,甚至你們解決問題的方式都是一樣的,google一下唄!但為什麼老大就能搞定,你就搞不定?這就是能力的差距。
能力,是練出來的,是時間給壘出來的。
2、技術是越來越簡單的。
很多新人,一聽到新技術,兩眼冒光,像打了雞血一樣,以為各種高大上。其實啊,越是新技術,越沒有“技術含量”,或者,技術含量在新技術本身裡面,而不在“學會新技術”“使用新技術”上。
舉個例子,Ajax,最早的時候,要使用XMLHttpRequest物件,各種回撥,各種相容,那時候要誰會用Ajax,絕對的大牛。現在有了JQuery,Ajax絕對就一大路貨,不會Ajax你好意思說你是前端?是不是現在的程式設計師都集體漲了技能?肯定不是的嘛,JQuery的Ajax那麼簡單,是個人都會啊!
你自個算算,從彙編到C語言,從C++到C#,從ADO到ADO.NET,從Linq to SQL到Entity Framework……所有的這一切,是不是讓開發變得更簡單了?不然,憑什麼現在人家四個月培訓出來就能幹活?我那時候,要兩年呢!
不是“培訓班降低了IT行業的門檻”,是微軟,是Google,開源社群裡不斷提供“新技術”“新框架”的牛人們,KISS(Keep It Simple, Stupid),有意無意的降低了IT開發的門檻——說不定以後哪一天,程式設計就像打字一樣,是個人都會喲!
一不小心,就扯了這麼多了?也不知道對大家有沒有什麼借鑑意義。
技術方面,就先說到這裡吧。下次我們有機會,再聊聊技術之外的事情。順便聊,大家有什麼問題,歡迎留言,都會看的,O(∩_∩)O~