位元熊故事匯獨家 | .NET 感恩專場

微軟技術棧發表於2022-12-14

大家好!我是愛吃、愛玩、更愛學習技術,IT界新晉小紅人,開發者的好朋友——位元熊!

位元熊:本期故事匯是.NET專場,今天一次性邀請到DOTNET領域大家非常熟悉且各有擅長的三位嘉賓,給我們來談談.NET 7.0的新版本解析,技術選型,DOTNET企業應用現狀,還有12月DOTNET 2022社群峰會劃重點!我們先請各位“紅人”介紹一下自己。

圖片

圖片

蘇震巍:我是蘇震巍,是盛派網路的創始人兼首席架構師,也是微軟最有價值專和技術社群區域總監,現任蘇州微軟技術俱樂部的主席。關於.NET我寫了兩本書:《網站模組化開發全程實錄》——已經被很多大學當做教材了;《微信開發深度解析》,主要講跟微信有關的.NET開發,已經印到第九版了。我在2002年.NET剛出來的時候就開始關注它,真正開始做產品是從2003年的時候開始了,那時候我剛上大學(暴露年齡了)。在將近20年的時間裡,看到了.NET整個成長過程。當然我也用很多其他的技術做一系列的開發,有很多心得。.NET的趨勢非常吸引我,在過程當中給我帶來了非常多好處。

董彬:我叫董彬,現就職野村證券的資訊部門,為公司的風控系統開發客戶端。雖然我看起來很“成熟”,但實際上我做程式設計師就只有三年的時間。今天我是以新手程式設計師的身份分享我在工作中,.NET究竟給我帶來了怎樣的變化,以及我為什麼會選擇.NET作為我的主要研究領域。可能有朋友看我眼熟,因為我參與Reactor的活動,今後我也希望能夠在技術領域,為.NET社群做出更多貢獻。

黃國石:我是黃國石,網名“智慧大石頭”。現任中通快遞的資深架構師,做資料分析和物聯網,主要是車聯網方面的專案。在社群裡面我也算比較活躍,我有一個社群是新生命團隊,我們有40多個開源專案,從2002年開始到現在已經20年了,踩過很多坑。我常把自己和朋友們在專案和實踐中的經驗做整理,做成開源專案和分享,豐富整個社群。今天我跟大家聊聊企業使用.NET的情況以及.NET在國內的現狀。

位元熊:位元熊在去年11月的這個時間,請到了蘇老師來做.NET 6的講解,對蘇老師邏輯化思維印象深刻,今天還是請蘇老師給我們技術點把控一下。

.NET 7.0新特性大賞

蘇震巍:從.NET 7的預覽版我就一直在關注,釋出之後,我們社群的一些產品也同步更新到了7.0。我重點講幾個我認為重要且可能對未來影響較大的更新。

第一個是對ARM64的全面支援和升級,一直以來.NET在CPU架構上主要以x86為主,對ARM甚至ARM64這樣一些比較新的CPU支援有限。這一次.NET 7邁出的最大的一步是在CPU架構上,對ARM64的支援是有里程碑意義的。現在國產化對中國的軟體市場是很現實的挑戰……可能將來三年到五年,大量新採購的伺服器會到ARM上面,不管你是不是國產,.NET 7在ARM層面的支援奠定了它將來是否能夠在新的市場裡有優勢,吸引更多新鮮血液。

第二個是效能方面的提升,.NET的效能不斷重新整理我們的認知,3.1的時候它已經非常快了,以至於當時釋出會上Scott Hanselman都以為是Demo跑錯了,他自己都不敢相信跑出了一個非常棒的成績。當時大家覺得這已經是巔峰了,速度已經達到了Node.js的好幾倍。可是後來僅過了兩年,6.0的速度已經是Node.js十倍以上了,現在7再一次超越。

圖片

在社群裡面的經常有這樣的聲音,Python/ Javascript 等很多語言好學,但為什麼C#的上手就是看語言還可以,但是看到框架就好像得去建一個比較龐大的專案,才能把它執行起來。這一點在.NET 6的時候已經做了比較好的改進,包括結合C#10。我們已經有了全域性的using和非常簡潔的的寫法,我覺得這一點是非常務實的,因為一個好的語言,你不能總是要求大家有非常長的學習週期,才能夠駕馭他。我覺得一個好的語言,應該是能從幼兒園,一直到老年大學,一整條線都應該去支援它。

