C++是一门略微比其他语言难一点的语言,它更偏向于底层,而且它包含的思想比较多,如果你只学习语言本身,不关注它所涉及的思想,将会在未来的实际应用中举步维艰,所以学习该门语言需要你付出双倍的精力来学习它的附属知识。
学习编程语言后你要做哪些
编程语言本身的思想都是贯通的,无论你学习C/C++,JAVA还是PHP,Object_C,Python。他们都是一种思想,当你学会其中一门去学其他的就会变得相对容易。
学会一门语言后可以去做这些事情,你主要找一个方向努力即可:
当你工作一段时间后你可以做职业方向调整,一直做技术,最终变为技术负责人或者大牛。
C++的入门门槛太高,可能学习了一段时间后还做不了什么东西,导致信心大受打击,进而放弃。小编把自己的经验分享给大家,希望帮助新人少走些弯路。
在此我们不讨论具体的技术细节,只说我们应该学习什么东西。
【文章福利】: 推荐小编的C语言/C++交流群:836880131!整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加!
纯小白或者非计算机专业入门的读者,先找本薄的C++的教程,比如刘璟与周玉龙合编的《高级C++语言程序设计》,这本书搭配了一本《高级C++语言程序设计实验指导》学习过程中要自己动手完成实验指导上的小程序。
在有一定C++语言基础后,推荐阅读《C++ Primer》。这本书几乎涵盖了C++所有的知识点。
高级的、先进的一些内容,比如C++11的内容,可以看《深入理解C++11:C++ 11新特性解析与应用》;Boost库的使用,可以读罗剑锋的《BOOST程序库完全开发指南 深入C++“准”标准库》。
程序员必备的编程基础:数据结构和算法、计算机网络、操作系统、设计模式
无论使用哪种编程语言、从事什么编程方向,只要做编程开发,这四个计算机基础就无法避开。可以这么说,掌握这四个基础知识比掌握一门编程语言更加重要。
1. 数据结构和算法
这个直接决定了面试的成败!几种基础数据结构类型得烂熟于心,比如:字符串、链表、二叉树、堆、栈、队列、哈希等;基本的几大算法也要了如指掌,比如查找、排序、动态规划、分治算法等等。
参考资料:
入门篇:《大话数据结构》、《算法图解》。
基础篇:《数据结构与算法分析》(这本书有三个版本,分别是C语言版本、C++语言版本和java语言版本)。
进阶篇:如果觉得自己水平已经还可以,推荐阅读《算法导论》。
2. 计算机网络
计算机网络指的就是TCP/IP协议栈,可以说它是当下互联网通信的基石,无论如何一定要对TCP/IP的协议栈了如指掌,主要就是学习和掌握原理,包括:ARP协议、IP协议、ICMP协议、TCP和UDP协议、DNS协议、HTTP协议、HTTPS协议。
推荐书籍:
《TCP/IP详解》(该系列书籍有三卷)。
网络知识体系入门推荐:《TCP/IP详解卷1:协议》。
仔细阅读完卷1后,可以根据自己实际需要阅读卷2和卷3。
3. 操作系统
该部分重点包括:进程和线程的相关原理(原子性、并发、锁)、内存相关原理(内存分布、内存调度)。
推荐书籍:《深入理解计算机系统》
4. 设计模式
设计模式有23种,一般来说, 23种设计模式中我们只需要熟练常见的几个如:单例模式、工厂模式、代理模式、策略模式、模板方法模式。
推荐书籍:《大话设计模式》、《设计模式之禅》。
这部分会涉及一些工具、编程环境和具体编程实践,应该说这一部分学完,自己应该能做点东西出来或者说能看懂一些实际项目的代码。
1. Linux操作系统的使用
很多人编程入门的初学者都是在Windows环境上进行的,而实际企业级开发几乎是Linux环境下进行的,所以Linux系统必须要会,包括:常见的Linux操作命令、基本的Shell编程。
推荐书籍:《鸟哥的Linux私房菜》
2. 编译/调试工具
首先是跟编译相关的:编译工具!
很多人学C语言、C++都在类似Visual Studio这种集成IDE里进行代码编译,这个其实也用了编译器,只不过是微软自家的MS编译器,而且所有操作均可视化。而企业里开发很少会基于Windows系统,所以Linux平台上的编译器更为重要,最典型的就是GCC,甚至有些公司有自己定制过的交叉编译工具,但没关系,只要 GCC熟悉,其他问题都不大。
最后说到调试工具,Linux平台上的 GDB调试工具要熟练使用,会借助于它进行调试。
推荐资料: 这部分没有书可推荐,英文好的同学可以直接看 GNU官网关于 GCC和 GDB的文档,中文材料可以看:《debuging with gdb》(中文版)和陈皓先生的《跟我一起写makefile》
3. Linux环境编程
企业里C语言和C++几乎都是基于Linux平台的,这一部分我们没办法避开
众所周知,Windows系统编程里有各种各样的Windows API,同理Linux系统API的使用就更加重要。
此处指的是多线程编程实践相关的东西,一般包括:线程、资源、信号、同步、互斥、锁等等一些具体的编程方法。
此处的网络编程主要指的是具体Linux系统上的网络编程 API和 IO函数的编程实践。
推荐书籍: 这三部分综合在一起,推荐必看书籍包括《Unix环境高级编程》、《inux高性能服务器编程》、《POSIX多线程程序设计》
以上的内容如果都精通了,也算是个比较厉害的程序员了。但是对程序员来说,项目经验更加重要。一个好的项目可以让你把各种技术进行综合运用,并且能学到一些新的知识。比如说做游戏的就需要学习图形方面的知识,做播放器的要学习编解码器方面的知识。
很多程序员会忽略项目的经验,而单纯的谈技术能力,这是错误的。其实这就是理论和实践的关系,技术就是理论知识,做项目就是实践,理论对实践有知道作用,实践能加深我们对理论的深入理解。
沟通能力是一个高级程序员要具备的软实力。
我这里想说的沟通能力并不是一般说的能说会道,夸夸其谈,说话天花乱坠。而是建立在技术基础之上的沟通能力。
最后,C语言学习方法总结一句话:
多看,多敲,多思考
把C++的学习变成一种乐趣。
推荐一下小编的C/C++学习交流群:836880131 群里有不错的学习教程,从入门到项目实战。学习开发用到的开发工具,完整项目源码免费分享等以及解答学习问题。大家在学习过程中有不懂的可以加入一起交流,对你学习C/C++语言会有很大帮助!
C++的世界是复杂的,也代表着它是无穷无尽的,新的想法就意味着全新的程序,自己编写程序,就好像遨游在我的世界中,虽然我们一定会遇到各种BUG和崩溃的程序,但趁着发未落、鬓未白,认真学习C++吧!!!