學生開發者對於微軟技術的反饋

1  C#的認識

C#作爲一個通用開發語言,基本上是每個學校必學的內容。但是C#基本上感覺越來越被擠佔生存空間,學的人越來越少。隨着java再次熱門,以及國內大型企業,紛紛棄用C#,選用Java,因爲Java多線程高併發與負載均衡的原因。我感覺主要原因是C#資料少,高手也少,進而大型公司不用C#,之後造成了惡性循環。

1.1  C#的劣勢

JAVA的學習資料多。
java本身先出來,而且一堆開源程序員爲其做貢獻,普及率高舊有的開源項目基本上全部都是java的。很多有代表性的書目都是以java爲介紹語言,算法比賽也是以java爲主。
國內C#中文資料少。
國內C#的書目比較少,尤其編譯方面的書目,除了微軟出的和那基本經典的,基本都是老師出的猴版垃圾書;可以檢索的bug也少,基本上都是在國外。
C#的學習之路給我感覺入手比較容易,但學下去,涉及編譯等等,就只能依靠國外資料了,它的英語需求比java要求高。
C#高手不夠
各大互聯網公司棄用C#的原因是Java多線程高併發與負載均衡。但我想C#和java一直在激烈的競爭,C#應該也有相應的技術來解決問題。但在java在中國如此火爆的情況下,根本招募不到足夠的C#高階程序員來解決網站的問題。就以我們學校java校招時上百個java來應聘,招.net時候,就10多個去應聘,招到一個c#學的較好的大學生都不太容易了。
Java的跨平臺性
學習java的同學往往在吐槽c#的同學這個部分。關於Xamarin,我前年學習了一些,去年5月再次學習一些,但當年安裝困難,bug如山,官網有實例也有bug。最後從unity3d感覺比xamarin好用的多,美觀又發佈調試都方便。之後就不用Xamarin了。
我感覺以後可以多宣傳一下這個unity3d來跨平臺。當時我發佈unity3d到ubuntu上感覺極度震撼。

1.2  C#的優勢

C#也有自己的優勢,首先它比java後出來,本身就會吸取一些java不足。我感覺C#是自動化程度很高的虎式坦克,而java是t34坦克。虎式坦克臃腫但人機工程很好,自動化程度高,但一單出了bug就完蛋了(在此吐槽vs2015一些bug,最後只能繞過去,好在換了vs2017。T34簡便輕量,可以方便魔改,也許裝完插件會很厲害。
個人認爲C#對於java的優勢就是unity3d和azure服務器。
中間語言
中間語言的設計比java虛擬機更加高效,而且mono c#這個項目正把中間語言編譯成其他平臺的語言,來實現跨平臺。
Mono C#
Mono C#開始於2011,旨在C#開源和跨平臺。Unity3d遊戲開發使用mono c#來進行開發遊戲和跨平臺。使得C#的跨平臺性對C#編程者提高很多。
C#的工具家族
C#的編程ide帶來的寫代碼的方便性,自動更正自動補全給編程帶來了方便。Visual Studio和Azure,Visual Studio Team Services,Nuget應該構成一個完整的編程體系。唯一的遺憾時Visual Studio Team Services速度比較慢。
C#的快速性
C#的窗體家族在編程速度上非常迅速,在編寫window中小型程序時速度非常快,比如遊戲啓動器,mod修改器等。
Linq和實體框架集等一些特性也使得編程簡便和速度。
C#的快速開發也很適合構建功能的原型,爲硬件服務。
Windows IOT
Windows IOT以node.js和C#作爲編程語言,但遺憾的是好像沒有什麼機器人框架,現在機器人教育應用很火。而linux上的ros機器人系統學習成本非常昂貴,時間也很長,基礎要求也很高。

1.3  C#的感悟

隨着我對C#的學習,我感覺C#的分離越來越嚴重,感覺企業級開發和基礎開發感覺分離感越來越嚴重了。平時自己寫着玩是一套方法,參與團隊開發又是一套。舊的寫法是一套,linq和lamd表達式,委託,接口又是一套,感覺很是混亂。
感覺是不是用linq和lamd表達式等後期特性,結合python的一些簡潔特性推出C#的下一代語言,或者對C#二次封裝,進行快捷開發。原本C#過多的參考了java和c++的特性。現在完全可以拋棄他們。

