从某863项目思考自己的学习能力

我在研究生二年级上学期的时候,被老师派到一个国家的863项目开发小组,参与到OLSR协议的二次开发。

我个人认为自己的项目开发经验比较多,在参与到这个小组项目之前,我做过PHP、C#、MFC、python、Mysql开发,基本上涉及到各种模型的开发,B/S和C/S,网络通信等。

但是从这个863项目,我基本上否定了自己。


这个项目是在linux环境下的一个开源协议修改。我之前没怎么真正接触过linux下的开发,比我想象中的很多地方都要复杂,项目采用了C语言,很底层的编程方法和思想,到处用的都是结构体和指针。我之前用的东西,比如C#,很多函数都是封装的非常好,直接调用就可以,参数也很简单明了。但是OLSR下的各种东西都非常复杂,也因为是一个国外的协议,缺少文档和教程,加上我对协议这块不熟悉,因此看起来更是天书一样。另外linux下的通信也非常底层,我对通信处理这块感觉也非常难。之前在分布式计算上学到了利用java的通信api来处理TCP和UDP非常简单,但是C语言的通信就更为复杂一些。


这个项目暴露出来我自己的很多个人问题:

1 基础知识不扎实。比如在一个模块的开发中,两个结构体的顺序我颠倒了位置,导致编译提示错误。但是我一直没有发现是什么错误,夸大了错误。还是在另外一位同学的帮助下,找出了错误。这实际上是一个结构体包含结构体的问题。也是很基础的定义和调用顺序问题,但是我始终没有发现,这是基础知识不扎实。还有一个问题就是我在.h文件里声明了一个函数,函数用到了两个结构体,然后在.c文件里对这个文件进行了实现,发现出错,后面把.h的声明删除以后,编译通过,一直找不到问题的解决办法。后面一个同学才发现,我这个结构体的定义在另外一个.h中,我只在.c里面包括了这个.h文件,而没有在同名的.h文件中包含这个定义结构体的.h文件。所以导致会出现这样奇怪的问题。


2 主动解决问题的能力。在函数的编译时候,用到了一个结构体PN,这个是师兄们之前用过的,但是我重新编译的时候,但是无论怎么查找,都找不到PN的定义。我就几乎绝望了,发现问题越来越多。另外一个同学过来后,发现这实际上引用了一个新的开源库openssl,PN即来自这个文件中,但是新的环境下是没有openssl的。所以需要重新安装和编译,才能直接使用PN。


3 快速适应环境问题。我习惯于用IDE来进行开发,不管是在windows上还是linux上,提到开发,不由自主就想找一个类似于vc++或者sharpdeveloper的工具。但是发现其实很多在linux下的一些开源代码,基本上是没有工程性的思想,也就是说文件非常分散,通常只是用makefile的形式来组织和编译,对于我这样一直习惯了用windows里面工程的思想的人来说,适应上还是有一些难度。今天也还遇到了编译时候的环境问题。也就是我在openssl成功安装后,但是还不能在C文件里面直接使用openssl的文件,就算是直接引入了openssl/dh.h这个头文件还是不行,而需要带上编译的参数,才能直接使用,这个也是和windows下的include、lib、dll等编程有点不同的地方。



总结:项目很难,同时暴露了我更多的问题,我也会通过项目来慢慢修正自己。更多的技术和心得我都会分享出来。

你可能感兴趣的:(从某863项目思考自己的学习能力)