空白
技术有温度
我们在你身边--
北林计协
输入
一位软件工程师的观点
致谢
编译自 |
Why learning the concepts is more important than learning the technology
作 者 | Rishabh Jha
译 者 | 洪健洲
在这个软件开发不断发展的世界,我想重写一句老生常谈的话——“唯一不变的就是变”。这句话平淡无奇,但又很好地介绍了我们即将探索的主题。
事实上,你认为你是某个语言/技术领域的专家,但你也许在不远的将来就会被淘汰。为什么?因为它将难以解决日渐增长并改变着世界的复杂问题。(记得PHP吗?请不要杀了我这个PHP开发者)
另一方面,如果你知道计算机科学的基础知识,那你在一个更好的公司上班,它不但会帮你适应或者选择一个新技术(或者创建新技术),还能助你更好地运用你当前的技术。
。
我提几个例子来证明一下:
。
有没有想过为什么被用在各个组织的Kafka队列这么快?毕竟它是用磁盘空间来存储数据,但磁盘的读写不是应该比较慢,对吗?
原来,它利用了顺序写磁盘有将近6000mb/s的简单事实,顺序写入要比随机写入100k/s的速度快了将近60000倍。还有,操作系统对顺序存取有大量优化。
你还记得我们只是为了考试成绩而学习过的操作系统核心概念吗?那么,显然像这种更深层次的知识(甚至可以是稍微深入的)能让你所做的事在局外人看来就像魔法一样。
(图片来自网络)
另一个例子——在我的职业生涯中,我遇到了许多专业人士,他们认为索引对加速数据库查找是非常有用的。所以需要查找特定字段时,他们就会把他编入索引。
现在,如果我们知道:
1)更深入地了解索引的创建方式
2)以及索引怎么被数据库的查询者所使用
我们可能创建一个更加优化,因此更加有效的schema。
索引可不是神奇的药丸,高效的数据结构像B+树(对此可有印象?)被广泛运用于索引,因为它的查找和插入的是对数复杂度。
这个方法不太明显的一面就是每有一个插入,所有与该表相对应的索引都必须被更新。太多的索引可能会导致插入变慢。
此外,即使你用多个索引过滤查找,仍不能保证速度。你打算查询的内容很可能只用一个索引,导致其他的索引无用!
简单结论就是我们需要知道我们在做什么以及它有什么影响,否则,我们将不断提出问题的次优解决方案。
我在这并不是说你需要知道所有的数据结构或者概念,而是说理解特定时刻你所做的事背后的概念非常重要。还有就是不要忽略你所学习的计算机科学的基础知识,因为引入的新概念往往和这些基础密切相关。
(图片来自网络)
我和许多人合作过,他们说我们研究的高级数据结构在现实中从未使用过,那为什么它们被所有的的组织和大学所重视呢?
他们没能意识到这些高级数据结构在我们日复一日的编程中有多重要!又是一个例子——你选的dictionary/map也许通常是最快的...但这不是说它们对任何可能的情况都是最快的,因为他们只不过是哈希表。
哈希表key查找可以有O(1)平均时间复杂度,但由于冲突,最糟的情况是O(n)。只要你知道要访问的数据的索引,哈希表很容易就能优于一个简单的数组。
你也许注意到了程序员的工作要求如何从“我们需要一位Python开发人员”变为“我们需要一位非常棒的开发人员”,大多数优秀公司都是如此。
事实是只要你知道编程的基础概念,你擅长哪种语言就不是很重要了。一位“知道基础概念”的程序员将用更少的时间学会一门新语言,而且很可能比别人掌握得更好。我的大多数同事(包括我)能用至少6种不同的语言编程,而且只要我们想,我们能在不超过1到2周的时间内掌握一门新语言。
(图片来自网络)
在我们谈论数据库、队列、缓存或是编程语言时讲的有点深了,但我这只是一篇博文而已,我们差不多就在这停止深入吧。你可以期待我另开一篇文章更深入的探索这些主题。
从这篇文章你能看出,专注于快速开展工作并不是在这个不断改变的世界前进的道路。就在不远的将来,一位没有涵盖基础知识的程序员很容易就会被机器人取代。
世界在发展并且复杂程度会越来越高,现在的TB就相当于原来的GB!有许多新的挑战需要被解决,我们需要创新者而不仅仅是程序员。只会用数据库或者队列或者其他的技术并不能解决问题。
相反,如果必要的话你应该能“创造一个新的”,这种态度将能把你和其他人区分开,并且帮助世界变得更好。我们在Jexia做相同的事情——试图创新和改变事情的做法。
我要用另一句老生常谈的话结束这篇文章——“永远不要忘了你的根和你从哪里来”。在计算机科学的背景下,这句话也很适合。
原作/Rishabh Jha
译者/洪健洲
排版/钱芝禾
校对/王瑶
快,关注这个公号,一起涨姿势~
领取专属 10元无门槛券
私享最新 技术干货