學 C# 的是不是被綁在 Windows 上?

我想用 MacBook 寫點東西,但就需要裝 Windows,雖然有 mono 之類東西,但覺得沒有 VS 好用,而且真正中文,微軟東西始終用微軟自己工具是最好的,比如 Office,就連 C# 也是搭配 SQL Server 的工作多。

如果我不是學 C#,也許就沒有這個煩惱,我不是說 Windows 不好,只是當我用其他系統時候,就只能裝虛擬機使用 C#,不像 Java C C++ 等等之類語言那麼方便。

就為了一個筆記本(我在糾結 Thinkpad X1 Carbon 跟 MacBook Air 的選擇),我有必要轉向其他語言嗎?還是繼續學下去?


這不是一個語言和平台的問題。這是一個「決策」問題。決策問題的核心在於找到「恆定量」,以此決定變數。提問者的恆定量是什麼?

如果提問者的機器要用在開發某個項目中,而且用戶已經定下來,用戶的方案也定下來,那麼目標用戶和平台就成為恆定量。如果提問者只是泛泛的想要做開發,那麼目標用戶就是變數。如果提問者醉心於 C#,那麼 C# 就是恆定量。如果提問者對 C# 感情一般,而是在考慮整體不錯的系統,而且目標用戶也沒有固定,那麼選自己喜歡的系統,以此來決定語言和目標用戶也未嘗不可。

那些以自己「日常用 C#」基礎的答案,還沒搞清楚,提問者根本沒有像你們一樣把 C# 看成絕對的恆定量。那些說「MacBook Air 是否適合」的答案,也是幫助提問者判斷其它的恆定量,但是如果提問者就把 Air 作為最恆定量,以此來決定其它東西,也沒有什麼不對(畢竟,對於白紙一張的學生,Air 和非 Air 做開發在目標用戶,語言選擇上來說都沒有什麼絕對的劣勢和優勢)。

感情這東西,還得自己說了算。就算你五年之後覺得一個人是仇人,現在也依然是真愛。


理論上說,不可能因為你學習一個什麼編程語言就被綁定在什麼平台上,語言尚不可能綁定,又怎麼會因為語言而綁定在某個平台上呢?你也可以學習別的語言嘛。

其次,C#如果不涉及P/Invoke,不涉及UI,僅僅是Console和Service,其實代碼的可移植性並不差,話說回來其實沒有什麼語言的可移植性真的可以做到什麼隨便瞎寫,一次編譯到處運行的。

更何況,C#是編譯成中間語言的,只要目標平台有運行時,都是可以跑的。

我寫的東西,什麼Emit都用上了,也從來沒在Linux下玩過,別人把我的DLL拿到Linux下去跑(Mono)照樣沒問題(別人告訴偶的,偶自己還沒試)。


.NET現在能在Linux和Mac OS X系統上運行了

轉自微信公眾號:InfoQ

.NET Core運行時已經看到了實現真正的跨平台的美好前景,它最終出現在Linux和Mac OS X平台上。在上周舉辦的Microsoft Build大會上,來自微軟的項目經理Habib Heydarian為聽眾分析了這一舉措對開發者們所帶來的益處,並告訴開發者們如何開始探索這些新的機會。在名為「讓.NET實現跨平台」的一場講座中,Heydarian首先介紹了開發者如何進行一次全新的.NET Core安裝。

首先,所有的.NET代碼都包含在一個單獨的文件夾中,而無需將它安裝在某個系統級別的位置。這樣,只要願意,每個.NET應用都可以使用一個完全不同的編譯版本。並且在Windows系統上進行編譯的代碼也能夠在Mac OS X和Linux系統上運行。

要在以上系統中運行一個基於命令行的標準HelloWorld程序,可使用以下方式:

./corerun HelloWorld.exe

// corereun是一個原生的運行app的環境

// 在Windows上,引導.NET應用的功能已經內建於操作系統中了

在非Windows平台上使用.NET,就意味著開發者們能夠使用http://ASP.NET 5、CoreCLR,並且從以下共享的功能中受益了:

1,運行時組件

a,64位的JIT編譯器與SIMD指令

b,垃圾回收器

2,類庫

a,基礎類庫

b,NuGet包

3,編譯器

a,.NET編譯器平台(Roslyn)

如何獲取.NET Core

對於Mac OS X開發者來說,推薦的方式是使用Homebrew以獲取必要的組件。當安裝好Homebrew之後,就可以通過以下命令獲取.NET組件了:

brew tap aspnet/dnx

brew update

brew install dnvm

dnx . kestrel

Linux用戶可以從該項目的網站上下載一個包含了所有必要組件的TAR文件,隨後按照以下方式進行安裝:

tar zxvf PartsUnlimited-demo-app-linux.tar.gz -C ~/

source ~/.dnx/dnvm/dnvm.sh

dnvm use 1.0.0-beta5-11624 -r coreclr -arch x64

dnx . kestrel

你一定注意到了一點,在這個兩個平台上所運行的最後一條指令都是kestrel的執行。Kestrel也正是「跨平台的http://ASP.NET 5 web伺服器」,DNVM則是.NET的版本管理器。目前,該項目只支持64位平台的Linux和Mac OS X。開發團隊仍然在繼續研究如何讓它支持32位的系統。

