CS基础科目及基本能力要求

技术知识决定一个人能做的技术的层次。基础的知识有

  • 计算机组成原理
  • 计算机操作系统
  • 网络原理
  • 数据库原理
  • 计算机图形学
  • 编译原理
  • 数据结构
  • 离散数学、人工智能等等很高深的理论知识。

在这些基础知识之上,就是软件开发语言、类库、框架,面向过程、面向对象、面向服务等编程思想,架构思想等等。

这些知识不一定会影响你现在的工作,但一定会影响到你的格局,那格局肯定也会影响到你自身的发展。我碰到过有些理论很差的人,但技术在公司内也是有些影响力的,因此,他们对技术原理就很不屑,甚至为自己不懂太多理论而擅长实战而沾沾自喜。这些人会对那些懂理论,但动手能力一般的人显示出由内而外的鄙夷,但是他们却不知道那些既有基础知识,也有动手能力的高手做出的东西是怎样的。就像我本人,实在是想不通,那些技术天才是如何开发出一个数据库、操作系统这样的软件。因此,如果你已经发觉自己基础不够扎实,那么还是有空就修炼修炼自己的内功吧!

作为在最前线 coding 的码农, 在别人讲解了二分算法的条件下, 能写出这个二分算法难道不是一线码农应该具备的基本素质?

一线码农难道不应该对一些基本的算法有所了解? 对常见的算法复杂度有所了解? 比如二分搜索复杂度为什么是 log2N.
很多人对算法复杂度的概念了解甚微, 面试前死记硬背, 但二分搜索的复杂度应该还是能推导出来吧, 没让推导快排啊(啊, 我自己貌似也忘记了快排复杂度的推导).

Reference:
讨论:程序员高手和菜鸟的区别是什么?


之前有一个候选人, Java 开发七八年经验了, 问 ArrayList, HashMap 怎么实现的都不知道.
还有一个印象比较深, 在 XX 做搜索, 面试职位也是开发啊, 结果落实到代码就根本下不了笔.
还有候选人写精通 Java, 结果连 GC 原理都不清楚, 还有什么熟练掌握 Vim, 结果连基本文本替换都不会, 有的会说精通 MySQL, 然而索引的原理也不清楚.

本文题目貌似取的范围有点大, 本篇强调的主要还是 coding 能力, 不过对于一线开发者来讲, coding 能力难道不是最基本中的基本吗?

可能感觉大部分程序员都被大量的需求压迫着, 被产品经理催促着, 仓促地码着繁琐的业务代码, 不断的改着 Bug, 又引入新的 Bug. 业务代码重要么, 当然重要, 但同时也还是希望我们不要抛弃一些基础的东西, 多培养一下我们的编程素养.
从一道面试题谈谈一线码农应该具备的基本素质

你可能感兴趣的:(CS基础科目及基本能力要求)