只为提醒自己,前面的路很长

1.某君结合自己经历总结的c/c++程序员的修炼之道

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

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

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

一、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++机制, 最典型的就是多态机制, 还有很多的设计模式应用可以研究。

八、深研设计模式

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

2.C/C++程序员必须熟练使用的开源库

转自:http://blog.csdn.net/langeldep/article/details/6293655

在日常的开发中, 作为一个程序员, 很多东西已经没有必要再重新开发了, 可以直接拿过来使用, 毕竟21世纪都已经过了N年了。我们没有必要重新发明轮子(不可否认发明轮子的过程可以学到很多东西,我就是这么走过来的)。

下面结合自己多年的开发经验, 想到哪里写到哪里, 希望对新人有一定的帮助。

一、网络

网络库必须掌握 ACE 和 libevent, 一个是重量级的网络库, 一个是轻量级的网络库。仔细想想,现在那个程序不用网络啊。不懂网络, 你将寸步难行啊。 熟悉这两个开源库的前提是你必须懂socket的原理, 给大家推荐的好书就是 《UNIX网络编程》,看懂这本书就可以了, 其他的什么《windows网络编程》这些都不用看, 因为网络编程,你学会了伯克利的套接字, 你就可以在任何平台上进行网络编程了, 不需要学什么windows下的网络编程, 因为windows下的网络也是从伯克利套接字搞过来的, 如果你学习《windows网络编程》, 那么你那天在linux,unix下进行网络编程,你还得在学习一下。没有那个必要。

二、数据库

数据库嘛, 开源的Mysql和开源的PostgreSQL只要懂其中一个就可以了, 商业数据库在掌握一个Oracle就可以了,文件数据库掌握 sqlite。 不过请大家注意, 不要被上面数据库名字给迷惑了, 数据库的本质是SQL语句, 一定要懂数据库的基本原理,熟练应用SQL语言,懂数据库的优化,存储过程等。数据库的原理搞懂了, 拿什么数据库过来都轻松掌握, 就不会在乎是Mysql还是Oracle了。

三、日志操作

日志操作推荐大家熟悉 log4cpp这个日志库, 支持多线程, 日志重定向到网络等都有, 反正你能想到的日志的功能, 都有。

日志嘛,一个是方便查找问题, 方便记录程序运行的一些情况。这是必须的。

四、管理后台

众所周知, 写程序是给其他人用的,不是自己用, 所以在程序的易用性上,多给对方提供一些可以直接查看的管理界面, 显得分成重要。为程序提供一个web的管理界面,方便用户登录上去查看程序的各种信息, 很有必要。

我这里有一个方便的web后台管理的http实现, 可以方便的集成到应用程序中。在IE里面输入监听的端口,就可以查看程序的状态。代码还没有仔细整理。有需要的弟兄可以给我留言, 给大家发。

五、读取配置文件

所有的程序都必须有配置文件, 方便配置一些项目, 为程序提供灵活性。 所以写程序,必须有读取配置文件的封装类。

六、内存池

所有的进程都需要分配内存, 对C/C++来说, 分配和管理内存是已经很有挑战性的工作。

给大家推荐 nedmalloc 这个开源的内存池库。nedmalloc是一个跨平台的高性能多线程内存分配库,很多库都使用它。

七、缓存库

众所周知, 缓存库用得最多的就是 memcache 了。在做数据库开发的时候特别有用。

八、脚本

脚本是一个很有意思的东西,很多功能,其实我们只要写个脚本就可以完成,代码量少,开发速度快。

必须掌握的脚本,比较通用的要算 perl 了, 很古老的语言,但是功能太强大了。 我可以保证的说,.net,java能干的工作,肯定可以让perl来干。 C能干的, perl不一定能干。 perl作为linux, unix的系统集成的脚本语言,必须学会。

lua 语言, 这个语言, 在游戏行业用得比较多。不推荐学。

python 脚本, 功能很强大, 推荐学。

上面这些是所有程序都会用到的比较通用的功能。

在不同的应用领域, 需要掌握不同开源库, 比如搞游戏开发的, 可能需要掌握开源的UI库CEGUI, 开源的3D引擎OGRE等。

搞分布式开发的可能会有分布式的文件系统库等。

时间: 2024-10-14 23:06:00

只为提醒自己,前面的路很长的相关文章

                IT生涯的路很长,是否准备好?

IT生涯的路很长,是否准备好? 曾几何时,梦想自己成为一个出色的化学家.那大概是4年前的事了吧.后来,慢慢走向成熟.我很感谢亲爱的自己在大学所收获的知识.每天上班般的走进图书馆看着自己所喜欢的书,以前很讨厌看书的我,现在能静下心去学习.我感到自己渐渐成熟,某天突然对IT行业感兴趣,尤其是LINUX的博大精深.这将是我人生职业最大的转折. 有时候,我就会问.学这么多,还不是为了帮别人服务,找个工作那么难,并且还要忍气吐声的忙碌着,人的一生就要这样度过?这种想法一直促使这我,人总是会明白很多道理,以

