Architecture 建立软件工程技能的资源

Architecture 建立软件工程技能的资源,architecture,Architecture,如果这个问题对网站来说过于开放,我深表歉意,但这似乎是最好的提问地点 我是一名自学成才的程序员,在他的教育背景中几乎没有数学知识。在十年的职业生涯中,我从前端web脚本和web开发缓慢地发展到了中间层和数据层软件工程。因此,我在某些方面的知识和经验有些欠缺 在最近与我的经理进行了一次审查后,有人告诉我,克服这些差距是我晋升为高级工程师的唯一障碍。然而,为了做到这一点,我必须为自己找到一种结构化的学习方法,并证明我已经接受了我需要知道的东西 我个人认为我的弱点如下。请注意,在很多情况下,问题并不是

如果这个问题对网站来说过于开放,我深表歉意,但这似乎是最好的提问地点

我是一名自学成才的程序员,在他的教育背景中几乎没有数学知识。在十年的职业生涯中,我从前端web脚本和web开发缓慢地发展到了中间层和数据层软件工程。因此,我在某些方面的知识和经验有些欠缺

在最近与我的经理进行了一次审查后,有人告诉我,克服这些差距是我晋升为高级工程师的唯一障碍。然而,为了做到这一点,我必须为自己找到一种结构化的学习方法,并证明我已经接受了我需要知道的东西

我个人认为我的弱点如下。请注意,在很多情况下,问题并不是我不了解这些东西在技术上是如何工作的,而是我看不出它们在哪里或不适合应用。例如,我知道接口是什么,从技术上讲,它是做什么的,但我很难区分什么时候适合在继承自基类的一组相关OO类上使用接口。因此,与其说是技术上的无知,不如说是对良好的软件设计的无知——我确实很难理解、消化和处理松散耦合的系统

  • 接口
  • 代表
  • 设计模式
  • 网络体系结构与协议
而且我从来没有做过一些低级的东西,比如编译器之类的。有时我想知道,如果我对这类材料有更好的了解,它是否会对我编写代码的能力产生很大的影响。如果我对这类材料有更好的了解,那么代码不仅有效,而且得到了很好的优化

有时,由于我不知道如何提出正确的问题,所以担心自己无法识别自己技能中的弱点,这会让我不知所措。因此,希望我已经正确地提出了这个问题,我希望您能就以下方面提出建议:

  • 从我目前所缺乏的声音来看,还有什么我应该考虑的话题吗
  • 学习这些材料的好资源在哪里
  • 是否有任何结构化的自学课程可以让我完成?遗憾的是,我没有时间参加正式的资格考试
干杯,
马特

不久前我还是一名自学成才的编码员,所以我能理解你的立场。 从那时起,我已经发布了1000万个LOC应用程序,所以我必须开发识别能力。 3件事帮助我获得软件工程:书籍、代码和人员

首先,好的工程是关于美的,优雅的设计之美,高效的麦加主义之美。你需要培养对美的感觉,要做到这一点,你需要看到它并讨论它

像和这样的书都是关于漂亮/更好的代码的。大多数时候,它们与语言本身无关(或与异国语言无关)。代码完成也很有趣,但不知何故更低级

在线阅读代码也是培养你品味的好方法。我心中没有例子,但这是一个,你应该很容易找到一些想法。此外,构建一个雄心勃勃的应用程序(游戏、3d建模、web服务器、数据库)是一个很好的实践:您可能会重复2到3次以获得更好的体系结构

人也很重要。如果你找到一位/几位充满激情的软件架构师与你讨论,你将能够直面你对什么是美的看法。我仍在消化几年前与经理的一些讨论


这个“启蒙”是一个持续的过程,所以不要气馁,继续前进。总有一天,你会看到丑陋的代码和一个明显的替代实现,一个你可以讨论和比较客观地比原来更好的

拥有一个你可以不断重构的宠物项目对自我教育有很大帮助

老实说,我会看看麻省理工学院或加州理工学院等机构推出的一些开放式课件。选择一个你认为对你有好处的话题,并给它上一课。尽可能地理解这些概念。当您继续编写和重构您的宠物项目时,您自然会开始添加您正在学习的内容

您提到从未接触过编译器——尝试一下这门课程,看看您的立场。YouTube上有几十个完整的CIS程序,很容易找到你喜欢学习的讲师。我将把Leiserson和Demaine教授的算法介绍作为出发点:


你提到“遗憾的是,我没有时间参加正式的资格考试。”无论正式与否,这都需要投入大量的时间才能实现。选择最适合你的路线并坚持下去。确保你将学到的东西付诸实践,以巩固和提高你的理解力。

Matt我也会参加基于.net的晚间聚会。我努力接近每一个人(像你一样,我有小孩)。但是,他们都是本地人,非常好。马特,我现在也有类似的情况。根据你的经验提出任何建议。