专访李民录:主流语言C++入门并不难

摘要:社区之星第7期采访的嘉宾是从事五年遥感图像处理相关算法的李民录。他表示C++在很长一段时间中仍为主流语言,对C++入门难的说法给出了自己的观点和学习方式。此外,他还致力原创GDAL源码剖析系列文章,旨在跟大家分享,秉承独乐乐不如众乐乐之观念。


 


李民录:学习技术,独乐乐不如众乐乐


CSDN:请先介绍下自己学习和工作经历,曾开发过什么产品?之前的工作经验对你现在的工作有何帮助?


李民录:我于2008年毕业于中国矿业大学地理信息系统专业,毕业后一直从事遥感图像处理相关的算法研究和软件研发。主要编写的算法有,正射校正,图像配准,影像融合,影像镶嵌,影像裁切以及DEM相关的算法等。之前的工作经验是我现在的基石,我工作四年多一直从事遥感图像处理的相关工作,很少涉及到其他行业。这对我来说既是优点也是缺点:优点是我对遥感图像处理的流程及其原理有了深入的理解;缺点是知识面窄。前者是纵向伸展,后者是横向拓展。学科交叉往往容易创新,多了解一下其他行业的动态对自己的思维容易有启发。


2008年7月,毕业于中国矿业大学地理信息系统专业
2008年-2009年底,任职于北京东方泰坦科技股份有限公司
2010年-2010年10月,任职于北京数字空间科技有限公司
2010年10月至今,任职于二十一世纪空间技术股份有限公司
CSDN:你何时开始接触计算机?是什么原因促使你走上编程的道路?最先使用的语言是哪个?


李民录:我第一次接触计算机是2001年在同学家,第一眼觉得很好奇,这就是传说中的电脑。之后高考填报志愿失误,调配到地理信息系统(GIS)专业,这个专业在当时(2004年)算是一个新兴的专业。简单的说,就是用计算机来处理和管理地理信息的一种技术。这也就促使我走上了编程的道路。


最先使用的语言是VB,是大一的时候通过学校开设的公共基础课接触到的。后来专业课中有C++,此后我写程序就全部使用C++语言。2010年我接触了Python,这是一门解释性语言,语法简捷而清晰,而且不需要编译,只要安装一个Python的运行环境即可,相比C++来说,用来写一些小的工具还是很方便的。




主流语言C++入门并不难


CSDN:你目工作主要以C++为主,从长期的使用经验来看,是你如何看待C++语言的未来,以及C++与C#的关系?


李民录:我个人觉得C++在未来很长的时间中还会是主流的开发语言,尤其是对于算法要求较高的行业,比如我从事的遥感图像处理。随着卫星数据的分辨率越来越高,数据量也越来越大,单纯靠提升硬件配置来增强数据处理能力是不够的,,还要从算法等角度来进行优化。从语言的执行效率来讲,C++比C#要高很多。但C#对于界面的开发有着很大的优势,这点对于C++来说是一个短板。


所以,我觉得C++和C#的关系应该是互存互惠的一个关系,各司其职,C++适合开发一些对算法要求比较高的系统,而C#应该是朝着快速的方向来发展。


CSDN:C++入门难”你怎么看待这个问题?


李民录:C++入门难,个人感觉不存在这个问题。造成这种认识的一方面的原因是现在网络上很多文章都在说C++难学,给想学习C++的人灌输了这样的概念——C++难学。如果事先没有这个概念,那么学习C++和学习其他的语言是一样难度。


另外一个方面的原因就是C++本身只是提供了一套语法规则,没有像C#、Java等其他语言自带的库。比如正则表达式,如果用C++来实现类似功能,确实很复杂。但是比较幸运的是,目前有很多开源的C++库提供了这些功能,比如被称为C++的准标库的Boost库,里面提供了一百多个涵盖了各个方面的库。


任何语言的学习都离不开一个过程,那就是亲自写代码、调试程序,在调试过程中理解语法的意义和概念。


此外,对于C++学习,建议大家经常去看一些科技网站,关注一些C++的开源库,这样很多时候就避免了重复发明轮子的过程。而且很多的开源库都有很多商业软件在使用,在效率和可靠性上都是比较好的。所以多了解一些C++的开源库对自己的工作肯定有很大的帮助。 




独乐乐不如众乐乐——GDAL源码剖析系列分享


CSDN:从博客中看到,你正在写关于GDAL源码剖析的系列文章。你最初想法是什么?未来一个月你将写哪些内容?


李民录:当初我学习GDAL的时候(2008年左右),关于GDAL的学习资料很少,除了官方的API帮助文档之外,就很少有其他的参考资料了。入门之后,我慢慢发现积累的东西越来越多,但没有记录,忘的也很快,为了以后用到的时候方便查阅,就开始写关于GDAL的博客。之后创建了一个GDAL的交流群,不到一月的时间,群就满了。很多人在我的博客下面留言,说博客帮助他们解决了问题,或者问我一些类似的问题。所以我觉得有必要把我学习到的关于GDAL的一些知识跟大家分享一下,独乐乐不如众乐乐,于是就整理了一下,形成现在的GDAL源码剖析的系列的文章。


