GISer如何突破二次开发瓶颈
年初时写的《一个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、数学基础知识
我的原则是急用现学。数学这个东西确实比较枯燥,当你不知道这个东西有什么用时,内心会很抗拒,学起来就很费劲;当你发现要学的新技术中使用到它并且死活绕不开时,内心就不再抗拒,甚至有了浓厚的兴趣,再学起来会容易很多。
总结
- GIS二次开发走的是全栈开发路线,啥都会一些,啥都不精通,路越走越窄,工作5年后薪资上会慢慢遇到瓶颈。
- 要突破这种瓶颈需要逆势而上把计算机的专业知识吃透,把GIS底层原理吃透,让自己达到计算机专业开发水平,同时又精通GIS底层实现原理。
- 这两项突破后,你就具备了GIS底层的开发能力,会成为HR口中天天嚷着不好招的那种GIS稀缺人才。
最后
种一棵树最好的时间是十年前,其次是现在!
原文地址:http://gisarmory.xyz/blog/index.html?blog=GISerRacer
欢迎关注《GIS兵器库》
本文章采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名《GIS兵器库》(包含链接: http://gisarmory.xyz/blog/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
GISer如何突破二次开发瓶颈的更多相关文章
- 突破,Objective-C开发速学手册
<突破,Objective-C开发速学手册> 基本信息 作者: 傅志辉 出版社:电子工业出版社 ISBN:9787121207426 上架时间:2013-7-12 出版日期:2013 年8 ...
- Navisworks API 简单二次开发 (自定义工具条)
在Navisworks软件运行的时候界面右侧有个工具条.比较方便.但是在二次开发的时候我不知道在Api那里调用.如果有网友知道请告诉我.谢谢. 我用就自己设置一个工具.界面比较丑!没有美工. 代码: ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 12.二次开发及应用
目 录 第十二章 二次开发及应用... 2 12.1 项目配制... 3 12.2 引用相关组件... 4 12.3 构建主程序... 5 ...
- OBS-Studio二次开发记录
OBS-Studio 是一款跨平台的,开源的视频直播客户端软件. 公司需要对他进行二次开发,开发的目的是使用它的录屏功能. 开发的要求是:定制全新的界面,所见即所得,window系统兼容要好. 开发步 ...
- 小猪cms微信二次开发之怎样分页
$db=D('Classify'); $zid=$db->where(array('id'=>$this->_GET('fid'),'token'=>$this->tok ...
- 承接 AutoCAD 二次开发 项目
本人有多年的CAD开发经验,独立完成多个CAD二次开发项目.熟悉.net及Asp.net开发技术,和Lisp开发技术. 现在成立了工作室,独立承接CAD二次开发项目.结项后提供源码及开发文档,有需要的 ...
- 【工业串口和网络软件通讯平台(SuperIO)教程】七.二次开发服务驱动
SuperIO相关资料下载:http://pan.baidu.com/s/1pJ7lZWf 1.1 服务接口的作用 围绕着设备驱动模块采集的数据,根据需求提供多种应用服务,例如:数据上传服务.数 ...
- 【工业串口和网络软件通讯平台(SuperIO)教程】三.二次开发流程
1.1 二次开发流程图 1.2 引用相关组件 找到“开发包”,引用里边的相关组件.如下图: 1.3 开发设备驱动模块 1.3.1 开发发送协议驱动 继承SuperIO.Devi ...
- Civil 3D API二次开发学习指南
Civil 3D构建于AutoCAD 和 Map 3D之上,在学习Civil 3D API二次开发之前,您至少需要了解AutoCAD API的二次开发,你可以参考AutoCAD .NET API二次开 ...
随机推荐
- STM32串口通信配置(USART1+USART2+USART3+UART4) (转)
一.串口一的配置(初始化+中断配置+中断接收函数) 1 /*====================================================================== ...
- MyBatis源码分析(六):Spring整合分析
一.Mybatis-Spring源码结构 二.Myabtis交给Spring管理的组件 1. dataSource 数据源 配置一个数据源,只要是实现了javax.sql.DataSource接口就可 ...
- 实验5:开源控制器实践——POX
一.实验目的 1.能够理解 POX 控制器的工作原理: 2.通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法: 3.能够运 ...
- word-break-ii leetcode C++
Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each ...
- Java项目中集成钉钉机器人推送消息提醒
前言: 项目中有一个需求,当有新订单产生的时候,希望能够及时通知到业务相关人员进行处理,整体考虑了一下,选用了钉钉机器人提醒功能(公司内部主要也是使用钉钉进行通讯). 操作: 主要分为两部分进行处理: ...
- openssh 7.4 升级 8.3
1.删除旧版本(如果是远程连接升级,不能卸载旧版本,否则连接会断开.安装8.3完也不能卸载7.4,否则要到服务器直连重新安装8.3.) # rpm -qa |grep openssh #rpm -e ...
- win10+MX350显卡+CUDA10.2+PyTorch 安装过程记录 深度学习环境配置
https://blog.csdn.net/m0_37867091/article/details/105788637
- Linux&C 线程控制 课后习题
Q1:多线程与多进程相比有什么优势? 多进程程序耗费的资源大,因为fork()的时候子进程需要继承父进程的几乎所有东西,但是多线程程序线程只继承一部分,即自己的私有数据,例如自己的线程ID,一组寄存器 ...
- 【java+selenium3】线程休眠方法 (六)
一.线程休眠的方法 Thread -- sleep 调用方式: Thread.sleep(long millis) 建议:不推荐使用此方式来等待,因为元素的实际渲染时间未知,长时间的等待则浪费的时 ...
- 菜鸡的Java笔记 第七 - java 数组
数组的基本概念 笔试中经常出现的试题或是问题 1.1 概念 数组指的是一组相关变量的集合 如果用最原始的方式定义100个变量的话没问题但是这些变量的关联实在 ...