人生的路很长,路有很多分支,每个分支都对应着不一样的未来,然而你选择了现在的这条路你就必须走下去

人的一生常处于抉择之中,如:念哪一间大学?选哪一种职业?娶哪一种女子?……等等伤脑筋的事情.一个人抉择力的有无,可以显示其人格成熟与否. 倒是哪些胸无主见的人,不受抉择之苦.因为逢到需要决定的时候,他总是求询别人说:"嘿,你看怎么做?" 大凡能够成大功业的人,都是抉择力甚强的人.他知道事之成败,全在乎已没有人可以代劳,更没有人能代你决定. 在抉择的哪一刻,成败实已露出端倪. 美文欣赏完了,是不是可以一心来阅读我的文章了呢?静下心来,这期的文档含金量都比较大,一定要好好吸收! 下面说说我

作为一个programmer,我们的路很长

与其说软件行业是一个浮躁的行业,不如说社会是浮躁(部分而非全部),社会中人是主体运作,人的急功近利,自负,追求利益的最大化,原本技术驱动的行业,变得乌烟瘴气,令人唏嘘,令人看衰. 软件的行业浮躁主要来自于两大方面,一是雇主,二是雇员,请允许我这样称呼,雇主一般指老板,老板无非追求功与名,因而大肆宣传自己,自吹自擂,当然有些人做出了些实事,有些人一直在做秀,玩虚的.套用时髦词汇,云计算,互联网+,好像不说,都感觉自己out了........甚至有人认为是一场科技革命,是一个全新的时代,这个需要时间

路还很长

今天是4月9日,离实习的日子也剩下2个多月了. 而此时心情还是没能调整过来,昨天去参加了蓝桥杯C组的Java比赛.从最开始的激动,紧张到最后的失落. 0分,注定的0分. 这是个教训的开始,毕竟是太投入到这个比赛中. 又一次让很多人失望,也让自己明了这条路还很长,要学的东西还很多.从最开始不爱交流,只敢匿名的发布自己代码,到后来被 老师发现,却一下成了"有能力的青年".从最开始的用Java开发了打地鼠游戏,却一次一次夸下不能完成的海口,"我会在一个星期完 成给你的",

前端的路还很长

1.会做一些简单的设计(能够熟练使用ps.fireworks.ai.Flash等设计软件做出一些特定的效果) 2.使用html+css进行合理的页面布局 (考虑页面兼容性---->最终要学会做响应式页面或者能够做                               到页面的自适应:注意一下他们的区别于联系                               性能优化------>了解浏览器怎样工作的:渲染与重绘) 3.使用css3做出一些特定的动画效果(Canvas或SVG也可

专访黄勇:Java在未来的很长一段时间仍是主流(把老板当情人,把同事当小孩,把客户当病人)

url:http://www.csdn.net/article/2015-09-06/2825621 2015-09-06 13:18 摘要:本文采访了现任阿里巴巴公司系统架构师黄勇,从事近十年的JavaEE应用开发工作.采访内容包含了技术人生.IT职场.程序员.Java Web框架.研发管理.敏捷开发.开源等问题,希望你在技术这条路上不孤单. [编者按] 一个普通的技术人讲述不平凡的技术人生路.黄勇,在工作十年后,写了一本书:<架构探险——从零开始写Java Web框架>,这本书是给他十年技

函数一直无法立即退出,在等待了大约30s后才能退出(QMulitHash释放不连续的内存需要很长世间,而这样设置局部变量后又无法避免这个问题)

局部变量使用对性能的影响以及进程的堆和栈: 由于在代码中我使用了QMulitHash<QString , LHFilteVersionItem> tmp;这一局部变量来保存某一目录下的文件,由于在写测试代码期间,我利用循环模拟了50万的数据序列化后保存在文件中,在运行期间我发现读取函数耗费很长的时间,而函数里面最耗时的读取操作也只花费了很短的时间,但是函数一直无法立即退出,在等待了大约30s后才能退出,相关代码如下: [cpp] view plain copy void LHTWORKFLOW

MTK 开机黑屏很长时间

MT6735平台,可以开机,但是黑屏很长时间才看到开机图片. 查看串口LOG发现手机是正常运行的,也就是说LCM驱动没有异常,黑屏阶段也没有什么错误报出. 在MTK的FAQ上找到如下: [DESCRIPTION] 本FAQ只讨论开机过程中黑屏,不讨论花屏(可以参考刷).只讨论L/M版本(之前的KK/JB版本可以作为参考). 首先要看一下是否IPO开机,即在setting-->辅助功能-->不勾选"fast boot",如果不黑屏,说明是因为ipo这个过程中的问题,那么问题需

为什么drop table的时候要在checking permissions花很长时间?

昨天,我drop一个表的时候在checking permissions花了20s+,这个时间花在哪里了呢?经常查找发现我的配置文件innodb_file_per_table=1的,innodb需要遍历LRU链表,并且丢弃属于这个表的表空间里面的页.如果innodb buffer pool很大的话,需要花费很长时间,并且当执行这个动作的时候table_cache的锁是不能被其他query语句持有的. 参考资料: https://www.percona.com/blog/2011/02/03/per