20年软件工程师的经验

软件工程师在做设计的时候,一定要有设计的思维,码农如果只是砌砖的,那么他的可替代性和技能能力并不高。前段时间看到一个设计师傅,在很狭小的空间内设计了非常非常不错的室内设计,利用了每一个可以利用的地方。

如果我们写软件,能做到这样的程度,那么,你写的代码,一定不仅仅是简单的代码那么简单。它一定是一件非常不错的艺术品。

好了,我们看看一个拥有20年开发经验的软件工程师,是如何看待软件开发的~

711563b4d2731b49848df445c7222dfd.png

导读

Justin Etheredge是一位有 20 年软件经验的工程师,他表示,自己在过去 20 年的经历塑造了他对软件的看法,并产生了一些信念,他试图将这些信念缩减为一个可管理的列表,希望这些建议能给别人带来价值。 

近日,新闻网站 Hacker News 一个帖子可谓火爆,该贴内容讲的是一位有 20 年软件经验的工程师,学到的 20 件事。

23dc92005a3d8b95774deecf61ce2550.png

如果你在科技领域工作多年,有什么对后来人要说的话?这篇文章中包含 20 条建议,许多建议都是来自他人的一些经验总结。文章作者 Justin Etheredge 工作经历可谓丰富,他的职业生涯中前半部分是软件工程师,为各种小型企业和初创公司工作,然后进入咨询行业并在许多真正的大型企业中任职。之后 Justin Etheredge 职业发展良好,团队从 2 人发展到 25 人。10 年前,Justin Etheredge 主要与中小型企业合作,现在他们与大型和小型企业合作。

Justin Etheredge 表示,自己在过去 20 年的经历塑造了他对软件的看法,并产生了一些信念,他试图将这些信念缩减为一个可管理的列表,希望这些建议能给别人带来价值。

Justin Etheredge 的 20 条经验分享

1. 我还是什么都不懂

我们中的大多数人可能都会频繁听到类似这样的话,「你怎么会不知道什么是 BGP?你从没听说过 Rust?」我们中的许多人喜欢软件的原因是因为我们是终身学习者,在软件领域,无论你朝哪个方向发展,都有广阔的知识视野向各个方向传播,并且发展方向每天都在扩展。这意味着你可以在职业生涯中度过几十年,但与在看似相似的角色上也花了几十年的人相比,软件领域的人仍然存在巨大的知识差距。你越早意识到这一点,你就可以越早摆脱冒名顶替综合症,而是乐于向他人学习和教导他人。

2. 软件最困难的部分是构建正确的内容

大多数软件工程师不相信这一点的原因是因为他们认为这贬低了自己的工作。然而相反的是,恰恰是这一点突出了软件工程师工作环境的复杂性和非理性,这进一步加剧了软件工程师的挑战。你可以设计出在技术上最令人惊叹的东西,然而糟糕的是,最后没人愿意使用它。这种事情无时无刻不在发生。设计软件主要是一种倾听需求的活动,通常我们必须兼任软件工程师、聆听者和人类学家的身份。专注于这个设计过程,无论是通过专门的 UX 团队成员还是通过简单的自我教育,都将带来巨大的回报。 

3. 最好的软件工程师需要像设计师一样思考

伟大的软件工程师会深入思考他们所写代码的用户体验。例如外部 API、编程 API、用户界面、协议还是其他接口, 优秀的软件工程师会考虑谁将使用他们的研究、为什么使用它、如何使用以及对这些用户来说什么是重要的。牢记用户需求才是良好用户体验的核心。

4. 最好的代码是没有代码,或者是不需要维护的代码

编程人员需要会编程。大多数人都会在自己擅长的方面犯错,这是人的本性。很多软件工程师经常在编写代码方面犯错,尤其是当非技术解决方案不明显时。无需人员维护的代码也是如此。当很多算法已经存在时,工程团队很容易想要开辟新的方法,这是一个平衡的行为。

有很多理由让你重新发明轮子,但需要注意的是「非原创」并不在其中。

5. 软件是达到目的的一种手段

软件工程师的主要工作是交付价值, 但很少有软件开发人员了解这一点,甚至有更少的软件开发人员将其内在化。真正内在化会导致解决问题的不同方式,以及查看工具的不同方式。如果你真的相信软件是服从于结果的,你就会准备好真正找到适合工作的工具,而这可能根本不是软件。

6. 为自己设定截止日期

