不要困在本身建造的盒子裏——寫給.NET程序員(附精彩評論)

此文章的主旨是但願過於專一.NET程序員在作好工做、寫好.NET程序的同時,能分撥出一點時間接觸一下.NET以外的東西(例如10%-20%的時間),而不是鼓動你們什麼都去學最後什麼都學不精,更不是說.NET不行或勸你們放棄.NET。恕我愚鈍,此主旨在文中表達不夠清楚,看評論中不少朋友誤解了,特此說明。php

  另外,本文中的觀點並不所有是我我的的想法,至關一部分來自我之前聊過天的某些大牛,他們不少來自微軟、百度、騰訊等知名企業,而且不少已經成爲技術骨幹,我曾經從他們那裏受益不淺,因而我把他們的指教結合自身的經驗和理解寫成此文。這就是此文的來源。html

-----------------------------------------華麗的分割線-----------------------------------------前端

  在給這篇文章起標題的時候,我斟酌了好久,由於我我的是反對使用「.NET程序員」、「C++程序員」或「PHP程序員」這類簡單粗暴的方式爲程序員作劃分的。可是客觀確實存在一個現象,就是不少程序員會爲本身設置一個無形的界限,將本身與某種語言或平臺硬綁定到一塊兒,例如我這裏所指的「.NET程序員」。請注意這與「術業有專攻」是不一樣概念的,有本身專攻的平臺或領域這很正常,可是有不少人偏執地將本身與某個語言或平臺牢牢捆綁,而忘記了本身首先是一名程序員,而後才使用某種語言,他們偏執於平臺並陶醉於本身創建的盒子裏,而不肯主動去接觸一些盒子外的事物,最終使得本身沒法進步。java

  從我我的的觀點看,本文中「.NET程序員」是指具備以下特色的程序員羣體:python

  • 學習、工做的技術範圍均侷限於.NET平臺及衍生,對.NET以外的技術沒有主動接觸或學習的慾望。
  • 不斷學習各類.NET平臺上的庫或框架,如ADO.NET,ASP.NET MVC,WPF,Silverlight,WCF,WP,EF,NHibernate……
  • 工做沒法脫離Visual Studio,習慣於圖形化的工做環境。
  • 時常抱怨微軟的技術更新太快,微軟開發平臺包辦太多以致於本身身價貶值。
  • 對面向對象、設計模式、軟件架構等東西具備極大的熱情,寧肯花大量時間編造各類「設計模式小故事」也不肯花點時間瞭解一點新鮮的東西(如Unix下的IPC)。
  • 對Java很有微詞,以爲C我根本用不到,至於PHP?它能作到的.NET都能作到,認爲用Linux的大多在裝逼,而Lisp、Lua、Eiffel神馬的都是浮雲,我管它們幹什麼。
  • 認爲面嚮對象語言就是程序設計語言的代名詞,命令式編程深刻骨髓,不太瞭解函數式語言或契約式語言是什麼。
  • 用.NET不少年了,但感受本身沒什麼突破,沒什麼進步,整天就搞些增刪改查的勞什子。
  • 常常討論或思考.NET或Java或C或其它語言哪一個好,搞哪一個更掙錢這種問題。

  若是您有超過3項符合上述特徵,我想咱們能夠聊一聊,由於據個人觀察,感受博客園上這類朋友仍是挺多的。mysql

  但願我能作到旁觀者清

  有一個事實我想先和你們澄清一下,其實.NET只是個人業餘愛好。因爲博客園主要偏重於.NET平臺,且園子裏的朋友對面向對象、架構之類的頗感興趣,因此我寫了不少關於.NET及架構方面的文章(若是您注意觀察,會發現我博客裏這類文章正減小並趨於消失),其實相對於設計、架構這類東西,我我的更感興趣的是具體的科學與技術,例如各類編程語言的原理、應用及實現擴展,操做系統原理,網絡編程,通訊協議,算法與數據結構,數據挖掘,機器學習,分佈式等等;語言方面我比較喜歡的是PHP、Python、Lisp等;而編程方面我更推崇Unix下的編程哲學和編程方法;我愛vim賽過VS無數倍。linux

  所以,.NET和C#我一直是做爲業餘愛好來發展的,但願這沒有讓任何人以爲沮喪。不少朋友加我QQ或MSN問我關於.NET的問題,我常常答不上來,不少人或許以爲我不近人情,但我實際上是真的答不上來。例如我在博客中寫過一系列關於ASP.NET MVC的文章,不少人是衝那系列文章加個人,可是其實ASP.Net MVC我只在beta版時擺弄過兩個星期,而後就再也沒有碰過,因此後來不少朋友問我想關問題我是真的答不上來。c++

  因此,在博客園這個以.NET和架構之類爲主的社區,我算是半個旁觀者吧,我看到園子裏不少朋友都把本身禁錮在本身創造的盒子裏,因此我但願以旁觀者的身份,給這些朋友提幾個建議。git

  每半年接觸並學習一門語言

  有許多人一般以爲只要把一門語言學會學精就行,這個想法我以爲對了一半。一個程序員應該有一門精通的語言,可是還要不斷學習新的語言(固然不能太頻繁),倒不是爲了以防哪天萬一用到這門語言,而是接觸學習不一樣的語言會拓展程序員的視野。程序員

  若是你一直用C#,試試Lisp,你會驚歎於還有這樣寫程序的方式,嗯?看來我得去學學Lamda演算;試試Python,你會驚訝於還有如此小巧優美的東西;試試Lua,你會發現原來語言還能嵌入其它語言,要不要爲WOW寫個外掛試試?試試Eiffel,你會發現還有契約式編程這種方法,嗯?什麼?Java上有iContract,那我要不要爲.NET實現一個?隨着這種學習過程,你的思惟天然就被拓展開了,而不是滿腦子的Class、Object、MVC、OO……

  其實學習語言不必定是學習沒據說過的,許多您聽到耳朵長繭卻歷來沒有深刻學習的「老朋友」,如C、PHP,若是您細心學下來,也會獲得許多意外的收穫。

  例如在學C的過程當中,你會發現不可能脫離Unix環境而把C學好,你會接觸POSIX和System V,你會主動深刻學習進程、線程、信號、I/O、IPC,你會接觸TCP/IP協議。你會發現要學好C還要理解計算機組成原理,你還會發現原來還有大小端這個東西。

  深刻學習PHP,你會發現PHP遠不只僅是一個作Web的腳本語言那麼簡單,你會了解到它SAPI、PHP Compiler和Zend Engine的優美結構,你會發現有opcode,你會發現PHP渾身都是擴展點,你能夠擴展功能,擴展Compiler和Zend Engine,甚至能夠徹底實現本身的編譯和運行邏輯。你會了解APC是如何緩存opcode,APD是如何跟蹤PHP的運行。

  每次學習一門語言,你會發現這不是一門語言,而是一個嶄新的新大陸,裏面有太多讓人興奮和新奇的東西,而若是你執意禁錮在「.NET盒子」裏,你就永遠不會知道這些。

  主動突破本身 接受更多挑戰

  若是什麼東西都是用到才學,代碼都是有用才寫,那我只能很是抱歉的說你還不是個程序員,而只是個代碼工人。程序員應該有主動出擊的意識,應該對本身未接觸的領域有無限嚮往。幸運的是,互聯網上的財富實在太多了,你應該盡其所能去接觸學習未知的東西,而不要總想我學習這個東西能不能換來錢給孩子買尿布和奶粉。你能夠有不少藉口,可是我想說,藉口想找老是有的,時間想找也老是有的,仍是看本身到底要什麼。不要一邊躺在盒子裏一邊又抱怨本身沒有進步。

  例如Google Publication,這裏有世界最優秀的Google工程師們理論和實踐的總結,來讀讀這些偉大的論文吧,看看這個偉大的公司和一羣偉大的人都幹了些什麼,瞭解一下Map Reduce是怎麼回事,若是瞭解了你天然想去試試Hadoop,還有Bigtable和GFS,哦!太震撼了,原來存儲數據也有這麼多講究,不是放硬盤裏或經過Insert插入數據庫就好了。也許這些英文論文讀起來很困難,可是我想一週一篇的要求並不高(我如今仍然保持着一週讀兩篇論文的習慣)。要知道,最新、最嚴謹的東西都在論文裏,若是你只是經過書本或社區學習,那麼你永遠不會知道今天在計算機科學與技術的領域又發生了哪些使人震撼的事情,出現了哪些新奇的東西。

  不要太懶惰,你寫增刪改查寫累了嗎?Come on!有沒有想過本身寫一個小型的httpd?固然你須要先去學習HTTP協議(rfc2612),試試能不能寫一個PHP的SAPI擴展令你的httpd處理PHP腳本。有沒有想過本身用lex和yacc實現一個本身的小語言,也不是徹底沒用,也許你已經對你的領域業務邏輯爛熟於胸,那麼去實現一個本身的領域語言吧。啊!我要去學習編譯原理、形式語言與自動機……咦,這東西還挺有意思的,去看看計算理論去……若是到了這裏,你已經開始接觸計算機的數學本質了,而你的層次將會獲得昇華。

  學習就是這樣,主動突破本身,給本身一些挑戰性的任務,生活纔有趣。整天困在.NET的盒子裏,咱們還有臉稱本身爲程序員嗎?

  脫離IDE 玩玩純文本與shell

  從沒用過IDE的程序員多是悲劇,但從沒脫離過IDE的程序員絕對是悲劇!

  你有沒有以爲本身愈來愈不像個「編程序」的而愈來愈像「堆程序」的。好的,即便在工做時你離不開IDE,那麼業餘時間讓你的IDE滾蛋,等等,你改用Notepad?氣死我了你!試試vimEmacs,體驗一下用純文本寫程序,用gcc編譯鏈接的樂趣。你會發現「yyp」比「選中一行,Ctrl+C,點擊下一行起始位置,Ctrl+V」簡單的多,你會發現按一下「0」比按20次「左箭頭」省事的多。等源程序多了,也許你會想去學習Makefile的寫法。你會莫名其妙地發現本身更懂編譯和鏈接過程了。

  相信我,用純文本和shell寫程序比用IDE酷多了,想吸引女孩子嗎?你去問問大家班或大家公司最漂亮的女生,她也會這麼想。重要的是,這種酷不是「裝B」的酷,而是有效率的酷。什麼?你已經受不了IDE了……

  接受更多的編程哲學與學習方式

  注意我是用的「接受」而不是用「改變」,你不須要改變什麼,寫.NET程序很好,不過你能夠適當吸收一下其它領域的編程哲學與學習方式。能夠說Windows(特別是.NET)程序員和Unix程序員思考問題的方式大不相同,若是如今須要一輛汽車,Windows程序員會創建一個從冶鐵到裝配的「All in one」汽車製造基地;而Unix程序員會去分別創建採礦場、冶鐵廠、設計公司、材料製造廠、機械製造廠和裝配廠。我不想討論他們各自的優缺點(由於很容易陷入無謂的宗教紛爭),可是對於你來講,瞭解一些其它的編程哲學對你沒有壞處。

  另外就是學習方式,例如你要學習PHP,請千萬不要去書店購買各類《21天精通PHP》或《PHP編程寶典》,你應該首先打開Google,找到PHP官網,而後去官方文檔哪裏尋找學習資源。網上還有各類wiki,mailing lists和社區,請不要放棄這些資源。而後同時你能夠去Amazon看書評,而後當心而謹慎地選擇一本相關的書籍(影印版最優,翻譯版其次)。

  一我的想突破本身不容易,關鍵在於本身有沒有突破的意願。衷心但願有一天,您的腦中再也不被ASP.NET,ASP.NET MVC,WCF,WPF,ADO.NET,Silverlight,EF……而佔滿,若是到了那一天,你會發現,咦?!我.NET的水平也大幅提高了!

