宅男程序员给老婆的计算机课程之0:认清本质这个系列来自一位宅男程序员,这个系列是他写给老婆的电脑课程。以下,开始本系列的第0篇——认清本质。只要掌握了编程的思想、数据结构、算法,使用不同的语言去表达是很容易的。AD:【51CTO独家特稿】从今天起将开始的这个系列来自一位宅男程序员,这个系列是他写给老婆的电脑课程,后来经他老婆的建议,决定在51CTO这个平台上公开出来与大家分享。在系列开始之前,先介绍一下两位主人公——男主角:Wuvist(新浪微博),真名翁伟,自称胖程序员一个,幸好已婚。学习.net出身,现常用python做服务器端开发,曾任新加坡某创业公司主程。公司被techcrunchblog过后,觉得新加坡生活太过安逸,终于于去年辞职只身回家乡汕头创业,活跃于珠三角技术沙龙,热衷于与其他技术宅分享。本文作者:Wuvist女主角:Katze,Wuvist的老婆,女程序员,在某跨国投行任Unix系统管理员,常被Wuvist嘲笑技术太差。总之,因Wuvist只身回国创业,这对分隔天涯的技术宅男宅女竟然想出了定期写技术课程、交作业这种方式来保持联系,这何止是令人发指?简直就是令人发指!技术宅的你,想看看他们究竟是如何令人发指吗?以下,开始本系列的第0篇——认清本质。新加坡国立大学计算机系有两门课:CS1101/1102。几乎所有的大学计算机系课程都有两门类似的课程;但几乎所有的学生都误解了这两门课;以为前者是教C,后者是教Java;但实际上前者是ProgrammingMethodology后者是DataStructureandAlgorithm。所以这两门课可以有选择,1101c或者1101s,使用不同的语言作为媒介。语言并不重要。只要掌握了编程的思想、数据结构、算法,使用不同的语言去表达是很容易的。会了很多种电脑语言后,学一门新的编程语言,几乎只要花一个晚上看看官方的语法文档就可以立刻开始使用做东西了。最多就一个星期。基本上,那些说长时间说自己在学C#,学java的程序员,都是2B程序员,他们完全不懂得程序开发中“思想”、“数据结构”、“算法”的本质,而将大量的时间耗费在语言实现的细枝末梢中,纯粹浪费自己时间。不同的语言会有不同的特性,有一些特性是比较重要的,普遍存在于多种语言当中的,“学习”一种新语言,实际上仅需要查看文档,看这种语言是以怎样的语法支持这些特性而已。=========OO是影响很广的编程概念,基本上,是EnterpriseDeveloper(注:企业级开发者)的圣经、法则。ED认为,越OO越好。基本上,计算机业界有两批人,一批是真正的程序员,或者说hacker,一批就是ED。ED实际上是企业的工具,他们很少有自己创新的想法;企业说啥米,就做啥米。所以,会有大量的vender,提供工具、支持、新技术,去train这些ED。典型的vender有微软、IBM、Oracle等等;这些vender为了向企业推销产品,他们就经常会鼓吹一些新的“技术”,然后打包成为解决方案,推销给企业。为了鼓吹、宣传这些技术,还有一批企业是专门在“布道”的,他们是所谓的“咨询公司”。这样的咨询公司,他们会专门聘用一些所谓“Evangelist”,屁事不做,整天四处布道,名头都很牛逼,如XX金牌讲师。他们实质上,就是推销员,只是,他们推销的产品,是所谓的“新技术”而已。微软在新加坡好像就招了不少Evangelist。每隔几年,微软所推广的技术就会“革新”一次,Evangelist们就不断的四处去宣传新技术改变了一切,能够提高效率无数倍。Evangelist本身的技术,很多是很差的;就好像推销员本身,是不会做产品开发、不懂技术的。他们仅仅是会宣传、鼓吹新技术而已;满口各种新技术名词,但他们本身,可能仅仅只是会使用这些技术写一个HelloWorld。因为他们本身素质很差,所以,他们是无法分辨他们所推广的技术本身是否好,他们只是复读机。有时候,vender本身在推的技术也其实不错,但复读机们也会把它夸张到荒谬的地步。OO就是一个典型。OO仅仅是无数编程模型中的一种而已,但它被过度的夸张,诠释。Hacker们写程序,基本不会去追求程序本身是否符合OO规范。Hack这个词的意义本身就在于打破规范。但是,大多数的ED是很笨的,他们缺乏独立思考的能力,他们需要被Train,而无法自学。Hacker的那套,他们接受不来。所以,才会有vender/consultant/培训学校一系列的产业,去鼓吹:OO、XML、SOAP、WebService、Silverlight等等一系列伪技术。有的ED,一辈子都无法意识到他们实际上是中了vender的圈套;无法掌握真正的编程技术,而沉迷于vender们所鼓吹的“新技术”,一代接一代。然后,只要有其中的一代技术ED没能掌握,ED就立刻被淘汰了;因为这种ED,穷其一生都没有学会真正的编程;他们仅仅是学会了一代又一代的被封装的伪技术使用技巧而已。伪技术的典型特征是封装。它本身没有任何新的东西,只是把旧的技术封装一下,换汤不换药而已。OO是最好的封装技术;所以它被无底线的推崇。封装很重要;但是,对于程序员来说,掌握封装技术本身,跟学习使用别人封装好的技术工具;是两回事。“程序员从此不再需要关心XXX”,这是evangelist最常用的宣传语句;2BED,看了就很高兴,然后拼命去学习新的“技术”,把他们曾经掌握的XXX底层技术给忘掉。微软所宣传的理念被Hacker理解为“Evenmonkeyscancode”。ED被evangelist鼓吹的新技术洗脑,最终就是成为monkey而已;所做的工作,毫无技术含量;很容易被淘汰。所谓的程序员30岁必须转行这种说法,便是源于ED被洗脑。这种ED,从未掌握真正的编程技术,是必然被淘汰的。=========而这种ED,在大学时,就是把cs1101/1102理解成为教c/教java的那群人。他们,从一开始就走错了。=========作业(编辑说明:在技术宅和他老婆的故事中,只有女主人公完成作业之后,男主人公才会发出新课程。当然,身为看客的您可以无需完成这些作业,但如果您仍是学生,或者您正在带学生或小弟的话,倒是可以做个参考):1.用500字讲述什么是ProgrammingMethodology?2.列举10种DataStructure.3.列举10种Algorithm.【作者声明】Katze实际上是正宗计算机系科班出身,而且大学成绩甩开Wuvist九条街,这其中还包括算法、计算机架构等传统上被技术宅男垄断的科目。Katze毕业后长期于投行从事Unix服务器运维工作,故研发编码水平会被Wuvist嘲笑;但Wuvist不会写shell脚本时,绝对是第一时间向Katze求助。Wuvist写的这系列教程以及作业安排,是为Katze量身定做的,像第1课的作业便因此会出现Perl这门研发中不常用,但在运维中却非常普遍的语言。这系列Wuvist是写给老婆的私人课程,其中充满了各种主观偏见,有缘发布到51CTO来,各位看官若看得不爽,请尽管抛砖头狠踩,但是请尽量喷得准确、到位、凶狠一些~宅男程序员给老婆的计算机课程之1:认清实际这个系列来自一位宅男程序员,这个系列是他写给老婆的电脑课程。以下,开始本系列的第1篇——什么是算法。“算法”、“数据结构”等,是本质;很重要,需要掌握,但一般开发时,很少需要自己去实现。AD:“算法”、“数据结构”等,是本质;很重要,需要掌握,但一般开发时,很少需要自己去实现。觉得多数开发,是“拚积木”。即便是业务逻辑需要对一些数据进行排序,也不可能自己去实现一个quicksort算法;而是直接调用quicksort的现成类库。这也直接造成了2BED穷其一生都不能掌握真正的编程能力。他们认为,能够“解决”问题就好,至于问题是怎么解决的,他们并不关心。对于细节的认识、掌控能力,直接造成了水平的天渊之别。以拍照为例子,以前人们用傻瓜相机,现在人们用iPhone去拍照;很快,很方便,还可以加滤镜。但是,普通人们在不了解什么是光圈、精深、背光等概念的情况下,是没有可能成为摄影师的。即便他们放下iPhone拿起DSLR。普通人跟摄影师拍摄同样的东西;出来的照片也许会差不多,但如果深入去比较,景深、角度、光线、取景等等等等细节,则都会有差别,而这些差别积累起来,就造成了普通照片与摄影作品的差别。画家要画好画,必然要对画笔、颜料、纸张的特性有深入的了解。厨师要做好菜,必然要了解食材的特性,对调味料、厨具等有娴熟的掌控。ED的“解决问题就好”,跟没有下过厨房的千金小姐拿着菜谱使用微波炉做菜没啥区别。在大厨手里,微波炉也可以是神器;但:“有的人,纵然神刀在手,亦无法成为刀中之神。”程序员要“拚好积木”,那必然需要对积木的种类、材质、特性,有深入的了解。总得对quicksort的实现有认识,才能够用好quicksort。在有的场景下,quicksort的性能反而是最差的。如果不了解,就无法去把quicksort用好。程序开发中,有一个著名的80/20原则。我想,这个原则也可以适用于ED。程序员只要花20%的努力就可以成为一个混日子的ED;80%的程序员均是如此。但如果要成为一个优秀的程序员甚至hacker,那么,需要花多至少4倍的努力。有什么积木可以用?积木本身是怎么做的?积木A比积木B好在哪里?这些,是需要花大量的时间去了解。全部都是实在的经验积累,没有捷径。都是.NET语言,C#跟VB.Net的差别在哪里?对于ED,他们偶尔也会对这样的问题感兴趣,然后,他们会去看介绍,看比较文章。。。。但其实,这事完全是木有用的。他们看了别人的介绍,以为自己懂的,但实际上,他们只是在复读而已,完全木有懂。作为一个ED,要了解C#跟VB.Net的差别在哪里,最好的方式,就是花时间去把两种语言都学了。用这两种语言分别去写个几万行程序,然后就懂了。当某天ED成为Hacker的时候,那就反倒可以去看各种介绍,看一眼,然后瞬间就可以悟了。这也就是为什么很牛程序员学习新语言可以那么快,因为有太多的知识可以复用;而这些知识的积累,必然是需要通过在实际中,无数行的实际编码,无数篇的资料阅读中得来的。没有捷径。很多初学者,或者说,编程的伪爱好者,他们,会热衷于去四处请教大师,下载各种经典书籍,企图读一本编程圣经,然后一夜脱胎换骨。这是,不可能的。这种伪爱好者,永远不可能成事;在学习的过程中,抱着去“走捷径”的心态,本身就已经是入了歧途;最终会花更多的时间。原来Ruby/现在Python的一个光头大牛ZedA.Shaw,为了表达“没有捷径”这样的观点,特意写了本《LearnPythonTheHardWay》:甚至有一个系列:从长远来看:TheHardWayIsEasier。我完全同意。作业:1.列举10个PythonWeb框架2.Python有多少种不同的解释器?3.Perl跟Python有什么不同?宅男程序员给老婆的计算机课程之2:怎么看待牛人这个系列来自一位宅男程序员,这个系列是他写给老婆的电脑课程。以下,开始本系列的第3篇——怎么看待牛人。那么,我们该如何识别“看起来很厉害”跟“真的很厉害”的大牛?AD:【51CTO独家特稿】请看这个帖子:快速浏览即可,无需细读;浏览过后再继续往下看。读后的感觉是不是:“虽然不知道在说什么,但是看起来很厉害的样子!”整篇文章的关键是在这句:“作者胡某某。曾任完美时空(现更名为完美世界)顾问,承担互联网方面的部分管理工作。现在主要精力研究互联网产品设计,是Axure授权的高级咨询顾问和高级培训讲师。”这也就是,我在第一课中提到的“啥事不做,整天四处布道,名头都很响亮,如XX金牌讲师”,“Evangelist本身的技术,很多是很差的;就好像推销员本