首页 > 编程语言 > C/C++开发 > 一个c++的开发人员,大学毕业时必须掌握哪些课程和技能?
2016
01-05

一个c++的开发人员,大学毕业时必须掌握哪些课程和技能?

作为一个c++的开发人员,大学毕业时必须掌握哪些课程,和实际技能呢?


对于大学生来说,毕业就得找工作,找工作就得符合公司的需求。当然面试可能会遇到你和面试官技术不匹配的情况,不过大多数情况,面试官绝对不会轻易的刷掉一个基础特别好的同学。

1、什么是基础?

基础就是大学上的那几门课程《计算机组成原理》、《计算机网络》、《数据结构》、《操作系统》等等。如果觉得基础知识你已经掌握的很好了(这里的很好只是你能认识到得很好),可以再看看四门专业课的延生课程。看完《计算机组成原理》可以看《深入理解计算机系统》,这本书对理解程序在计算机中运行特别有帮助。看完《计算机网络》可以看《TCP/IP详解》第一卷,工作之后你会发现后台编程,很多东西涉及到了各种网络协议。看了《数据结构》建议看看《算法导论》,这本书得细读,它不会教你如何写正确的代码,里面有很多数学推导,它会教你如何写更快更优雅的代码。掌握了《操作系统》这门课,推荐读读《深入理解Linux内核》,对于初学者,如果没人带的话,很难从这本书中得到什么收获,笔者读研时选过这个门,当时没跟上老师讲课节奏,后来发现这门课不管对于找工作还是工作都极其重要。

2、视野更加重要

书不是读得越多越好,视野更加重要。上面提到的已经就有8本书,不认为在大学毕业时能够把上面8本书理解得很好,虽然就算掌握了上面8本书,也不能算得上一个优秀的后端程序员。无论从事什么工作一个人的视野很重要,视野可以细化到见识和素养。就拿《深入理解Linux内核》这本书来说,当初学习这本书的时候,并不知道学好了这本书对于我将来会有多大的帮助,不能够体会到程序最终都要落到操作系统中,操作系统的优化,哪怕只是调整一个简单地IO调度算法就会对上层应用性能产生巨大变化,如果我提前知道了Linux系统的诸多用处,那么当初学习的时候我也会更加有针对性,对操作系统理解得更加深入。因此建议多逛逛开源社区或者知乎、quora这类的网站,对提升个人计算机素养帮助特别大。

对于如何学习c++,这几个帖子提到了很多干货:
https://www.quora.com/What-is-the-best-approach-to-become-better-at-C++
https://www.quora.com/What-are-the-best-C++-books
参加开源项目是学习好一门语言最直接最有效的途径,没有比直接和大牛对话对你掌握一门语言来得更快。这里推荐两个开源项目。
学习c++:
google/leveldb · GitHub
学习c:
antirez/redis · GitHub

刷题,还是刷题。一个好的项目无非包括两点因素,好的理论+工程卓越。好的理论可以从书和论文中汲取,而工程卓越呢?需要实践经验。当然对于大学生来说,不可能有很多接触到大型项目的机会,除了上面说的多参与开源项目,直接和大牛对话之外,另外一个方法就是多刷题。无论系统有多大,最终还是要落到数据结构和算法,系统性能由很多因素决定,程序算法和数据结构是每个程序员能够直接接触到的重要因素之一。曾经多次听到一个老人抱怨带的实习生把一个O(n)的算法写成了O(n^2),对于性能敏感型系统来说这是绝对不能接受的。这里介绍两个刷题网站。
Leetcode:
LeetCode Online Judge
对于一般的程序员(这里的一般是指数量上的一般,不是质量),刷刷leetcode就可以,如今已经有三百多道题,每道题都有对应的分类,对于针对性的学习特别有帮助。
对于对算法特别有兴趣的同学,可以刷:
hihoCoder
每周都会出来一道新题,题目难易程度不等,当然能做到每周题目都跟上那最好。
对于ACMer,另寻出路。

选好方向。不建议以语言类型来界定程序员种类,如今各种语言编译器已经做得足够好,语言和语言的差别已经越来越小,针对不同的应用场景使用不同的语言更加合理。公司招聘贴中常见的几种职位有系统工程师、基础平台工程师、应用开发工程师、数据挖掘工程师、运维工程师等。对于不同的职位需要掌握的技术栈大不相同。系统工程师需要在操作系统有足够了解,基础平台工程师需要对分布式系统足够熟悉,应用工程师需要对公司业务足够了解,最好有相关开发经验,数据挖掘方向是今年比较火的方向,每个公司对这个职位的需求也不一样,大体有三种,一种数据挖掘工程师是从分布式系统领域转行过来的如hadoop, spark等,也有是从DBA转过来的,或者从算法工程师转行过来。运维工程师需要对操作系统、网络、分布式等有一定的了解,不要求算法多牛,但是对系统的整体认识必须好。选好方向,掌握好计算机基础之后,在该方向下多留心,扩大自己在该方向上的视野,对找工作帮助很大。

总之,好的程序员不是等式能够由不同技能相加而成,所谓熟能生巧,多review别人代码,多留心周围好的理论实践,多参与其中,兴趣是最好的老师。

 

译文:知乎

 

编程技巧