每个开发人员应该知道哪些高级软件开发主题?

Boy*_*ski 43 language-agnostic

假设您的公司已经给您时间和金钱,可以获得有关您可以在一年内享用的高级编程主题的培训,全权委托.这些主题是什么?您希望如何获得它们?

假设:

  • 你仍然有可以实现的可交付成果,但你可以获得一年一个月的培训.
  • 培训可以来自任何地方.IE:课堂,现场讲师,书籍,订阅,播客等.
  • 主题可涵盖任何平台,技术,语言,DBMS,工具集等.

Law*_*Dol 44

并发/并行编程和多线程,特别是在内存模型和内存一致性方面.我认为每个程序员都应该了解这个领域中的注意事项,因为我们进入了多核/多CPU硬件的世界.

为此,我可能会最重视互联网研究; 但在一所优秀的大学校园入学可能是一个很好的开始.

  • 这是肯定的.我会说任何对此的处理确实需要一些编码.在您不得不自己调试一对夫妇之前,您无法真正理解在使用严重同步资源的并发编程中遇到的麻烦. (4认同)

Joe*_*orn 38

安全!

太多的程序员只是在完成程序的"主要"部分之后构建一些东西并认为他们可以在事后添加安全性.您可以随时了解有关如何保护应用程序的更多信息,如何设计软件从一开始就是安全的,如何进行入侵检测等等.

高级数据库开发

诸如数据仓库(MDX,OLAP查询,星型模式,事实表等),高级性能调整,高级模式和查询模式等之类的东西总是有用的.


T.E*_*.D. 20

以下是我总是发现自己向没有获得足够CS培训的初级开发人员解释的三个.所有其他的东西通常都是炒作而不是实质,或者可以很容易地拿起来.但如果你不知道这三个,你可以造成很大的伤害:

  1. 算法分析,包括Big O表示法.
  2. 各种程度的 凝聚力耦合.
  3. Amdahl定律,以及它与优化的关系.


jmu*_*llo 20

国际化问题,特别是因为它听起来不像是一个高级主题.但它是.


Joh*_*sch 17

无障碍

它被许多组织所忽视,但事实的简单事实是,有大量的人有低视力或没有视力,色盲或其他差异,这使得在网络上导航非常令人沮丧.如果每个人都至少接受过一些培训,我们可能会获得一些更具包容性的基于Web的UI.

  • 这是一个有价值的目标,但如果你停下来思考它 - 小公司或公司推出新产品最好花更多的时间来获得更多的人口/受众.拥有稳定产品的大公司可以通过更具包容性来提高其收入/市场饱和度,但我认为这不是每个开发人员小时收益的最佳建议......除非您的特定市场是这些人. (3认同)
  • +1:我希望我能给你几个+1.这可能是当今发展中最被忽视的方面之一.如此多的关注于它的所见即所得,我们忘记那些不能在所见即所得的人.: - /我和下一个人一样愧疚. (2认同)

cha*_*aos 14

面向对象的设计模式.

  • 罗; 你必须像我一样做风格. (8认同)
  • 我没有投票给你,因为在某种程度上我很佩服这个答案.如果我每天发布包含两组混合流行语的帖子,你认为我也能获得13K的代表吗?:-) (5认同)
  • rofl lmao :-) (4认同)

mqp*_*mqp 14

我认为"高级"对每个人来说都是不同的,但我建议以下内容是最体面的开发人员(即那些不需要被告知NP完整性或设计模式的人)可以从以下方面获益:

  • 多线程技术超越"锁定"以及何时应用它们.
  • 通过工具链中的聪明功能(IDE /文本编辑器,调试器,分析器,shell)进行深入的学习和习惯化培训.
  • 一些加密理论和实践经验,以及人们创建的安全方案中的不同常见缺陷.
  • 如果他们针对数据库进行编程,请了解其数据库的内部结构以及高级查询组合和调优技术.


nor*_*ole 11

开发人员应该了解SQL开发的基础知识以及他们的决策如何影响数据库性能.编写查询是一回事,编写查询,理解解释计划并根据输出做出设计决策是另一回事.我认为关于PL/SQL开发和数据库性能的良好课程将非常有益.

  • 如果您使用基于SQL的数据库进行开发,那肯定是正确的.因为到目前为止我已经成功地工作了20年而没有做过一次,所以我认为一揽子陈述是不正确的.嗯......有一次在大学里.但是我们都在大学里进行过实验,对吧?对? (3认同)

Pet*_*uer 10

不幸的是,对于大多数开发人员来说,沟通技巧似乎属于"高级主题"部分(当然,目前的公司被排除在外).获得这项技能的最佳方式:练习.

  • 拿起耳机,与别人交谈,而不是IM'ing或通过电子邮件发送给下一个桌面的人.
  • 拿起电话与客户交谈,而不是在围栏上发送电子邮件.
  • 在会议上提问,而不是坐在笔记本电脑屏幕后面.
  • 积极参加工作中的非技术会议.
  • 目前一些在公众面前.

由于技术原因,大多数项目都不会失败.他们失败是因为他们无法创建团队.沟通对团队动力至关重要.

它也不会伤害你的职业生涯.


Tim*_*Tim 8

我学过的最好的课程之一是技术写作课程.在我的职业生涯中,这对我很有帮助.

另外:它可能无关紧要主题是什么 - 组织对它感兴趣并为此付费并且开发人员想要去做的事实是比任何一个特定主题更好的成功/改进指标.

我也认为这个主题不重要.开发组织在项目期间处理很多事情,培训,然后在工作实施/试验和错误将始终为您提供一些更好的视角 - 即使尝试尝试/使用新的东西失败.这种经历可能会对后续项目提供更多帮助.


kem*_*002 7

我是一个书人,所以我不会真的很烦.

不一定按此顺序,并取决于你已经知道的

  • 面向对象编程
  • 功能编程
  • 数据结构和算法
  • 并行处理
  • 基于集合的逻辑(基本上是sql背后的理论以及如何应用它)
  • 构建解析器(我只把它,因为它实际上出现在我工作的地方)
  • 软件开发方法论


Jea*_*rdi 6

NP完整性.具体来说,如何检测问题是否为NP-Complete,以及如何构建问题的近似解决方案.

我认为这很重要,因为你不希望开发人员通过获得最佳解决方案来尝试解决NP完全问题,除非问题的搜索空间非常小,在这种情况下暴力是可以接受的.但是,随着搜索空间的增加,解决问题所需的时间呈指数增长.


aja*_*987 6

我将介绍新技术和新趋势.我正在研究/提高我的技能的一些新技术包括:

  • Microsoft .NET Framework v3.0/v3.5/v4.0
  • 云计算框架(Amazon EC2,Windows Azure服务,GoGrid等)
  • 设计模式