当前位置: 首页 > 科技观察

三轴!助你成为一名优秀的软件工程师

时间:2023-03-14 12:10:13 科技观察

虽然上面讨论了很多写代码的方法,但好的代码最终还是来自优秀的软件工程师。本节介绍如何成为一名优秀的软件工程师。首先澄清几个误区。一个优秀的软件工程师不一定与以下因素有关。(1)你写这个程序多少年了。(2)写了多少行代码。(3)你在哪里上学,在哪里工作。我将优秀软件工程师的培养方法总结为以下三句话。(1)学习-思考-实践。(2)知识-方法-精神。(3)基础是治学之本。下面将详细解释这三句话。路径一:学习—思考—实践1.学习对于软件工程师来说,学习是非常重要的。软件编写的历史已经有半个多世纪了,可以借鉴的经验太多了。遗憾的是,很多软件工程师虽然工作多年,但并没有充分学习前人和师傅的经验,在很多方面都没有使用正确的方法。在学习路径上,我建议大家优先阅读相关书籍。很多软件工程师主要是通过看博客或者微信上的文章来学习公众号。事实上,很多内容的质量远不如经典书籍。另外,我也建议大家选择一些优质的开源代码进行研究,以提高阅读代码的品味。有些读者没有足够的动力继续学习。在这里我想起苹果公司创始人史蒂夫·乔布斯的一句话:Stayhungry,stayfoolish。关于学习,希望读者养成“学习的习惯”,培养“学习的能力”。我做过很多调查,发现很多人一年读的书不超过两本书,远远少于大家在大学读的书。在一个不断发展的社会中,如果一个人5-10年不学习,一个人很快就会“过时”。养成不断学习的习惯很重要。我还发现有些人学不会,也抓不住阅读的重点。这意味着他们的“学习能力”相对较弱。我建议你阅读《如何阅读一本书》。本书深入介绍了正确、高效的阅读方法。2、想想古人说的,学而不思则无用。即使学会了一些知识和方法,获得了一些实践的机会,如果不去思考,就无法形成自己的思想体系,就等于白学白干了。一方面,在思考之前,所学的知识或方法只是外在的。如果不能在思维的基础上深入理解,就很难在工作中灵活运用;内容存在一些差异,需要在工作中通过思考判断差异,总结经验,形成符合实际的方法论。3、实践在学习和思考的基础上,还要勇于实践。有些读者经过学习和思考知道什么是好方法,但在工作中遇到问题时还是不敢去实践。在实践中,要有“知行合一”的精神。以前,北大唐义杰老师曾对“真善美”作过总结。我觉得总结的特别好:天人合一,叫做真理;天人合一,叫做真理。团结才叫美。根据我的经验,所有的进步都来自失败和挫折。没有一种方法是学了一次就可以掌握的,所有成功的方法都需要在实践中不断体验和调整。一个人的学习速度,从某种意义上说,取决于他犯错的速度,而在这方面大人是不如小孩的。孩子们学说话很快,因为这是一个犯错误并同时改正错误的过程。学走路的孩子也是如此。大人怕犯错,所以往往不敢尝试,学习的速度也变慢了。Path2:Knowledge-Method-Spirit1.Knowledge对于那些认为“软件工程师只能工作到35岁”的人来说,其中一个论据是软件工程师经常需要学习,他们担心自己不会成为35岁以上才可以学习。如果只是为了学习新东西,那是真的。在这个知识爆炸的时代,知识是最快过时的。对于软件工程师来说,由于不断出现新的编程语言、新的系统、新的概念……只学习知识的人总觉得世界变化太快了。如何解决这个问题呢?这就要求我们不仅要学习知识,更要学习方法。2、方法如果我们从“方法”的角度来看世界变化的速度,我们会发现变化的速度并没有那么快。我在本书中介绍的很多内容都不是新知识,而是20多年前在学校学到的,今天仍然适用。有些方法几千年也不会过时。比如《老子》介绍的方法,虽然只有几千字,却能给人留下深刻的印象。与“知识”相比,“方法”二字总是让很多人感到“空虚”。但是这个“虚拟”(方法)可能比那个“真实”(知识)更有价值。最深奥的法门,其实是不可言说的,就像《老子》中的一句话:道可说,非常道。(如果“道”可以说,那不是永恒的“道”。)对于软件工程师来说,分析问题和解决问题的能力是最重要的。其实这就是“研究”的能力。关于“研究”,加州理工学院的StevenLow先生在20多年前的一封邮件中给了我一个很好的定义:ToIdentifytheFundamentalProblem,andSolveit。重要问题并加以解决。)3.精神即使有了知识和方法,生存还是毁灭也永远是个问题。前路往往不是鲜花和掌声,而是困难和荆棘。人类总是在神性和动物性之间挣扎,进步往往源于对理想的追求。关于精神层面,这里有三句话供大家参考。(1)独立精神,自由思想。这是清华大学陈寅恪先生为纪念王国维所写的碑文中的一句话。这座纪念碑位于清华大礼堂附近的第一教学楼旁边。我一直认为,这是清华大学除“自强不息,厚德载物”之外的另一重要校训。(2)Don'tfollow(不跟随)。这是20多年前加州大学洛杉矶分校(UniversityofCalifornia,LosAngeles,UCLA)的老师张丽霞给我的一句话。当时,我向张老师请教如何做研究。张老师的话让我印象深刻。(3)不懈追求完美。“完美”永远是一个难以实现的目标。对于“完美”,我们需要不断的追求。路径三:基础是学术研究的基础。一些软件工程师在发展到一定阶段后,发现很难继续改进。对于一些规模较大的项目,他们会感到不确定;对于某些方向,他们会感到无法继续深入。其实这些都是因为之前的基础没有打好。于敏是2014年国家最高科学技术奖获得者,中国氢弹英雄。于敏特别喜欢《诫子书》中诸葛亮的格言,并将其奉为自己的座右铭:不以静为远。他还非常喜欢WeiZheng的两个词来劝告TangTaizong:寻求树木长老的人必须加强其根源。欲流远者,必疏其泉。他知道基础是学术的基础。对于软件工程师来说,需要具备的基本能力如下。(1)计算机科学基础知识和方法,包括:数据结构、算法、操作系统、系统结构、计算机网络等(2)软件开发相关知识和方法,包括:基本软件编写方法、软件工程方法、编程思想等。(3)基本思维能力和沟通能力,包括:逻辑思维能力、归纳总结能力和表达能力等。(4)研究能力,主要是分析和解决问题的能力。对于一个软件工程师来说,建立以上基础至少需要5到8年的时间。通过这篇文章,希望大家能够对“软件工程师”这个职业建立一个正确的认识。软件工程师不等于“码农”。一个软件工程师不仅要会写代码,还需要有非常全面的能力。(1)代码可以是艺术品,也可以是“垃圾”,关键在于写代码的人。希望大家可以朝着艺术家的方向努力,努力把自己的代码变成艺术品。(2)不要忘记我们为什么出发。我们的目标是改变世界/知识,而不是学习编程或炫耀技术。起初,我认为写代码的目标是“改变世界”,但后来我改变了主意,将目标改为“通过知识获得知识”。事实上,我们工作和生活的主要目的是增加我们对世界的认识和认识。如果你已经写了很多年代码,但仍然不理解编写代码的“方式”,那么你就是在浪费时间和生命。(3)好代码的源头不是写出好代码。好的代码是一系列工作的结果,包括需求分析、系统设计、编码、测试、上线运行等。(4)代码是写给别人看的,而不仅仅是为了它能正确运行。软件工程师写出别人看不懂的代码是失败的。(5)有办法写出好的代码。通过系统的、持续的学习、思考和实践正确的方法,我们也可以自己创造出优质的产品。一个优秀的软件工程师的发展至少需要8到10年的积累,大家需要摒弃浮躁的心态。