软件工程师的观点


在这个不断发展的软件开发世界中,我想改写一个非常陈词滥调的说法- “变化是唯一不变的” 。 有点在这里说清楚了,但是……这是我们将要探索的主题的不错的介绍。
确实,您认为自己是专家的语言/技术可能会在不久的将来被淘汰。 为什么? 仅仅是因为它将不再足以解决日益复杂的问题,而复杂性是当今世界目睹的创新所带来的。(请记住PHP ?请不要因为这个PHP开发人员而杀了我)。
另一方面,如果您了解计算机科学的基础知识,那么您的公司就会更好。 它不仅可以帮助您适应或选择一种新技术(或可能创建一种新技术),而且还可以帮助您更好地利用当前的技术堆栈。
让我举几个例子来证明这一点 :
有没有想过为什么其他组织都在使用的Kafka队列这么快? 毕竟,它使用磁盘空间来存储数据。 而且磁盘访问和写入应该更慢,对吗?
原来,他们利用了一个简单的事实,即线性写入磁盘的性能几乎达到6000 mb / sec。 这比随机写入(仅约100k / sec)的性能快60000倍。 而且,操作系统已针对线性读写进行了大量优化。
您还记得我们曾经研究过的OS核心概念,并认为它们仅对获得成绩有好处吗? 好吧,显然,拥有这样的(甚至是一点)更深的知识可以帮助您做一些看起来像魔术的事情。
另一个例子 -在我的整个职业生涯中,我遇到了许多认为索引对于加速数据库查找普遍有用的专业人员。 因此,每当需要对特定字段的搜索查询时,他们都将对其进行索引。
现在,如果我们有:
1)更深入地了解如何创建索引
2)以及相关数据库的查询计划人员如何使用它们
…我们可能会创建一个更加优化,因此性能更高的架构。
索引不是魔术药。 诸如B +树之类的非常有效的数据结构(响起钟声?)被广泛用于索引,因为它们的搜索和插入具有对数复杂性。
这种方法不太明显的方面是,每当有一个插入时,与该表相对应的所有索引也必须更新。 索引过多可能只会导致插入速度变慢。
此外,即使您使用多个索引列过滤查询,也仍然不能保证速度。 您的查询计划者很可能只使用一个索引,从而使其他索引毫无用处!
一个简单的结论是,我们需要知道我们在做什么以及它的影响是什么。 或多或少,我们将继续为我们的问题提出次优解决方案。
我并不是说您需要了解其中的每个数据结构或概念,但是了解任何特定时刻您正在做的事情背后的概念非常重要。 另外,您永远也不应脱离所学的计算机科学基础,因为引入的较新概念通常与它们相关。
我曾与许多人一起工作过,他们说我们研究的高级数据结构从未在现实生活中使用过。 那么,为什么所有好的组织和大学都如此重视它们?
他们没有意识到他们在我们日常编程中的重要性! 再举一个例子-您刚刚选择的字典/地图通常可能是最快的……并不意味着它在所有可能的情况下都是最快的。 因为它们不过是哈希表。
哈希表的平均键查找复杂度为O(1),但最坏的情况是由于冲突而导致的O(n)。 如果您知道要访问的数据的索引,则可以通过简单的数组轻松地胜过此类哈希表。
您可能已经注意到,程序员的工作要求是如何从“我们需要Python开发人员”变为“我们需要出色的开发人员”。 无论如何,大多数优秀公司就是这种情况。
事实是,只要您了解编程的基本概念,使用哪种语言并没有太大关系。 一个“完成了功课”的程序员将花费更少的时间来学习一种新语言,并且可能会比大多数语言更好。 我的大多数同事(和我)至少可以用6种不同的语言编写代码,并且如果我们愿意的话,我们每个人最多也不需要1-2个星期即可学习另一种语言。
现在,当我们谈论数据库,队列,高速缓存或编程语言时,有很多需要探索的深度,但是由于这只是一篇博客文章,我们不妨在这里停止。 您可以期望有单独的帖子,我们将在其中深入探讨这些主题。
您从这篇文章中得出的结论可能是,专注于快速完成工作并不是在不断创新的世界中前进的道路。 从现在开始不久,一个普通的,不了解其基础知识的程序员将很容易被机器人取代。
世界在不断发展,复杂程度在不断提高。 太字节是新的技嘉! 有新的挑战需要解决,我们需要创新者而不仅仅是程序员。 仅仅能够使用数据库或队列或任何其他技术不再能够削减它。
相反,如果有必要,您应该能够“创造一个”,这种态度将使您与他人区分开来,并有助于改善世界。 Jexia的我们正在做同样的事情-尝试创新和改变工作方式。
我将在这篇文章的结尾加上另一个陈词滥调的声明-“ 永远不要忘记自己的根源和出身 ”。 在计算机科学的语境中,这句话同样重要。