计算机大师感悟
- 格式:docx
- 大小:22.70 KB
- 文档页数:4
计算机工作总结收获与感悟
在这个信息时代,计算机已经成为我们生活中不可或缺的一部分。
作为一名从
事计算机工作的人,我深刻地体会到了计算机在我们生活和工作中的重要性。
在这里,我想分享一下我在计算机工作中的一些总结、收获和感悟。
首先,计算机工作让我学会了高效的时间管理和自我调节。
在工作中,我们经
常需要面对各种各样的任务和压力,因此,我学会了如何合理安排时间,高效地完成工作。
同时,我也学会了如何在工作之余进行自我调节,保持良好的心态和健康的身体。
其次,计算机工作让我不断学习和提升自己。
在这个领域,技术更新换代非常快,因此,我们需要不断地学习和掌握新的知识和技能。
这让我深刻地意识到了学习的重要性,也让我对自己的职业发展有了更清晰的规划和方向。
另外,计算机工作也让我体会到了团队合作的重要性。
在工作中,我们往往需
要和团队成员一起合作完成任务,这需要我们具备良好的沟通能力、团队合作精神和解决问题的能力。
通过和团队成员的合作,我不仅学到了很多新的知识和技能,也收获了很多宝贵的人际关系。
最后,计算机工作也让我感悟到了技术的力量。
通过计算机技术,我们可以更
高效地完成工作,也可以为社会创造更多的价值。
我深信,只有不断地学习和提升自己,我们才能更好地应对未来的挑战和机遇。
总的来说,计算机工作给了我很多收获和感悟,让我在工作中不断成长和进步。
我相信,在未来的日子里,我会继续努力学习和提升自己,为自己的职业发展和社会的进步做出更大的贡献。
学习感悟:计算机大师们的成才路作者:齐治昌宁洪董威来源:《中国大学教学》2013年第04期摘要:本文介绍了荣获图灵奖和先驱奖的计算机大师的工作历程及其创新业绩,分析了计算机大师们成才的主、客观因素,总结了计算机大师们的成才道路。
并指出在当前信息时代,我国培养计算(机)创新性人才所面临的机遇和挑战。
关键词:计算机大师;创新;成才;因素电子计算机是人类20世纪的伟大发明,是迅速发展并广泛应用的重大科技成果。
它给人类带来了快速、便捷、强大、廉价、可靠、丰富多彩的计算工具;它扩展了计算的方式和内涵,将计算渗透到人类社会的各个领域;它带来了崭新的计算机文化、计算机产业、计算机学科和数以千万计的从业人员。
进入21世纪,用高密度廉价芯片和各种软件“武装”起来的计算机与网络、多媒体、多种传感器连接,逐步构成了与现实世界对应的世界范围的网络计算环境,使人类社会进入了知识经济和信息化的新时代。
2012年是图灵诞辰100周年,回顾计算机发展成就,缅怀计算机大师们的创新和创业历程,从中找出规律和启迪,对于深化计算机教育教学改革、培养创新性人才具有深远的现实意义。
一、荣获图灵奖和先驱奖的大师们为表彰对计算机事业作出重大贡献的科学家和工程师,1966年ACM设ACM图灵奖,1966-2011年共有 58人获图灵奖。
1980年IEEE/CS设计算机先驱奖,1980-2000年共有108人获计算机先驱奖。
仔细分析获奖的内容和获奖者名单可以明显感到,ACM图灵奖的范围是计算机科学,侧重理论、概念、软件、算法、方法学;IEEE/CS计算机先驱奖的范围是计算机工程,侧重计算机系统、实现技术、设备、产品。
计算机科学为计算机工程提供理论基础,计算机工程和应用技术深深地影响着计算机科学的发展。
计算机科学与计算机工程的领域范围可参照CC2004报告提供的示意图,如图1所示[1,2]。
图1 (a)计算机科学学科范围图1 (b)计算机工程学科范围ACM图灵奖涉及的主要内容有:程序设计语言概念、操作系统原理、算法设计和复杂性、人工智能、数据库、图形学、数值和符号计算等。
计算机专业不是学编程,而是懂得计算机的工作原理,以及和计算机相关的学科技术。
一个高手不必懂得编程,coder是最底层的人物,最重要的是思想,解决问题的思想。
对计算机专业的学生来说,英语和数学也是最重要的。
编程不用于实际,编得最好也是花哨,毫无意义。
对于初学者来说,应该懂得更多的why 原理,而不是更多的how,那是工作后的事情。
每一计算机学者都应该有自己的思想,不要跟着别人走,不要看着别人用什么新技术作出什么来的时候,你就心动了,也就想马上学这门技术。
而是有自己的学习思路,和自己学习的方向。
1.不为编程而去编程。
2.学习计算机的原理和核心部分。
3.用形象的思维去学习,最求本质。
4.计算机的相关行业。
计算机高人的心得我始终认为,对一个初学者来说,IT界的技术风潮是不可以追赶的,而且也没有能力去追赶。
我时常看见自己的DDMM们把课本扔了,去卖些价格不菲的诸如C#, 这样的大部头,这让我感到非常痛心。
而许多搞不清指针是咋回事的BBS站友眉飞色舞的讨论C#里面可以不用指针等等则让我觉得好笑。
C#就象当年的ASP一样,“忽如一夜春风来,千树万树梨花开”,结果许多学校的信息学院成了“Web 学院”。
96,97级的不少大学生都去做Web了。
当然我没有任何歧视某一行业的意识。
我只是觉得如果他们把追赶这些时髦技术的时间多花一点在基础的课程上应该是可以走得更远的。
几个误区初学者对C#风潮的追赶其实也只是学习过程中经常遇到的几个误区之一。
我将用一些实际的例子来说明这些现象,你可以按部就班的看看自己是不是属于其中的一种或者几种:认为计算机技术等于编程技术:有些人即使没有这个想法,在潜意识中也有这样的冲动。
让我奇怪的是,许多信息学院的学生也有这样的念头。
认为计算机专业就是编程专业,与编程无关的,或者不太相关的课程他统统都不管,极端的学生只要书上没带“编程”两个字他就不看。
其实编程只是计算机技术应用过程中一种复杂性最低的劳动,这就是为什么IT业最底层的人是程序员(CODER)。
计算机人员心得体会作为一名计算机人员,我在这个领域工作已经有多年了,经历了很多项目和挑战。
在这个过程中,我获得了很多经验和体会,我愿意分享给大家。
首先,计算机领域是一个快速发展和变化的行业。
新的技术、语言和框架不断涌现,我们必须不断学习和跟进。
不仅要学习新的知识,还要学会如何学习。
掌握一门新技术并不难,但保持学习的能力才是关键。
学习能力是我们在这个行业中的竞争力。
其次,团队合作是至关重要的。
计算机领域很少有一个人独立完成一个项目的情况,更多的是需要与他人合作。
一个好的团队能够推动项目的进展,解决问题,取得更好的成果。
在团队合作中,沟通和合作能力是必不可少的。
我们需要学会与他人沟通,分享自己的想法和问题,以便大家能更好地协作和合作。
第三,编码能力是核心竞争力。
作为一名计算机人员,我们的主要任务就是编写代码。
良好的编码能力能够提高工作效率和质量。
编码不仅仅是简单的输入字符,还需要考虑算法的效率、系统的稳定性和可扩展性等因素。
同时,保持代码的可读性和可维护性也是很重要的。
良好的编码习惯是我们应该培养的。
第四,注重细节和质量。
在编写代码和开发应用程序的过程中,我们必须注重细节和质量。
一个小小的错误可能导致整个系统的崩溃,一个小小的瑕疵可能使用户反感。
我们应该培养仔细和细致的习惯,确保代码的质量和应用程序的稳定性。
第五,不断提升自己。
计算机领域的竞争非常激烈,只有不断提升自己才能在竞争中立于不败之地。
我们可以参加培训课程、研讨会和技术交流会,了解最新的技术和趋势。
此外,阅读相关的书籍和论文也是一个很好的方法。
保持学习的热情和求知欲,才能不断提高自己的水平。
第六,勇于挑战和创新。
计算机领域的发展是源源不断的,我们需要勇于挑战和创新。
只有不断尝试和尝试新的方法和技术,我们才能保持竞争力。
同时,我们也要敢于承担风险和错误。
错误并不可怕,只有不断尝试,并从中学习,我们才能取得更好的成果。
第七,保持耐心和持久性。
在计算机领域的工作中,遇到问题和困难是常有的事情。
计算机人员心得体会范文
作为一名计算机人员,我在过去的几年中积累了一些宝贵的经验和体会。
以下是我心得体会的范文:
作为一名计算机人员,我深深地意识到计算机技术的重要性和广泛应用的潜力。
在我从事这个行业的过程中,我学到了许多宝贵的经验和体会。
首先,我意识到在计算机领域,学习是持续不断的。
由于技术的快速变化和新技术的不断出现,我们必须不断地学习和更新知识,以保持自己的竞争力。
其次,我发现在解决问题时,耐心和细心是非常重要的。
在编写代码或进行系统维护时,细微的差错可能会导致系统崩溃或数据丢失。
因此,我们必须保持高度的警惕,并对每个细节进行仔细检查。
同时,我们还要拥有足够的耐心,处理繁琐和复杂的问题时能够保持冷静和专注。
此外,团队合作是取得成功的关键。
在大型项目中,我们需要与其他团队成员紧密合作,共同解决问题和完成任务。
团队合作不仅能够加快工作进度,还能够共享经验和知识,从而提高整个团队的综合能力。
最后,我还意识到在计算机行业,不断自我提升和扩展技能也是非常重要的。
我始终保持对新技术的学习和研究,参加相关的培训和学术会议,以及积极参与开源项目和社区活动。
通过不断地学习和拓宽自己的技能,我能够更好地适应行业变化,并提高自己的竞争力。
总结起来,作为一名计算机人员,我认识到学习、耐心、团队合作和自我提升是取得成功的关键。
这些宝贵的经验和体会将继续指导我的职业发展,并帮助我在计算机行业取得更大的成就。
计算机应用技术的生涯人物的感悟在计算机应用技术的领域中,有许多杰出的生涯人物对这个行业做出了巨大贡献。
通过他们的故事和经验,我们可以获得许多有益的启示和感悟。
首先,这些生涯人物的成功都离不开持续学习的态度。
计算机应用技术是一个快速发展的领域,一项技术可能在几年之后就过时了。
因此,他们时刻保持探索精神,持续学习新的技术和知识。
他们深知学习不是一次性的事情,而是一个持久的过程。
其次,这些人物在解决问题时展现出了极高的创造力和创新能力。
计算机应用技术的发展离不开对问题的发现和解决。
这些人物在经历了无数次失败和挫折后,仍然坚持不懈地寻找解决问题的方法。
他们思维活跃,善于运用自己的知识和经验,提出了许多令人惊叹的创新方法和解决方案。
此外,这些生涯人物的团队合作能力也为人们树立了榜样。
计算机应用技术往往需要不同领域的专家共同合作,才能完成复杂的项目。
这些人物懂得如何与他人合作,并能够充分发挥自己的优势,达到共同目标。
他们理解集体智慧的重要性,相信团队的力量。
最重要的是,这些人物对自己所从事的工作充满热情和追求卓越的精神。
无论是在研究、开发还是应用中,他们都对计算机应用技术怀有热爱之情,并为自己所追求的目标倾注了全部努力。
他们具备超越自我的品质,追求卓越,并不断超越自己。
综上所述,计算机应用技术的生涯人物的感悟包括持续学习的态度、创造力和创新能力、团队合作能力以及对工作的热爱和追求卓越的精神。
这些感悟不仅适用于计算机应用技术领域,也可应用于其他行业和人生中。
我们应该向这些生涯人物学习,将这些感悟融入自己的生活和工作中,追求个人的成长与成功。
2024年计算机专业心得体会作为一名五十年代初投身工作岗位的退休老干部,我在职期间未曾有机会接触电脑。
退休之后,随着子女各自成家立业,我购置了电脑,希望借此丰富我的晚年生活。
由于缺乏基本操作知识,我对电脑充满了敬畏,害怕损坏设备、误删文件或招致病毒,这让我对学习电脑失去了信心,总认为这是年轻人的玩意。
数年前,我的孙女仅六岁时便引导我入门电脑。
在她的指导下,我尝试着打开电脑并使用鼠标,但由于操作不熟练,一口气打开了许多网页却不知如何关闭,等到家人回来,面对这一幕,我们哭笑不得。
此后,我对学习电脑产生了抵触情绪。
虽然内心渴望参加电脑培训班,但我担心与年轻人同堂学习会感到不适,担心损伤自尊。
阅读电脑书籍对我来说也是一项挑战,而向他人请教时又常因表达不清而感到尴尬,甚至有时即便得到了帮助,仍然难以理解操作原理。
在子女的耐心指导下,我逐渐学会了电脑的基本操作,例如上网浏览新闻。
这一简单的操作让我窥见了电脑世界的精彩,激发了我进一步学习的兴趣。
随后,我利用金山软件学习打字,经过几个月的练习,我掌握了拼音和五笔输入法,这为我进一步使用电脑打下了坚实的基础。
我可以通过打字输入在网络上查找资料、搜索知识,甚至发表个人见解。
在尝试申请电子邮箱的过程中,我遇到了诸多困难,如填写用户名、密码和验证码等。
尽管过程曲折,我最终还是成功在网易网站上申请了邮箱和博客地址。
如何有效利用邮箱又成了新的挑战,我必须熟悉邮箱的各项功能才能顺畅交流。
回顾我的学习历程,我认为老年人学习电脑益处良多:退休后容易感到失落,通过上网看新闻,不仅可以了解国家大事,还能增长知识,避免思想落后;电脑操作有利于身心健康,不仅可以查询医疗保健信息,还能通过打字等活动锻炼身心,甚至学习太极拳等文体活动。
2024年计算机专业心得体会(二)计算机科学作为一门实践性极强的学科,其科目众多且内容繁杂,与传统的纯理论学科在学习方法上存在显著差异。
对于在电大学习计算机专业的学生而言,掌握恰当的学习方法至关重要,以确保学习效果显著。
计算机专业书籍读后感最近读了一本计算机专业的书籍,这可真是让我经历了一场奇妙的知识之旅。
这本书啊,就像是一个藏满了宝藏的神秘洞穴,我带着好奇和期待,一点点地深入探索。
刚翻开书的时候,那密密麻麻的代码和专业术语,就像一个个站岗的士兵,严肃而又让人有点望而生畏。
书里讲到的计算机算法部分,让我仿佛置身于一个巨大的迷宫。
那些复杂的逻辑和步骤,就像是迷宫中的弯弯绕绕。
我跟着作者的思路,努力地去理解每一个节点的走向,每一次选择的意义。
比如说那个冒泡排序算法,一开始我真是被它搞得晕头转向。
我就在想,这一堆数字怎么就像调皮的孩子一样,非得按照这样的规则排好队呢?但随着我不断地琢磨,不断地在纸上比划,终于搞清楚了它的原理。
原来啊,就是一次次地比较相邻的两个数字,把大的数字像泡泡一样“浮”到上面去。
当我自己亲手写出代码,让那些杂乱无章的数字变得整整齐齐的时候,心里那种成就感,简直没法形容!还有关于编程语言的介绍,这可真是打开了我新世界的大门。
以前我只知道简单地用一些软件,根本没想过背后的语言是怎么运作的。
书里讲到 C++的时候,那详细的语法规则和示例代码,让我感觉自己像是在学习一门古老而神秘的魔法。
我记得有一次,为了搞清楚一个指针的用法,我在电脑前坐了整整一个下午。
眼睛死死地盯着屏幕,手指不停地敲打着键盘,不断地调试、修改代码。
那种专注的劲儿,就好像我正在破解一个超级重要的密码。
再说数据库的部分,那简直就是一个巨大的信息仓库。
作者把数据库的架构、存储方式、查询优化等等讲得清清楚楚。
我就好像变成了一个仓库管理员,努力去规划每一个货架的位置,让货物(数据)能够快速准确地被找到。
特别是讲到索引的时候,我才明白原来就像我们在书中快速找到某一页需要的目录一样,数据库也有这样的“小助手”来帮忙提高效率。
在阅读的过程中,我也遇到了不少困难。
有时候,一个概念怎么都理解不了,心里那个着急啊!感觉自己就像在黑暗中摸索,找不到出路。
但我又不甘心放弃,就到处去查资料、看视频,甚至还在一些技术论坛上向大神们请教。
软件工程生涯人物访谈启发与感悟
1. 乔布斯 (Steve Jobs) - 作为Apple的创始人和前CEO,乔布斯是一个具有强烈创造力和追求卓越的人物。
他的访谈启发了许多软件工程师要勇于创新并追求卓越。
他的总结中有一句经典的名言是“在大多数情况下,人们不知道自己需要什么,直到你给他们展示出来”。
2. 比尔·盖茨 (Bill Gates) - 盖茨是微软公司的创始人之一,他的访谈表达了对技术的热爱和对创新的不断追求。
他的访谈启发了很多软件工程师要积极探索新的技术领域,并不断学习和进步。
3. 林纳斯·托瓦兹 (Linus Torvalds) - 托瓦兹是开源操作系统Linux的创建者,他的访谈展示了软件工程师对开源和协作的重要性。
他的访谈启发了很多软件工程师要积极参与到开源社区中,分享自己的知识和经验。
4. 扎克伯格 (Mark Zuckerberg) - 作为Facebook的创始人和CEO,扎克伯格的访谈强调了持续学习和不断进步的重要性。
他的访谈启发了许多软件工程师要积极探索新的技术并保持对行业的敏锐感知。
5. 阿迪·奥普特 (Adi Oto) - 奥普特是印度软件工程师,他的访谈讲述了他从贫穷农民背景走向成为世界知名软件工程师的故事。
他的访谈启发了很多软件工程师要坚持自己的梦想,无论出身和环境如何,都能够通过努力实现自己的目标。
这些人物的访谈给予了软件工程师们很多启示和共鸣,包括坚持创新、持续学习、积极参与开源社区等等。
他们的经历和故事激励着软件工程师们不断与自己的潜力竞争,成为技术领域的领导者。
计算机工作心得体会作为计算机工作人员,在这个信息技术高速发展的时代里,我们承载着重要的使命和责任。
我从事计算机工作已经有五年的时间了,通过这些年的工作经验,我深切体会到计算机工作的重要性和挑战性。
在此,我将结合自己的经历和心得,分享一些关于计算机工作的体会。
首先,计算机工作要有强大的学习能力。
信息技术行业一日千里,新的技术和概念层出不穷。
作为计算机工作人员,我们需要时刻保持学习的状态,不断跟进并掌握最新的技术知识。
虽然学习成本较高,但只有不断学习才能适应行业的快速发展和变化。
我的经验是多参加行业会议、研讨会,阅读相关书籍和文章,并与行业内的专家和同行保持交流。
通过这些方式,我能够及时了解到行业的最新动态,并及时调整自己的学习和发展方向。
其次,计算机工作需要有良好的沟通和团队合作能力。
在计算机工作中,我们常常需要与他人进行合作,共同解决问题。
在团队合作中,沟通是非常重要的一环。
一个好的沟通能力可以帮助我们更好地理解他人的意图和需求,并有效地传达自己的观点和建议。
我通过与团队成员多次沟通交流、协商一致,成功解决了多个技术问题,并顺利完成项目。
团队合作让我深刻认识到,只有通过与他人紧密合作,才能取得更好的结果。
另外,计算机工作需要有较强的问题解决能力。
计算机行业是一个充满挑战的领域,我们经常会遇到各种各样的问题和困难。
面对这些问题,我们不能退缩,而是要积极主动地寻找解决方案。
过去我曾遇到过一个问题,在时间紧迫的情况下,我积极与同事、上级进行讨论,并找到了一个切实可行的解决方法。
这次经历让我更加深刻地认识到,掌握问题解决能力是我们工作的关键。
除了上述的能力要求,计算机工作还需要有良好的时间管理和压力承受能力。
计算机行业的工作压力大,工作时间也常常会超出正常工作时间。
在我的工作中,我学会了合理规划时间,将工作分配到不同的时间段,避免过度压力和疲劳。
当面临工作压力和困难时,我会积极寻找合适的方式来缓解压力,比如锻炼身体、阅读书籍等。
如今的孩子变懒了多吃一点苦,又会怎么样呢?我一定是变老了,才会这样喋喋不休的抱怨和感叹“如今的孩子”。
为什么他们不再愿意、或者说不能够做艰苦的工作呢。
当我还是孩子的时候学习编程需要用到穿孔卡片。
那时没有任何类似“退格”键这样现代化功能,如果你出错啦,就没有办法更正,只好扔掉出错的卡片,从头再来。
回想1991年,我开始面试程序员的时候,我一般会出一些编程题,允许用任何语言解题。
99%的情况下,面试者选择C语言。
如今,面试者一般会选择JAVA语言。
说道这里,不要误会我的意思。
JAVA语言本身作为一种开发工具,并没有什么错。
等一等,我要做个更正。
我只是在本篇特定的文章中,不会提到JAVA语言作为一种开发工具,有什么不好的地方。
事实上,他有许许多多不好的地方,不过这些另找时间来谈了。
我在这片文章中,真正想要说的是,总得来看,JAVA语言不是一种非常难的编程语言,无法用来区分优秀程序员和普通程序员。
它可能适合用来完成工作,但是这个不是今天的主题。
我甚至想说,JAVA语言不够难,其实它的特色不算缺点。
但是不管怎样,它就是有这个问题。
如果我听上去像是妄下论断,那么我想说一点我自己微不足道的经历。
大学计算机系的课程,传统上有两个知识点,那就是指针和递归。
你进大学后,一开始总要上一门数据结构课,然后是线性链表、哈希表以及其他诸如此类的课程。
这些课会大量使用指针。
它经常起到一种优胜劣汰的作用。
因为这些课程非常难,那些学不会的人就表示他们的能力不足以达到计算机科学学士学位的要求只能放弃这个专业。
这是一件好事,因为你连指针都觉得很难,那么等学到后面,要你证明不动点定理(fixed point theory)的时候,你该怎么办?有些孩子读高中的时候,就能用BASIC语言在Apple II型计算上,写出漂亮的乒乓球游戏。
等他们进入了大学,都就去选择计算机科学101课程,那门课讲的就是数据结构,当他们接触指针就傻眼啦,后面的事情可想而知,他们就去该学政治学,因为看上去法学院是一个更好地出路。
关于计算机系的淘汰率,我见过各式各样的数据通常在40%到70%之间。
校方一般会觉得,学生拿不到学位很可惜,我则视其为必要的筛选,淘汰那些没有兴趣编程或者没有能力编程的人。
对于许多计算机的青年学生来说,另一门难度课程是有关函数式编程(functional programming )的课程,其中包括递归程序设计(recursive programming)。
MIT将这些课程的标准提的很高,还准们设计了一门必修课(课程代号 6.001),它的教材(structure and Interpretation of Computer Programs,作者为Harold Abelson 和Gerald Jay Sussman Abelson,MIT出版社1996年版)被几十所,甚至几百所大学计算机系采用,充当事实上的计算机科学导论(你能找到这本书旧版)。
这些课程难得惊人。
在第一堂课上,你就要学完Scheme语言的几乎所有内容,你还会遇到一个不动点函数(fixed point function),它的自变量本身就是另一个函数。
我读的这门导论课,是宾夕法尼亚大学的CSE121课程,真是苦不堪言。
我注意到很多学生,也许是大部分学生,都无法完成这门课。
课程的内容实在是太难啦。
我给教授写了一封长长地声泪俱下的Email,控诉这门课不是给人学的。
宾夕法尼亚大学一定有人听到了我的呼声(或者听到了其他抱怨者的呼声),因为如今这门课的计算机语言是Java语言。
我现在觉得,他们还不如没有听见呢。
这就是争议所在。
许多年来,像当年的我一样懒惰的计算机系本科生不停地抱怨,再加上计算机业界也在抱怨毕业生不够用,这一切造成了重大恶果。
过去十年中,大量本里啊堪称完美的好学校,都百分百转向了Java语言的怀抱,这真好的没话说啦,那些用“grep”命令【4】过滤简历的企业招聘主管,大概会很喜欢这样。
最妙不可言的是JAVA语言中没有什么太难的地方,不会真的淘汰什么人,你搞不懂指针和递归也没关系。
所以,计算机系的淘汰率就降低了,学生人数上升了经费预算变大了,可谓皆大欢喜。
学习JAVA语言的孩子是幸运的,因为他们用到以指针为基础的哈希表时,他们永远也不会遇到古怪的段错误(segfault)【5】。
他们永远也不会因为无法将数据塞进有限的内存空间,而急的发疯。
他们永远不用苦苦思索,为什么在一个纯函数的程序中,一个变量的值一会保持不变,一会又变个不停!多么自相矛盾啊!他们不需要怎么动脑筋,就可以在专业上得到4.0的绩点。
我是不是有点苛刻啦,就像是电视里“四个约克郡男人”【6】那样,成了老古板?就在这里吹嘘我是多么刻苦,完成了所有那些高难度的课程?但是,今天我找不到一所大学,还把拉丁语作为必修课。
指针和递归不正像计算机科学里面的拉丁语和希腊语。
说道这里,我坦率的承认,如今的软件代码中90%都不需要指针。
事实上,如果在正式产品中使用指针是很危险的。
好的,这一点我没有异议。
与此同时,函数式编程在实际开发中用到的也不多。
这一点我同意。
但是,对于某些最激动人心的编程任务来说,指针仍然非常重要的。
比如说,如果不用指针,你根本无法开发Linux的内核。
如果不是真正地理解了指针,你连一行Linux的代码也看不懂,说实话,任何操作系统的代码你都看不懂。
如果不懂得函数式编程,你就无法创造出MapReduce【7】,正是这种算法使得Google 的可扩展性(Scalable)达到如此巨大的规模。
单词“Map”(映射)和“Reduce”(化简)分别来自Lisp语言和函数式编程。
回想起来,在类似6.001这样的编程课程中,都有提到纯粹的函数式编程没有副作用。
因此可以直接用于并行计算(parallelizable)。
任何人只要还记得这些内容,那么MapReduce对它来说就显而易见啦。
发明MapReduce的公司就是Google,而不是微软,这个简单的事实说出了原因,为什么微软至今还在追赶,还在试图提供最基本的搜索服务,而Google已经转向了下一个阶段,开发世界上最大的并行式超级计算机-Skynet 【8】,我觉得,微软并没有明白,在这一波竞争中它落后多远。
除了上面那些直接能想到的重要性,指针和递归的真正价值,在于那种你在学习它们的过程中,所得到的思维深度,以及你因为害怕在这些课程中被淘汰的心理抗压能力,它们都是在建造大型系统的过程中必不可少的。
指针和递归要求一定水平的推理能力、抽象思考能力,以及最重要的,在若干个不同抽象层次上,同时审视同一个问题的能力。
因此,是否真正理解指针和递归,与是否是一个优秀的程序员直接相关。
如果计算机系的课程都与Java语言相关,那么对于那些在智力上无法应付复杂概念的学生,就没有东西可以真的淘汰他们,作为一个雇主,我发现那些100%java教学的计算机系,已经培养出了相当一批毕业生,这些学生只能勉强完成难度日益降低的课程作业,只会用JAVA程序编写简单的记账程序,如果你让他们编写一个更难的东西,他们就束手无策啦,他们的智力不足以成为程序员。
这些学生永远也通不过MIT的的6.001课程,或者耶鲁的CS323课程,坦率的说,为什么作为一个雇主的心目中,MIT或者耶鲁大学计算机系的学位的分量要重于杜克大学,这就是原因之一。
因为杜克大学最近已经全部转为JAVA语言教学。
宾夕法尼亚大学的情况也很类似,当初CSE121中的Scheme语言和ML语言,几乎将我和我的同学折磨致死,如今已经全部被JAVA语言替代。
我的意思不是说,我不想雇佣来自杜克大学和宾夕法尼亚大学的聪明学生,我真的愿意雇佣他们,只是对于我来说,确定他们是否真的聪明,如今变得更难了。
以前,我能够分辨出谁是聪明的学生,因为他们可以在一分钟内看懂一个递归算法,或者可以迅速在计算机上实现一个线性链表操作函数,所用时间同黑板上写差不多,但对于JAVA语言学校毕业的学生,看着他们面对上述问题苦苦思索,做不出来的样子,我分辨不出到底是因为学校里没教,还是因为他们不具备编写优秀软件作品的素质。
Paul Graham将这一类程序员称为“Blub”程序员【9】.JAVA语言学校无法淘汰那些永远也成不了优秀程序员的学生,这已经是很糟糕的事情了。
但是,学校可以无可厚非的解释,这不是校方的错。
整个软件行业,或者说至少是其中那些使用grep命令过滤简历的招聘经理,确实一直在叫嚷,要求学校使用JAVA语言教学。
但是,即使如此,JAVA语言学校的教学也还是失败的,因为学校没有成功训练号学生的头脑,没有使他们变得足够熟练、敏捷、灵活,能够做出高质量的软件设计(我不是指面向对象式的设计,那种编程只不过是要求你画上无数个小时,重写你的代码,使他们能够满足面向对象编程的等级继承式结构,或者说要求你思考到底对象之间是“has-a”从属关系,还是“is-a”继承关系,这种“伪问题”将你搞得烦躁不安)。
你需要的是那种能够在多个抽象层次上,同时思考问题的训练。
这种思考能力正是设计优秀软件架构所必需的。
你也许想知道,在教学中,面向对象编程(object-oriented programming,缩写OOP)是否是指针和递归的优秀替代品,是不是也能起到淘汰作用。
简单的回答是:“不”。
我在这里不讨论OOP的优点,我只之处OOP不够难,无法淘汰平庸的程序员。
大多数时候,OOP 教学的主要内容就是记住一些专有名词,比如“封装”(encapsulation)和“继承”(inheritance),然后,再做一些多选小测验,考你是不是明白“多态”(polymorphism)和“重载”(overloading)的区别。
这同历史课上,要求你记住重要的日期和人名,难度差不多。
OOP不构成对智力的挑战,吓不跑一年级新生。
据说,如果你没学好OOP,你的程序依然可以运行,只是维护起来有点难。
但是如果你没学好指针,你的程序就会输出一行段错误信息,而且你对什么地方出错了毫无想法,然后你只好停下来,深吸一口气,真正开始努力在两个不同的抽象层次上,同时思考你的程序是怎么运行的。
顺便说一句,我有充分的理由在这里说,那些使用grep命令过滤简历的招聘经理真是荒谬可笑,我从来没见过能用scheme语言,Haskell语言和C语言中指针编程的人,竟然不能再两天时间里面学会JAVA语言,并且写出java程序,质量竟然不能胜过那些5年JAVA 编程经验的人士。
不过,人力资源部里那些平庸的懒汉,是无法指望他们听进去这些话的。
再说,计算机系承担的发扬计算机科学使命该怎么办?计算机系毕竟不是职业学校啊!训练学生如何在这个行业里工作,不应该是计算机系的任务。
这应该是社区高校和政府就业培训计划的任务,那些地方会交给你工作技能。