2  C#之路總結

我對於我的C#學習之路做了一些規劃,分了一些級別。
第一級別,windows平臺和網頁平臺的窗體開發,還有Azure,unity3d,xamarin,bot.framework的簡易使用。
第二級別,js,jQuery,ajax,asp.pager三層結構的開發。
第三級別,mvc +LINQ +ef開發,並學一些C#編譯的書目。
第四級別,C#多線程高併發與負載均衡,以及C#編譯的書目。
第五級別,mono C#那種大型開源項目的參與者,貢獻者

3  Visual Studio

Visual Studio2017比以前好很多,可以下載安卓sdk,以及安裝卸載變得方便。
Visual Studio有很多魔法的自動化工具,尤其15以後(15bug很多),但是很多C#程序員不知道,也不想使用,自然學生們也很難瞭解到。Visual Studio和Azure,Visual Studio Team Services,Nuget應該構成一個完整的編程體系。但在學校教學中使用着古老的2010版本,教着拖拉窗體。
由於Visual Studio過於龐大,感覺應該有個window Visual Studio版系統,來更好的管理開發工具,維護開發環境和空間。

Visual Studio2017有兩個bug。

一個是vs自帶的sql2016的264M大小數據庫,它默認是英文字符集,中文亂碼,每次新建數據庫前都要改一下字符集。而且導出所有腳本和數據這個常用功能沒有。

參考https://www.cnblogs.com/susuzhao/articles/3747968.html

另一個是unity3d的安裝,它不是最新版,而且僅僅是一個簡易版,這個很正常不是bug。但如果你用它安裝unity3d,發現不是最新版,卸載了它,安裝了最新版。下次你用Visual Studio Installer它會試圖把你的新版unity3d卸載了,然後重置成舊版本。所以這個地方最好只點Visual Studio Tool for unity工具。


4  monoC#

在Xamarin中,我好久沒用了,也不知現在它如何了,主要是c盤裝不下了。

在unity3d中,很多C#的窗體系列類,第三方提供的類因爲涉及使用了window api等原因無法跨平臺發佈。

我很希望窗體系列可以跨平臺,或者unity3d裏有一個可以搭建管理系統的高效的框架來快速開發這樣可以少寫好多代碼。

Untiy3d中使用post無法訪問到微軟必應服務,安全證書出錯。可以訪問百度的,國外傳說這是個許多年的問題了,因爲mono項目。可以使用unity封裝的WWW類和UnityWebRequest類代替傳統的C# POST方法。

Bug鏈接https://blog.csdn.net/fengmao31/article/details/79611900

5  Azure服務器

Azure服務器界面比其他服務器美觀,易學習,流量也很多,很好用。

但是它和luis和其他的程序無法被安卓訪問,但神奇的又可以被unity3d發佈的移動端程序訪問到。

如果想被安卓訪問,必須新建MobileApp Service。但我擔心用這個來轉發音頻流會不會延遲嚴重。像luis這些服務感覺應該直接讓安卓訪問到比較好。

安卓訪問部署在App Service上的web api和luis程序是根本返回空的。我發佈的是get的api服務,它返回的值和post方式請求get的返回值一樣(luis也是)。

azure django 在azure上基本失敗,flask正常。(只有c#是親兒子估計)

6 總結

我個人不是很喜歡編寫代碼量很多的程序,所以很喜歡自動化程度較高的C#,也希望它越來越好,我也越來越方便。我喜歡用C#來編寫簡易的windows和網頁程序來方便生活。或者使用untiy3d來編寫有服務硬件和娛樂自己。

我逐漸趨於使用python。當我再學習半年C#在快速建站的魔法後,應該轉型到python搞opencv和chatbot。Python簡潔,開源項目較多。我會使用C#來開發應用輔助我的生活和學習。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章