緊隨Linux和Mac OS X之後,對FreeBSD的支持最近也加入到該項目中。對於這三個平台來說,目前還存在著一個限制,那就是從源代碼編譯.NET Core的功能僅限於Windows版本。要從源代碼編譯.NET,開發者需要首先編譯CoreCLR,然後再編譯CoreFX。

正如Windows平台上的.NET開發者能夠利用平台調用(PInvoke)功能一樣,Linux平台上的開發者也能夠使用DLL Import這一命令:

[DllImport(「libc」)]

private static extern int printf(string format);

Printf(「Hello, //BUILD 2015!
」);

下一步計劃

Heydarian在演講餘下的部分談到了該團隊下一步的計劃,以及微軟對這一項目的目標。隨著Visual Studio不斷地擴展到非Windows的平台上,微軟希望能夠改進在這些新環境中的調試功能。對於VS2015來說,就是要實現遠程調試。而對於VS Code來說,首先要從實現本地調試開始。

另一個改進的方向是整體的上線預備。為了在這方面有所突破,團隊打算整合MSBuild的支持,並消除目前對Mono在這方面功能的依賴。

Heydarian表示,當.NET在Linux和Mac OS X平台上正式發布,並成為「RTM」版本之後,微軟將做出以下正式的承諾:

1,.NET Core應用能夠在基於Linux的生產環境中運行,包括Docker、本地部署和雲端部署

2,開發者可以使用VS Code或其它任何喜愛的編輯器,對運行在Mac OS X環境中的.NET代碼進行編輯、編譯與調試

3,全部使用無關平台特性創建的應用在Windows與其它平台上具有相同的行為

4,.NET Core將把現有.NET雲端生態系統的類庫也帶到Linux上

5,微軟對.NET在Linux上的支持、服務和維護與其它微軟產品一視同仁

在你的應用中加入對Linux和Mac OS X的支持

微軟將推出一套API可移植性工具,用於對現有的代碼進行分析,找出所需的程序集和目標平台。目前為止,唯一對兼容性進行了測試的Linux分發平台是Ubuntu 14.04.2 LTS。雖然沒有明確地表示不支持其它的Linux分發平台,但無法保證在這些平台上是否能夠正常運行。

Heydarian認為目前來看,微軟所提供的.NET與Mono版本相比,所針對的市場方向並不相同。Haydarian表示:「……雖然[Mono]在移動場合的表現優秀,但它並不是為伺服器或雲端生產環境的使用場景而設計的……」,而.NET Core傾向於在具有高吞吐量、高伸縮性,以及更高的修復前平均時間(MTTF)的伺服器環境中所使用。

希望通過.NET即將提供的功能,從跨平台方式中受益的開發者可以首先從VS2015RC中的http://ASP.NET 5項目模板開始打造及測試應用,並且參考GitHub上的http://ASP.NET示例應用Parts Unlimited。凡是能夠在Windows上的http://ASP.NET 5中成功運行的應用,一旦等到.NET Core RTM之後,就能夠無縫地遷移至Linux平台上。


有mono,你也知道有,自己不用是自己作。沒人可以把你綁在某一門技術上面,除了你自己,你學C#你用C#,假如C#突然從世界上消失了,你掌握的東西也能很快變到其他平台,不行的話我也不知道你到底C#學得怎麼樣。我用Mac系統5年了,.NET照樣搞的很開心很放心,不理解哪有那麼糾結。真糾結的話就去學其他技術咯,我不介意任何人學或不學任何技術。


1) 學了簡體中文被綁死在了大陸怎麼辦?

2) 是不是以後走出大陸了就再也不使用簡體中文了?


不會啦,你聽說過Mono嗎,我在OSX上開發的的,準備在iOS上運行的迷你遊戲是用Unity3D和C#腳本。


Visual Studio 2015 RC


具體項目你說了不算,按客戶要求來

如果泛泛而談,是的,就是綁定Windows平台,有利有弊,取決於你的職業規劃.從理論來說C#也是跨平台的,但是實際上來說所謂跨平台不值一提.

諸如此類的選擇實際什麼操作系統不重要,重要的是你綁定了生態環境, java有java的生態環境,objective-c也有其生態環境.


VS 依賴症 不治也罷。

你越依賴一種工具 你越知道這種工具的精妙之處,讓你在其他環境也能選擇High way 而不是守拙

至於離開了幹不了活 只是舒適區里的人在嚇害怕 以及舒適區外的人瞎咋呼。

所謂記事本編程、命令行鏈接編譯、技術含量頗低,是個IT活兒,不是編程活兒,不配當成一回事兒。


個人覺得,學習開發語言沒有什麼站哪個隊分哪個派一說,學習某種語言,要了解使用語言的目的是想做什麼?想解決什麼樣的問題?更重要的是積累自己利用機器語言的能力,試著掌握程序思想,試著更有想法的解決業務問題,建議樓主通過VS學習開發,可以選擇MacBook安裝Win。