-----------------------------------------華麗的分割線-----------------------------------------

  【精彩評論】

  Jacky Song:真正的程序員確定不會限定在.net平臺,程序員就是爲了解放生產力,提升工做效率而生的,其實除.net之外,還有其餘很好玩的技術或工具,好比你所說的編輯器之神vim,不管是windows平臺仍是Linux平臺,都是其它編輯器沒法比擬的(誰用誰知道)。腳本的話python, php, 以及各平臺的shell, 這些都是能夠大大的提升工做效率。總之,計算機就是一門藝術,越往裏面研究越以爲它是劃時代的奇蹟,這玩意太神奇了!!

  toEverybody:我認爲改變一下公司的技術會眼界很寬,如學C#, 再學一下Delphi, 再瞭解一下C++, 再瞭解一下PHP.....

  微生物:其實本質上仍是要問這樣一個問題,你真的是一個合格的程序員嗎?你真的打算一直作程序員嗎?

  FlyDragon:思想的認識昇華到你這個層次須要時間和好的引導。真正埋頭於技術,而不參與社區交流的人很難走出本身的瓶頸!

  朝_夕:博主的觀點正好描述了我目前的狀態,做爲一個以.net 技術來混煩吃的技術人員來講,當我掌握的.net 技術越高深,在工做中體現的價值就越大,得到的報酬就越多,使我不得不專一於.net 的技術;但微軟的技術更新得那麼快、那麼多,對於我這個資質比較普通的腦殼來講,實在是有心無力……目前趁着工做任務比較少,學習了下python, 和用下Linux,釋放下滿腦都是.net的大腦。

  JaiHo:很高興我已經和VS無關了,曾經一次裝VS快一個小時後,我就再也不用了,之前用VS學C++和C,後來發現不少問題,就用gcc編譯器了。我已經脫離IDE了,工做以來還未用IDE,感受純文本編譯器vim很好。

  llzhzhbb:固執於一個平臺和刻意使用多個平臺其實本質上沒差異,都是認爲鐮刀的意義大於麥子。

  午後的小睡:相比微軟,當蘋果程序員吧。蘋果對框架的推出和更改很是謹慎,修改語法更是謹慎,因此蘋果的系統基本上都是增添API,不會像.net那樣,微軟今天一個框架,明天又一個,沒完沒了的往C#裏添加各類語言特性,讓你把原本應該學習先進的開發算法和方法的時間全浪費在語言和框架的鑽研裏了。

   hogface:技術眼界不斷的擴張是必須的,我卻是認爲咱們作技術的不該該總在技術層面晃,能夠多多瞭解其餘行業的運做規則。咱們會獲取不少信息,有助於咱們的程序設計。中國多數的程序員的歸宿在哪裏呢?當你30歲了還在寫代碼,而對其餘行業不瞭解,那你的職業壽命到頭了。簡單適用的技術應用於行業運做纔是咱們程序員的價值提現,也是可以生存下來的關鍵。看看開心網,優酷,凡客誠品等。都是成功的案例,一味談技術在中國多數人是沒但願,沒飯碗的。

  Keven Wang:有時候現實和咱們的願望仍是有很大的差距的。不過我很支持樓主的觀點。畢竟咱們不可能一生作程序員。在應用中學習,在學習中應用。帶着任務性的學習是最快的。 

  Jeffrey Zhao:

