年初时写的《一个GISer的使命》那篇文章中,提出了GISer的技术提升路径可以分为四个大的阶段:

  • 阶段一,能使用商业GIS软件去解决问题。
  • 阶段二,能使用开源GIS软件去解决问题。
  • 阶段三,有能力去解决开源GIS中的问题。
  • 阶段四,有能力去解决GIS行业前沿问题。

在阶段一、阶段二中,我们属于GIS二次开发人员,在阶段三、阶段四中我们开始慢慢转向GIS底层开发人员。

这种转变不是天天做项目就会自然的实现的,天天做项目会让我们成为一名GIS二次开发老司机,但永远不会成为GIS底层开发的赛车手,他们之间差的是对某些底层专业知识技能的”刻意练习“。

我们今天就来讨论一下,如何从一个GIS二次开发人员转变为GIS底层开发人员。

被忽视的GIS底层原理

前段时间学了一个大神的计算机图形学课程。课程开篇就说:我们不会去讲OpenGL API,我们只会讲计算机图形学的原理和算法,原理和算法学会了再去看API什么的,那都太简单了,甚至你自己都可以写一套渲染引擎出来。

学完那个课程后我最大的体会就是:原来计算机里的所有东西,背后都是数学。也看到了在计算机领域,只有能深入讲到数学层面的东西才是真正的实现原理。

记得之前所在的公司下任务让员工申请专利,有个同事写了个GIS的专利,结果被打了回来,理由是实现方法太依赖于ArcGIS软件。

这可能从侧面反映出了GIS开发普遍存在的问题,就是更关注如何使用各种的GIS软件和GIS开发框架,却忽视了GIS底层原理的重要性。

这同样也是国内开设GIS专业的高校普遍存在的问题,高校里都在讲GIS理论、GIS软件使用、GIS二次开发,但很少讲GIS底层的实现原理。

GIS开发需要逆势而上

吴军在《硅谷来信》一书中提到过一个高势能专业的概念。所谓高势能的专业,就是指那些相对难学,而又相对是其他专业的基础的专业。比如数学专业相对计算机专业就是高势能的,计算机专业相对GIS专业是高势能的,从高势能转到低势能的专业相对好转,但反过来会比较困难。

GIS开发除了要掌握GIS的原理外,还要夯实计算机基础,因为计算机是GIS的实现手段,计算机基础不扎实是做不好GIS的。

GIS底层开发要掌握的技能

下面是我认为GISer需要进一步加强的底层技能

1、GIS基础知识

  • WebGIS实现原理
  • GIS常用空间分析算法实现原理

2、计算机基础知识

  • 数据结构、算法。
  • 精通一门开发语言。这里的精通不仅包括熟练度,还包括开发语言的实现原理。

套用知乎上一位答主的话说就是:GISer要有不低于计算机专业人员对计算机的理解能力。简单点说就是要达到计算机专业科班出身的水平。

3、数学基础知识

我的原则是急用现学。数学这个东西确实比较枯燥,当你不知道这个东西有什么用时,内心会很抗拒,学起来就很费劲;当你发现要学的新技术中使用到它并且死活绕不开时,内心就不再抗拒,甚至有了浓厚的兴趣,再学起来会容易很多。

总结

  1. GIS二次开发走的是全栈开发路线,啥都会一些,啥都不精通,路越走越窄,工作5年后薪资上会慢慢遇到瓶颈。
  2. 要突破这种瓶颈需要逆势而上把计算机的专业知识吃透,把GIS底层原理吃透,让自己达到计算机专业开发水平,同时又精通GIS底层实现原理。
  3. 这两项突破后,你就具备了GIS底层的开发能力,会成为HR口中天天嚷着不好招的那种GIS稀缺人才。

最后

种一棵树最好的时间是十年前,其次是现在!


原文地址:http://gisarmory.xyz/blog/index.html?blog=GISerRacer

欢迎关注《GIS兵器库

本文章采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名《GIS兵器库》(包含链接:  http://gisarmory.xyz/blog/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

最新文章

  1. 理解nodejs模块的scope
  2. 基于MemoryCache的缓存辅助类
  3. 有border和没有border是两回事
  4. javascript理解js中的闭包
  5. ZK 代码自动提示
  6. 小梅哥FPGA数字逻辑设计教程——基于线性序列机的TLC5620型DAC驱动设计
  7. 文本溢出text-overflow
  8. 利用JS实现手机访问PC网址自动跳转到wap网站
  9. Progress Reporting
  10. 针对某个数据库error做systemstate dump
  11. picturebox 图片自适应
  12. IOS--UISwitch的使用方法
  13. Struts 2最新0day破坏性漏洞(远程任意代码执行)等的重现方法
  14. [转]Ubuntu系统下常用的新建、删除、拷贝文件命令
  15. 【译】C++日志(Logging in C++)
  16. 循序渐进之Spring AOP(4) - Introduction
  17. commandArgument用于绑定一个传递的参数
  18. 简单理解Java的反射
  19. 转:三款免费好用的Gif录屏神器
  20. .net 加密与解密

热门文章

  1. Zabbix webhook 自定义报警媒介
  2. centos 7 安装nfs 实现主机目录共享
  3. 文件挂载swap
  4. springcloud3(六) 服务降级限流熔断组件Resilience4j
  5. 微服务之十四如何在 Ocelot 网关中配置多实例 Swagger 访问
  6. 跟着老猫来搞GO,基础进阶
  7. RDD的详解、创建及其操作
  8. vscode 导入第三方jar包(添加外部JAR)
  9. JSRE中的多任务与多线程
  10. .Net Core微服务——Ocelot(3):超时、熔断、限流