计算机基础知识对程序员来说有多重要?


非常重要 。必须认真学习 。
学习基础知识从来都是枯燥的 。而且很多时候会给我们一个错觉 。就是基础知识没有用 。这主要是因为 。我们未来工作以后 。更多的是面向应用 。更直接的就是面向工具的使用 。基础知识基本是不可能直接拿出来用的 。所以 。大家就会觉得我只要懂应用方面的知识就好了 。基础知识根本不需要去学 。
就拿程序员来举例:
很多的程序员培训机构 。他们并不会教任何的基础知识 。直接就是教编程语言 。然后设计一些案例做练习 。3个月-6个月基本就结束 。这样教出来的程序员能够写代码吗?当然是能的 。不然这些培训机构早垮了 。而很多大学本科4年读完的应届生 。说不定写代码都没有这些培训几个月的学生强 。大学4年对于程序员来说难道就是白费吗?
并不是的 。
基础知识决定的是你未来的高度 。可能你作为一个初级、中级程序员 。你不一定会用到数据结构、算法、编译原理 。但初中级的程序员就是你未来几十年的全部吗?
如果是的 。在你30多岁的时候 。应该就会面对裁员了并且很难找到下一份工作 。

计算机基础知识对程序员来说有多重要?

文章插图
程序员是一个干到老学到老的工作 。每天都需要去学习一点新的知识 。技术也是在不断的演进 。需要去了解未来的技术发展方向 。这样才能够一直产生价值 。而基础知识是什么呢 。就是当你对技术了解越深入时 。越需要用到的东西 。
例如:你要做大数据的工作时 。你需要数据建模 。需要在海量的数据中抽取自己需要的数据 。还需要不影响系统的性能 。运算速度更快 。那么你就必须要了解算法 。了解时间复杂度 。如果你曾经大学时好好的学习了这些知识 。并且时不时会温习一下 。那么你更高更快的胜任这份工作 。
但是 。对于一个只是了解应用知识的程序员来说 。他需要想办法学习你用4年时间堆积起来的知识 。而且还不一定有可靠的老师能够教他 。
计算机基础知识对程序员来说有多重要?

文章插图
再举个例子 。现在华为需要一些技术人才 。来做他方舟编译器的迭代 。待遇非常可观 。
而这时 。对于懂数据结构、懂算法、懂编译原理的人来说 。查的无非就是一些应用实践的知识 。这些知识只要有基础、有环境 。1-2周就可以上手 。
但是对于只懂应用知识的人 。他可能就是看都看不懂 。华为也就不可能去招聘这样的人 。
所以 。程序员也是有高低之分的 。有的年薪百万 。有的年薪可能就十来万 。谁不想拿百万年薪呢?可能他们也觉得某些知识没有用 。所以没有去认真的学吧 。
其他观点:
数据结构和算法 。操作系统 。编译原理 。计算机组成原理这些课程对普通程序员来说是否需要去学习?会带来哪些帮助?
一、数据结构与算法
正如 N.Wirth 教授所说的:数据结构+ 算法=程序 。
遇到一个实际问题 。充分利用所学的数据结构 。将数据及其之间的关系有效地存储在计算机中 。然后选择合适的算法策略 。并用程序高效实现 。
这句话可能有点抽象 。我举个例子给你们解释一下 。
在工作过程中 。我们多多少少都接触过 OAuth2。在使用 OAuth2 授权的时候 。通常应用会弹出一个类似这样的信息:
1) 获取用户基本信息接口2) 获取用户列表接口3) 用户分组管理接口 。。。
思考一下 。如果让你设计数据库 。应该怎么设计信息存储权限?
如何你熟练掌握了各种数据结构的特点的话 。那自然而然想到使用 bitmap 来存储权限 。
我们把权限划分成最小粒度之后 。每一个 bit 都它的含义 。例如我们把权限划分为以下几种:
获取你的头像、性别、昵称等基本用户信息
以你的身份发布微博
【计算机基础知识对程序员来说有多重要?】获取你的好友列表
获取你的朋友圈信息
每勾选一个选项 。就代表着这个权限被授权 。为了保证可扩展性 。我们使用一个 uint64 来保存这些 bit。也就是说 。我们一共可以划分 64 种细分权限 。然后对这些权限进行组合 。
例如 。第一个 bit 如果设置了 。那么就代表可以获取你的昵称、头像、地区、性别等基本用户信息 。第二个 bit 如果设置了 。就可以用你的身份发状态 。
数据结构的实际作用还有挺多 。感兴趣的可以搜索以下知识点:
二叉树搜索用于中断处理、登记缓存查找等

推荐阅读