引用午後的小睡:相比微軟,當蘋果程序員吧。蘋果對框架的推出和更改很是謹慎,修改語法更是謹慎,因此蘋果的系統基本上都是增添API,不會像.net那樣,微軟今天一個框架,明天又一個,沒完沒了的往C#裏添加各類語言特性,讓你把原本應該學習先進的開發算法和方法的時間全浪費在語言和框架的鑽研裏了。

你搞笑,obj-c的年年加新特性。蘋果系統增長API,微軟就不是了?
  蘋果出一個GCD,大家嗷嗷叫好。微軟加一個TPL,大家就說冗餘。兩個tmd是一種東西好很差。
  要說學習先進的開發方法和算法和理論,學C#絕對比obj-c有價值,現在obj-c的興起徹底是iPhone等等在商業上的成功。
  你談比賺錢倒也罷,你比「長進」,這不是扯蛋麼。

  午後的小睡:

  @Jeffrey Zhao
  您不是個C/C++程序員,不知道微軟的開發工具是多麼鬱悶的東西,我這裏不是怪微軟,由於微軟的鎮山之寶是Windows,若是容許程序員在Windows下寫的程序能夠隨便移植到別的平臺上,對微軟來講那是致命的。因此當初IE擅自修改HTML的支持搞得Web開發人員暈頭轉向,它不去支持OpenGL,卻去搞D3D,它擅自修改Java,JDC不高興它才搞的C#,不光是開源軟件,任何平臺中立的標準微軟都必定要單開一套,所謂Mono的跨平臺也是個笑話,我問過不少用過的人都不建議使用它,都是說不到萬不得已,用.net仍是遷移到Windows平臺上好。

  我之前寫Cygwin/Mingw/Linux的程序,想用個IDE提升效率,用了下VS,一看它生成的模板程序就放棄了,微軟連STD C++都不放過,你對C++生成託管代碼或者什麼框架我無所謂,若是在語法級標準支持的有差別,甚至另立新語法挖空心思逼迫程序員轉用微軟獨有的東西那就無法忍受了。

  Obj-C不過是C/C++的擴展,它不像微軟從語法級變動了C/C++,你能夠使用全部既有的庫和標準代碼,實際上除了圖形界面相關的部分,根本不必寫Obj-C的代碼,蘋果的新Obj-C前端CLang也沒有對C/C++在語法級作變動,而是強調聽從標準。蘋果修改Objc-C歷來只修改它擴展的那部分,歷來不會對C/C++自己動手術,這就是區別。

  總之,追蹤微軟的東西是最累人的,處處是Windows粘合陷阱,稍不留神寫的東西就變成了Windows依賴,哪怕是某些明明是邏輯公共的部分,固然,若是發誓只給Windows平臺寫程序是另外一回事。

  Jeffrey Zhao:

  @午後的小睡
  說obj-c是c++擴展?無語啊,只是c擴展而已。VC++不支持C++標準?求證。
  IE的標準問題,那是Web標準看IE不爽故意定成不同的,請分清前後順序。
  微軟如今一直擁抱標準,請更新您的思路,還D3D,Java呢,什麼年代的事情。
  擴展之類的誰都再作,IE有擴展,Opera有擴展,Mozilla有擴展,WebKit有擴展。並且你不也說,obj-c是c的擴展麼,呵呵。
  至於說mono是笑話的人,要麼原本就看和.NET有關的東西不爽,要麼是不知道mono如今是多牛。

  午後的小睡:  

  @Jeffery Zhao

  obj-C還包括obj-C++,它不過是C/C++語法上加了Smaltalk類語法擴展(全部用@符號開始的部分),我愛用C++和STL,每天在用。XCode目前用的是gcc和g++前端,未來CLang對C++標準支持達標了,將會替代gcc前端,參見www.llvm.org。

  VC++對標準支持的爛,這個全部用過VC++的人都知道,聽說到了2008比較好了,可是到了2010就是另外一番天地了。你如今用VS2010生成一段C++ HelloWorld,你去給C++程序員看,他確定說,這是什麼C++?這是.net代碼吧。

  SnowDreamist:

  @午後的小睡

  OpenGL自己就有問題,他更適合於工業級別的渲染但對於計算機遊戲的支持並不到位。Mono如今作的很強,我想你纔是沒有用過mono的人,不得不說,在SL5推出以前,MoonLight的硬件加速要比SL4,微軟官方的性能要好,你都視而不見嗎?Cygwin我裝了一個小時沒有完成果斷殺掉進程了。雖然我也很喜歡Linux的命令行和那些漂亮的小工具,工做效率很高,可是這並不足以成爲謀生手段。至於C++標準,簡直就是笑話。我在學習編譯原理的時候,老師就說C++是爲編譯器做者創造的一門語言,而不是編程人員。C++用的不少,但不能說明C++就是一門優秀的語言,他太複雜了,讓機器自動生成吧。Gcc的做者一樣拋棄了#pragma開關,這也是對標準的篡改,也沒好到哪兒去。

  ocean:

  有些跑題了。

  真正的主題應該是專一於一項技術,培養本身的特長,增長本身的核心競爭力。而不該該每樣技術都去學,最後搞得沒有同樣精通,也沒有核心競爭力。多學一些,多看一些,多關注一些是好事,可是不要顛倒次序,必定要專一。

  至於語言哪一個好如個很差,這個爭論起來就大了,就像你用VS寫程序,卻非要在Linux上跑,這就是蛋疼的事情,你選擇了.NET,固然應該基於微軟的平臺。你選擇了iphone平臺,那你徹底能夠用object-c,什麼樣的平臺上有什麼樣的技術,選對平臺,選對技術也是一種能耐。用linux,不用php而用asp.net就是蛋疼,用windows,不用.NET而用java也很蛋疼。

  雖然說跨平臺是好事,我這麼多年見過這麼多大企業,還真沒見過有企業把本身的應用從一個平臺遷移到另一個平臺的,別說從linux遷移到windows,就是從一樣在unix/linux下將websphere遷移到到weblogic的都沒看到。一個大型應用一旦運用起來,再去遷移基礎平臺自己而是蛋疼。

  Jeffrey Zhao:

  @午後的小睡

  嗯嗯,obj-c對C語言的擴展,WebKit,Firefox,Opera對標準的擴展都是先進生產力。IE的擴展就是邪惡。蘋果對obj-c每一年都加新特性就是發展生產力,C#兩三年一次就是追逐新技術。我懂的。

  話說我不寫C++,但我身邊寫C++的人太多了,從VS 2008轉到VS 2010的人也不少。並且太多C++項目在Windows下是使用VC++編譯器,在*nix下面用gcc,按你的說法,我實在理解不了這種狀況是怎麼回事。

  你不妨先說說,有空我也問問那些C++程序員。

