没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
零 认清本质
新加坡国立大学计算机系有两门课: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.
一 认清实质
“算法”、“数据结构”等,是本质;很重要,需要掌握,但一般开发时,很少需要自己去实
现。
觉得多数开发,是“拚积木”。
即便是业务逻辑需要对一些数据进行排序,也不可能自己去实现一个 quicksort 算法;而是
直接调用 quicksort 的现成类库。
这也直接造成了 2B ED 穷其一生都不能掌握真正的编程能力。
他们认为,能够“解决”问题就好,至于问题是怎么解决的,他们并不关心。
对于细节的认识、掌控能力,直接造成了水平的天渊之别。
以拍照为例子,以前人们用傻瓜相机,现在人们用 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 的一个光头大牛 Zed A. Shaw,为了表达“没有捷径”这样的观点,
特意写了本《Learn Python The Hard Way》:
http://learnpythonthehardway.org/
甚至有一个系列:http://learncodethehardway.org/
从长远来看:The Hard Way Is Easier。
我完全同意。
作业:
1. 列举 10 个 Python Web 框架
2. Python 有多少种不同的解释器?
3. Perl 跟 Python 有什么不同?
二 怎么看待牛人
请看这个帖子:
http://blog.csdn.net/hu_zhenghui/article/details/7184799
快速浏览即可,无需细读;浏览过后再继续往下看。
读后的感觉是不是:
“虽然不知道在说什么,但是看起来很厉害的样子!”
整篇文章的关键是在这句:
“作者胡某某。曾任完美时空(现更名为完美世界)顾问,承担互联网方面的部分管理工作。
现在主要精力研究互联网产品设计,是 Axure 授权的高级咨询顾问和高级培训讲师。”
这也就是,我在第一课中提到的“啥事不做,整天四处布道,名头都很响亮,如 XX 金牌讲
师”,“Evangelist 本身的技术,很多是很差的;就好像推销员本身,是不会做产品开发、不
懂技术的。他们仅仅是会宣传、鼓吹新技术而已”。
碰巧今天看到这个非常有代表性的帖子;整个帖子看下来,作者毫无海量数据处理实际开发
经验,纯粹堆砌这些流行技术名词而已。他没有用过这些技术,随便乱丢技术名词,整篇似
是而非,必然的结果就是:“虽然不知道在说什么,但是看起来很厉害的样子!”
学习技术的人,如果受了这种“看起来很厉害的样子!”的蒙骗,会走很多很多弯路。
那么,如何识别“看起来很厉害”跟“真的很厉害”?
就好像,CSDN 虽然有些忽悠人的文章,但也是有些好的文章在里面,如何辨别?
1. 看得多了,自然会分辨。
研发知识的最好来源之一是技术博客,就我自己而言,看了博客园自创办伊始前 5 年的所有
首页文章;外加常年订阅 400+博客,twitter fo 400 余人等。
我这么做,主要是因为看得快;没有“看不过来”的问题;但实际上是个很笨的办法。
要保持最新技术的了解,确实是需要看很多 blog;除此之外,我想不出别的途径;但这并
非必要。
2. 看书
多看,最大的好处是了解最新技术,而且这是很土的方法。很多时候,并不需要了解很多
“最新技术”;很多“最新技术”都是属于第一课中所讲的“封装技术”,不了解,也完全没
有关系。
计算机的经典好书并不多,好书是公认、经得起时间考验的。
看完这个豆列也就差不多了:
http://book.douban.com/doulist/995755/
完全可以不去理解“最新”的浮躁,去上面的豆列挑几本看,仔细的看,就可以脱胎换骨了。
就我自己而言,对我技术影响最大的一本书倒不在上面豆列的 20 本书中,而是:
http://book.douban.com/subject/1467587/
经典书,是必须看,并且反复看的;如果说有什么“捷径”的话,看经典书就是最快的捷径
了。
这些经典书中的思想,是永远不会过时的;任何时候看,都不会太晚。
给 ED 看的书也有经典:
http://book.douban.com/subject/1229954/
首先,这是本好书;而且这本 500 多页书的传奇在于它讲了无数企业开发的模式,但其中的
一页半讲述的:Active Record Pattern 影响了过去 5 年多 6 年的 Web 开发潮流。
3. 写代码 + 看代码
学习编程,是一定要去编程的。
剩余22页未读,继续阅读
查理捡钢镚
- 粉丝: 17
- 资源: 317
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0