有些人倾向于深入问题并开始编写代码,而有些人只想研究理论,没有着手代码,进而让自己陷入困难的漩涡。在这些情况下,为自己设定一个截止日期,然后开始探索解决方案。当你开始解决问题时,你会很快学到更多,这将引导你迭代到更好的解决方案。

7. 如果你不能很好地把握可能发生的一切,你就不能设计一个好的系统

与开发者生态系统进展保持一致是一项巨大的工作,了解生态系统中哪些是至关重要的,如果你不了解给定生态系统中哪些是可能的,哪些是可用的,那么除了能发现最简单的问题之外,你不可能为所有问题设计一个合理的解决方案。总而言之,你要警惕那些很长时间没有编写任何代码设计系统的人。

8. 每个系统都会很糟糕,你需要克服

Bjarne Stroustrup 有一句名言:只有两种语言,即人们抱怨的语言和没人使用的语言。这一名言可以扩展到大型系统。如果没有正确的软件架构,你永远无法偿还所有的技术债务,你永远无法设计出完美的界面。尽量少担心系统的优雅和完美, 相反,要努力持续改进你的系统,并创建一个团队喜欢在其中工作的适宜系统,并可持续地提供价值。

9. 多问为什么

抓住任何机会进行询问。例如「有新的团队成员加入吗?注意他们在哪里出现混淆以及他们问的什么问题。有一个没有意义的新功能请求?」等等这些看似不起眼的问题。确保自己了解目标以及推动此功能需求的因素。如果你没有得到明确的答案,请继续问为什么,直到明白为止。

10. 程序员大神都是传说

寻找工作效率能达到 10 倍的程序员是不可取的。那些所谓的一个人可以在 1 天内完成另一个程序员(有能力、努力工作、同样有经验的)在 2 周内完成的想法是愚蠢的。假如程序员抛出 10 倍数量的代码,那么你需要 10 倍数量的精力修复它。一个人成为 10 倍程序员的唯一方法是将他们与 0.1 倍程序员进行比较。一个浪费时间、不寻求反馈、不测试代码、不考虑边缘情况等的人…… 我们应该更关注的是让 0.1 倍的程序员远离我们的团队,而不是寻找神话般的 10 倍程序员。

11. 工程师需要更多的建议

最让人担心的是没有人对高级工程师构建的软件提出意见,相反的,他们宁愿希望有人提出强烈的反对意见,也不愿别人根本没有意见。如果你正在使用某个工具,你需要更多的体验才能知道这个工具的优势和劣势,对于劣势,你可能需要探索其他语言、库和范式才能解决。除了积极寻找别人是如何使用不同的工具和技术完成任务之外,没有什么方法能更快地提升你的技能。

12. 你根本不懂什么是创新

人们经常谈论创新,但他们通常寻找的是廉价的胜利。如果你真的在创新,并改变了人们做事的方式,那么你应该期待负面的反馈。如果你相信你正在做的事情,并知道它真的会改善一些事物,那么你需要准备好迎接一场长期的战斗。

13. 数据是系统中最重要的部分

对于许多程序员来说,数据是系统中最重要的部分。在这样的系统中,发生在黄金路径之外的任何操作都会产生脏数据。将来处理这些脏数据可能会变成一场噩梦。请记住,数据可能会比代码库存在时间更长。花精力保持数据的有序和清洁,从长远来看,你会得到很好的回报。

14. 寻找技术「鲨鱼」

一直存在的旧技术可看作「鲨鱼」,而不是「恐龙」。这些旧技术很好地解决了问题,以至于在不断快速变化的技术世界中幸存下来。但是请不要随意替换这些技术,只有在有充分理由的情况下才替换它们。这些技术不会花哨,也不会令人兴奋,但它们会在很多情况下完成工作。

15. 不要误以为谦卑就是无知

很多软件工程师不会发表意见,除非被要求才会提出意见。不要以为别人不发表自己的观点就没有什么可补充的。有时候,最聒噪的人恰恰是我们最不想听的人。和你周围的人交谈,寻求他们的反馈和建议。你会庆幸你这么做了。

16. 软件工程师应该定期记录研究

软件工程师应该定期写博客、写日记、写文档,多做那些保持书面沟通技巧的事情。写作可以帮助软件工程师思考问题,并帮助自己与团队更有效地沟通。良好的书面沟通是任何软件工程师都需要掌握的最重要的技能之一。

17. 让过程尽可能的精简

