1. 程式人生 > >.NET進階篇-醜話先說,Flag先立--致青春

.NET進階篇-醜話先說,Flag先立--致青春

    作為開發者,工作了半年,也總覺得技術棧和剛畢業區別不大,用的技術還都是N年前的,每每看到新東西,也只心裡哇塞驚歎一下,然後就迴歸於忙碌。怪自己的技術池太淺,熱門的令人稱奇的技術也都是在其他巨人的肩膀上產生,但自卑還沒夠到巨人肩膀,便覺得新技術(相對於自己的技術程度)離我們好遠,對它也無能為力,不瞭解能否解決當前的痛點?應用成本高嗎?

    就像爬山1W個臺階,站在9K臺階處的人就會覺得容易些,站在1k臺階處的就感覺高不可攀。勇敢邁出第一步,跟上前面登山的人。

    經常會看見公司框架裡那些前人寫的程式碼,還是.NET早些版本1.0,2.0時代的,雖然語法還比較low,但設計卻讓人驚奇,身邊也少見架構師可以求問學習。咱是從事GIS行業開發,可能著重在於GIS功能的開發,其實有點本末倒置。GIS只是開發中的一個外掛,我們的根本應該還是要先把.NET玩溜,很多像效能瓶頸、版本相容跨平臺等問題也就迎刃而解。

    有時候看不懂的設計程式碼就去查,當下明白了,某天又忘記了,也不會使用。網上資源太多隻能用來解決某個特定問題,如某個bug,某個安裝,這是你快速解決遇到的某個問題的好途徑。系統的提升還是需要有個全域性系統的知識脈絡,像書籍,課程。在系統性的學習之後,會對.NET有個相對全面認識,工作中遇到的一些棘手問題,也都有對應成熟解決方案,根本不會說解決不了,只能曲線救國。很簡單的功能設計因為認知不足,浪費大量的人力,設計出龐大難以維護的系統,這是開發者最不能期許的。

    目前.NET很熱很成熟的框架都用到高階語法(僅區別於基本語法),反射啊,委託啊、非同步多執行緒啊,還有很多令人拍案叫絕的設計思想。不整明白以後更加忐忑,對新技術淺嘗輒止也不會剖析更不敢應用到實際專案中,永遠只是個旁觀者,只在山腳下叫苦。

    想起大學時不務正業沒正經上過幾次課,畢業前開始有點恍惚,逼著自己系統學習了下C#基礎,雖然輕鬆畢業就業,就業後做過.NET的CS/BS開發,做過Java的BS開發,但都是瞭解了基本語法就提槍上陣了,靠運氣躲過技術難題。那時沒想到要整理,好多書籍課程資料也因搬家都丟棄了。有些時候忘記的知識點還要去網上查詢,一下找著正確的還好,找不到又還看到部落格論壇還在轉發一個錯誤的示範(我知道有可能只是環境不同沒能像文中描述那麼順暢),心裡就開始mmp了。

