c/c++程序员必须要掌握开源项目
作为一个经验丰富的C/C++程序员, 肯定亲手写过各种功能的代码, 比如封装过数据库访问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件访问的类, 封装过UI界面库等, 也在实际的项目中应用过, 但是回过头仔细想想,其实以前自己写过的这些代码,只能是在特定的项目或者特定的环境中使用, 对于自己来说, 在不同的项目中应用, 只需要复制代码, 改改也就可以了, 因为自己写的代码自己很熟悉。问题是, 你封装的这些库, 在给别人使用的时候, 别人用起来是否很方便, 跨平台方面是不是也很通用, 性能是不是足够的好, 是不是支持多线程, 功能是不是也足够强大,可以适用于各种不同的需求。如果你上面这些都做到了, 证明你在这个库上确实花费了一番功夫, 经过了持续的改进和优化。
在日常的开发中, 作为一个程序员, 很多东西已经没有必要再重新开发了, 可以直接拿过来使用, 毕竟21世纪都已经过了N年了。我们没有必要重新发明轮子(不可否认发明轮子的过程可以学到很多东西,我就是这么走过来的)。
下面结合自己多年的开发经验, 想到哪里写到哪里, 希望对新人有一定的帮助。
一、网络
网络库必须掌握 ACE 和 libevent,一个是重量级的网络库,一个是轻量级的网络库。仔细想想,现在那个程序不用网络啊。不懂网络,你将寸步难行啊。熟悉这两个开源库的前提是你必须懂socket的原理,给大家推荐的好书就是《UNIX网络编程》,看懂这本书就可以了,其他的什么《windows网络编程》这些都不用看,因为网络编程,你学会了伯克利的套接字,你就可以在任何平台上进行网络编程了,不需要学什么windows下的网络编程,因为windows下的网络也是从伯克利套接字搞过来的如果你学习《windows网络编程》,那么你那天在linux,unix下进行网络编程,你还得在学习一下。没有那个必要。
二、数据库
数据库嘛,开源的Mysql和开源的PostgreSQL只要懂其中一个就可以了,商业数据库在掌握一个Oracle就可以了,文件数据库掌握 qlite。不过请大家注意,不要被上面数据库名字给迷惑了,数据库的本质是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 脚本,功能很强大,推荐学。
上面这些是所有程序都会 作为一个经验丰富的C/C++程序员,肯定亲手写过各种功能的代码,比如封装过数据库访问的类, 封装过网络通信的类,封装过日志操作的类,封装过文件访问的类,封装过UI界面库等,也在实际的项目中应用过,但是回过头仔细想想,其实以前自己写过的这些代码,只能是在特定的项目或者特定的环境中使用,对于自己来说,在不同的项目中应用,只需要复制代码,改改也就可以了,因为自己写的代码自己很熟悉。问题是,你封装的这些库,在给别人使用的时候, 别人用起来是否很方便,跨平台方面是不是也很通用,性能是不是足够的好,是不是支持多线程,功能是不是也足够强大,可以适用于各种不同的需求。如果你上面这些都做到了,证明你在这个库上确实花费了一番功夫,经过了持续的改进和优化。
本文转自:http://www.toceansoft.com/c/4558.jhtml
c/c++程序员必须要掌握开源项目的更多相关文章
- 在别的地方看的<<给程序员介绍一些C++开源库>>,记录给大家共同学习
首先说明这篇文章不是出自我手,大家共同学习. 引用地址:http://oss.org.cn/?action-viewnews-itemid-61998. C++开源库,欢迎补充. C++在“商业应用” ...
- 程序员必备,C#各类项目、开源项目插件资料收藏
一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种部署方面 ...
- MySQL 创始人:写代码比打游戏爽,程序员应多泡开源社区
王练 发布于2017年09月04日 收藏 43 开源中国全球专享福利,云栖大会购票大返现!>>> 根据StackOverflow的最新调查,MySQL仍然是全世界最流行的数 ...
- 从程序员到项目主管再到项目总监,一个IT从业者三个职业生涯阶段的工作生活日常
这是王不留的第 8 篇原创文章 前段时间写过<王不留的十多年工作和生活的流水帐>,在知乎.简书,还有不少微信的朋友私信问我每天四点钟是如何做到的?你现在的作息时间是怎么安排的? 于是,我将 ...
- 喝完可乐桶后程序员回归本源,开源Spring基础内容
周六了,又是摸鱼的一天,今天还有点不在状态,脑瓜子迷迷糊糊的,昨晚出去喝可乐桶喝的脑子到现在都不是很正常(奉劝各位可以自己小酌:450ml威士忌+1L多一点可乐刚刚好,可能是我酒量不好),正好没啥事就 ...
- 拥抱开源——Linux C/C++程序猿必须熟悉的开源项目
作为一个经验丰富的Linux C/C++程序猿, 肯定亲手写过各种功能的代码, 比方封装过数据库訪问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件訪问的类. 封装过UI界面库等. 也在实 ...
- 移动OA,致我们终将逝去的青春(程序员版)[转]
移动OA和致青春有什么关系,难道说赵薇也来做手机应用了?为什么不行,当年小燕子代言的打印机可是红火的很,现在再秀一把时尚手机办公也未必不可啊.言归正转,本文还是以点代面阐述移动OA开发过程,但是,它的 ...
- 你好,我是梁桐铭,.NET程序员,啰嗦下过去几年来的感悟吧
序 所有的文章都会有序言,我的当然也不例外. 因为职业和工作的关系,很少有时间陪伴家人,感谢妻子10年以来的容忍和支持,感谢女儿给我生活带来的乐趣. 希望孩子长大了之后能热爱编程(可以不用以它谋生). ...
- fw: 专访许鹏:谈C程序员修养及大型项目源码阅读与学习
C家最近也有一篇关于如何阅读大型c项目源代码的文章,学习..融合.. -------------------- ref:http://www.csdn.net/article/2014-06-05 ...
随机推荐
- 高效的插入子节点DocumentFragment
DocumentFragment 对象 DocumentFragment 接口表示文档的一部分(或一段).更确切地说,它表示一个或多个邻接的 Document 节点和它们的所有子孙节点. Docume ...
- java单例类/
java单例类 一个类只能创建一个实例,那么这个类就是一个单例类 可以重写toString方法 输出想要输出的内容 可以重写equcal来比较想要比较的内容是否相等 对于final修饰的成员变量 一 ...
- test 2016-12-28
// dpm(variable_get('node_submitted_page'));// //0// dpm(variable_get('language_count'));// //i3 = i ...
- NotORM(PHP的ORM框架)
类似Thinkphp映射到表的ORM机制. 网址:http://www.notorm.com/ <?php //require_once ‘init.php’;require_once ‘Not ...
- java怎么定义一个二维数组?
java中使用 [][] 来定义二维数组 定义数组时也可同时初始化下面是一些例子float[][] numthree; //定义一个float类型的2维数组numthree=new float[5][ ...
- 微信内嵌浏览器sessionid丢失问题,nginx ip_hash将所有请求转发到一台机器
现象微信中打开网页,图形验证码填写后,经常提示错误,即使填写正确也会提示错误,并且是间歇性出现. 系统前期,用户使用主要集中在pc浏览器中,一直没有出现这样的问题.近期有部分用户是在微信中访问的,才出 ...
- ZACC_DOCUMENT
method if_ex_acc_document~change. data: wa_extension type bapiparex, ext_value() type c, wa_accit ty ...
- Shell脚本快速入门
最近看了下Shell脚本.曾经遇到很多现成的工具包里边就多次用到了Shell脚本.总之这东西的作用无非就是将一系列的操作进行整合. ·整合后使得一套工作更加模块化规范化. ·批量处理要比手动操作快得多 ...
- Codeforces Round #375 (Div. 2) F. st-Spanning Tree
传送门 分析:构造题.可以这么想:先把s,t两个点去掉,把剩下的点先并查集合并.这样会出现个集合:, , 个剩余集合.那么个集合中先把只能与或中一个相连的连起来,如果这样已经超出了要求,那么就不能构造 ...
- 时间的处理 --java
得到当天时间 SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd" ); String todayData = ...