如今,每个人都想变得敏捷,但敏捷是通过构建小块的东西,然后学习、迭代完成的。如果有人想把更多的东西塞进去,这是不可取的。在工作中,你很少听到科技公司或大型开源项目吹嘘他们的 Scrum 流程有多棒?在工作中保持精益求精。

18. 软件工程师需要有主人翁的感觉

如果你让某人远离他们的工作成果,他们就不会那么关心自己的工作。这就是为什么跨职能团队工作得如此出色,以及为什么 DevOps 变得如此流行的主要原因。这不仅仅是关于交接和低效率,而是关于从头到尾拥有整个过程,并直接负责交付价值。让一群充满激情的人完全拥有设计、构建和交付软件(或任何真正的东西)的所有权,令人惊奇的事情就会发生。

19. 面试对于说明一个团队成员的优秀程度几乎没有价值

面试的意义在于了解他 / 她是谁,以及他们对于特定专业领域的兴趣程度。而面试「原本该有」的意义,试图了解他们是否能够成为一个优秀团队成员的努力都是徒劳的。相信我,一个人的聪明或博学程度和他是否能够在团队中做到贡献没有太大关系。没有人会在面试中告诉你,他们会不可靠、随便骂人、自负或从不准时出席会议。

有人可能会声称他们可以在面试中看出端倪「如果他们在第一次面试中询问休息时间,那就要小心了。」但这些都是胡说八道。如果你使用这样的信号作为评判标准,你只是在猜测并拒绝优秀的候选人。

20. 小即是美

有很多力量会促使你预先构建更大的系统。要求更多的预算,无法决定削减哪项功能,希望提供系统的「最佳版本」,所有这一切都在推动我们构建过多,但你应该为反对这种趋势而战。构建一个系统地时候,你会学习到很多东西, 这会和你当初的设想大为不同。但对于很多人来说,以最好为目标是很难的。

老程序员的这些建议或许可以为你带来一些帮助。在成为一名开发者之后,你是否也有踩过的坑,或者总结出来的经验?

原文链接:

https://www.simplethread.com/20-things-ive-learned-in-my-20-years-as-a-software-engineer/


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html超市代码,前端 CSS : 5# 纯 CSS 实现24小时超市

