- 浏览: 749313 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
webcover:
最新的中文网络记事本: 破笔记
网络记事本:http://w ...
五个最佳的免费网络记事本 -
fred_nxh:
很好,长见识了
java中堆(heap)和堆栈(stack)有什么区别 -
efeige:
兄弟,请问一下,为什么我的2003系统 网站属性 里面没有“服 ...
启用IIS Gzip 页面压缩技术 加速网页的浏览速度 -
252401762:
同样的问题啊,不知道楼主是否已经转做售前了
售前和 开发的选择 -
yuan:
膜拜玩静电的现在呢?
来回顾一下,当年的“发烧史”吧:
进任何一家书店,你会看见《teach yourself java in 7 days》(7天java无师自通)的旁边是一长排看不到尽头的类似书籍,它们要教会你visual basic、windows、internet等等,而只需要几天甚至几小时。我在amazon.com上进行了如下搜索:
pubdate: after 1992 and title: days and (title: learn or title: teach yourself)
(出版日期:1992年后 and 书名:天 and (书名:学会 or 书名:无师自通))
我一共得到了248个搜索结果。前面的78个是计算机书籍(第79个是《learn bengali in 30 days》,30天学会孟加拉语)。我把关键词“days”换成“hours”,得到了非常相似的结果:这次有253本书,头77本是计算机书籍,第78本是《teach yourself grammar and style in 24 hours》(24小时学会文法和文体)。头200本书中,有96%是计算机书籍。
结论是,要么是人们非常急于学会计算机,要么就是不知道为什么计算机惊人地简单,比任何东西都容易学会。没有一本书是要在几天里教会人们欣赏贝多芬或者量子物理学,甚至怎样给狗打扮。
让我们来分析一下像《learn pascal in three days》(3天学会pascal)这样的题目到底是什么意思:
·学会:在3天时间里,你不够时间写一些有意义的程序,并从它们的失败与成功中学习。你不够时间跟一些有经验的程序员一起工作,你不会知道在那样的环境中是什么滋味。简而言之,没有足够的时间让你学到很多东西。所以这些书谈论的只是表面上的精通,而非深入的理解。如alexander pope(译注:英国诗人、作家,1688-1744)所言,一知半解是危险的(a little learning is a dangerous thing)。
·pascal:在3天时间里你可以学会pascal的语法(如果你已经会一门类似的语言),但你无法学到多少如何运用这些语法。简而言之,如果你是,比如说一个basic程序员,你可以学会用pascal语法写出basic风格的程序,但你学不到pascal真正的优点(和缺点)。那关键在哪里?alan perlis(译注:acm第一任主席,图灵奖得主,1922-1990)曾经说过:“如果一门语言不能影响你对编程的想法,那它就不值得去学”。另一种观点是,有时候你不得不学一点pascal(更可能是visual basic和javascript之类)的皮毛,因为你需要接触现有的工具,用来完成特定的任务。但此时你不是在学习如何编程,你是在学习如何完成任务。
·3天:不幸的是,这是不够的,正如下一节所言。
10年编程无师自通
一些研究者(hayes、bloom)的研究表明,在许多领域,都需要大约10 年时间才能培养出专业技能,包括国际象棋、作曲、绘画、钢琴、游泳、网球,以及神经心理学和拓扑学的研究。似乎并不存在真正的捷径:即使是莫扎特,他4 岁就显露出音乐天才,在他写出世界级的音乐之前仍然用了超过13年时间。再看另一种音乐类型的代表--披头士,他们似乎是在1964年的ed sullivan节目中突然冒头的。但其实他们从1957年就开始表演了,即使他们很早就显示出了巨大的吸引力,他们第一次真正的成功之作《sgt. peppers》也要到1967年才发行。samuel johnson(译注:英国诗人)认为10 年还是不够的:“任何领域的卓越成就都只能通过一生的努力来获得;稍低一点的代价也换不来。”(excellence in any department can be attained only by the labor of a lifetime; it is not to be purchased at a lesser price.) 乔叟(译注:chaucer,英国诗人,1340-1400)也抱怨说:“生命如此短暂,掌握技艺却要如此长久。”(the lyf so short, the craft so long to lerne.)
下面是我在编程这个行当里获得成功的处方:
·对编程感兴趣,因为乐趣而去编程。确定始终都能保持足够的乐趣,以致你能够将10年时间投入其中。
·跟其他程序员交谈;阅读其他程序。这比任何书籍或训练课程都更重要。
·编程。最好的学习是从实践中学习。用更加技术性的语言来讲,“个体在特定领域最高水平的表现不是作为长期的经验的结果而自动获得的,但即使是非常富有经验的个体也可以通过刻意的努力而提高其表现水平。”(p. 366),而且“最有效的学习要求为特定个体制定适当难度的任务,有意义的反馈,以及重复及改正错误的机会。”(p. 20-21)《cognition in practice: mind, mathematics, and culture in everyday life》(在实践中认知:心智、数学和日常生活的文化)是关于这个观点的一本有趣的参考书。
·如果你愿意,在大学里花上4年时间(或者再花几年读研究生)。这能让你获得一些工作的入门资格,还能让你对此领域有更深入的理解,但如果你不喜欢进学校,(作出一点牺牲)你在工作中也同样能获得类似的经验。在任何情况下,单从书本上学习都是不够的。“计算机科学的教育不会让任何人成为内行的程序员,正如研究画笔和颜料不会让任何人成为内行的画家”,eric raymond,《the new hacker’s dictionary》(新黑客字典)的作者如是说。我曾经雇用过的最优秀的程序员之一仅有高中学历;但他创造出了许多伟大的软件,甚至有讨论他本人的新闻组,而且股票期权让他达到我无法企及的富有程度(译注:指jamie zawinski,xemacs和netscape navigator的作者)。
·跟别的程序员一起完成项目。在一些项目中成为最好的程序员;在其他一些项目中当最差的一个。当你是最好的程序员时,你要测试自己领导项目的能力,并通过你的洞见鼓舞其他人。当你是最差的时候,你学习高手们在做些什么,以及他们不喜欢做什么(因为他们让你帮他们做那些事)。
·接手别的程序员完成项目。用心理解别人编写的程序。看看在没有最初的程序员在场的时候理解和修改程序需要些什么。想一想怎样设计你的程序才能让别人接手维护你的程序时更容易一些。
·学会至少半打编程语言。包括一门支持类抽象(class abstraction)的语言(如java或c++),一门支持函数抽象(functional abstraction)的语言(如lisp或ml),一门支持句法抽象(syntactic abstraction)的语言(如lisp),一门支持说明性规约(declarative specification)的语言(如prolog或c++模版),一门支持协程(coroutine)的语言(如icon或scheme),以及一门支持并行处理(parallelism)的语言(如sisal)。
·记住在“计算机科学”这个词组里包含“计算机”这个词。了解你的计算机执行一条指令要多长时间,从内存中取一个word要多长时间(包括缓存命中和未命中的情况),从磁盘上读取连续的数据要多长时间,定位到磁盘上的新位置又要多长时间。
·尝试参与到一项语言标准化工作中。可以是ansi c++委员会,也可以是决定自己团队的编码风格到底采用2个空格的缩进还是4个。不论是哪一种,你都可以学到在这门语言中到底人们喜欢些什么,他们有多喜欢,甚至有可能稍微了解为什么他们会有这样的感觉。
·拥有尽快从语言标准化工作中抽身的良好判断力。
抱着这些想法,我很怀疑从书上到底能学到多少东西。在我第一个孩子出生前,我读完了所有“怎样……”的书,却仍然感到自己是个茫无头绪的新手。30个月后,我第二个孩子出生的时候,我重新拿起那些书来复习了吗?不。相反,我依靠我自己的经验,结果比专家写的几千页东西更有用更靠得住。
fred brooks在他的短文《no silver bullets》(没有银弹)中确立了如何发现杰出的软件设计者的三步规划:
1、尽早系统地识别出最好的设计者群体。
2、指派一个事业上的导师负责有潜质的对象的发展,小心地帮他保持职业生涯的履历。
3、让成长中的设计师们有机会互相影响,互相激励。
这实际上是假定了有些人本身就具有成为杰出设计师的必要潜质;要做的只是引导他们前进。alan perlis说得更简洁:“每个人都可以被教授如何雕塑;而对米开朗基罗来说,能教给他的倒是怎样能够不去雕塑。杰出的程序员也一样”。
所以尽管去买那些java书;你很可能会从中找到些用处。但你的生活,或者你作为程序员的真正的专业技术,并不会因此在24小时、24天甚至24个月内发生真正的变化。
参考文献
bloom, benjamin (ed.) developing talent in young people, ballantine, 1985.
brooks, fred, no silver bullets, ieee computer, vol. 20, no. 4, 1987, p. 10-19.
hayes, john r., complete problem solver, lawrence erlbaum, 1989.
lave, jean, cognition in practice: mind, mathematics, and culture in everyday life,
cambridge university press, 1988.
答案
各种操作的计时,2001年夏天在一台典型的1ghz pc上完成:
执行单条指令 1 纳秒 = (1/1,000,000,000) 秒
从l1缓存中取一个word 2 纳秒
从主内存中取一个word 10 纳秒
从连续的磁盘位置中取一个word 200 纳秒
从新的磁盘位置中取一个word(寻址) 8,000,000纳秒 = 8毫秒
脚注
t. capey指出amazon上面《complete problem solver》的页面中,《teach yourself bengali in 21 days》和《teach yourself grammar and style》被列在了“购买此书的顾客还买了以下书籍”栏目里面。我猜其中一大部分察看这两本书的人都是从我这里过去的。
译本
感谢以下作者将本文翻译成其他语言:
日文(yasushi murakawa),中文(郭晓刚),繁体中文(jason chen),西班牙文(carlos rueda),德文(stefan ram),法文(p. e. allary),土耳其文(çağıl uluşahin)。
发表评论
-
深圳华强北
2010-04-04 19:33 738深圳华强北 编辑本段 某一天,当你来到华强北,啊!是了 ... -
上海财经大学金融学专业课程
2010-03-28 10:37 1847你运气真是好,碰上我 ... -
售前售前售前售前售前
2010-03-17 21:10 2489最近刚换了工作,之前一直在做存储,尤其是备份产品的售前支持工作 ... -
【IT168 管理】软件项目经理的基本职责
2010-03-02 16:51 836【IT168 管理】软件项目经理的基本职责: 1. 制 ... -
海康威视
2010-03-01 14:51 487海康威视申请上市 龚虹嘉投资回报达2800倍 2010-2- ... -
life
2010-01-25 02:14 636“关注逃离工科现象”之一 经管专业成吞噬未来工程师的黑洞 本 ... -
先秦经典智慧名言故事丛书(全16册) 内容简介
2010-01-15 13:01 1312先秦经典智慧名言故事 ... -
SCJP
2010-01-09 16:16 752SCJP sun certificate ... -
我也能做CTO之程序员职业规划
2009-12-24 14:42 2662《我也能做CTO之程序员 ... -
编程的4种境界
2009-12-05 01:43 601人类心理学研究中的一 ... -
观点:程序员需培养企业家式的能力
2009-12-03 18:54 576观点:程序员需培养企 ... -
JavaScript开发工具
2009-11-10 07:08 2347http://developer.51cto.com/a ... -
日清日结工作方法简介
2009-11-09 22:26 2357一、日清日结工作方法 ... -
采访Python编程语言的创始人
2009-11-09 02:23 11712007年5月31日 谷歌今天 ... -
2009国内最著名的程序员黑客名单及联系方式
2009-11-09 02:12 25582009国内最著名的程序员 ... -
让你丢掉饭碗的10个不良习惯
2009-10-26 16:44 572找个合适的工作需要3到 ... -
制作个人简历九大禁忌
2009-10-22 16:19 841制作个人简历九大禁忌 ... -
不能不读的管理学著作
2009-10-20 22:41 1197不能不读的管理学著 ... -
售前和 开发的选择
2009-09-25 15:26 1951java 软件开发 4年 转行到 IT咨询 产品专员 售前 如 ... -
测试工程师
2009-09-15 14:41 832作为软件质量控制中的 ...
相关推荐
需要考中级软件设计师的可以看看这个笔记,对应的视频是b站炸薯条老师(zst_2001)的软考视频,笔记里有我自己整理的全部重点和往年的试题,全都是非常干的干货,在这里再感谢一下炸薯条老师,我的成绩是上半场57,...
10 论改进Web服务器性能的有关技术 11 基于构件的软件开发 12 论基于构件的软件开发 13 论基于构件的软件开发 14 论软件产品线技术 15 论软件产品线技术 16 论软件产品线技术 17 论企业信息化战略规划技术 18 论行业...
系统分析师考试 论文范文 涵盖十大类主题 一、软件开发方法 二、需求分析 三、软件设计 四、软件测试与性能 五、软件维护 六、数据库技术 七、计算机网路与信息安全 八、软件项目管理 九、企业应用集成 十、新技术...
公基高分通关手册 249页
2023年下半年11月份架构师论文范文 摘要 去年三月份,我所在的公司启动国网电力用户用电信息采集系统项目,我被任命为项目负责人。国网电力用户用电信息采集系统是国家电网公司坚强智能电网建设的一部分。由于公司...
软考的高级项目管理师的高分论文
2021-2022年初级经济师之初级经济师工商管理高分通关题库A4可打印版.doc
古诗词鉴赏高分秘籍之六:破阵子.docx
2021年高项软考优秀论文范文(十大知识领域各一篇).doc
软考中级——软件设计师笔记 笔记总共分为三部分:整体笔记、计算公式、教学视频链接。 (有这个笔记就不用看书了,也不用看视频,重点我都划出来了,注:本人软考中级软件设计师高分过)
古诗词鉴赏高分秘籍之四:天净沙.docx
公务员面试高分第1计:心如巨石.docx
应用文高分第一步:必须根据所给情景来写
软考-高项-高级信息系统项目管理师--优秀论文(十大知识领域各一篇).zip
后天就要考试了,今天拿出来与大家共享,希望能增加点人品,考个高分……其实软考的试题还比较容易得到,比较完整而且正确的答案就难找了,事实上,软考的各类别的考试试题有些是重复的,大家可以参考其他类别的考试...
高分学员分享信息系统项目管理师考试经验,介绍了准备信息系统项目管理师的各门的经验。
计算机软件技术考试信息系统项目管理师第三场考试论文部分
软考高项论文-风险管理
软考高级-系统规划与管理师-思维导图-第1章-信息系统综合知识,png格式,用看图软件打开,高分辨率,可以放大缩小
教师《面试高分宝典》:招聘面试心得集锦.pdf