如果这个问题对于网站来说过于开放,请道歉,但它似乎是最好的问题。
我是一名自学成才的程序员,在他的教育背景下几乎没有数学,并且在十年的职业生涯中,他从前端Web脚本和Web开发慢慢地转向中级和数据级软件工程。因此,我的知识和经验方面有些缺乏。
在与我的经理最近的一次审核之后,有人告诉我,克服这些差距就是我和晋升为高级工程师角色之间的所有差距。然而,为了达到这个目的,我必须找到一种结构化的学习方法,并证明我已经接受了我需要知道的事情。
我个人认为我的弱点如下。请注意,很多情况下的问题并不是我从技术上理解这些事情是如何工作的,而是我不知道应用它们在哪里或不适合它们。例如,我知道接口是什么,从技术上讲,它知道它做了什么,但是我很难区分什么时候使用接口,比如说,一组从基类继承的相关OO类。因此,对软件设计的无知比对技术的无知更为无知 - 我很难理解,消化和处理松散耦合系统等事情。
此外,我从未做过一些像编译器这样的低级东西。我有时想知道,如果我对编写代码的能力有很大的不同,那么如果我对这种材料有了更好的了解,那么代码不仅有效而且优化得很好。
有时担心我无法识别我的技能组合中的弱点,因为我不知道如何提出正确的问题。所以,希望我能正确地解决问题,我希望你的建议如下:
干杯, 马特
答案 0 :(得分:8)
不久前我是一名自学成才的编码员,所以我可以与你的位置联系起来。 从那时起,我已经发运了10百万个LOC应用程序,因此我不得不开发识别能力。 3件事帮助我获得软件工程:书籍,代码和人。
首先,良好的工程学是关于美丽,优雅设计的美丽,高效的机械主义。你需要培养美感并做到这一点,你需要看到并讨论它。
SICP,Refactoring,Head First Design Patterns和Beautiful Code之类的图书都是关于美丽/更好的代码。大多数时候,他们不是关于语言本身(或关于外来语言)。代码完成也很有趣但不知何故更低级别。
在线阅读代码也是教育您品味的好方法。我没有想到的例子,但这是common question,你应该很容易找到一些想法。此外,构建一个雄心勃勃的应用程序(游戏,3D建模器,Web服务器,数据库)是一个很好的实践:你可能会重做2到3次以获得更好的架构。
人也很重要。如果您找到一些热心的软件架构师与您讨论,您将能够面对您对美丽的看法。几年前,我还在消化我与经理的一些讨论。
这种“启蒙”是一个持续的过程,所以不要气馁,只要前进。有一天,你会看到丑陋的代码,有一个明显的替代实现,你可以讨论并客观地比较原始代码。
答案 1 :(得分:1)
有一个宠物项目,你可以不断重构,在自我教育方面有很长的路要走。
老实说,我要看一下麻省理工学院或加州理工学院等公开的课程。选择一个你认为对你有益的话题,然后上课。尽可能地尝试并理解这些概念。当您继续编码和重构您的宠物项目时,您自然会开始添加您正在学习的内容。
你提到从未接触过编译器 - 给这个课程一个镜头,看看你的立场。在YouTube上有数十个完整的CIS课程,很容易找到您喜欢的教师。我将Leiserson和Demaine所教导的算法简介作为一个启动点:
你提到"我很遗憾,没有时间参加正式的资格认证。"无论是否正式,需要花费大量时间才能实现这一目标。选择最适合您的路线并坚持下去。确保你将你的学习付诸实践,以巩固和提高你的理解力。