所以寫技術文章,一定要經過驗證,交代自己的驗證環境

    這次準備把自己整理時候的知識點記錄下,按俗套姑且取名.NET進階篇,以便自己以後查閱,好多東西你一定做過,但你就是暫時想不起來了。爛筆頭記一下,想不起來也好找。自己動手記錄,會不自覺看很多遍,修改很多遍,思路也會更加清晰。作為職業Coder,說實話寫文章方面文筆就糙了點,大多時候寫字隨心所欲,與其咬文嚼字,不如多關注些自己知識的盲區。但會盡量要求程式碼比文字嚴格精煉,一行程式碼勝千言就更好。

    知識只有經過整理才能形成技能,我會在整理了一些知識點的時候發出來,連著白瞟好幾集的感覺應該很爽。整個進階篇的章節分佈如下(後面估計會調整,大章節分佈不會變,可能納入些新的東西)。

     

 我用了一個新的輕薄本(本來買來專作開源GIS的,都快落灰了,如果能堅持把這一系列寫完,它也算立大功了),宇宙最強IDE-VisualStudio2019(線上安裝比較慢,離線包有20G左右,後面會上傳),在週末假期做拆解,合併,驗證,整理工作(原諒咱工作日很難跳出工作狀態,下班有空也多是關注工作中遇到的問題)。一個知識點的相關書籍課程拆出來,為了保證質量,可能需要挺長時間。希望做到一個知識點看這一篇就夠了的地步。直接複製安裝可用的框架程式碼咱還沒能力整理出,此篇更多的是指導思想、原理解析,以點帶面,當然會用些經典小例子,所以別太指望能直接複製貼上到自己系統中F5就能執行成功。定位是高度總結概括,面向抽象,比如像正則可能就不會介紹,咱也記不住。到了應用的細節地方可能還需要去查閱詳盡的資料,但知道怎麼用,怎麼查,出問題也不慌張,面對新奇熱門的框架也不怵,這是咱期望的。

    語言章會讓你認識C#一些高階的語言特性原理,作為後面的鋪墊,設計框架離不開這些東西。設計章總結常用的設計套路,不敢說融會貫通下筆如有神,起碼會讓你編碼過程中能嗅出設計的壞味道,然後著手重構,重構的過程,會慢慢發現自己的設計竟然和成熟框架設計思想越來越像、如出一轍。框架章會了解常用框架的原理應用,工作中可以快速選型和應用,也對目前開源.NET環境深入認識。

    當然,做的越多錯的越多,沒有信心說沒有錯誤,更歡迎讀者能指出來。共同進步,少走彎路,促進行業發展,社會進步。沒錯,我的夢想是推進世界進步。我們能遇到的每個問題都在某個地方被某人解決過,交流是一種快速且有效的處理問題方式。讀書旅行交友都是在交換著我們對世界的認知,瞭解的越多,被你掌控的事物就越多。我們隨時都有Plan B,還怕啥。

    其實語言層面很多.NET開發者不願承認,Java熱度確實總比C#高,以前也覺得.NET挺low的,給人總是後知後覺的感覺,畢竟商業運作嘛,要經過很多過程抉擇的。一方面可能與我從事的行業相對網際網路比較閉塞有關,實際用到的.NET技能也不是很多,也沒有大而全的認識。另一方面也與我慵懶佛系的性格有關吧,不爭第一,凡事只做第二就好。千年老二其實挺好的,恰到好處,有餘力有餘地。

    所以也沒想過切換自己的主語言,如果需要Java開發者,一個優秀的.NET開發者肯定也能冒名頂上。語言真的是一通百通,設計思想更是放之四海而皆準,只是自己主語言開發起來會更順手罷了,就像經常開自己家的車會比較順手一樣。

    一般開發者都會不止一種語言。沒有最好的語言,適合自己的就是最好的。你第一次學習接觸的語言理應當做你的母語,如果你問我什麼是世界上最好的語言?那我不知道,我只知道C#也會是之一。

 -------心靈感悟--------

如何去學習一個新東西?
1:先大概瞭解一下這個是做啥的,初步分析一下有沒有必要看,比如很多東西你短期也用不到;
2:看所有提供的api,到底能完成哪些事,深入分析一下是否有必要看,比如我用這個新的東西會帶來哪些優劣,新東西一定是能帶來一些好處的;
3:熟悉原始碼,有些bug是因為你不會用而導致的如IQKeyboardManager,有些是無法滿足業務需求但是能夠擴充套件原始碼達到的如支援protobuf的AFNetWorking。

怎麼知道自己是否掌握了某個知識點?
我所用的兩個方法。
1:當成一個面試題,看你自己怎麼組織語言,也就是QQ群和論壇等社群解答別人問題的時候,你會發現明明自己一直都在用就是總結不出來是個啥~
2:寫成文章,這個還真不是那麼好寫的,寫出來後要放出去給別人看,通過網路你也能即使的得到反饋。我記得我之前寫了很多文章,但是後面我都刪了很多,因為很多的理解都是錯誤的,慚愧~
總結:
要時刻準備好,因為你不知道什麼時候就會得到一個機會。而機會總是留給有準備的人。