介绍原文链接感謝 comehope 大佬的 [前端每日实战]效果预览源代码地址代码解读1. html 结构命名规则使用了 BEM常规样式初始化* {margin: 0;padding: 0;box-sizing: border-box;}body {height: 100vh;overflow: hidden;}2. 街道背景街道背景分为两部分深蓝色的天空.street {hei…

送30块树莓派PICO 开发板!

大家好,今天是周日,给大家搞个小抽奖,送30块。嵌入式猛男必备,学嵌入式看『我要学嵌入式』,知识持久有力。点击关注,回复【1031】参与抽奖,免费送 10块 树莓派最新PICO开发板。学C语言看『写代码…

嘉立创又搞大事情了,与你我相关!

你们一定不知道嘉立创最近又悄咪咪的做了一件大事儿,硬创社硬件项目共享平台上线公测啦,这是一个帮助电子工程师实现技术变现的平台,平台刚刚上线公测,前期还在邀请电子工程师填充内容阶段,即日起平台每上传一个项目就…

c html联调,JS与native 交互简单应用

JS与native 交互简单应用一、objectiveC 语法简介二、简易项目浏览器搭建新建项目步骤:1>DraggedImage.png2>2222.png3>33333.png4>4444.png建立一个小的浏览器即webview关键代码如下:// context 上下文也可以在此处获取,开始加载…

写给我弟

我堂弟今年24岁,也是我最小的一个堂弟,我想给他说点事,想告诉他一些东西,但是也担心自己所说的,并不能让他认同和接受。我心里一定是有我弟的,也是装着我弟的,所以我弟的事情,我自己…

Chrome插件(扩展)

【干货】Chrome插件(扩展)开发全攻略 写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处。本文所有涉及到的大部分代码均在这个demo里面:https://github.com…

Apache OpenJPA 2.1.0 发布

OpenJPA 是 Apache 组织提供的开源项目,它实现了 EJB 3.0 中的 JPA 标准,为开发者提供功能强大、使用简单的持久化数据管理框架。OpenJPA 封装了和关系型数据库交互的操作,让开发者把注意力集中在编写业务逻辑上。OpenJPA 可以作为独立的持久…

手把手带你写一个中断输入设备驱动

今天群里有人问,要开始驱动开发的话从什么开始比较好。我说,应该开始去摸索触摸屏驱动,现在我想了下,触摸屏驱动可能会难了些,但是从一个GPIO开始,我觉得一定是一件很容易的事情。所以这篇文章就来了。大家…

驱动调试神器printk你掌握了吗?

[导读] 刚刚开始做Linux相关开发工作时,深感Linux内核代码庞大,要加些自己的驱动进内核代码树,常常深陷bug的泥沼难以自拔,今天来分享一下内核调试利器printk的使用心得。前面一段时间很忙,后期更文频率会渐渐回归正常…

腾讯云技术专家卢萌凯手把手教你Demo一个人脸识别程序!

欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 本文来自腾讯云技术沙龙,本次沙龙主题为Serverless架构开发与SCF部署实践 卢萌凯:毕业于东南大学,曾就职于华为,熟悉云行业解决方案。目前负责腾讯云中间件产…

二十世纪最伟大的算法,你了解哪个?

导读:作者July总结了一篇关于计算方法的文章《 细数二十世纪最伟大的10大算法 》。一、1946 蒙特卡洛方法[1946: John von Neumann, Stan Ulam, and Nick Metropolis, all at the Los Alamos Scientific Laboratory, cook up the Metropolis algorithm, also known …

桌面计算机恢复出厂设置,windows7电脑怎么恢复出厂设置

我们使用电脑一段时间,由于各种问题,希望将电脑恢复出厂设置,那么windows7电脑怎么恢复出厂设置呢?下面跟着学习啦小编来一起了解下windows7电脑恢复出厂设置的方法吧。windows7电脑恢复出厂设置方法一按下开机键,启动…

关于Exchange管理控制台报“您的权限不足,无法此查看数据”的解决办法

今天朋友突然来电话,说自己的Exchange 2010 EMC突然报“you dont have sufficient permissions to view this data”(您的权限不足,无法查看此数据),同时所有的cmdlet命令也不可以执行。询问我解决办法,出错…

内存为什么还有管理?

本文作者:度白嵌入式任何程序运行起来都需要分配内存空间存放该进程的资源信息的,C程序也不例外。C程序中的变量、常量、函数、代码等等的信息所存放的区域都有所不同,不同的区域又有不同的特性。C语言学习者、尤其是在学习嵌入式的朋友&…

旧手机别扔,手把手教你DIY一台Linux服务器

作者:Hannah Lee编译:弯月 欧阳姝黎来源:CSDN(ID:CSDNnews)本文将向你展示如何使用 UrBackup 和 Linux Deploy在一台 Android 旧手机上搭建一台备份服务器。旧手机的污染问题众所周知,我有一台旧…

学计算机买电脑显卡1605ti够吗,GTX1650和GTX1050Ti哪个好?GTX1050ti和GTX1650性能差距对比评测...

GTX1650显卡在2019年4月22日进行发售,不少用户认为GTX1650是智商检测卡,真的是吗?从命名上来看,GTX1650应该是GTX1050的升级产品,不过根据英伟达的说法,GTX1650相比GTX1050提升幅度达到了70%,但…

Gamma的传说

Gamma校正对于图形和图像来说是个常提的概念,但对于gamma的缘由和使用方法,却存在着很多传说。本文将尽可能解析gamma校正来源,破解各种迷思。Gamma校正从何而来 有一种常见的说法,gamma来源于眼睛对光感受。我也曾经错误地采用了…

心急吃不了热豆腐

良好的焊接是保证电路稳定持久工作的前提。下面给出了常见到的焊接缺陷。看看你遇到过多少种?▲ 图1 焊接中的常见问题▲ 图2 锡珠▲ 图3 扰动的焊接:在焊接点冷却过程中焊锡移动,造成焊接表面起雾、结晶、粗糙▲ 图4 立碑▲ 图5 冷结&…

给电子类大学生一点求职建议

‍读大学的时候应该想清楚以后要干嘛,不然很可能要面对毕业即失业的窘境。每年近千万毕业生涌向社会,这个数字多少会给你点压力吧。因为我是专业对口的,所以我就从对口的角度,说下我们电子信息类专业学的啥以及怎么学。有很多人在…

Silverlight三维柱状图3D饼图的Silverlight图表组件案例

Silverlight三维柱状图3D饼图的Silverlight图表组件案例 开发环境:Visual Studio 2010 Silverlight 4 SQL2005 Silverlight开发的3D图表组件与及应用的项目截图: 本Silverlight开发的图表控件程序架构简洁清淅,是做二次开发的良好项目框架和核…