曾經.NET Core在入門方面,是有一定的缺失的,當時微軟花了大量的力氣在做MSlearn,微軟大量在推怎麼樣教會你去用……在6以後,可以看到非常好的趨勢,比如我們現在已經可以透過一行程式碼跑出一個Hello World。我覺得在6之前,是沒有辦法透過官方的框架做到這一點,除非你在底層做很多別的事情。現在從6到7是非常符合這樣的一個趨勢,整個的環境,包括加上VS Code、Visual Studio原生的支援,像現在Windows11,包括Windows Server,做了很多原生的支援之後,甚至比開發Python還要容易。直接開啟,跑一下,編一下,然後build一下,就可以去run了。在我心目中這是一個非常健康的,足夠吸引我的框架

位元熊:蘇老師還以7.0更新中的泛型數學為例介紹了.NET在科學研究方面的潛力,希望這點能吸引到更多大學生使用.NET畫圖、做資料統計。

半路出家愛上.NET

董彬:接上蘇老師的話題,因為我最近投入了比較多的精力在Avalonia UI的框架上面,這回有兩個巨大的更新讓這個框架得到了很大的提升。一個是7.0第一次實現了真正的Native AOT,讓Avalonia UI可以編譯成完全原生的Native客戶端,啟動速度更快,也增加了它反編譯的難度。另外7.0推出了沒有Blazor的WebAssembly,這樣Avalonia UI就能以原生的WebAssembly實現在Web上的執行,這兩點更新讓我很驚喜。

我不是計算機專業出身的,我本科學能源動力,研究生學流體力學。2019年才開始轉行做程式設計師,我的職業經歷大概可以代表半路出家的程式設計師。我的第一份工作是在油田科技服務公司SLB當機械工程師,畫畫機械圖。工作本身並不需要程式設計,我第一次接觸到程式碼,是因為公司有一個程式是VBA(Visual Basic Applications)的,我們需要在Excel裡面監測讀出來的資料,然後直接生成報告。這就是我對.NET的第一印象,可能跟很多人都不一樣。

圖片

工作到第二年,我開始對重複的文件工作產生厭煩,就自己寫了一個WinForm的程式,那種輸入幾個關鍵字,就能直接輸出一大段質量報告的評語。後來,我接觸了WPF開發,在公司內部做了一個很成功的專案——用快捷鍵選中一段文字,然後拼個網址在瀏覽器裡開啟。很多內部系統都是透過這種方式來開啟檔案的,這大大提升了工作效率,也得到公司高層的認可。後來我瞭解到我們公司在北京有一個軟體分公司,有非常複雜的WPF和現在我才知道叫ASP.NET的應用。作為一個機械工程師,以為我學程式在公司裡面無法得到幫助,但當我在公司的論壇裡發出問題,得到了非常專業的回答,因此我瞭解到公司的這個地層勘探相關的產品非常厲害。這種有專業支援的感覺給了我很大信心,也讓我相信我也可以將較為複雜的東西做出來。隨著我的探索,我發現程式不完全是照葫蘆畫瓢,就能寫出來的東西。我不怕大家笑話,在我寫完我的第一個程式之後,還是不知道值型別和引用型別的區別,甚至不知道兩個概念的存在。我意識到了系統學習.NET的重要性,所以辭職去讀了我的第二個研究生,資料科學方面的,整整兩年時間都在寫Python和R語言。雖然這些東西現在還是會的,但就是覺得有點虛無縹緲,跟我當初設想的不一樣,我最早在計算機和機械專業之間選擇了後者,就是因為喜歡這種看得見摸得著、去做手工藝品的感覺。現在Python和.NET之間,.NET更能給我這種感覺,因為它能夠開發出一個漂亮的UI,後面我就更專注於.NET方向了。

畢業之後,我進入了一家設計、製造衛星的公司,他們所有的上位機全都是用WinForm開發的。我入職後的一個任務是為我們即將發射的三顆衛星開發地面執行控制系統。因為前期在上位機部分已經有非常多知識積累了,所以這個運控系統我們選擇了ASP.NET Core作為後端,它有非常多的知識可以直接遷移。為了實現多端控制,我們也做了前後端分離,變成我一個人寫ASP.NET Core的後端,也寫了React的前端。正值2019年,.NET的開源進步非常快,3.1剛出來,.NET Core效能有極大的提升。我們的專案進展也很快,收穫滿意的成果。這家做衛星的公司裡都是衛星方面的專家,沒有專門的軟體工程師。專家們的專業知識是非常寶貴的,.NET是把他們的專業知識轉化為成果的重要手段,這也堅定了我做.NET的決心。

