天天看點

.net, java, c/c++ 和錢

.net, java, c/c++ 和錢

最近有一段時間沒有寫部落格了,原因是沒時間,項目需要在短時間内增加一些安全性的支援,為此我花了近兩個月的時間做基礎研究,現在路已經跑通了,稍閑下來,看到園子裡面的一些文章,個人覺得作為一個在軟體開發領域做了多年的工程師有必要說幾句,讓大家少走些彎路。

記得剛開始寫代碼的時候自己也有過糾結的時候,糾結的是如何選擇,.net, java, c/c++我該學哪個,那個時候正式java強勢的時候,好像大家都認為java是萬能的。人都不願意自己的學習投資浪費掉,都想學一個入流的語言,當時的網絡上面也和現在一樣充斥着語言之争,新手好迷茫,因為每個人都說的小有些道理。

如果在今天還有人寫語言之争,我看到最想說的一句話就是:太年輕。

為什麼非要有語言之争呢?你是單細胞麼?主流語言之間根本就不是單選題,隻有都看透了,站在一個相對高的位置才能更好的解決問題,對,沒錯,我說的是主流的語言都值得學習,.net, java, c/c++,python, shell..,因為對于不同的問題,不同的語言可能有其獨特的優勢,寫代碼的本質是解決問題,至于語言,那都是必修課。站在一個高的角度看程式設計語言隻有大同小異,當然在這裡我不是否認不同語言之間的差異,它們之間可能有很大的差異,以至于我們要通過學習去了解他們,但是也不至于說我們要去單選,要有你沒我。

下面小談一下差别:

.net\c# -- 由于是建立在微軟COM之上,确實适合快速開發,寫應用程式,原因是微軟為你做的太多了,舉個例子:

比如最開始C#判斷系統是不是64位最開始的代碼要這樣寫:

1         static bool DoesWin32MethodExist(string moduleName, string methodName)
 2         {
 3             IntPtr moduleHandle = GetModuleHandle(moduleName);
 4             if (moduleHandle == IntPtr.Zero)
 5             {
 6                 return false;
 7             }
 8             return (GetProcAddress(moduleHandle, methodName) != IntPtr.Zero);
 9         }
10         
11         public static bool Is64BitOS()
12         {
13             if (IntPtr.Size == 8)  
14             {
15                 return true;
16             }
17             else  
18             {
19 
20                 bool flag;
21                 return ((DoesWin32MethodExist("kernel32.dll", "IsWow64Process") &&
22                     IsWow64Process(GetCurrentProcess(), out flag)) && flag);
23             }
24         }      

但是在經過.net framework 的封裝之後下面一條語句就搞定了:

Environment.Is64BitOperatingSystem      

微軟讓生活美好多了,但是其内部的實作估計還是大同小異,這樣因為微軟封裝了複雜性,是以可以讓有些工程師可以在不太了解原理的情況向去完成工作,降低了開發難度,提高了開發效率。但是相比于java,.net的跨平台性一直是個雞肋,相信大家在做不同的事情的時候該知道如何選擇了吧。

java -- 文法上和C#大同小異,坊間流傳他們之間有互相借鑒之嫌,但是java的開發門檻相對C#确實少顯複雜,同樣,原因還是因為微軟,微軟的visual studio做了好多髒活,累活,而這些在java開發是可能都要手動去配置,去選擇各種應用伺服器,各種架構,因為經常需要去折騰,是以java工程師可能會知道的設計模式,伺服器配置方面的東西更多些,但是這些東西也都是語言無關的,看透了都一樣。

c\c++語言 -- 在我看來c\c++是相對底層的語言,底層也就意味之自己需要做的事情更多,沒有.net那麼多的封裝,也就是說要求工程師知道的相對更多,我所知道的在windows 上面用c\c++寫系統軟體,驅動的工程師大都也能寫C#,反過來的情況不多。雖然業界鼓吹的java的跨平台性,但是我始終認為一切都是有代價的,為了跨平台,可能好多特性隻能取交集,c\c++寫的代碼隻要做相對小的移植,跨平台性也不難做到,當然我的前提是你知道自己在做什麼。另外,還有一點不得不提的是用C#和java寫的代碼在安全性方面确實比寫c\c++更容易,現在我看好多人寫的c++代碼,我特想去問一句, 你×××知道自己在幹什麼嗎,别人随便寫幾行代碼就得到你軟體的控制權了,太可怕了,小夥伴們。

下面說說程式設計語言和錢的關系

我從來都不認為這是個絕對的關系,好多時候你能拿多少錢不是你的代碼能力決定的,其他好多的軟實力往往起着決定性的作用。比如語言,英語好的朋友即使技術一般也很容易找到高工資的工作,再比如,資料庫,AD,OS,算法,設計模式,UML,這些軟實力在特定的位置上拿高工資是很常見的事情,是以說你賺多少錢完全展現的是一個綜合實力,某個單項隻能加分,全面發展才是王道。

結論

高處不勝寒,學就是了,何必去管紛争..

繼續閱讀