引用迂腐啊迂腐:
2.爲何.net能輕易實現的東西,您要去用php作,您是在炫技術麼?

  不說別的,今天我還真據說了公司裏某個項目是這個狀況,嘿嘿。

  ocean:

  用VC++6.0確實能讓一些不太符合C++標準的代碼編譯經過,不過這也要看程序員了,若是程序員比較遵循標準,也一樣能夠用VC++6.0寫出徹底規範的代碼來,這點仍是用 VC++ 2010吧,VC++ 2010支持最新的C++標準,不過這樣也帶來了升級的一個問題,原來一些在VC++6.0下寫的不太規範的代碼,在VC++ 2010上就編譯不過去了。

  至於IE的擴展,更多的基於歷史問題,由於標準的定製太慢,致使IE不得已本身定了不少東西。同時在10幾年前,網頁編輯器,特別是所見即所得的編輯器,不少都不符合標準,因此致使作出來的網頁大多不符合標準。畢竟作網頁的不是程序員,並不懂什麼標準,甚至不少html裏面都有錯誤,好比漏掉反標籤,或者反標籤錯位等等。爲了更好的容錯性,IE能夠很完美的將這些頁面顯示出來,這其實是程序健壯性的一種表現。咱們在計算機課程上都學過,程序健壯性是很重要的,就是在用戶錄入錯誤的時候可以有正確的提示或者修正,舉個例子,好比咱們如今寫程序,會常常將用戶輸入的全角的數字替換成半角的數字,由於若是你提示用戶不能用全角輸入數字,那用戶可能並不清楚什麼是半角什麼是全角,健壯性在於我可以很好的修正用戶輸入的這些錯誤。對於html這麼複雜的東西,若是沒有自動修正就等於不少網頁都看不了,因此在早期,這種作法是可取的。不少東西要從歷史的角度去看,問題產生都和起產生的背景相關。

  午後的小睡:

  爭哪一種技術好很無聊。廠商玩壟斷也好,玩革新也好,那是廠商的事情,我很簡單,我爲錢工做,雖然我也喜歡鑽研技術。我不會爲了反微軟而反微軟,應該明白一件事情,反微軟的平臺壟斷,是爲了賺錢!由於,市面上平臺越多,越混亂,搞開發的人才好賺錢,才意味着更多的機會,平臺間競爭越多,大廠商纔會爲了吸引咱們這些小開發者進行讓利,一旦誰得到了統治地位,開發人員必然會同質化,開發人員的價值就低了,至於什麼節省社會資源,哪一種技術更優秀之類的P話,能比進你錢包裏的錢實在?蛋糕就那麼大,廠商佔的多了,我們開發人員天然佔的就少了,博主的意思能夠這麼理解,一旦發現某塊蛋糕本身能分的愈來愈少了,必須能馬上跳到另外一塊蛋糕上去!

  szse:

  W3C就是個笑話。至於OpenGL和D3D之爭,遊戲業同時作過兩種東西的人怕是還真沒有站在OpenGL這邊的。標準的不等於就是好的,標準協會歸根結底還不是一羣大頭搶話語權?

  Hunts.C:

  惋惜不少人都不是真正的程序員,因此你善意的提醒,受衆很少。很大一部分軟件開發從業人員並無給本身加上程序員的社會屬性,並以此出發,做爲將來數年甚至是數十年的努力方向。僅僅是年少無知時被忽悠學了這個學科,或是一些非主觀的緣由最終從事了這個行業的工做,現在難以脫離。在這片神奇的土地上,作真正的本身是不容易的,你懂得。因此請不要失望,繼續分享你認爲有意義的觀點。    

  chenkai:

  最近很忙都沒有時間寫博。說到一門技術專業程度上來,我的認爲大部分程序員都侷限在企業的選擇之上。固然這也無可厚非,可是我曾經無數次強調過一個程序員職業修養來講,開放是很重要的。這也是我考察其餘程序員一個"另類"的標準, 技術範圍、編程思想、視野的開放等等,這也無疑也成就不一樣程序員各自的夜郎之國。不得不說這是一個很現實也很悲哀的事情。希望你的提醒能喚醒更多的程序員同行....

  Qinw:

  很好,和個人學習方向一致,這就是大師的學習方式,金字塔學習法。我如今也一直在學習其餘語言,像ruby,python C/c++, 彙編等,發現這個世界原來是那麼大,那麼精彩,最主要的是讓我激情源源不,但如今脫離IDE個人技術還不行,玩過,但我常常崩潰而死。

  東風31:

  很是棒的文章。也許,在國內,只有這種興趣,這種孜孜不倦的探索與追求,才能在技術領域 make a difference.

  一傑:

  對於本文的理解,不對的請指點:其主要宗旨是多接觸行業內的事物,開拓思惟,才能深刻其本質,不僅是從微觀的角度分析與理解自有的語言(不只是.NET程序員);只有宏觀的看待事物才能更好的把握住好的方向;

  學習或使用語言也是一種投資;從投資學的角度說:就是全部的雞蛋放在一個籃子裏,風險很高,由於誰也不能保證你的籃子是永久存在的或品質優良;多關注周圍的籃子,就能夠發現自有籃子的不足,才能夠修補當前籃子的不足;固然也能夠換一隻更加優秀的籃子來投資,誰會懼怕有更好的收益呢?

  空明流轉:

  @午後的小睡

  MSVC從2002開始,就開始對標準有很好的兼容性了。你懂不懂爲何VC6對標準兼容很差啊?由於VC6在標準以前推出的。用的是當時標準的草案。VS2010?你看看GCC 4.5的Feature list,再看看C++1x的標準草案,你就懂了。

  老壞貓:

  實際上,感受這裏不少喜歡不喜歡.NET的人其實並不瞭解.NET。一個真正的.NET高手要了解計算機體系的絕大部分知識,並能權衡利弊,妥善運用。大部分還不熟練.NET的人企圖淺嘗輒止學其餘語言,不只起不到樓主所謂集思廣益的效果,反而狗熊掰包穀同樣一事無成。

  李曉強:

引用Jacky Song:真正的程序員確定不會限定在.net平臺,程序員就是爲了解放生產力,提升工做效率而生的。其實除.net之外,還有其餘很好玩的技術或工具,好比你所說的編輯器之神vim, 不管是windows平臺仍是linux平臺, 都是其它編輯器沒法比擬的(誰用誰知道)。腳本的話python, php, 以及各平臺的shell, 這些都是能夠大大的提升工做效率。總之,計算機就是一門藝術,越往裏面研究越以爲它是劃時代的奇蹟,這玩意太神奇了!!

  額,這個所謂的神器VIM不知道有沒有以下功能:
  1) 腳本智能提示,那種簡單的關鍵字提示的就別說了。(別說我菜,大多數狀況下我仍是記得API的,可是一個回車就能節約輸入的狀況下,我以爲仍是值的,並且做爲一個Web開發人員,很無奈至少我須要同時使用CSS,HTML,JS,C#,VB.NET).
  2) 格式化代碼,我是個很懶的人,好比寫XHTML屬性懶得寫引號,寫C#,js之流的代碼不想手工用Tab鍵格式化代碼,因此我須要一種一個快捷鍵就能按照我設定的規則來格式化個人代碼的工具。(Ctrl+E,D VS中輕鬆搞定)
  3) 項目管理,額,現代的程序員,一般都是把本身的代碼分紅各個項目來開發的。
  4) 版本控制和團隊協做工具(BUG管理,任務分配之類的)。
  ...
  若是沒有,請記住這句話:VIM和VS不具備可比性,一個只是文本編輯器,另外一個是IDE;一個是播種機,一個是聯合收割機...
  另外VS的快捷鍵用起來比VIM有效率多了,我用VS基本上不用鼠標的。

  思考-總結:

  樓主,頂你,我以爲說的頗有道理的。

  舉個例子說明下,不少人用nhibernate ,裏面的實體類,要麼繼承於接口,要麼是virtual的。可是java下,好像就沒有這個限制? 爲何呢?其實深究下,能明白,java下都是virtual call, 而在.net, 爲了提高效率,有call 和 virtual call 之分。 以後再看看 ioc 的實現原理,大概也能明白一些了。

  其實不少技術是相通,你在看別的技術的時候,能夠帶着本身所熟悉的平臺的問題, 去學習和去看,一是開闊了眼界,另外對你理解本身熟悉的平臺有更深刻的理解。

  讀書也是,不少人基本上看書和資料,都是蜻蜓點水,基本上看完就忘, 若是能作到帶着問題去看,或者看的時候能想着本身曾經遇到過的同類的問題,吸取新的知識,會更快更牢更紮實。

  李曉強:

  哎,發現不少人罵微軟技術更新快的。這個IT原本就是個快速發展的行業,發展快總比發展慢要好吧,我以爲微軟發展的仍是有點慢了。knect之類的技術要是早出現幾年多好啊,啥時候才能達到讓計算機擴展人的大腦的思惟能力啊...好比我一個想法可以查詢全中國的資料文獻。

  Jacky Song:

  @李曉強

  vs自己是集開發,編譯爲一體的,但論文本編輯功能,vs能實現的,沒有vim搞不定的,vs搞不定的,vim一樣能搞定(智能提示,自動完成,列操做,語法高亮....) 均可以本身配,網上n多vim的牛比插件,你試用之後就知道他的強悍,vim在文本編輯器領域當之無愧是No.1。

  EricZhang(T2噬菌體) :

  @李曉強

  呵呵,提及來仍是Windows程序員和*nix程序員在思考問題方式上的不一樣。您做爲Windows程序員,習慣使用大而全的東西。而*nix程序員習慣把小而靈巧的東西組合起來使用,例如您說到的版本控制,vim自己固然不會有,由於vim對*nix程序員來講就是編輯器,版本控制咱們有svn和Git啊,咱們也能夠經過配置(vim或emacs的可配置性和可擴展性超乎你的想象)將snv或git更方便地集成到vim中。至於代碼格式化,VS給你提供了有限的功能,而vim或emacs提供了無限的可能,只要有須要,本身寫擴展腳本就好了,例如你在emacs下輸入「M-x sort lines」看看效果。至於您提到的智能提示啥的在vim中更是小菜一碟,插件遍地飛。最後,我毫不是說IDE很差,只是說習慣了IDE的朋友抽點寶貴時間適當脫離IDE玩玩vim和shell會更好。

  李曉強:

  額,這個各類編輯器啥的沒少玩,就是以爲忒麻煩了,生產力過低。在瞭解VS作了什麼的狀況下,我以爲嘛,有奔馳,徹底不必騎自行車。呵呵,我的意見。你們引入計算機就是爲了下降難度,省點腦細胞,你要說我用個Emacs,VIM還得本身寫寫腳本擴展(況且格式化源代碼之類的擴展不是一兩百行代碼就能搞定的事兒),那仍是有點不合適吧。

  @Jacky Song

  呵呵,自動完成,列操做,語法高亮這種就不說了,你們都有,沒啥比如較的。智能提示就不同了,VS的智能提示有類型推斷並且針對.NET 平臺和JS的智能提示更是編譯性的,況且VIM那麼多擴展插件參差不齊...WIN下使用VIM裝插件後,崩潰的不是一次兩次啊。不說了,我的意見,不過最牛的是VS能夠在裝了一些插件後切換成VIM模式,徹底能夠知足您的要求。

  Jeffery Zhao:

  其實吧,VIM的確是好東西,可是舉例子的時候必定要靠譜,好比文章裏寫的東西,直接ctrl+c,ctrl+v,和yyp是一個效果,不用選中該行的。光標到行首,也是一個home鍵搞定。VS也有快捷鍵,也能夠擴展,用起來也能夠不碰鼠標。VS連VIM插件都有,也有很多人用,我也在用,既能夠VIM又有智能提示。說到智能提示啊重構啊,在VIM要作到VS,NetBeans這種程度也是很難的,插件找不到好的(你說你不須要則是另外一回事情了)。

  徐少俠:

  本質是贊成樓主的說法的。問題是樓主的打擊面太大。尤爲是那個IDE的說法。不過其實樓主說的很清楚,是在工做之餘去耍耍。耍過了,尤爲是經歷了編譯的全流程。會學到和領悟到更多的。而工做的時候,快捷鍵的優點足以將vi搞下去了。不用IDE,不是僅僅不用它,而是爲了去體會平時更多咱們不去體會的東西。

  llzhzhbb:

  我以爲程序員應該把本身常常考慮的問題做一下分析,哪些是和語言及平臺相關的,哪些是和語言無關的。好比數據結構、通訊、圖形、外接設備等,絕大部分都和語言無關;嵌入式系統、驅動等,和語言及平臺的關係較大,不過更多的仍是與操做系統的知識有關。把問題的這些層面剝離以後,真正和語言相關的其實並很少。語言不過是提供了一個門,人們能夠從這個門進去觀看大廳裏的東西,或者語言是一種交流的工具,人們只是採用了這一種語言和某個龐然大物對話,而這些真正的交流對象,不會自然的歧視你從哪一個門進入或者採用何種語言。

  gussing:

