介绍
“2022 年 IT 工程师图书奖” 恭喜您获得技术图书类别大奖。
我想总结一下让我印象深刻的观点,因为它对工程师应该具备的思想和态度非常有帮助。
你有能力打破现状
这样一来,即使有各种不满,也不是忽视,而是努力改变现状。
如果您担心自己的技术技能,请在工作时间之外努力学习。
如果您对自己的工作方式不满意,请与公司交谈。
无论如何,重要的是要控制自己的生活并朝着自己想要的方向前进。
为自己的行为负责
承认自己的错误和无知。
如果您犯了错误,例如判断错误,请承认并立即考虑对策。永远不要找借口。
考虑对策而不是借口。
在承认我不明白的事情的同时,我作为专业人士找到了解决方案。
不要只关注你在做什么,要时刻关注你周围发生的事情。
引用“石汤和煮青蛙”这一段话。
没有人注意到的小事情加起来,项目慢慢失控。
为避免此类灾难,我们必须始终着眼于大局。
不要只关注自己的任务,还必须密切关注其他人的任务。
你无法制作完美的软件
没有软件是完美的。
追求完美是不可能的,所以不要在这上面浪费时间和精力。
您需要防御性地编码,记住您所面临的代码可能不正常。
不要只相信你的代码,不要相信你自己。知道没有人,包括你,可以写出完美的代码,这会让你对自己的错误进行防御。
倾听你的直觉
即使您考虑编写代码,有时您也可能出于某种原因感到不情愿。
根据过去的经验,这是一个信号,表明你的直觉(书中的爬行动物大脑)正在提醒你注意危险。
必须牢牢地识别这个信号而不忽略它。
像这样的时候,
- 只怕失败。从现在开始编写大量代码时,我想,“我不希望它成为错误。”认为“产生错误=我自己的能力低”,可能产生错误的编码很麻烦
- 我感到迷茫,因为我无法想象项目的结束
- 错误设计或结构化的现有代码或试图解决错误的问题
有一种可能
发生这种情况时,请远离键盘并做其他事情。
这本书采用了诸如散步、吃午饭、与某人交谈和睡觉等方法。
无论如何,与其强迫工作向前发展,不如休息一下,等待一些想法或动力出现。如果这不起作用,请尝试制作类似的原型,而不是您必须编写的代码。
仔细编程
不要编写可能只是偶然运行的不可靠代码。在书中,这种随意的编码被称为“意外编程”。
我们应该停止意外编程,开始“小心编程”。
尤其是
- 始终注意自己在做什么。换句话说,我不是很了解当前的任务,但无论如何我都不想开始编码。
- 能够向他人解释代码的细节。如果你不能解释它,你可能无法正确理解代码
- 在接近任务之前设想一个清晰的计划
- 不依赖机会或假设。考虑一下您可以信任的内容。
- 优先考虑您的工作。并花时间在重要的部分
- 让我们编写最好的(足够好的)代码,而不受过去糟糕代码的束缚。因此,所有过去的代码都将被重写。
让我们交流!
提出想法,创建文档,并在白天花大量时间交流信息。
如果您不能有效地传达一个想法,那么它的好坏并不重要。
那么,为了有效沟通,我们究竟需要做些什么呢?
- 了解您的听众
- 了解受众的兴趣和需求。反馈在沟通中很重要。通过在这里提问来了解您的听众
- 知道该说什么
- 把你想说的话写成大纲,然后细化,直到你觉得你的意图被传达了
- 选择时间
- 为了让听众理解故事,有必要了解听众的优先事项。仔细考虑什么时候是讨论这个问题的合适时机。
- 选择款式
- 以适合听众的方式说话。你的伴侣是初学者吗?你是专家吗?你不喜欢长篇小说吗?和
- 成为听众
- 设身处地为他人着想
- 结合文档和代码
- 文档对于高级程序员来说非常重要。可以避免日后的重复劳动,节省时间。
寻找界限而不是跳出框框思考
当您需要编写一些相当困难的代码时的有用提示。
不要在框架内解决问题(=约束),例如“我不能做 XX”和“我不能做 XX(禁止)”。
一些我认为是限制的事情实际上只是先入为主。
遇到难题时,需要区分约束和先入为主,评估约束是否真的存在(=找一个框架)。
您应该具体做的是列出所有可能的解决方案并检查它们为什么不能被采用。
- 这真的不可能吗?
- 真的不允许吗?我的前提有问题吗?
通过以这种方式使用批判性思维,我们可以暴露我们真正的局限性。
做有效的事,而不是跟随趋势
即使你采用了新潮的技术和开发方法,你也不知道它们是否能很好地发挥作用。适用于一家公司的方法不一定适用于您的公司。
这是因为不同的公司和团队有不同的环境(限制、机会、专业知识、组织规模等)。
即使你表面上采用一种趋势,而不考虑这种背景差异,你也不会成功。
要了解一种时尚是否适合您的团队,只需尝试一下即可。
在小型或多个团队中一点一点地尝试,只保留那些有效的。
取悦您的用户,而不仅仅是源代码
开发者的目标是取悦用户。
取悦用户意味着解决他们的问题,这是成为一名优秀程序员的本质。
用户使用软件在固定预算内实现特定目标。软件只是达到目的的一种手段。
“这只是达到目的的一种手段。”这意味着什么
- 仅仅构建软件并按时交付是不够的。
- 随着项目的推进,需要不断识别用户的期望和要求,解决问题。
用户请求提示
没有人确切知道他们想要什么
用户需求被假设、误解和政策隐藏得如此之深,以至于它们很少出现在表面上。换句话说,很难找出用户真正想要什么。即使你说“我想要这种功能”,也可能不是用户真正想要的。
支持用户实现“他们真正想要的”是程序员的一项重要工作。
在反馈循环中学习需求
根据我的经验,要求开发软件的客户首先提到的需求并不是真正的需求。
没有经验的开发人员会毫无疑问地接受他听到的第一个请求并继续实施它。
当我第一次被告知“我想要这种功能!”时,我在使用批判性思维的同时提出了各种问题。当开发者以这种方式提出问题,并就答案将带来什么样的结果给出反馈时,反馈也来自咨询者(用户)。在这个反馈循环中,客户的想法得到提炼,他们的需求逐渐变得清晰。
在最后
在这里,这本书被介绍为“每次阅读都会有不同的部分给人留下深刻的印象”。从第二年开始,我想每年都阅读它,并从中学到很多东西。