關於學習.NET的歷程回顧與今後的探索實踐方向

mingupupup發表於2024-07-24

關於學習.NET的歷程回顧

自從2023年9月11日註冊公眾號以來,這次還是第一次介紹自己。我今年24歲,雙非本,211碩,非計算機相關專業。大學期間接觸過計算機相關的課程可能就《大學生計算機基礎》、《C語言程式設計》,並且也沒掌握多好。

22年4月研究生複試結束,聯絡好導師後,由於導師研究方向的緣故,才第一次接觸到.NET。

image-20240723103636318

22年9月研究生開學,正式開始學習.NET,當時為了學習VB.NET,買了一本《VB.NET程式設計與軟體專案實訓》。

開始看《Visual Basic.NET實用教程》。

當時使用的還是.NET Framework+VB.NET+DevExpress+SqlServer+Winform組合,如果沒有自己探索,可能研究生三年都會一直這樣使用。

經過自己的探索瞭解,發現2016年就已經有.NET Core可以跨平臺還更加強大,而且在.NET生態中,主流語言也不是VB.NET而是C#。

開始嘗試學習C#,在力扣上使用C#做難度為簡單的題,雖然那時候對我而言並不簡單。

image-20240723104248626

這時期主要還是在學習.NET Framework+VB.NET+DevExpress+SqlServer+Winform組合。

有空的時候開始看一些有關C#的電子書,比如《深入理解C#》、《C# 7.0本質論》、《C#入門經典》、《C#圖解教程》。

image-20240723110630180

主要是閱讀《C#圖解教程》與《C#入門經典》,《深入理解C#》與《C# 7.0本質論》沒有看下去。

從之前與資料庫互動直接使用ADO.NET,到後來使用SQLHelper類,再到使用Dapper,後來才瞭解到還有ORM的存在,開始學習使用EFCore、SQLSugar,還有一個FreeSQL還沒使用過。最開始的實踐基本上都是基於事件驅動程式設計,在Winform中透過拖拽設計頁面,在寫一下事件處理函式,就這些寫了好幾個月,我都不知道C#中的委託與事件為何物,更不用說Linq與非同步了。

研究生階段總是對就業充滿焦慮的,我也知道.NET在國內確實不是主流,而且也發現現在B/S架構比C/S架構更流行。

23年2月開始學習html、css、javascript,說是學習,其實沒有真的先去學這些再上手,而是直接去使用LayUI進行web前端的學習。

image-20240723110916897

23年3月開始看B站的黑馬程式設計師的SpringBoot的教程學習,學習了SpringBoot+MyBatis Plus基本的CRUD操作。

image-20240723111232710

但是也明白現在java太捲了,而且自己真的不喜歡java八股文,什麼jvm調優、分散式、高併發、微服務,這些東西還沒接觸過,如果只是為了面試死記硬背,自己沒有真的在專案中使用到,感覺很虛。看了現在java招聘的要求,除了掌握Spring Boot、Spring Cloud、MyBatis外,還要掌握各種中介軟體如快取資料庫Redis、訊息佇列kafka、rabbitMQ等、Elasticsearch等,資料庫不侷限於關係型資料庫MySQL、PostgreSQL還需要掌握非關係型資料庫MongoDB。剛開始學習看到這些讓我畏懼,於是又陷入到迷茫中。

23年4月,覺得畏懼java那就繼續C#吧。在B站上觀看楊中科老師的.NET6教程影片,買了楊中科老師的《ASP.NET Core技術內幕與專案實戰》,但由於讀研還需要做其他的事情,web開發這塊都沒有涉及到,教程和這本書沒有看完,但還是從中學到了很多東西。

image-20240723111708685

23年5-6月,覺得要不試試C++與嵌入式吧,網上說不用擔心35歲失業,越老越吃香。開始學習侯捷老師的C++影片,買了《C++ Primer》開始看。

image-20240723113518964

由於之前學過Winform,就開始了C++的跨平臺UI框架Qt的學習。嵌入式方面花了兩百多買了一塊STM32開發板。這塊板子到現在為止我還沒有動過。

就是在買了這塊板子之後,我突然意識到這樣下去不行,學啥都只是學了個皮毛,學啥都堅持不下去,一直很焦慮未來的就業。

學程式設計要麼為了興趣要麼為了賺錢。我發現我其實很喜歡C#,對.NET也有興趣,我想先不考慮就業的問題,畢竟當時才研一下,距離找工作還有一段時間。我決定基於興趣去搞事去玩,想用C#幹啥就幹啥,不考慮當下的市場情況。

但是讀研也並不簡單,不是你想幹什麼就能幹什麼的,你需要做你的課題研究,也要幫老師做橫向。可能很多人都沒聽說過Modelica,Modelica是一種物件導向的語言,用於對資訊物理系統進行建模。它支援由數學方程控制的可重用元件的因果連線,以促進從第一性原理進行建模。簡單的說就是能更高效地對複雜系統進行建模,可以用它來進行物理系統的模擬建模與matlab中的simulink類似。

image-20240723115245154

23年9月-24年6月其實我研究生生涯的主要任務是使用MWorks.Sysplorer+Modelica進行某個物理系統的模擬計算。

