(一) 打好编程基础
这篇文章仅给那些GIS专业的,想学GIS开发的,但现在还没怎么入门不知道该从哪学起的在校生参考的。这篇文章不是讨论GIS开发是否有前途的,也不是讨论做GIS是不是就一定应该做开发的帖子。先就几个大家在学生时代都很迷茫,我也曾经迷茫过的问题,说一下自己的观点:
1、现在开始学习编程,是不是晚了?
如果以大四毕业找到一份GIS开发方面的工作,并对得起3K左右的月薪为目标的话, 从大四开学开始努力就不晚。
2、学校不教编程,怎么办?
大学里学校教不教只是指个方向,学习都靠自己,既然已经决定要做GIS开发,方向已经有了,学校教不教又有什么关系?你可以找吉思培这样的职业培训机构,这些机构都是按照社会岗位需求的技能来进行培训的,不要把视角局限在学校里。
3、GIS学生编程不如计算机的,搞测绘不如学测绘的,搞地理不如学地理的,我现在开始学习编程再怎么学也赶不上学计算机的怎么办?
这个问题简单,如果现在去睡觉能赶上他们的话,完全可以去睡觉嘛。 如果你是一名大二的学生,能意识到自己以后打算做开发,并开始努力,那是再好不过了。这个时候大部分学生还处在比较迷茫的时期,或者还在享受幸福的大学生活。这个时候开始努力,你就比别人起步早,自然会比别人更有优势。
这时候学校一般都会有一些计算机相关的课程,计算机基础啊,VB啊、C啊什么的,对于不想从事这一行业的学生来说,应付过去就是了,但对于已经有想法的学生,这时候就要抓住机会,不要局限老师教的内容,要自己去拓宽学习范围。报一些课外的职业培训班,毕竟这才是真正教会如何应付职场问题的关键,如吉思培这些由地学专业已经就业的学生组织的职业经验分享中心圈子,可以进入他们的QQ讨论群了解一下,职业技能方向。
下面细说一下这些计算机基础课程应该怎么去拓宽知识面。学计算机基础的时候,除了把word, excel的基本操作弄熟,去学一学高级应用,比如说用excel做一些漂亮的报表、做一些数据的处理,筛选啊、统计图啊等,用VBA的做一些小应用,用Access做一些常用的数据库管理程序,像学生信息管理系统啊之类的。
不要觉得这些东西没有,我去浙江地理信息中心,笔试上机题目,有一道就是excel相关的,要求用编程和不编程两种方法实现。我没做出来。。。囧如果学校开了C语言的课程,不要只会做个从1加到100的程序。像C语言中比较难的部分,非计算机专业在教的时候都会回避。这个时候你就不能回避了。哪些部分呢?文件读写操作,位操作,内存操作,指针的操作,这些都学一学,很有用的东西。
还有数据结构要多了解一些, 除了那些大家乱熟于耳的冒泡排序等算法,像什么链表、二叉树,图什么的都去了解了解。最后有和C语言去实现这些数据结构,可以去买一些数据结构的书来参考。如果学校开了VB的课程,那就要多去做点小应用。VB是一个很容易上手的语言,通过很短时间的学习,就能做出像模像样的东西,这对于学习GIS二次开发来说是个很不错的工具,编程的难度降低了,可以把重心放在怎么设计开发GIS功能上面去。
所以,在学习VB的时候,如果你听说过MO,尝试着用一用,并做一些小程序。你还可以去用VB写一些程序来操作word,excel,cad等,这些东西都没什么,就是个对象模型,熟悉它的对象模型了,就好操作了。另外,在用VB编程的时候,应该融入一些面向对象的编程思想,虽然VB不能算是面向对象的语言,但这也除低了学习面向对象的门槛,尝试着把一些常用的功能,算法写成函数或封装类。不要把代码复制来复制去的,搞的整个程序到处是重复的代码还沾沾自喜。还可以用VB尝试一下连接数据库,做一些数据库管理程序。还可以做一些控件,做一些dll,然后自己去调用,体会一下组件式编程带来的优势,等等。。。这些学校上VB课的时候,都不会教,都要靠自己去学。
(二) 目标明确
有选择的学习 上面说的那些基本上都是大二的课程,什么大学生计算机基础啊,VB啊,C啊,如果能在大二时做到上面的全部,那就是非常非常牛的人了,我大二一年都贡献给war3了,还挂了好几科,VB学到变量那一章就直接废掉了。
考试完全靠突击,才突击了个中。那大三的时候做什么呢?大三的时候一般会开各种专业课,说实话,编程是一个很费时间的事情,如果你已经决毕业后做GIS开发,那么,一些不相关的专业课,完全可以放弃,考试能过就行了,不要太花时间。拿我的课表来说,像什么人文地理啊,土地经济啊,自然地理啊,都是没用的课。有很多人以经济爱好者自居,看到带经济的课就两眼放光,其实这些课真的是很没意思,不是看了本什么地理经济你就算搞经济的了,看了本地籍管理,以为自己可以去房地局管地籍了,什么都想学,往往最后什么也没学好。所以,该放弃的课,是一定要放弃的,把有限的时间用在刀刃上。
还有另外一些专业课,和GIS相关的,像GIS概论,遥感,GPS,数字图像处理,摄影测量,GIS地图设计,GIS项目管理,空间数据库原理及应用。。。等等(我只是根据我的课表列举一些,各个学校专业背景不同,具体课程也不同),这些课程都是要用心去学的。在这些课程中会碰到一些需要编程来解决的问题,不要偷懒。另外,这个时候会接触到一些GIS软件,什么cad,arcview,arcgis,mapinfo。。。很多,但是有两个软件是学GIS的一定要掌握好的,包括它们的二次开发,其他的软件都可以无视。
一个不用说,当然是arcgis了,把arcgis desktop玩熟,最好去买一本实习教程什么的,有数据有步骤,一本书做下来,就差不多了。
第二个软件是autoCAD,这个软件在GIS和测量行业中的地位是不可忽视的,cad的强大和易用性自然不必多说,cad的格式是一代数据格式的标准,GIS数据的来源无外乎测量和遥感图像,测量数据基本上都是dwg格式的,像国土部门,地籍部门都充斥着大量的cad原始数据,但是cad数据虽然灵活,确不能用GIS来管理,而且数据质量存在很大的问题,所以,如何将原来大量的cad数据转移到GIS平台,是很多部们和单位在解决的问题, 如果你精通CAD及CAD的二次开发,处理这些问题时你就能得心应手。所以,把CAD学好,至少掌握一个CAD二次开发的方法,lisp,vba,objectARX,lisp和VBA比较简单易学,objectARX比较难,刚开始可以不用管它,以后工作中如果用到了,再学也不迟。
编程方面,在大二的基础上,要开始了解一些面向对象原理和方法,除了VB和C,建议另外学习C#和Sqlserver,基本的sql语句要会,ADO连接数据库要会,不然,你连一个北大青鸟的学生都不如(仅限IT行业的coder工作)。这些东西不难,有编程基础和面向对象知识,上手很快,不过如果你想学习C++,那就要下大功夫了,呵呵,作为一名GIS的学生,学习C++倒不是很必要。
这个时候,如果学校的课不多,或者你觉得学校的课没有挑战性,有两个选择,一个是去软件公司实习,一个是去参加超图或ESRI的竞赛。如果精力足够旺盛,可以一起做。总之,要踏踏实实的做一些东西,做一些事情,不要荒废时间,也不要只学习不践,应该在实践中不断的学习,才能进步。这个时候沉迷游戏的同学该醒醒了,绝对不晚,我大二的时候是在家教和游戏中度过的,大三的时候,觉得自己不能干一辈子家教,然后就看了一本面向对象的书和一本asp.net的书,当时因为啥都不懂,只是囫囵吞枣的看下去了。然后我去找实习,经历了一番波折,找到了一个小IT公司,算入了软件行业的大门。面试的时候,我就把书上的词,能想起来的,全都说出来,估计那个面我的人有点崩溃,不过后来我知道,面我的那个,也就是公司的副总,是校友,大我十年。
(三) 个人对GIS二次开发学习的理解
说实话,我在大学里除了用过MO+VB做过GIS二次开发,其他的都没用过。现在工作连arcgis都难得用一下,更别说engine,server了。但是不要把GIS二次开发看的太神秘,或者说以为自己会用arcengine就比学计算机的有优势,如果让你和一个完全没听说过GIS的计算机专业的学生同做GIS二次开发,你的优势不过1个月,他需要向你请教如何配置环境,如何入门,但过了这一阶段,你会的,他都会了。GIS二次开发学不过就是组件式编程而已,和excel二次开发,cad二次开发无本质区别,组件式编程只会让编程更简单,而不是更复杂,这对学计算机的来说,是降低难度了。而你在编程上的劣势很快就会突显出来。
所以,我认为,对于GIS二次开发的学习,不要局限于专门去学arcengine什么的,先把数据库学好,把编程的基础打牢,把面向对象理解透彻,把arcgis桌面软件用熟,然后,再去学二次开发,一边学一边实践,参加比赛,或是做项目什么的,都行。很多人都是上来就生搬硬套一些例子,好像也做出了一些东西,中看不中用,知其然不知其所以然,这样是很难深入的。
总之,是在编程的基础上学习arcengine,而不是在arcengine的基础上学习编程。
下面具体讲二次开发的学习
1) 桌面GIS二次开发
语言无疑C#是最佳选择,感觉很多人都在做这个,个人觉得做这方面要学习:C#,SQLServer,网络编程,数据库编程,最后才是学习AO,AE。
2) WebGIS:这个近来很热,内容也很多,可深可浅,我觉得要想做webgis,一定要先把web做熟。你可以等到毕业之后再去学arcgis server,只要你会做网站,有项目经验,绝对能找到工作,但你绝对不可以自以为学会了arcgis server,人家问你css的东西你都不会,问你java的东西,你一头雾水,这样出去是没人要的。有人一开始就学asp.net,与此同时,直接上手arcgis server,好像拖拖控件,改改属性,和桌面软件开发也没啥区别似的。Asp.net虽然上手快,但我觉得不是学习web的最佳语言,它把很多web细节给隐藏了,这样对初学者来说是很不好的,我建议学习web先学习前台,从html,css,java开始,这些学好后,能做一些简单的页面,能写一些脚本,了解一些web原理和标准之后,再选一门后台语言进行学习。做web最好是能去一些公司实习,短短两个月,就能让你水平飞涨,因为做web的公司加班起来都是玩命的,而且web本身并不难,有人带着学,非常快。能做一些简单的网站后,再去做webgis,我想应该会好的多。
3) 移动GIS:这个目前好像也挺火,不过感觉对开发者来说,移动GIS还是桌面GIS区别可能不是太大,因为移动GIS的平台基本都是wm系统上的,wm系统上的开发和windows开发有很多相似之处,只是各方面的资源变的紧缺了。我感觉做移动平台,最关键的就是数据传输,无线通讯这块。移动GIS也主要和导航、GPS定位联系在一起。所以,做移动平台,我认为要关注的重点就是:通讯和数据传输。如蓝牙、GPRS、socket编程、webservice等。GPS定位。GPS原理,和wm系统对GPS的接口等。导航、实时路况等具体的应用可以多了解一些,能做一些相关的项目最好。最后一个3DGIS,了解不多,算是底层开发,C++和C应该是要精通的,opengl是必须要会的。3维图形算法和数据结构也要多研究。