Linux迷,Python粉
人生苦短,我用Python 新博客https://blog.pythonwood.com 问题小站https://qa.1r1g.com 智问智答https://qa.1r1g.cn
 
 

实习项目总结文档

 

 

项目介绍


项目逻辑很简单,只有几个页面,只能登录,查看,支付和退款。主要作用是熟悉C++的cgi的web服务开发方式。


项目页面截图

图一:登录页面




图二:买家查看






图三:买家支付



 

图五:卖家查看




图六:卖家退款



 

 

准备:一个星期


8月28日,第1天,入域,安装rtx,qq,wps,管家。不太顺利,可能我比较笨,用了半天。
安装git,vim,firefox,chrome。发现git必须配置http://web-proxy.oa.com:8000代理。
颇不如意,挺折腾人。
导师根据实际工作内容,为我写了一个培训计划。于是从编写linux-c的tcp层的服务端客户端开始,配置服务器,到mysql数据库操作我都做了搜索资料和实践。这时我对我们组的工作还是不太了解,正疑惑,又问了leader,他说的是http服务经转发到cgi,cgi层调middle层。我似懂非懂,后来导师强调了重点,server层操作数据库,封装了接口给cgi层调用。于是我隐约觉得middle是实际server,用于隔离数据库操作,cgi是个业务逻辑层,根据业务调用middle处理请求。也问过一些同事,一直到现在我都认为是对的。

前期工作:约一星期


准备做个小项目了,导师给说了开发流程,需求文档-设计文档-(接口文档-后面leader加的)-开发-测试。于是没有做过开发文档的我开始痛苦的探索之旅,一开始连需求文档和设计文档都分不清,研究导师发给我的示例,模仿着写,可是一天都没孵化出一点觉得靠谱的内容。后面也是摸爬滚打,艰难原始积累的过程,还学了visio画uml序列图,用了两天多,终于作出一个7页的,还是需求设计一起放那了。于是我懂了产品经理的苦。导师说需求也可以用html,我就用一天做了个html的demo。然后我放下一边开始进入真正开发里的设计阶段,首先写了init.sql,写的同时其实也是在重构数据库。然后开始写server端。周末加了一天半,学C++去了,对之后是挺有益的。

开发冲刺:一个星期+周末加班到深夜


写server要考虑一些事:与cgi通信的协议,要不要多线程,用C还是C++等等。这个代码宏观层的设计和代码结构的微观层设计同样重要。设计不佳则导致开发过于痛苦,设计好则一马平川。我的设计后面发现不使用与json等通用格式,所以设计的不好。所以server后面改过一些代码。让通信协议不统一了,这种混乱是很多灾难隐藏地。然后我写cgi和前端,由于我一年的web开发经验,jquery,bootstrap顺手拿来,还算顺利,不过还是有几个残忍的bug,让人揪心。Cgicc库最让我深刻的就是cgicc的cookie功能太惨白,还有参数获取太过于stl化,晦涩而冗长。还好,这几个cgi的功能单一,还能吃得消。这个星期是整个项目的开发主力时期,周末甚至加班到11点,不过进度倒是有提升不少,比较满意。我开发时就是这样的,一旦我知道要做什么,怎么做,就会全力以赴。熬夜,休息不够那也是常事。

 

修饰美好UI:一天


8月18号,第22天,星期一,听导师意见美化UI,完善提示功能后,还修改了一两小bug,终于完成了这个项目。

项目发散思考


这个项目让我重新学习了C++,让我完成参与过的项目又多了一个。写了很多篇博客,来记录我遇到的问题和解决方法的总结,还有我的思考总结。

刚好我的上一个项目是python的django项目,这个项目是C++写的,同样是web-server的项目,说一说我的比较和收获吧。

1、2-8原则,一个项目,80%的时间可能都在运行的那20%的代码。那20%的代码应该由最顶尖的工程师设计和编写。我总觉得,平台型程序员比较牛,那些写库的写手都是强人。
2、cgicc库比较小,总共8000行,基于stl库的。在这个项目了,我因为要用cookie功能而自己查看源代码。通过这种方式,对cgicc库本身架构有了个原始了解,c++写的东西总是很抽象的。我想要更简单的获取cookie方式,而不是返回HTTPCookie类的iterator,我还要看这个iterator是不是end再用类函数调出字符串来,那还不如直接返回给我好了。我试过封装,但是发现必须好些类都封装上层子类才行,这无异与在写个新库,要知道cgicc也很小。
总之,cgicc有不少抽象,抽象的同时还底层。拿个cookie都麻烦,这大哥就是STL带过来的脾气。
3、效率问题。分两个方面:一,开发效率,显然,python胜C++5倍以上,代码至少差2倍。如果那个微信项目用C++的cgi开发,估计要3个月以上。二、运行效率,显然一流的程序员写的C++程序应该比Python快很多。尽管这样,我还是发现在迭代方面,Python的list类型比C++的vector类要快,这是我以前在研究最大子序列和问题时发现的,都是o(N)算法,但当长度大于10000时,Python开始后来居上,长度越长,差距越大。根本原因可以言简意赅的说:list在python里是一等公民,vector在C++是二等公民。
4、C++与Python的一点见解。C++的文档,C++的库非常少。Python的库多如繁星,文档更是一点不落。C++已经被微软冷落了,google后来成了它重要支柱力量之一,后来开源社区的力量挺起了C++。C++经历从开始的热火朝天到现在不温不火状态,而Python一直是开源社区明星之一,如今它以成为美国大学了的第一名了。
C/C++/Python一直是我关注的语言,在我看来,如果C++继承了C语言99%,但它是个联邦,C是它的邦国。Python形式上与C截然不同,但他的基因是C的,他是C的儿子。

C++和Python的一个比喻(自创)


中国历史上有两个著名的人,苏轼和朱熹。苏轼提倡书“越读越薄”;朱熹相反,提倡“越读越厚”。拿到这里来比喻,苏轼是Python,朱熹是C++。

 
 
posted on 2014-08-20 18:46  月冷风和霜  阅读(678)  评论(0编辑  收藏  举报

智问智答 https://qa.1r1g.cn 问题小站 https://qa.1r1g.com