- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
序:最近看了一篇谷歌工程师总结自己十年来所学到的软技能,感觉说的很棒,特地翻译成中文,希望能分享给更多的人,原文内容非常多,计划分几篇翻译出来,个人的水平有限,感兴趣的朋友也可以进去看英文原文。原文地址是:software-engineering-soft-parts(Addy Osmani)
正文:
今天我将分享一些我在谷歌浏览器团队中作为高级工程师在10年间学到的一些软件工程“软技能”。在我的10周年纪念日,我想反思一些一直伴随着我的经验。我希望这些在你的职业生涯中对你有所帮助。
在我看来,成为一名优秀的工程师就是不断积累经验。项目无论大小,都是一个往你的工具箱添加新技术和工具的机会。当你将在一个项目中学到的技术与在另一个项目中学到的工具配对来解决问题时,这会为你带来更大的进步。
以下建议有助于大多数初级或中级开发人员向前发展,用来应对不断变化的技术,构建复杂系统,同时遵循软件工程范式中的标准流程并发现新的最佳实践。尽可能应用第一原则。学习将问题分解成更小的部分是生活中最重要的技能之一。
精通意味着高效的工作
这意味着您可以分辨出能带来价值的任务,并帮助您的团队将精力集中在这个方向上。这也意味着您知道如何避免一些无法为团队或者公司带来价值的工作——最好的工程师甚至可以引导整个团队远离那些无意义的工作。
我经常被问到,“我怎么知道我是否充分利用了我的时间?”。几乎总是有一些任务可以让你“感到”忙碌。这里真正的诀窍是确保你在做正确的事情。如果您想移山,请专注于移动针的任务,即使这任务很小。
你可以问自己一些问题:
批判性思维是独立思考以做出深思熟虑的决定的能力。投资于这项技能,以提高你的思路清晰。
作为工程师,我们有时会急于立即解决问题,因此感觉就像我们正在取得进展,或者看起来我们正在对利益相关者做出响应。如果我们没有充分考虑原因和后果,这可能会带来风险。换句话说,批判性思维是有目的地思考并形成自己的结论。这种以目标为导向的思维可以帮助您专注于根本原因问题,从而避免未来因没有思考造成问题的原因和后果而出现的问题。
概括地说,我喜欢根据批判性思维提出的一些问题是:
我发现这些问题通常会有所帮助。有时我们会解决问题的症状,却发现还会出现其他症状。在其他时候,我们可能会很快发布一个解决方案,但会在以后产生更多问题。从批判性思维的角度来看,我们可能会挑战假设,仔细研究风险/收益,寻找矛盾的证据,评估可信度并寻找更多数据来建立我们做正确事情的信心。
例如,我见过工程师犯的一个常见错误是假设相关性意味着因果关系(即,仅仅因为两件事相关并不一定意味着一个导致另一个)。一个批判性的思考者可能会反驳这样的假设,问我们为什么相信它们是正确的。
批判性思考者:
注意:批判性思维具有“软技能”和“硬技能”两个方面,因此包含在本文中。
掌握基础知识并反复应用以获取新技能。
学习基础知识的长期价值在于它们是可转移的。短期而言,它们可以帮助您做出更好的决策,并使代码更有效率。
可转移的技能是您可以从一个项目带到另一个项目的技能。让我们从基本面来谈谈它们。
基础知识是任何软件工程师的根本。它们宏观和微观两层。宏观层是软件工程的核心,微观层是实现(例如技术栈、库、框架等)。
在宏观层面上,您学习的编程概念在很大程度上可以转移,而与语言无关。语法可能不同,但核心思想仍然相同。这包括:数据结构(数组、对象、模块、哈希)、算法(搜索、排序)、架构(设计模式、状态管理)甚至性能优化(例如急切与惰性评估、记忆化、缓存、惰性加载等)。这些是您将经常使用的概念,以至于往后了解到它们可能具有很大的价值。
在微观层面上,您将学习这些概念的实现。这可能包括:您使用的语言(JavaScript、Python、Ruby 等)、您使用的框架(例如 React、Angular、Vue 等)、您使用的后端(例如 Django、Rails 等)以及技术您使用的堆栈(例如 Google App Engine、Google Cloud Platform 等)。其中涉及的细节对于获得有效的专业知识可能很有价值,但并不总是可以转移的。
没有人有时间在职业生涯开始时学习所有内容。我们不应该过度索引基础知识,要去学习实际应用程序所需的内容。这就是“边做边学”。
掌握基础知识可以帮助您编写更高效的代码。这包括时间复杂度(运行代码所需的时间)、内存使用以及性能和可维护性之间的权衡等概念。这些想法允许您在构建任何相当大的应用程序时做出有用的权衡。速度对于现代应用程序而言通常至关重要,并且通常会以明显的方式影响最终用户体验。
对宏观和微观基本面有很好的了解可以帮助您做出更好的决策。
您可以利用所获得的知识,根据任何项目的目标和限制,更好地决定使用哪些技术以及避免使用哪些技术。这可以帮助您避免为工作选择错误的技术或错误的工具的陷阱。
“在你明白什么时候不应该使用它之前,你还没有掌握一个它。” -@kelseyhightower
软件工程涉及考虑许多不同的层次——核心语言、实现、基础设施、工具和人员。对这些层次有一个表面的了解,可以让你编写程序更快。但真正了解基础知识(包括 O(n) 时间复杂度)可以帮助你走得更远,尤其是当语言和框架的格局随着时间而变化时。
相关阅读:
本文来自博客园,作者:IAyue,转载请注明原文链接:https://www.cnblogs.com/zmj-pr/p/16393372.html
您是否曾经希望能够在调试时快速测试集合或数据集上的不同查询?您希望节省时间并避免仅仅为了检查数据而编写代码吗?如果您的回答是肯定的,那么您一定会喜欢 Visual Studio 调试器中新的可编辑
任何 Web、桌面或移动开发人员都经常使用图像。你可以从 C#、HTML、XAML、CSS、C++、VB、TypeScript 甚至代码注释中引用它们。有些图像是本地的,有些存在于线上或网络共享中
您是否曾经难以理解一个提交在做什么或者为什么要做?在审查或协作代码更改时,您是否希望有更多的清晰度和上下文?如果您的回答是肯定的,那么您会喜欢 GitHub Copilot 为您所做的——生成提交
Visual Studio 订阅(无论是专业版还是企业版)提供的不仅仅是软件使用权;这是一个全面的工具包,旨在显著提高您的开发能力和职业发展。这些订阅每年可以为您节省数千美元,提供各种服务,从每月
随着最近 Visual Studio 的资源管理器的改进,开发人员将得到一种全新的享受!我们非常激动地宣布重新设计的 Visual Studio 资源管理器,相信我们,它将改变游戏规则。 在
委托在现代代码中无处不在;委托是一种类型,它表示对具有特定参数列表和返回类型的方法的引用。开发人员使用委托将方法作为参数传递给其他方法。您可能熟悉的一个例子是事件处理程序。处理程序是可以通过委托调
来自Sergey Tepliakov的 https://sergeyteplyakov.github.io/Blog/csharp/2024/06/14/Custom_Task_Schedule
GitHub Copilot 是一个改变游戏规则的人工智能助手,可以彻底改变您在 Visual Studio 中的编码流程。在我们的视频系列中,Bruno Capuano 探讨了这个智
在17.10预览版2中,我们刚刚发布了预览支持,可以直接在 Visual Studio 的工作文件中查看 GitHub 和 Azure DevOps 的拉取请求注释。作为开发者社区中最受欢迎的 G
MSBuild 是 .NET 开发体验的基本组成部分,但它对新手和有经验的开发人员都具有挑战性。为了帮助开发人员更好地理解他们的项目文件,并访问需要直接编辑项目文件的高级功能,我们发布了一个实验性
通过使用代码覆盖率功能,您可以发现您的测试需要改进的地方,并使您的软件更加健壮和可靠。在这篇文章中,我们将介绍我们在 Visual Studio Enterprise 2022 中引入的 Code
GitHub Copilot 简介 GitHub Copilot 是一个新工具,可以帮助您在人工智能的帮助下更快,更智能地编写代码。它可以建议代码补全,生成代码片段,甚至为您编写整个函数。Git
序:最近看了一篇谷歌工程师总结自己十年来所学到的软技能,感觉说的很棒,特地翻译成中文,希望能分享给更多的人,原文内容非常多,计划分几篇翻译出来,个人的水平有限,感兴趣的朋友也可以进去看英文原文。原文地
本文为翻译 。 原文地址: 2023 State of Web Components: Today's standards and a glimpse into the future. 。
任何 Web、桌面或移动开发人员都经常使用图像。你可以从 C#、HTML、XAML、CSS、C++、TypeScript 甚至代码注释中引用它们。有些图像是本地的,有些存在于线上或网络共享中,而其
在 Visual Studio 2022 中,Web 开发人员的主要场景之一是使用 ASP.NET Core 创建 Web API。在 Visual Studio 2022 17.6 的最新预览
.NET 在数年前就在语言和库中添加了 async/await。在那段时间里,它像野火一样蔓延开来,不仅在 .NET 生态系统中,而且在无数其他语言和框架中被复制。在 .NET 中也看到了大量的
原文 | Stephen Toub 翻译 | 郑子铭 Mono 到目前为止,我一直提到 "JIT"、"GC "和 "运行时&quo
原文 | Stephen Toub 翻译 | 郑子铭 原始类型和数值 (Primitive Types and Numerics) 我们已经看过了代码生成和GC,线程和矢量化,互操
原文 | Stephen Toub 翻译 | 郑子铭 同样,为了不做不必要的工作,有一个相当常见的模式出现在string.Substring和span.Slice等方法中。
我是一名优秀的程序员,十分优秀!