此文章的主旨是但愿过于专一.NET程序员在作好工做、写好.NET程序的同时,能分拨出一点时间接触一下.NET以外的东西(例如10%-20%的时间),而不是鼓动你们什么都去学最后什么都学不精,更不是说.NET不行或劝你们放弃.NET。恕我愚钝,此主旨在文中表达不够清楚,看评论中不少朋友误解了,特此说明。php
另外,本文中的观点并不所有是我我的的想法,至关一部分来自我之前聊过天的某些大牛,他们不少来自微软、百度、腾讯等知名企业,而且不少已经成为技术骨干,我曾经从他们那里受益不浅,因而我把他们的指教结合自身的经验和理解写成此文。这就是此文的来源。html
-----------------------------------------华丽的分割线-----------------------------------------前端
在给这篇文章起标题的时候,我斟酌了好久,由于我我的是反对使用“.NET程序员”、“C++程序员”或“PHP程序员”这类简单粗暴的方式为程序员作划分的。可是客观确实存在一个现象,就是不少程序员会为本身设置一个无形的界限,将本身与某种语言或平台硬绑定到一块儿,例如我这里所指的“.NET程序员”。请注意这与“术业有专攻”是不一样概念的,有本身专攻的平台或领域这很正常,可是有不少人偏执地将本身与某个语言或平台牢牢捆绑,而忘记了本身首先是一名程序员,而后才使用某种语言,他们偏执于平台并陶醉于本身创建的盒子里,而不肯主动去接触一些盒子外的事物,最终使得本身没法进步。java
从我我的的观点看,本文中“.NET程序员”是指具备以下特色的程序员群体:python
若是您有超过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的程序员多是悲剧,但从没脱离过IDE的程序员绝对是悲剧!
你有没有以为本身愈来愈不像个“编程序”的而愈来愈像“堆程序”的。好的,即便在工做时你离不开IDE,那么业余时间让你的IDE滚蛋,等等,你改用Notepad?气死我了你!试试vim或Emacs,体验一下用纯文本写程序,用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:
你搞笑,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++程序员。
不说别的,今天我还真据说了公司里某个项目是这个状况,嘿嘿。
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的人企图浅尝辄止学其余语言,不只起不到楼主所谓集思广益的效果,反而狗熊掰包谷同样一事无成。
李晓强:
额,这个所谓的神器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:
有的人就是分不清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...:
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