如果这个问题对于网站来说过于开放,请道歉,但它似乎是最好的问题.
我是一名自学成才的程序员,在他的教育背景下几乎没有数学,并且在十年的职业生涯中,他从前端的Web脚本和Web开发慢慢地转向中级和数据级软件工程.因此,我的知识和经验方面有些缺乏.
在我最近与我的经理进行了一次审核之后,有人告诉我,克服这些差距就是我和升级到高级工程师角色之间的所有差距.然而,为了达到这个目的,我将不得不为自己找到一种结构化的学习方法,并证明我已经接受了我需要知道的东西.
我个人认为我的弱点如下.请注意,很多情况下的问题并不是我从技术上理解这些事情是如何工作的,而是我不知道应用它们在哪里或不适合它们.例如,我知道接口是什么,从技术上讲,它知道它做了什么,但是我很难区分什么时候使用接口,比如说,从一个基类继承的一组相关的OO类.因此,对于良好的软件设计而言,它比对技术的无知更为无知 - 我很难理解,消化和处理松耦合系统等问题.
此外,我从来没有做过一些像编译器这样的低级东西.我有时想知道,如果我对编写代码的能力有很大的不同,那么如果我对这种材料有了更好的了解,那么代码不仅有效而且优化得很好.
有时候担心我无法识别我的技能组合中的弱点,因为我不知道如何提出正确的问题.所以,希望我能正确地解决问题,我希望你的建议如下:
干杯,马特
不久前我是一名自学成才的编码员,所以我可以与你的位置联系起来.从那时起,我已经发运了10百万个LOC应用程序,因此我不得不开发识别能力.3件事帮助我获得软件工程:书籍,代码和人.
首先,良好的工程学是关于美丽,优雅设计的美丽,高效的机械主义.你需要培养美感,做到这一点,你需要看到并讨论它.
SICP,Refactoring,Head First Design Patterns和Beautiful Code等书籍都是关于美丽/更好的代码.大多数时候,他们不是关于语言本身(或关于外来语言).代码完成也很有趣但不知何故更低级别.
在线阅读代码也是教育您品味的好方法.我没有想到的例子,但这是一个常见的问题,你应该很容易找到一些想法.此外,构建一个雄心勃勃的应用程序(游戏,3D建模器,Web服务器,数据库)是一个很好的实践:你可能会重做2到3次以获得更好的架构.
人也很重要.如果您找到一些热心的软件架构师与您讨论,您将能够面对您对什么是美的看法.几年前,我还在消化我与经理的一些讨论.
这种"启蒙"是一个持续的过程,所以不要气馁,只要向前迈进.有一天,你会看到丑陋的代码,有一个明显的替代实现,你可以讨论并客观地比较原始代码.