- 浏览: 766541 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 777深圳华强北 编辑本段 某一天,当你来到华强北,啊!是了 ... -
上海财经大学金融学专业课程
2010-03-28 10:37 1884你运气真是好,碰上我 ... -
售前售前售前售前售前
2010-03-17 21:10 2544最近刚换了工作,之前一直在做存储,尤其是备份产品的售前支持工作 ... -
【IT168 管理】软件项目经理的基本职责
2010-03-02 16:51 868【IT168 管理】软件项目经理的基本职责: 1. 制 ... -
海康威视
2010-03-01 14:51 487海康威视申请上市 龚虹嘉投资回报达2800倍 2010-2- ... -
life
2010-01-25 02:14 678“关注逃离工科现象”之一 经管专业成吞噬未来工程师的黑洞 本 ... -
先秦经典智慧名言故事丛书(全16册) 内容简介
2010-01-15 13:01 1351先秦经典智慧名言故事 ... -
SCJP
2010-01-09 16:16 780SCJP sun certificate ... -
我也能做CTO之程序员职业规划
2009-12-24 14:42 2694《我也能做CTO之程序员 ... -
编程的4种境界
2009-12-05 01:43 638人类心理学研究中的一 ... -
观点:程序员需培养企业家式的能力
2009-12-03 18:54 606观点:程序员需培养企 ... -
JavaScript开发工具
2009-11-10 07:08 2387http://developer.51cto.com/a ... -
日清日结工作方法简介
2009-11-09 22:26 2400一、日清日结工作方法 ... -
采访Python编程语言的创始人
2009-11-09 02:23 12362007年5月31日 谷歌今天 ... -
2009国内最著名的程序员黑客名单及联系方式
2009-11-09 02:12 29092009国内最著名的程序员 ... -
让你丢掉饭碗的10个不良习惯
2009-10-26 16:44 618找个合适的工作需要3到 ... -
制作个人简历九大禁忌
2009-10-22 16:19 878制作个人简历九大禁忌 ... -
不能不读的管理学著作
2009-10-20 22:41 1237不能不读的管理学著 ... -
售前和 开发的选择
2009-09-25 15:26 1989java 软件开发 4年 转行到 IT咨询 产品专员 售前 如 ... -
测试工程师
2009-09-15 14:41 865作为软件质量控制中的 ...
相关推荐
软考(全国计算机技术与软件专业技术资格(水平)考试)中的高级项目管理师考试,旨在评估并提升参与者的项目管理理论、实践技能以及决策能力。一篇高分论文通常会涵盖以下关键知识点: 1. **项目管理框架**:论文...
在全国计算机软考系统分析师论文范文中,我们可以总结出以下几个知识点: 一、Java 技术在因特网平台上的应用: Java 技术在因特网平台上的应用非常广泛,该技术可以用来开发各种类型的应用系统,例如通信服务平台...
《软考系统分析师考试全方位解析》 在信息技术领域,系统分析师这一角色至关重要,他们负责对企业的信息系统进行规划、设计和优化,确保技术与业务需求的紧密结合。为了成功通过软考系统分析师考试,全面掌握相关...
需要考中级软件设计师的可以看看这个笔记,对应的视频是b站炸薯条老师(zst_2001)的软考视频,笔记里有我自己整理的全部重点和往年的试题,全都是非常干的干货,在这里再感谢一下炸薯条老师,我的成绩是上半场57,...
10 论改进Web服务器性能的有关技术 11 基于构件的软件开发 12 论基于构件的软件开发 13 论基于构件的软件开发 14 论软件产品线技术 15 论软件产品线技术 16 论软件产品线技术 17 论企业信息化战略规划技术 18 论行业...
系统分析师考试 论文范文 涵盖十大类主题 一、软件开发方法 二、需求分析 三、软件设计 四、软件测试与性能 五、软件维护 六、数据库技术 七、计算机网路与信息安全 八、软件项目管理 九、企业应用集成 十、新技术...
公基高分通关手册 249页
《软考系统架构设计师历年真题及答案、题型归类》 系统架构设计师是IT行业中的一个重要角色,他们负责设计、规划和实施复杂的软件系统架构,以满足业务需求和性能指标。为了成为一位合格的架构设计师,通过国家软考...
系统分析师软考论文范文
《全面解析:09-18年软考试题与答案》 软考,全称为全国计算机技术与软件专业技术资格(水平)考试,是中国信息化领域一项重要的国家级考试。它旨在测评应试者的计算机技术和软件专业能力,为企事业单位选拔和评价...
通过对《2021年高项软考优秀论文范文(十大知识领域各一篇).doc》的分析,我们可以看到,软考论文范文涵盖了项目管理、信息系统项目的范围管理和时间管理等多个知识领域,这些知识领域都是软考考试的重要组成部分。
《2009-2015,2017软考系统架构师真题合辑》是一个集合了历年全国计算机技术与软件专业技术资格(水平)考试(简称“软考”)系统架构设计师科目真题的宝贵资源。这个合辑包含了自2009年至2015年,以及2017年的部分...
2021-2022年初级经济师之初级经济师工商管理高分通关题库A4可打印版.doc
《软考中级软件设计师笔记》是一份针对全国计算机技术与软件专业技术资格(水平)考试(简称软考)中级阶段——软件设计师的备考资料。这份笔记由一位成功通过该考试的高分考生精心整理,旨在帮助考生高效复习,避免...
在电力信息系统中,RESTful服务可以用于实现主站层与终端层之间的通信,提供高效、无状态的数据交互。 【软件可靠性设计与应用】 在用电信息采集系统中,软件的可靠性至关重要。采集终端需要在各种复杂的现场环境...
这个压缩包文件“软考-高项-高级信息系统项目管理师--优秀论文(十大知识领域各一篇).zip”包含了十个关键知识领域的精选论文,为备考者提供了深入的学习材料。以下是对这些知识领域的详细阐述: 1. 项目整合管理:...
公务员面试高分第1计:心如巨石.docx
高分学员分享的信息系统项目管理师考试经验,涵盖了准备信息系统项目管理师考试的各门经验,包括综合知识的复习、案例分析的复习、10 大管理的重要性和论文的复习等。 首先,在综合知识的复习中,高分学员建议每天...
系统分析师论文范文,共70多篇: 论软件的组件式开发 远程接入中的安全访问控制 网络安全评估 电子政务项目中的计划管理 应用 CMM 改进软件维护过程 论改进 Web 服务器性能的有关技术——论文 :银行业的...