前言
今天想講講的是我的技術樹。我最初是做CS開發的,第一階段的技術經歷是以Powerbuilder來做CS開發,第二階段開始基於C#做winform開發,眼看前端開發越來越流行,需要更廣泛的技術棧勢在必行。因此以.Net為基礎,我開始拓展自己的技術棧。從14年到18年,跨越了很多界限,到現在為止,應該說.Net,Java,Android,基於nodejs的web開發都積累了一些經驗,可以給大家分享一下。
01
我的技能樹
我對技能的培養,是很有目的性的。我在開啟我的第二階段技能增長的時候,就預先對自己未來的技術樹發展進行了選擇。因此當時就畫了思維導圖並逐漸補充和調整。現在我就將我的“技能樹”思維導圖跟大家分享。
其中,標注為黃色旗幟的是基本掌握,標注為紅色旗幟的為使用熟練。未標注的只是了解。
首先提一下我的技能樹的底色。從我進入IT行業開始,一直從事的是企業信息化系統的開發,所以在技術樹里,還看不到算法、集群、微服務這類技能,這還不在我的技能需求列表內。我的技能覆蓋范圍是:如何做好一個企業信息化系統。但我未來對這些還是很有興趣並會進行研究。
史前技能:
作為IT行業的老爺爺,我還有前一段的技術經歷,是使用PowerBuilder+Sybase數據庫進行CS應用開發。我剛進入IT行業的時候,PowerBuilder還是非常火的,那時候有兩火,PowerBuilder和Delphi。那時候也剛好是互聯網時代剛開啟的時候,所以幾年之后,技能便逐漸過時,我從程序員到部門經理,感覺技能無法進步,最后我轉行做了產品經理。
在幾年前,經過n年的折騰產品,我發現搞技術也挺適合我的,我又回頭拿起了技術。一手產品,一手技術,都是我喜歡的事情,因此我想如何能盡快的精進技術,我的技能樹思維導圖就是那時候誕生的。
首先開刀的就是C#。為什么要選擇C#這個看起來似乎有點“沒落”的技術呢?這里我得感嘆,公司對個人的發展影響重大,一個人的一生,隱約的都在循着某條路線前進,最終形成了你獨特的個人人生。你就職的公司是你人生軌跡的重要部分。我在之前的公司擔任產品職位,因為做的是和RFID硬件相關的行業,因此選擇了C#。在產品研發過程中,逐漸了解C#。之后我進入了一家外貿電商企業,負責企業ERP的研發,因為對操作便捷性的極致追求,仍然采用了C#基於Winform進行開發,這也使得我更深入的介入到研發中去。在這期間,為了攻克技術難題,優化系統架構,提高部門開發效率,我花了大半年的業余時間,把《C#高級編程》啃下來了,至今仍反復閱讀,從此也真正的重新進入了程序員的行列。
但從0開始何其之難,因為基礎太低。為了盡快的達成目標,我采用了“跳遠”式的學習模式,這種模式現在仍然采用,那就是學習的新技術要和上一個技術要有相當程度的升級,盡量避免同級別技術都去學習,且要不斷的學習技術和拋棄技術。技術要跳躍式升級是因為學習時間有限,而為什么要學習技術又要拋棄?這是多余么?我認為並不多余,我非常認同一句話:“人生中你所走的每一步,都是構成你人生的基石”,技術大廈的基石,一定是要牢固的,沒有扎實的技術基礎,就去學新技術,必然走火入魔(產生大量的認知錯誤)。這也是為什么我看《C#高級編程》的版本是第四版,而不是第六版,因為第四版基於.Net2.0,那是一個技術基石,我未來可以不用,但不能不學。
因為公司的產品是基於C#和WinForm,因此我首先學精的就是它們了。
02
C#相關技術
C#:必須
C#本身就不用說了,需要深度學習。
Linq:必須
Linq是個好東西,我覺得如果C#沒有Linq,那可能就索然無味了。使用Linq可以大大的精簡代碼。而Linq的技術鏈其實很長,它是從委托、匿名委托、lamda表達式、表達式樹,最后才有Linq。
DI/IOC/AOP:值得了解
我覺得深入理解這些概念,對程序員來說很重要。這可以讓我們把架構做的非常優化,也有利於我們更好的理解asp.net mvc。
其中微軟企業庫EntLib我是詳細了解過的,受益匪淺,但實際工作中沒有用到,因為技術已經過時了。而對於MEF和Spring.Net有興趣,但沒時間去了解。
Membership:值得研究
對於網站的權限控制,不管是webform還是mvc,微軟都提供了自己的解決方案,但在實際使用中,企業的需求各異,一般大家都是自己實現,不會用Membership。但了解它,從而了解微軟的網站權限設計原理,從而定制自己的權限控制架構,是很有幫助的。
正則表達式:值得研究
我覺得這東西非常有用,但表達式太難記,又用的少。所以到現在為止,還只停留在碰到問題就百度的業余水平。
EmitMapper:必用
在.Net2.0時代,大家大量用DataTable,但它五年前甚至更早就應該被拋棄了,List對象使用起來非常方便,而映射工具使得將前端的數據映射到后端變得非常方便,使用強類型編程變得非常有優勢,DataTable應該走入歷史了。除了EmitMapper,也有人用其他的比如AutoMapper等,都可以。
Log4Net:必用
對於一個完整的應用系統,怎么能沒有日志記錄系統?Log4Net已經非常強大,沒有必要自己去寫一個。
Asp.Net WebForm:未來會繼續研究
我算是大致研究過WebForm,雖然沒有用於實用,但我始終保持一種想把它實用,並進一步深入了解它的興趣。肯定有人會覺得,WebForm已經過時了,為什么還要研究它?因為要打好技術大廈的基礎,WebForm可以說是一個非常經典的設計,雖然已經過時,但拿來把玩也是很好的。
Asp.Net Mvc:正在使用
當前我的產品里,在后端使用的就是Mvc。但我所使用的Mvc遠遠不是asp.net mvc。因為實際上只用了其中很少的一部分,而完全拋棄了Razor。因為Razor也過時了,現在流行的是前端開發,后端只要簡簡單單,就好。
.Net Core:未來應該會使用
當前產品還不需要跨平台,但我感覺未來可能會需要跨平台。
CodeSmith:在用
為什么會使用CodeSmith?這是歷史遺留問題,因為當初公司使用的架構,是博客園上的一篇文章推薦的基於Repository的經典架構,那個架構下需要生成大量的類,Model,ViewModel,Access,Service等,所以需要代碼生成工具,就用上了CodeSmith。
但隨着我后來徹底拋棄了Repository架構,架構越來越簡單,CodeSmith也用的越來越少,現在只用於生成ViewModel類。其實就生成VM這種簡單的POCO類,用C#直接寫一個就行了,但用習慣了CodeSmith不用白不用吧。
不知不覺已經寫了5頁了,今天就到此為止,下一次繼續寫完我的技能樹。
覺得文章有意義的話,請動動手指,分享給朋友一起來共同學習進步。
歡迎關注本人微信公眾號,更及時的關注最新文章(每周三篇原創文章,以及多篇專題文章):