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

Language agnostic 每个开发人员都应该知道哪些高级软件开发主题?,language-agnostic,Language Agnostic,假设你的公司给了你足够的时间和金钱,让你在一年内可以吃到多少高级编程主题的培训,全权委托。这些主题是什么?您希望如何获得它们 假设: 您仍然有可交付成果需要实现,但您可以在一年中每月接受一周的培训 培训可以来自任何地方。IE:教室、现场讲师、书籍、订阅、播客等 主题可以涵盖任何平台、技术、语言、DBMS、工具集等 并发/并行编程和多线程,特别是在内存模型和内存一致性方面。。我认为,当我们进入一个多核/多cpu硬件的世界时,每个程序员都应该意识到这一领域的考虑因素 为此,我可能会大量使用互联网研

假设你的公司给了你足够的时间和金钱,让你在一年内可以吃到多少高级编程主题的培训,全权委托。这些主题是什么?您希望如何获得它们

假设:

  • 您仍然有可交付成果需要实现,但您可以在一年中每月接受一周的培训
  • 培训可以来自任何地方。IE:教室、现场讲师、书籍、订阅、播客等
  • 主题可以涵盖任何平台、技术、语言、DBMS、工具集等

并发/并行编程和多线程,特别是在内存模型和内存一致性方面。。我认为,当我们进入一个多核/多cpu硬件的世界时,每个程序员都应该意识到这一领域的考虑因素


为此,我可能会大量使用互联网研究;但是,在一所好的大学里读一本校园初级读物可能是一个很好的开始。

我来自微软的开发者世界,下面是我对这一点的看法

  • 更多关于云计算的新概念(各种API等)。因为这个行业已经在赌一段时间了

  • 有关LinQ for.net framework的更多信息

  • 分布式数据库


  • 并行计算-学习面向对象设计模式的最简单和最好的方法。

    以下是我经常向没有接受足够CS培训的初级开发人员解释的三种方法。所有其他的东西通常都是炒作而不是实质性的,或者很容易被发现。但是如果你不知道这三个,你会造成很大的伤害:

  • 算法分析,包括
  • 各级 和
  • ,以及它与优化的关系
  • 。具体来说,如何检测问题是否为NP完全问题,以及如何构建问题的近似解


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

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

    安全性

    太多的程序员只是构建一些东西,并认为他们可以在完成程序的“主要”部分后再考虑添加安全性。了解更多有关如何保护应用程序的信息、如何设计一开始就安全的软件、如何进行入侵检测等,都会让您受益匪浅

    高级数据库开发

    数据仓库(MDX、OLAP查询、星型模式、事实表等)、高级性能调优、高级模式和查询模式等都很有用。

    我想“高级”对每个人来说都是不同的,但我建议以下几点是最优秀的开发人员应该注意的(即不需要告知NP完整性或设计模式的人)可以从以下方面获益:

    • 多线程技术 超越“锁定”以及何时应用它们
    • 深入培训,学习和 使自己习惯于聪明 工具链中的功能(IDE/text 编辑器、调试器、探查器、shell。)
    • 一些密码学理论和实践经验,以及人们创建的安全方案中不同的常见缺陷
    • 如果他们针对数据库编程,请了解其数据库的内部结构和高级功能 查询组合和调优技术

    • 调试


      这是一本关于这一主题的好书。当你处理多线程程序、崩溃、不起作用的算法等时,调试可能会非常复杂。每个人都应该擅长调试。

      我是一个爱读书的人,所以我不会真的为指令操心

      不一定按照这个顺序,而且取决于你已经知道的

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

        • 我参加的最好的课程之一是技术写作课程。它在我的职业生涯中对我很有帮助

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


          我也不认为这与主题有多大关系。开发人员组织在项目期间处理的事情太多,以至于培训和随后的工作实施/尝试和错误总是会让你有更好的视角——即使尝试/使用新东西的尝试失败了。这一经验可能会对后续工作有更多帮助项目。

          我希望如何获得培训?我希望有大量的公司时间专门用于自我培训。

          我会投票支持真实世界的战斗故事。让其他组织的开发人员展示他们的成功和失败。不要将展示局限于您正在使用的技术。要有一个显著的优势复杂的项目,这必然会涉及到你甚至没有考虑过的“高级”主题。现实世界中的成功(和失败)有很多东西要教。

          Internationaliza