接下来就是继续更新《GDAL源码剖析》这个系列的内容,之前写的主要是关于GDAL的使用方面的内容,接下来想把GDAL的内部机制和实现原理进行系统地说明,真正对得起这个系列的名字,好让广大的GDAL使用者能够知其然并且知其所以然。


CSDN:GDAL在读取不同的数据时,会发生什么常见问题?有何方法能快速的解决问题?


李民录:GDAL在读取不同的数据时,最常见的问题有下面三个:


GDAL关于中文路径的问题,以及矢量数据属性中文乱码的问题
对于C#语言调用会出现程序崩溃的问题
关于RasterIO读写图像的问题
第一个问题,主要是由于GDAL在1.8之后的版本增加了对于多字节的处理,默认的路径编码改成UTF-8的编码导致的。由于C++中文中默认的编码是GBK或者其他的,一般有两种方式解决:第一是将中文路径编码专为UTF-8,第二是设置GDAL默认编码不为UTF-8。


第二个问题,主要的原因有两个,一是GDAL的dll没有拷贝到程序的目录下,二是由于编译GDAL的平台和C#的平台版本不一致导致。比如,GDAL编译的是32位系统,C#在编译的时候必须选择X86平台,否则就会出现这个问题。


第三个问题,主要是对于RasterIO这个函数的参数没有理解清楚导致的。


上述三个问题,我分别写了几篇博客对其进行了详细说明。


CSDN:现在你从事的工作主要以C++和GDAL库为主,两者搭配的优势和弊端分别是什么?


李民录:


GDAL库本身就是用C/C++语言编写,所以对于C++的使用,本身没有语言的差异,使用起来也非常的方便。通过最基本的包含头文件,引用库文件就可以使用。


C++和GDAL搭配的弊端主要是C++语法的一些限制,比如,读取数据的时候内存的申请和释放等。对于这个问题只能靠使用人员本身来进行避免。


另外GDAL使用SWIG来提供其他语言的API接口,比如C#、Java、Python和PHP等。所以在使用GDAL的时候,对于搭配的语言来说,可以根据个人的习惯来决定。 


CSDN:分享下你学习C++和GDAL的一些经验,有何好书籍或方法可以推荐给初学者?


 李民录:学习C++的经验就是自己亲手写代码、调试,这样才能真正提高自己的能力,光看书是不行的,那就成了纸上谈兵,到真正用的时候就发现写不出来了。当然了,书还是必须要看的。我觉得学习任何语言都脱离不了这个规则。关于C++的书籍,《C++Primer》是一本好书,不管是学习,还是用来当作参考书都是很不错的选择。另外还有一本就是《深入理解计算机系统》(A PROGRAMMER'S PERSPECTIVE),这本书对于学习C/C++的人来说是一本非常好的书,尤其是想理解C/C++程序是如何映射到系统上,以及程序是如何执行的。读者能够更好地理解程序的行为的原理,以及效率低下是如何造成的。这本书从程序员的视角让读者可以深深地体会到学习计算机系统的内部工作原理会对他们今后的工作有进一步的帮助。


对于学习GDAL的方法,第一是看GDAL的官方文档。我曾经把GDAL的官方文档全部看完,当时还准备翻译一份中文的文档,后来由于种种原因没有完成。通过官方文档和官方提供的入门Demo,逐个理解每个类,每个函数的意义。或者先熟悉一下每个类里面的接口,有个印象,等用到的时候可以大致知道,然后再去文档里面找说明。


此外,学习GDAL之前首先要对遥感图像数据的基本信息有大致的了解,然后才能更好地使用GDAL库。比如,遥感图像相对于普通的图像而言多了空间信息,这些空间信息主要就是投影信息和分辨率。有了这些概念,就可以很容易理解GDAL的API,比如GDALDataset类中的GetProjectionRef这个函数就是获取的遥感图像的投影信息。


由于GDAL是在2007年左右才开始广泛的应用,目前还没有出版的参考书,只能去参考它的官方帮助文档。此外我整理了一个GDAL专栏,基本上也可以作为中文的一个参考文档。


我非常喜欢CSDN论坛和博客 


CSDN:你在学习或工作中,是怎么接触到CSDN?CSDN对于你的工作或学习有什么影响,起到过什么帮助?有什么故事可以分享?


李民录:第一次接触CSDN是在大学时期的C++的课堂上,老师推荐有问题可以去CSDN。之后再遇到问题,首先就是去看CSDN上,有没有别人遇到同样或者类似的问题(基本上80%的问题都可以找到解决的方式)。


很感谢CSDN提供的这样一个平台,可以把大家集合起来。尤其是对于CSDN的论坛和博客,这两个板块我个人非常喜欢。在论坛可以得到别人的帮助和帮助别人,博客可以和大家分享自己的一些学习经验等。 


CSDN:你对CSDN有什么建议,以及你对CSDN的未来有什么期待?


李民录:对于CSDN,我希望可以提供客户端的工具来发布博客,之前可以使用Live Writer来发布。有时候发布一些图片比较多的博客使用在线的编辑工具确实不太方便。


李民录博客ID:liminlu0314  博客地址:http://blog.csdn.net/liminlu0314 

你可能感兴趣的:(专访李民录:主流语言C++入门并不难)