如何成为一个牛逼的C/C++程序员?

这个题目的噱头太大,要真的写起来, 足够写一本书了。

本人是过来人, 结合自身的体会和大家交流一下,希望新人能少走弯路。

每个人的情况不一样,我下面的描述可能并不适合每一个看到这篇文章的人。

一、C/C++语言

如果你的基础很差, 建议不要一开始就学C++语言,从C开始学起,对程序有个初步的认识,循序渐进。C语言的书嘛,先买一本 300 页以内的,把书中的每一个例子都通过键盘敲打进去到 Visual studio里面去,然后单步执行,逐行调试去看各个变量的值。或者自行添加一些printf语句去输出变量的值。这样当你看完一本书后, 你就有编写小程序的感觉了。

记住,千万不要偷懒,不敲进去,自以为聪明, 能看懂, 或者直接从光盘复制。偷懒的代价是会花费更多的时间学习,最后还没有学会,给自己的自信心造成巨大打击,再也不想学程序了。

C语言看完一本书后,下来你就可以买一本C++的书看了。 C++的书也是一样, 必须300页以内的那种,不要一来就想学《C++ Primer中文版》这样的好书, 因为太厚了,怕你没有信心能够看完,即使你很有信心,花费一年的时间才看完,不值得。这种经典的厚的好书, 适合作为资料查阅,不适合挨个细节都看。

还是要提醒各位,一定要把书中的例子挨个敲打到电脑里面, 单步执行。一定不要从光盘复制, 一定要单步执行。

经过两本书的磨练, 估计你对C/C++肯定有比较深入的了解了, 下来应该可以进入实战了。

二、带界面的应用程序

学会了C/C++语言本身,可能还没有什么成就感,毕竟都是控制台的程序, 老是输出一串字符串, 整天面对各黑框框,成就感估计不是那么爽。要是能搞个带UI界面的程序就爽了。

下来就看个人的志向了, 如果走微软路线, 那你下来学MFC好了,如果要走开源路线, 那开源跨平台的界面库多得是。

通用的并且简单的就是 wxWidget 了, 官方网站为 www.wxwidgets.org/ 。你下载后看具体的例子, 把里面的例子程序敲到你的 visual studio 里面, 去调试, 看运行的结果, 你也可以试着去修改例子, 添加按钮,响应按钮事件等。

走到这一步, 恭喜你,可以照葫芦画瓢的搞个小应用程序了, 还带界面。

三、网络应用程序

语言搞懂了,UI程序也会了, 下来该学学网络咯, 现在那个程序不需要联网啊,懂网络对你理解很多程序非常有帮助。但是网络应用程序从哪里入手呢 ?

我来告诉你,从《UNIX网络编程》这本书入手吧,这本书可以教会你网络套接字的底层原理,把上面的例子好好学习,自己动手写一个回应服务器。写一个服务器端,在写一个客户端。服务器端请务必学会 select 这个简单的多路复用模型,这样你才能慢慢的深入里面 poll , epoll ,IOCP 之类的模型。

四、文件操作

所有的程序,基本都会用到文件的读写操作,windows系统有自己的文件操作API, 比如CreateFile, DeleteFile 等,请新手不要学windows的文件操作API, 新手请学标准C语言的文件操作函数,简单易学还跨平台。就那么几个函数,三下五除二你也就学会了, fopen, fclose, fread , fwrite, fseek, ftell 就这么几个而已。

五、深刻理解内存与指针的关系

作为一个C/C++程序员, 从学习程序的头一天开始,就要和内存的分配释放作斗争。你必须理解内存与指针的关系。怎么样才能理解呢, 请大家去看 《高质量C/C++编程》里面自带的几个经典例子吧。把那几个例子搞得清清楚楚, 基本能够理解其中的原理了。

六、仔细研究apache源码