23年6月至今,基於興趣愛好學習C#的一些歷程分享:

  • 用C#幹爬蟲:C# + Html Agility Pack + HttpClient + Selenium/Playwright爬取並解析靜動態網頁資料。
  • 用C#玩AI:C# + NumSharp實現最小二乘法並使用Scottplot或OxyPlot繪圖;用ML.NET Model Builder做了個簡單的貓狗識別,並在.NET應用中整合。用C#訓練模型其實並不推薦,還是主流的python的Pytorch比較好,但是可以使用ONNX與OpenVINO推理模型;最近LLM這麼火,將LLM與自己的應用整合,除了可以用python的langchain外也可以用SemanticKernel實現相同的目的,還可以結合向量資料庫、提示詞工程等,做一些Rag應用,現在還有GraphRAG,都很值得嘗試,去做一些AI Agent應用多好玩啊。
  • 用C#做客戶端:C#技術棧中涉及到客戶端可用的很多,winform簡單易上手,基於事件驅動很好理解,缺點做出好看的介面不容易,雖然現在可以靠Blazor Hybrid但本質上不算是winform算webview了以及不能跨平臺;使用WPF,基於資料驅動,配合MVVM模式可以很好的實現UI與業務邏輯的解耦,使用xaml構建頁面更加靈活,WPF中還有很多很好的設計,如資料繫結,命令,依賴屬性等等,WPF很強大,我也很喜歡WPF,缺點還是不能跨平臺。WinUI3也可以做現代化風格的Windows應用,缺點還是不能跨平臺。跨平臺客戶端的方案有Avalonia、Uno Platform、Maui,其中Maui可以結合Blazor Hybrid使用一些Blazor元件庫可以快速構建美觀的頁面。
  • 用C#做後端:ASP.NET Core MVC,前後端分離可以Vue/React+ASP.NET Core Web Api+EFCore/SQL Sugar/FreeSql +SqlServer/MySql/PostgreSQL+MongoDB+Redis/Garnet等技術棧,前後端不分離可以使用Blazor,使用C#前後端都搞定,構建專案效率很高。

今後的實踐探索方向

學程式設計要麼為了好玩要麼為了賺錢,一直基於興趣完全不考慮賺錢太理想主義了,我也明白.NET在國內的崗位不算多,特別是大公司的崗位。之前考慮興趣與賺錢在國內能更好的結合,我主要學習WPF技術,我覺得WPF技術在國內就業崗位還是有的。WPF是個好東西,但是很多人都不認識,哈哈可以說別人不“識貨”,但這是個人沒法改變的。隨著就業壓力的增加,我決定不再侷限於.NET,擴充自己的技術棧,為以後的就業增加競爭力。TypeScript同樣出自我很崇拜的C#語言建立者Anders Hejlsberg之手,單純知道這個我就很想學習使用TypeScript。

image-20240723143304678

今後可能會探索的技術棧。

前端:語言 TypeScript / JavaScript,框架 Vue3/React

後端:語言 C#/Go/Java,框架ASP.NET Core Web API/Spring Boot

客戶端:語言C#/Dart,框架WPF/Avalonia/Flutter

人工智慧相關:語言C#/Python,框架SemanticKernel/Pytorch/langchain

雖然說語言與框架的思想總有相通之處,但生態、相關工具鏈、以及各種解決方案的掌握都需要時間。而且也只有真的實踐了,才會真的積累有效的經驗。

為什麼寫公眾號?

其實做公眾號初心不是為了賺錢,雖然說由於關注人數的增加與閱讀量的增加,現在每個月都能有幾十塊的收入。

image-20240723145336461

image-20240723145410695

除去OSS的成本每個月幾塊錢,每個月也還能賺幾十塊。

但是如果想透過這種方式搞錢付出回報比太低了,你寫那麼多原創文章,還是付出了一定的時間精力的,但是賺到的錢還不夠去外面吃頓飯還不夠買幾杯奶茶,如果只是為了賺錢,估計早就放棄了。

其實做公眾號最主要還是為了自己,於我個人而言,發表部落格能給我帶來正反饋,當有人點贊、收藏、分享的時候,我就會有成就感,覺得自己的分享是有價值的,對別人是有幫助的,而且知識的掌握,也不是一蹴而就的,自己時不時的回顧也很方便,如果還能幫助到有需要的人,那就更有意義了。獲取正反饋之後,學習更有動力與興趣,更會分享,更分享更有正反饋,就形成了一個良好的迴圈,我也發現這樣做,比之前的學習都更持久更加有收穫。因為當你入門一個東西,如果半天沒有成果,沒有積累起成就感就會很容易放棄的。

目前文章同步分享在微信公眾號、部落格園、CSDN、稀土掘金、知乎。

image-20240723151525860

image-20240723151704749

透過網路在廣袤的時空中有幸與各位產生聯結,如果文章對您有所幫助那就太好了,接下來會根據自己的探索實踐,分享一些.NET技術棧之外的東西,當然還是以C#相關的為主,當成是個人學習的記錄,如果對您有用可以繼續關注,如果覺得沒有幫助了取消關注也沒有關係,僅以此文回顧自己.NET的學習歷程與確定未來探索方向,祝各位都能奔赴自己的星辰大海!

相關文章