技术知识决定一个人能做的技术的层次。基础的知识有
- 计算机组成原理
- 计算机操作系统
- 网络原理
- 数据库原理
- 计算机图形学
- 编译原理
- 数据结构
- 离散数学、人工智能等等很高深的理论知识。
在这些基础知识之上,就是软件开发语言、类库、框架,面向过程、面向对象、面向服务等编程思想,架构思想等等。
这些知识不一定会影响你现在的工作,但一定会影响到你的格局,那格局肯定也会影响到你自身的发展。我碰到过有些理论很差的人,但技术在公司内也是有些影响力的,因此,他们对技术原理就很不屑,甚至为自己不懂太多理论而擅长实战而沾沾自喜。这些人会对那些懂理论,但动手能力一般的人显示出由内而外的鄙夷,但是他们却不知道那些既有基础知识,也有动手能力的高手做出的东西是怎样的。就像我本人,实在是想不通,那些技术天才是如何开发出一个数据库、操作系统这样的软件。因此,如果你已经发觉自己基础不够扎实,那么还是有空就修炼修炼自己的内功吧!
作为在最前线 coding 的码农, 在别人讲解了二分算法的条件下, 能写出这个二分算法难道不是一线码农应该具备的基本素质?
一线码农难道不应该对一些基本的算法有所了解? 对常见的算法复杂度有所了解? 比如二分搜索复杂度为什么是 log2N.
很多人对算法复杂度的概念了解甚微, 面试前死记硬背, 但二分搜索的复杂度应该还是能推导出来吧, 没让推导快排啊(啊, 我自己貌似也忘记了快排复杂度的推导).
Reference:
讨论:程序员高手和菜鸟的区别是什么?
之前有一个候选人, Java 开发七八年经验了, 问 ArrayList, HashMap 怎么实现的都不知道.
还有一个印象比较深, 在 XX 做搜索, 面试职位也是开发啊, 结果落实到代码就根本下不了笔.
还有候选人写精通 Java, 结果连 GC 原理都不清楚, 还有什么熟练掌握 Vim, 结果连基本文本替换都不会, 有的会说精通 MySQL, 然而索引的原理也不清楚.
本文题目貌似取的范围有点大, 本篇强调的主要还是 coding 能力, 不过对于一线开发者来讲, coding 能力难道不是最基本中的基本吗?
可能感觉大部分程序员都被大量的需求压迫着, 被产品经理催促着, 仓促地码着繁琐的业务代码, 不断的改着 Bug, 又引入新的 Bug. 业务代码重要么, 当然重要, 但同时也还是希望我们不要抛弃一些基础的东西, 多培养一下我们的编程素养.
从一道面试题谈谈一线码农应该具备的基本素质