我後來到了現在任職的公司,做風控系統。它的客戶端非常複雜,龐大到網頁應用完全沒辦法實現它的功能。有人問過我,這個系統為什麼不能用Web來做,我用Postman給他Call了一下這個API,都不用渲染了,返回出來的json就直接讓Postman崩潰了。但是在WPF的介面上它的體驗非常絲滑。所以說在非常critical的場景下,大家所推崇的這種Web應用不能滿足需求。

從以上經歷大家可以看出,我雖然是一個.NET開發者,但我實際上從事的領域是各式各樣的。.NET開發者可以嘗試在更多的行業領域去實現自己的理想,如果你有希望實現的想法,.NET可以是最好的選擇。雖然我寫程式時間不長,但是我寫過VBA客戶端、Web服務,還做過遊戲,寫過Unity,是AntDesignBlazor的早期貢獻者,我也用.NET寫過前端,現在MAUI差不多已經正式釋出了,.NET現在也可以用來寫移動端。

今天的另外兩位嘉賓都有創業經歷,應該能夠感受到.NET對於創業公司是一個高效開始業務的好選擇。我想鼓勵更多像我一樣可能不是專業程式設計師,但希望透過程式來實現個人理想或價值的朋友,來看一看.NET平臺。

各行各業如何用.NET

黃國石:董彬老師剛才提到了衛星的地面站是直接用.NET開發的。我自己瞭解一些.NET在各行各業的使用情況,這可能在公共平臺能查到的總結資料很少,今天給大家分享一下我的心得。

我算是一個幸運兒,1996年就開始接觸計算機,1999年開始寫程式:BASIC、VB、SP啊,後來到Delphi、PHP、Python等等學了很多,上大學就學C語言,C++之類的。我跟蘇老師差不多,大概是2003年左右接觸到.NET,但我沒有學過.NET。剛才董老師講到,可能原來的語言很難構建一個比較大的應用,我可以說BASIC、VB、SP、 C、C++都相當可以,但是感覺這些語言都很難構建一個很大的系統應用。於是我又去學了Java,然而快畢業的時候發現找不到工作。當時被廣西電網錄用了,要我寫ASP.NET,雖然沒系統學過也陰差陽錯就從ASP一直進到這個ASP.NET來了,進來之後基本上就沒有離開過.NET了。

我做過電網、金融、傳媒,還有網際網路創業,一直到現在的快遞行業,這二十多年的時間轉眼就過去了,我跟著.NET一起成長。我學了這麼多語言,為什麼一直沒離開.NET?在這個背景下,我講講我對國內.NET在企業使用情況的瞭解。

圖片

在南方電網裡,Java和.NET是平分秋色的。因為Web系統變動,.NET變少一些,Java變多了一點;工業是.NET相當低調的一個領域。工業裡面做資料採集,輔助製造,清一色使用Windows系統,使用.NET,這個領域裡很難找到非.NET的應用,.NET佔比可能在95%以上。

很多人聽到醫療就想到雲什麼的,但其實醫療領域大部分系統是不開外網的。醫生開藥方用的電腦的效能會偏高一點,跑的是一些桌面客戶端。我自己觀察過,這類桌面軟體的複雜度很高。很多人都想說,這個桌面軟體能不能換成Web,換成BS結構,在很多地方行得通,但在醫療裡面真的很難。有些自助機慢慢會出現一些Web應用,一些Web做的展示和查詢,還有就是拿這個客戶端,用Cloudflare套一下Web去做一些東西,去連線硬體,例如說讀卡器、印表機、身份證識別等等。大一點的三甲醫院,它一年的資訊化建設投入是過億的。這個行業裡伺服器一般也是Windows驅動,虛擬化用的比較少,所以醫療行業裡基本上也是以.NET為主。

生產行業,也屬於工業,裝置的控制機加工,製造領域.NET佔比還是很高的。因為得益於Windows系統,.NET跟硬體的親和性非常強。幾乎所有外部裝置都有Windows的驅動,Linux的驅動比較少;物聯網領域,比如城市燈光秀、環保、建築資訊、裝置運維等等很多跟硬體比較接近或者直接控制硬體的領域,基本上也都是.NET的。這些領域如果用其它語言開發,一是沒有積累,二是對實時性的要求很高;我所在的中通快遞,有幾百臺自動分揀機,還有非常多的裝置,包括自動分揀、動態秤、快手、狂掃等,這些裝置裡面清一色是Windows+.NET,沒有例外。

金融行業比較特別。量化交易的演算法很多是用.NET寫的,因為要用.NET版本的TensorFlow,不是Python版本的,Python版本跑演算法是可以的,但是跑應用的話還是欠缺。

