从某863项目思考自己的学习能力
2014-03-23 09:35
344 查看
我在研究生二年级上学期的时候,被老师派到一个国家的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等编程有点不同的地方。
总结:项目很难,同时暴露了我更多的问题,我也会通过项目来慢慢修正自己。更多的技术和心得我都会分享出来。
我个人认为自己的项目开发经验比较多,在参与到这个小组项目之前,我做过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等编程有点不同的地方。
总结:项目很难,同时暴露了我更多的问题,我也会通过项目来慢慢修正自己。更多的技术和心得我都会分享出来。
相关文章推荐
- 关于python项目路径导入自己写的库出错的一点思考
- 将tomcat欢迎页面修改为自己项目的主页
- 如何将自己的项目导入到github里面
- 在NDK上建立自己的项目
- 【面向对象课程项目:纸牌】Java实例学习(三):对自己代码的修正与加壳(仍然要对比源码)
- 将自己的项目提交到github管理
- mybatis 开发自己的项目
- 关于近期项目的思考 - 1.画面
- java web项目答辩答辩题总结(书本网上语言答辩+自己的语言答辩)
- Quick小白书系列(二)创建自己的项目并做点有意思的小内容
- 开创自己的项目
- Android视频播放项目总结之 使用VideoView定义自己的视频播放器
- 让自己的项目支持 Carthage
- 项目问题的思考之策略模式
- 对项目开发流程的思考和小结
- 简单的分享自己最近的一些项目,有机会详细说下的哦
- 自己项目中做的UI布局
- 鞍凌朝阳项目的思考
- Cesium随笔(1)部署自己的项目 【转】
- 自己搭建Android项目框架必备的框架与第三方应用