学程序非特别是C/C++程序,非3年之功可以出山,三年对一个C/C++程序来说是一个从量变到质变的过程,三年的项目实战经验,可以让你接触到一个完整的应用程序所需要具备的骨架。但是这个阶段你写的代码,可能充满BUG, 会宕机,运行效率很差,自己回头看看一年前写的代码,可能自己都感觉恶心, 看不下去。没有关系,这种感觉是每一个进步青年都会有的。要提高自己的代码水平, 还是要像高手学习。你可能要问,公司同事的水平一般, 水平好的人家也不愿意给我讲。没有关系,开源的代码就是你像高手学习的最佳途径,开源代码是高手留下的练功秘诀, 你看了后你会突然感觉茅塞顿开, 感觉自己的水平差人家太远了。我为何要推荐apache的源码呢?

apache的源码是高手中的高手写的,执行效率和程序架构堪称一绝。里面的很多思想是所有程序都通用的,搞懂了, 很多模块你也可以直接拿来使用。apache对内存池的使用, 对线程池的使用, 对模块结构的封装,非常具有实际意义。要是你能把apache的源码吃个透彻,每一个细节都搞明白了为何人家要这么实现,我可以给你说,“恭喜你 , 你离传说中的高手已经不远了。”

七、修炼C++

我上面说的基本都是修炼C的, 要修炼C++, 还得再花3年功夫, 才有可能练成C++高手。C++太博大精深了,其中最复杂的莫过于泛型编程思想,不要以为能写个模板类就认为泛型编程不过如此而已。仔细看看STL源码, Boost 源码, 你就知道泛型编程有多么的博大精深了。修炼C++, 可以从用C++封装的MFC,  wxWidget入手, 看高手如何通过C++语言, 封装这样庞大的UI库,里面应用了很多的C++机制, 最典型的就是多态机制, 还有很多的设计模式应用可以研究。

八、深研设计模式

设计模式是程序设计的灵魂,是通用方法,当你面对一个大型项目的时候,如何设计一个有弹性的系统,是所有系统分析员应该掌握的技能。在设计模式的研究上,要结合实际的项目进行。

http://blog.csdn.net/langeldep/article/details/6333562

时间: 2024-10-25 15:43:18

如何成为一个牛逼的C/C++程序员?的相关文章

史上编程最牛逼的9位程序员,你心中的No.1是谁?

今天为大家介绍的这九位是对整个编程史影响甚远的程序员,他们每一个都在编程史上留下了自己的痕迹,他们要么是一些技术大神,要么是编程语言创始人,那么在编辑名人堂里,最厉害最牛掰的程序员会是谁呢? 1.丹尼斯·里奇:DENNIS RITCHIE 丹尼斯·里奇被誉为"C语言之父",他在生前与贝尔实验室的合作伙伴肯·汤普森(Ken Thompson)一起利用这种编程语言开发出了 Unix 操作系统.在互联网上,几乎所有东西都会使用C语言和Unix操作系统,但C语言之父的离世却很少有人缅怀.201

如何成为一名牛逼的C/C++程序员?

每一个学技术的人 都想干个三五年就能成为大牛 跳槽去大厂,薪水翻番 或者在一个小公司里,带个小团队 在30岁左右成为项目经理 晋升管理层 买房买车,实现人生理想 然而技术之路漫漫 想要成为牛×的程序员 还有很长的路要走 那么,成为一个很牛的C++程序员,需要修炼哪些技能呢? 1.C/C++语言 如果你的基础很差,建议不要一开始就学C++语言,从C开始学起,对程序有个初步的认识,循序渐进.C语言的书嘛,先买一本300页以内的,把书中的每一个例子都通过键盘敲打进去到Visualstudio里面去,然

全球最牛逼的 14 位程序员大佬,请收下我的膝盖~

全球最厉害的14位程序员是谁,你知道的有几位呢? 以下排名不分先后: Jon Skeet 个人名望:程序技术问答网站Stack Overflow总排名第一的大神,每月的问答量保持在425个左右. 个人简介/主要荣誉:谷歌软件工程师,代表作有<深入理解C#(C# In Depth)>. 网络上对Jon Skeet的评价: · "他根本不需要调试器,只要他盯一下代码,错误之处自会原形毕露." · "如果他的代码没有通过编译的时候,编译器就会道歉." · &q