是的,所以核心業務我一般傾向於使用跨平台更好的語言,例如 C ,或者一些動態語言。

在各個平台的界面上使用原生語言可能更好,因此可以把界面部分獨立出來,微軟平台用 C#,Android 用 Java,蘋果用 objC。——他們都可以調用 C 語言編寫的庫,所以核心邏輯用 C 實現基礎庫沒有問題。

遊戲的話也有很多使用類似的模式,用 C++ 結合 OpenGL/ES 來繪製,這樣在各個平台基本都能用,然後具體再加上少量平台自身的代碼。

對於樓主的糾結,我的建議是:不要試圖使用 C# 這種平台鎖定類語言實現你的核心邏輯,把他們的用途僅僅限制在實現界面上就好了。這類語言都不適合成為你的主打語言。

無論是用什麼操作系統,學 C / C++ / Java / Python / html / lisp 這些語言總是不會錯的。


綁在Windows上挺好的丫,起碼有宇宙第一IDE的VS用。

但是Windows沒有綁定你呀,你要離開他去別的地方,它也不會怎麼樣你呀~就像你學了一堆馬哲毛概鄧論,也可以去資本主義世界旅遊呀,不一定就只准你去東朝鮮呀


C#是死的,人是活的


像我一樣日常工作以C#為主,還是建議你別用mac了,裝win7 散熱不好,用os由沒法工作。

還好我現在沒煩惱了,因為我的mac pro 被人偷了!


樓上說得好,「你為什麼不糾結一下學OC還被綁在蘋果上呢?」 OC會把你死死地綁在蘋果上。

那關鍵是什麼?前途?還是錢途?

我覺得大多數人考慮的還是錢途。

如果你是一個在乎錢途的人,那你盡可以去選擇最賺錢的東西,語言轉換的成本我覺得是遠低於未來的收益的,例如換成 iOS 開發,工資翻翻啊。將來不賺錢了怎麼辦?再換啊!~

如果你是一個在乎前途的人,那就選擇你最愛的東西,工作的快樂才最重要,能不能賺錢看的是人,而不是語言。每種語言都有用武之地,做好了都能掙錢。

所以對於樓主的疑惑,我的答案就很簡單了。從錢途看,C#肯定不是最賺錢的;從前途看,樓主發自內心地不喜歡他,那有何必選擇他呢?

就因為你以前學的是 C#?不要拘泥於以前學的,一個好的開發,幾個月就可以把一門新語言學到和母語差不多的水平了。


即使被綁(實際上不是),你還是學到了東西,做成了事情,又有什麼要緊?


Umm, Xamarin?


大家的回答為何都集中在語言上? 難道沒發現鹵煮是被Visual Studio綁架了么。

是的, VS也綁架了我很多年。在用過各種IDE(非Editor)後,我認為VS作為IDE之王當之無愧。這不是習慣的問題,而是在性能、智能感知、調試、集中化管理等各維度比較後的必然的結果(題外話:我在試用了十來個Python IDE後悲劇的發現:最方便好用的竟然是VS),大家如果感覺詫異,可以找個VS2010試一試後再噴。

我很贊同@馮東 提到的恆定量。不過每個時期的恆定量是不同的,隨著歲月流逝、經驗增長、智慧的積累會讓這個恆定量不斷遷移。不過古人云:你選擇了平台,就應該用這個平台最好的工具和語言;你選擇了方向,就應該學習它的思想和方法論;如果你同時選擇了平台和方向,就應該潛心磨礪個幾年,那時你在建造自己的世界。

@pansz 兄給出的語言架構實踐,復用度高,可以把跨平台的風險降到很低的程度。這一點在移動平台開發公司得到了非常多的驗證。但考慮@pansz 深厚的黑客氣場, 我覺得不是每個人都可以遊刃有餘。另一方面,這種結構也不是平台最優的選擇,所以若你要做的事是往這個平台第一的目標去努力, 還是就用這個平台最好的語言和工具

言而總之,幾位老大們的答案,已經是站在了Level 3 的視角給出建議。如果樓主的經驗和資歷不甚豐富,建議選一家靠譜的公司, 在一個平台上好好耕耘,也許幾年後會有更大的收穫。畢竟,微軟沒那麼早死,C#在企業市場還會繼續發光發熱;而蘋果安卓之於移動平台、Linux之於互聯網,更是在滋潤的生長。


rainflying@rainflying-mbp ~ % brew search "mono"

libmonome mono monotone


不是綁不綁在windows上的問題,是你以後到底是想去做什麼。

即使你選擇了彙編這種東西,你不還是可能被綁架到各種CPU上去。

另外說下你提到的那款Thinkpad根本不適合碼農。


推薦閱讀:

微軟的vczh完全可以去谷歌做GOLANG,為什麼會留在微軟?
想要以後為 HoloLens 開發應用的話,現在應該預備哪些知識?
如何看待google,firefox,microsoft等公司的刪除賬號功能?
使用1000元左右及以下的Win 8平板是怎樣一番感受?
如何擺脫對Visual Studio的依賴?

TAG:微軟Microsoft | 編程語言 | 編程 | 筆記本電腦 | NET |