跨境電商.NET在國內雖然佔比不高,但是在國外是非常流行的,像跨境電商領域對接國外的時候.NET非常受歡迎。我們們國內如果你去外資公司做開發的話,很多都是用.NET的。這兩天我在群裡面看到一位大佬講了一句話,說這些人一直埋怨國內薪資不好,那你為什麼不學一門外語呢?學一門外語薪資可能就開啟了。

政府領域,近些年作業系統和軟體國產化推的比較火熱。最近兩個月有一個朋友,他們國產化了一個資訊收集的專案,我也給了他們一些建議,經過論證,目前所有國產Linux作業系統都是支援.NET的, 6.0、7.0、mono都是很容易裝上去跑起來的。國產作業系統最缺的是桌面軟體,基本可以說.NET是在Linux桌面開發上最好的框架。我們自己也跟進了三年多,確實做的很不錯。去做一些Linux桌面軟體,哪怕一些小工具也是蠻有前途的,不要把目光只盯著網際網路。

對於找工作來說,一些公司決策者對.NET的認知還停留在十幾年前,和Java相比開的薪水少,技術人員鑽研.NET的熱情相對低,形成惡性迴圈。其實只要更新認知,調整合理的薪資水平,就不會缺.NET人才。而對於.NET開發人員而言,只要有能力,就不缺機會。

.NET Conf 2022盛會劃重點

位元熊:今年依然是在12月舉辦了.NET Conf,三位嘉賓都是這次盛會的核心人物,給大家劃個重點吧!

蘇震巍:這次是12月3-4號兩天,主題更豐富了。3號上午是主會場,下午是解決方案,可以具體瞭解用.NET針對不同行業有什麼解決方案。4號更多聚焦在技術層面,主會場有一系列的分享,下午分為三個板塊,.NET在前端, IoT,還有開源。今年我們的主題是開源、安全、賦能。其它的很多語言都出現過非常大的一些bug,或者一些漏洞,.NET目前還沒有。針對這個問題,一方面我們如何主動提高安全的能力,另外一方面也向大家展示.NET 7在安全方面的能力。

黃國石:今年我們增加了IoT的分會場,在工業領域其實有很多很低調的公司,今年我們邀請了上市公司維宏的首席架構師,來講他們在工業控制裡面的一些實踐。邀請了國內比較有名的王強,他自己做了一套非常成熟的系統,寫過相關的書。想告訴大家,.NET在很多領域可以做的很輕鬆很好,特別是在IoT領域。

董彬:我覺得我是跟著.NET Conf一起成長的,從聽眾到主持人,去年的閃電演講,這次是正式演講,這次我希望能夠隆重地把Avalonia UI這項技術介紹給國內的開發者,因為現在隨著國產作業系統的普及,越來越多的國產作業系統桌面軟體的開發要被提上日程,我對比了各個開發技術後覺得Avalonia UI是一個非常適合.NET開發者入門的技術,尤其是針對龍芯這樣一個全新的指定架構的作業系統來說,Avalonia UI有非常好的表現,並且龍芯公司對這個專案是非常支援的。

蘇震巍:我參與到了主會場,負責開源板塊的新內容,比如自動化的測試,影片方面的FFMPG,如何用.NET來玩音影片的處理,以及我們怎樣在.NET上用TensorFlow。另外還有一位不是神秘人物的神秘人物,去年我們邀請了Scott Hanselman來交流,今年是哪一位大咖大家可以到我們峰會的內容裡面去揭秘。

圖片

位元熊有話說

正值DOTNET 20週年和感恩節,位元熊與成為網友已久的幾位專家探討了.NET 7.0版本最新的測試感受和DOTNET “一路走來〞的特別故事。蘇老師應該是新版本國內第一位公開測試者,黃老師提供了許多搜尋不到的.NET應用企業的分析實感,透過.NET演進也里程碑化了董彬老師在這個領域的不斷探索。瞭解了大家的真實經歷,位元熊感受到了一項技術對開發者的能力促進和開發者的熱愛不斷推進的多維度探索。本期故事匯,不止技術選型,行業大觀,經驗暢談,還有.NET領域風采各異的開發者對映出的DOTNET多樣面。希望大家對自己憧憬的事物保有熱愛,也從中汲取養分。

圖片

圖片

掃描位元熊個熊微信二維碼
加入【位元熊粉絲後援會】
與開發者一起嗨聊,期待成為你的好友~
圖片

圖片

點我重溫本次直播~

相關文章