【转】如何成为一个牛逼的程序员

来自:http://www.cnblogs.com/preacher/p/4205277.html   说的很有道理!!! 上边这个网站不是原文网站,,,原文网站地址:http://blog.csdn.net/foruok/article/details/42061247 该作者应该是主要为程序员职业规划知道,,,相关的  程序员漫谈系列  值得一看!!! ------------------------------------------------ 作为程序员,身边总是有牛逼的前辈.后辈或者

如何定义一个牛逼的前端工程师

有软件工程方面的研究说,对于开发者个体而言,最优秀的开发者的生产效率约为平均值的2倍,而优秀的开发者会吸引其它优秀的人,或者激励与帮助团队中的其它成员,最终使团队之间的生产效率差异达到10倍之多. 所谓牛逼的工程师,就是那些个体效率是其它人2倍,形成团队之后达到10倍差异的一群人. 前端领域这几年发展速度非常快,人才分布呈两级分化趋势,大家都在说缺前端,其实缺的是牛逼前端,对于低端的前端,培训机构一直在量产,但是无法满足要求.很多情况下,一个牛逼前端对于团队的价值是再多低端前端都无法提供的. 牛

如何成为一个牛逼的程序员

“成为一个杰出的程序员!”,每个程序员都是这么想的,虽然嘴上不说!这是一个人人自称“屌丝”,骨子里却都认为自己是“高富帅”(或者认为自己终究会成为高富帅)的年代! 大部分时候,我们一直在努力成为一名优秀的程序员.但是,更多的时候,我们并不知道如何成为一个优秀的程序员! 怎样成为一个优秀的程序员? 完美主义?注重细节?懂用户需求?恩,听起来都有道理,但又觉得很虚,难以实施! 选(fang)择(fa)比努力重要,一味只会埋头苦干的人,注定成不了杰出的程序员,有时候,我们需要停下来:思考! 我不是一个

【项目总结】:如何做一个牛逼的Team leader?

随着ITOO高校云平台3.1项目的结束,我们各种各样的总结也被提上了日程.Java版本的所有开发人员和Donet版本的所有开发人员坐在一起进行了关于项目开发管理的头脑风暴,虽然我只是Donet开发组的一个子系统--考评系统的模块开发人员,但是对于项目开发管理也有自己的一些思考和看法. 众所周知,作为一个Teamleader,是要考虑很多很多事情的,如何调动团队成员的积极性,如何统筹安排团队成员分工合作,使工作效率达到最佳,如何根据开发人员的技术水平.经验以及个人性格等诸多因素为他们分配任务,以使

【项目总结】:怎样做一个牛逼的Team leader?

随着ITOO高校云平台3.1项目的结束,我们各种各样的总结也被提上了日程. Java版本号的全部开发者和Donet版本号的全部开发者坐在一起进行了关于项目开发管理的头脑风暴,尽管我仅仅是Donet开发组的一个子系统--考评系统的模块开发者.可是对于项目开发管理也有自己的一些思考和看法. 众所周知.作为一个Teamleader,是要考虑非常多非常多事情的,怎样调动团队成员的积极性,怎样统筹安排团队成员分工合作,使工作效率达到最佳,怎样依据开发者的技术水平.经验以及个人性格等诸多因素为他们分配任务.

说一个MySQL里可能90%的程序员都会遇到的坑

说一个MySQL里可能90%的程序员都会遇到的坑最近我遇到了一个bug,我试着通过Rails在以"utf8"编码的MariaDB中保存一个UTF-8字符串,然后出现了一个离奇的错误:Incorrect string value: '\xF0\x9F\x98\x83 <-' for column 'summary' at row 1 我用的是UTF-8编码的客户端,服务器也是UTF-8编码的,数据库也是,就连要保存的这个字符串" 原文地址:https://blog.51c