引用午後的小睡:
VC++對標準支持的爛,這個全部用過VC++的人都知道,聽說到了2008比較好了,可是到了2010就是另外一番天地了。你如今用VS2010生成一段C++ HelloWorld,你去給C++程序員看,他確定說,這是什麼C++?這是.net代碼吧。

  有的人就是分不清c++和c++/cli之間的區別。。。不過這個真怪微軟,搞c++/cli這麼廢的東西。。
  vs2010對c++標準的支持是最好的,沒有之一,具體請自行google

  午後的小睡:

  @gussing

  我確實沒仔細看,我也知道不去理會那個自動模板能夠寫純C++,可能我真的是在FUD吧,不過我沒太理會編譯出來的代碼究竟是CLI仍是Native Code。不過, VS2010確實在某些方面和GCC4解釋的不太同樣,我記得在聲明會拋異常的函數時,是否須要列舉異常這個方面,兩個編譯器有一個就會吐警告,另外一個不會,我當時懶得再去翻看標準文檔裏是怎麼敘述這一段了。VS2010就用了一下,印象是對C++語法進行了擴充,還提供了不少替代標準庫的東西進去,我記得不少年前Windows號稱posix標準徹底兼容,那個時候我水平差,怎麼也沒能順利的使用posix標準庫,最後程序與系統打交道的部分全使用的是Windwos API。仍是那句話,不管是什麼,微軟必定會經過再發明一遍輪子的方法儘可能讓你寫微軟工具粘合的東西。

  小魚仔:

  (╯▽╰)╭,.NET平臺不夠好嗎?爲何這年頭總有些人明明很簡單的東西(用C#實現)要用那些很複雜並且效率低下的語言或工具去實現呢?顯拽嗎?同爲作一個項目,我用.NET一個星期,你用匯編作了兩年,我會認爲你很牛逼嗎?誰說.NET的程序員就菜,Microsoft Press的英文原版書你看過多少(像《CLR via C#》),研究過多少高級編程?技術沒有好壞之分,只有適不適合之分。每一種技術都有它最擅長髮揮重要的地方,你沒看到人家卓越網那麼大的也是aspx堆出來的代碼,可我們學校的教務網站也是ASP.NET寫的,可是超過一千人網上選課就崩潰了!那些作網站的老師還在抱怨C#太爛,尚未某某...好呢?那你用記事本寫HTML去堆吧,我會以爲你真的很牛逼!你何不說我就在一臺裸機上連續按0和1,一個上午一個操做系統就出來了,那你更牛逼了!學.NET沒有錯,它自己就是一把鋒利的刀,不要再去像其它語言同樣去磨了,可是你不能由於它已經夠鋒利了而放低對本身的要求,只知足於拖拖控件,那纔是真正的讓人鄙視。真正的.NET龐大着呢。

  Ivony...:

引用EricZhang(T2噬菌體):「呵呵,提及來仍是 Windows程序員和*nix程序員在思考問題方式上的不一樣。您做爲Windows程序員,習慣使用大而全的東西。而*nix程序員習慣把小而靈巧的東西組合起來使用,例如您說到的版本控制,vim自己固然不會有,由於vim對*nix程序員來講就是編輯器,版本控制咱們有svn和git啊,咱們也能夠經過配置(vim或emacs的可配置性和可擴展性超乎你的想象)將snv或git更方便地集成到vim中。至於代碼格式化,VS給你提供了有限的功能,而vim或emacs提供了無限的可能,只要有須要,本身寫擴展腳本就好了,例如你在emacs下輸入「M-x sort lines」看看效果。至於您提到的智能提示啥的在vim中更是小菜一碟,插件遍地飛。」

  LZ再一次的把程序員人爲的劃分陣營,這個習慣很差,必須指出。

  那麼來討論問題。
  就說那個無聊的yyp,事實上VS也有不少插件,也能整個Zhuangbility插件來解決yyp的問題,那是否是VS也就成爲神器了?
  開拓眼界是好的,不一樣平臺的用戶習慣不一樣也是對的。但外國的月亮就是圓的這就不對了。
  順帶說yyp,通常一個標準的Windows用戶(我)是這樣作的:
  HomeShift + ↓ + Del + Ins + Ins。

  這不見得比yyp要繁瑣(事實上先要搞清楚本身在編輯狀態仍是命令狀態和學習適應就要花掉一段時間),也不以爲會慢零點多少秒,其次,這個方法在VS、記事本、Word、或是如今這個博客園的輸入框裏面都能用。請問那個神器要怎麼才能搞定?     

  huhuc:

  不要這麼急着發表本身見解,像yyp這樣的功能經過宏就能夠實現,並且不少編輯器就自帶複製當前行功能,就算沒有,不少編輯器均可以寫插件的,就算尚未,還能夠像SQL Assistant那樣Hook窗口過程,或者經過發送Windows消息讀寫文本。設計模式這種書,千萬不要看,浮躁且膚淺。我買過一本2手,看了下目錄,和其它書一塊兒論斤賣了。

  inhesoft:

  vim和vs不是一個級別的東西,不能相比,單純從編輯器的角度來看,vim是很好,我的感受,vim並不太適合windows下編程,而是適合unix下編程,unix下編程,函數名都很短,通常推薦都用小寫,而windows下的.net和win32 api函數我都很長,還要分出大小寫,用起來就累了,各有各的長處。順帶說一句,vim的o至關與vs的下的shift+enter,不是有些同志說的ctrl+c。

  curer:

  你的本意是好的,可是在這篇文章中卻隱隱有把本身的觀點強加到全部.net開發者上。這種強盜邏輯是否是又掉入另外一個盒子中了?每一個人都有本身不一樣的經歷,把MS,Google大牛的例子生生的加在每一個人身上合適麼?換句話,加在本身身上就確定合適麼?呵呵,送T2一句話「求同存異」。 無論是大牛,仍是菜鳥。都有咱們值得學習的地方。和大牛對話可以給出醍醐灌頂的暢快,和菜鳥對話則能夠給咱們發掘本身知識體系中的漏洞。和菜鳥對話,由於那是一種全新的角度。甚至在我看來比大牛對話更有收穫。由於不只可以收穫本身,還能和更多地人分享。

  你發現別人老是不能理解本身的意思,爲何不反過來思考一些,這麼多人反對,是否是本身有不足?由於這篇文章的漏洞太多了,是否是應該抓緊機會從新回顧下?這種經驗類文章,本沒有對錯。只是咱們大部分都是典型的理科生,在隱隱的數學思惟習慣支配下,你文章中只要有漏洞,那麼你推出的結論就是你們不能接受的。更不說,這篇文章漏洞百出。

  能夠準確的說,從這篇文章的本意來看,並不算是一篇有價值的。可是你卻能夠反過來得到更多的知識。想要成爲大牛,關鍵是能不能包容別人的不一樣觀點,並從中吸取經驗。而不是消極的說「手賤,不應寫」這類消極的語言。呵呵,其實有這麼多人糾你的錯誤,本身反而應該感到幸福。真的,我已經很羨慕你了。

  fxs:

  做爲一個已經使用4年的 Linux人,我以前一值是使用Ubuntu,在公司的時候,電腦也是裝的Ubuntu,裏面跑Virtualbox的xp作一些photoshop切圖的事情,後來煩Ubuntu不停更新,並且系統比較耗資源,換成debian一直用着。我用Linux不是爲了裝B,而是習慣了,由於Xp常常中毒,而我又沒有錢買高配置的電腦,也忍受不了殺毒軟件佔據的資源,用了這麼久的Linux作過的PHP網站也不少了,並無像你說的那樣神乎其神,告訴你Linux其實一點都很差用,shell?這個玩意垃圾的要死,我這幾天寫個腳原本自動壓縮全部的js代碼,固然先是shell遍歷js文件,而後調用YUI的compressor,你覺得shell多好用?連個子字符串查找功能都沒有,要剔除一些文件,還得藉助awk,不要鼓吹vim,我在服務器上改東西必須用vim(難道期望用nano?),可是日常開發仍是用Netbeans,別的不說,光是按Esc鍵都能讓你發火,由於早期的鍵盤是ESC鍵在如今的Tab鍵位置,因此很好按到,但如今你基本買不到這樣的鍵盤了。你鼓吹VIM,可見你並不熟練使用VIM。

  Linux/UNIX界的東西混亂的不是你能想像到的,咱們公司服務器有Debian, Freebsd, CentOS這三個系統,光是apache的配置文件路徑,Freebsd, CentOS, Debian這三個系統都放置的不同,程序的安裝路徑更是亂七八糟,你真正成天跟這些個系統打交道,就能把你煩死。也只有你不懂,或者只懂個皮毛的時候,纔會以爲Linux/UNIX有多麼高明,對於.NET不想多說,我以前寫過兩年的.NET,不喜歡那些懂點Linux/Unix的人在.NET界鼓吹Linux/Unix,並嘲笑.NET程序員,打魚的嘲笑種田的,實在是沒有什麼意思!

  你覺得你懂那麼多語言術語就很牛了?程序員應該專注,而不是像你那樣博而不專,你跟我很像,你提到過的術語我都瞭解,還有不少你沒提到的我也瞭解,Haskell,Ocaml,你用過沒?Perl/Ruby/TCL腳本寫過沒?GTK+寫過沒?每半年學一種語言,到最後你就成了什麼都不會了,專注 一點吧!

  還有推薦你看一本書《UNIX痛恨者手冊》,UNIX界不是你想像中的那麼美好。

  省油的燈:

  先贊一個,這麼年輕就有如此見的,英雄出少年,了不得!每一個人都困在盒子裏,是每一個人思惟的界限。不只僅是本身建造的,也是企業文化和社會文化建造的。若是要批判的是一個羣體,我認爲關注國內程序員(其實C++程序員也是一樣的現狀)生存的土壤(哲學上又叫惟物史觀):粗製濫造的設計,高耦合度成爲主流,低水平的重複開發。有的程序員週末都沒時間來看你的大做,還在加班作低水平的維護,這將耗盡他們的青春,你會不會以爲他們是閏土?試問這樣的土壤怎麼能生長出參天大樹(林)?固然,這樣的現狀背後有它的緣由的緣由(哲學上又叫第一因)。

  curer:

  事實上,我以爲,若是你還有精力或是有不服輸的精神,更應該再寫一篇更加嚴謹的文章來解釋本身的想法。沒辦法,誰讓你們都是理科生呢。要知道咱們可不是抱着看穿越小說的心態來看的。

http://blog.csdn.net/testcs_dn/article/details/70147842

相關文章
相關標籤/搜索