宅男程序员给老婆的计算机课程之0:认清本质
在系列开始之前,先介绍一下两位主人公——
男主角:Wuvist(新浪微博),真名翁伟,自称胖程序员一个,幸好已婚。学习.net出身,现常用python做服务器端开发,曾任新加坡某创业公司主程。公司被techcrunch blog过后,觉得新加坡生活太过安逸,终于于去年辞职只身回家乡汕头创业,活跃于珠三角技术沙龙,热衷于与其他技术宅分享。
女主角:Katze,Wuvist的老婆,女程序员,在某跨国投行任Unix系统管理员,常被Wuvist嘲笑技术太差。
总之,因Wuvist只身回国创业,这对分隔天涯的技术宅男宅女竟然想出了定期写技术课程、交作业这种方式来保持联系,这何止是令人发指?简直就是令人发指!
技术宅的你,想看看他们究竟是如何令人发指吗?以下,开始本系列的第0篇——认清本质。
查看全部课程请访问《宅男程序员给老婆的计算机课程》
新加坡国立大学计算机系有两门课:CS 1101 / 1102。
几乎所有的大学计算机系课程都有两门类似的课程;但几乎所有的学生都误解了这两门课;以为前者是教C,后者是教Java;但实际上前者是 Programming Methodology 后者是 Data Structure and Algorithm。
所以这两门课可以有选择,1101c 或者 1101s,使用不同的语言作为媒介。语言并不重要。
只要掌握了编程的思想、数据结构、算法,使用不同的语言去表达是很容易的。
会了很多种电脑语言后,学一门新的编程语言,几乎只要花一个晚上看看官方的语法文档就可以立刻开始使用做东西了。最多就一个星期。
基本上,那些说长时间说自己在学C#,学java的程序员,都是2B程序员,他们完全不懂得程序开发中“思想”、“数据结构”、“算法”的本质,而将大量的时间耗费在语言实现的细枝末梢中,纯粹浪费自己时间。
不同的语言会有不同的特性,有一些特性是比较重要的,普遍存在于多种语言当中的,“学习”一种新语言,实际上仅需要查看文档,看这种语言是以怎样的语法支持这些特性而已。
=========
OO是影响很广的编程概念,基本上,是Enterprise Developer(注:企业级开发者)的圣经、法则。
ED认为,越OO越好。
基本上,计算机业界有两批人,一批是真正的程序员,或者说hacker,一批就是ED。
ED实际上是企业的工具,他们很少有自己创新的想法;企业说啥米,就做啥米。所以,会有大量的vender,提供工具、支持、新技术,去train这些ED。
典型的vender有微软、IBM、Oracle等等;这些vender为了向企业推销产品,他们就经常会鼓吹一些新的“技术”,然后打包成为解决方案,推销给企业。
为了鼓吹、宣传这些技术,还有一批企业是专门在“布道”的,他们是所谓的“咨询公司”。
这样的咨询公司,他们会专门聘用一些所谓“Evangelist”,屁事不做,整天四处布道,名头都很牛逼,如XX金牌讲师。
他们实质上,就是推销员,只是,他们推销的产品,是所谓的“新技术”而已。
微软在新加坡好像就招了不少Evangelist 。每隔几年,微软所推广的技术就会“革新”一次,Evangelist们就不断的四处去宣传新技术改变了一切,能够提高效率无数倍。
Evangelist本身的技术,很多是很差的;就好像推销员本身,是不会做产品开发、不懂技术的。他们仅仅是会宣传、鼓吹新技术而已;满口各种新技术名词,但他们本身,可能仅仅只是会使用这些技术写一个Hello World。
因为他们本身素质很差,所以,他们是无法分辨他们所推广的技术本身是否好,他们只是复读机。有时候,vender本身在推的技术也其实不错,但复读机们也会把它夸张到荒谬的地步。
OO就是一个典型。
OO仅仅是无数编程模型中的一种而已,但它被过度的夸张,诠释。
Hacker们写程序,基本不会去追求程序本身是否符合OO规范。Hack这个词的意义本身就在于打破规范。
但是,大多数的ED是很笨的,他们缺乏独立思考的能力,他们需要被Train,而无法自学。Hacker的那套,他们接受不来。
所以,才会有vender / consultant / 培训学校一系列的产业,去鼓吹:
OO、XML、SOAP、Web Service、Silverlight等等一系列伪技术。
有的ED,一辈子都无法意识到他们实际上是中了vender的圈套;无法掌握真正的编程技术,而沉迷于vender们所鼓吹的“新技术”,一代接一代。
然后,只要有其中的一代技术ED没能掌握,ED就立刻被淘汰了;因为这种ED,穷其一生都没有学会真正的编程;他们仅仅是学会了一代又一代的被封装的伪技术使用技巧而已。
伪技术的典型特征是封装。
它本身没有任何新的东西,只是把旧的技术封装一下,换汤不换药而已。
OO是最好的封装技术;所以它被无底线的推崇。
封装很重要;但是,对于程序员来说,掌握封装技术本身,跟学习使用别人封装好的技术工具;是两回事。
“程序员从此不再需要关心XXX”,这是evangelist最常用的宣传语句;2B ED,看了就很高兴,然后拼命去学习新的“技术”,把他们曾经掌握的XXX底层技术给忘掉。
微软所宣传的理念被Hacker理解为“Even monkeys can code”。ED被evangelist鼓吹的新技术洗脑,最终就是成为monkey而已;所做的工作,毫无技术含量;很容易被淘汰。
所谓的程序员30岁必须转行这种说法,便是源于ED被洗脑。
这种ED,从未掌握真正的编程技术,是必然被淘汰的。
=========
而这种ED,在大学时,就是把cs 1101 / 1102理解成为教 c / 教 java的那群人。
他们,从一开始就走错了。
=========
作业(编辑说明:在技术宅和他老婆的故事中,只有女主人公完成作业之后,男主人公才会发出新课程。当然,身为看客的您可以无需完成这些作业,但如果您仍是学生,或者您正在带学生或小弟的话,倒是可以做个参考):
1. 用500字讲述什么是Programming Methodology?
2. 列举10种Data Structure.
3. 列举10种Algorithm.