如何学习编程(测绘篇
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
如何学习编程(测绘篇)(转) 和很多人谈过如何编程,周围也有不少各有特色的高手,说来说去,最后想写下来,给那些工作中要用到编程的,或者是读研要编程的同学。我不是计算器科班的,虽是大地测量组但是不是地球物理的,所以如果有不同观点,欢迎指出来~ ----------------------------目的---------------------------- 学习编程,就跟学其他的东西一样,最重要的就是有目的性。这个目的性指的是明确的工作领域和工作性质,并非你个人的追求。搞科学计算的,Fortran不能不熟;搞符号的,别说你不会mathematica或maple;搞通用软件的,在这个大环境下,不会C++我只能佩服你牛犊般的勇气。说来说去,就一点——目的!我学计算器比较早,当时的目的是写OS,后来没能读CS专业,自然这个就只是梦想了。但是自那之后我就陷入一个误区,也就是没目的的学。大一的时候,我看《计算器程序的构造和解释》,看《深入理解计算器》,看《算法导论》,看编译原理,看操作系统,这些算是计算器的内功,看看也罢,不必苛责。但是细细想来,除了前三本书比较靠谱之外,后面看的许多都是多余的。为什么?我不是科班的,就目前的情况看来,转行是不可能的,也是不明智的。那么这些东西在时间导向的任务安排模式中,是绝对要去掉的。 其实刚才举的几个例子给人一种感觉——这个人太专注于语言(工具),不能明白后面的道理。呵呵,这个是《程序员》杂志上经常出现的“表象—底层论”的。这里我还是多说几句吧。工欲善其事,必先利其器,对于非CS方向来说,你编程的目的是什么?绝对不是理解后面复杂的构架原理或者之类的,重点是解决问题!我要算重力模型,为了能节省时间,就是应该拿着Fortran冲锋陷阵;要做符号运算,熟练运用mathematica能帮助你看清问题,做出合理推导;要生成直观的图,matlab和Plot都是有用的。这个不仅仅是“表象—底层论”,我的目的是解决问题,其他的扯淡的事情不重要,真的不重要! ----------------------------工程?No!-------------------------- 这个其实是前面的续,这里的目的精化了,把所谓的CS科班学习方式给排除开了,也就是说我们已经明确了我们不是要作为一个计算器高人存在。那么当我们看清我们的目标是我们自己的专业后,我们可以抛开“无用”的课程专注于你要学习的东西。 这个案例是我大二的学习方式。大二我也看书,多为.NET方面的,还有就是C++和构架,这两方面我投入了很多的精力,书也不少,还蛊惑周围很多人投入这个。但是仔细想想,我是程序员吗?显然不是。 你如果进行过合作,会发现一个项目,讨论到一定时候,有CS或者软件背景的组员一定会不自觉的说到构架问题和效率问题。他们会自然而然的规划是消息机制,还是事件机制还是命令机制,或者要不要采用插件。至于效率问题,他们会关注这里用vector性能高还是用List。其实我也有这个毛病,从这个方向考虑过多了。这些工程方面的东西都是程序员做的,你不是程序员,就算你现在处于程序员的位置,但是记住,你应该做的是你的专业。与其浪费时间纠结这些问题,不如研究一下GeoTiff,看看WKT,这些虽然也是工程的,但是你的受益会更多。或者,你看看数值分析方法,解决病态性问题,研究如何改进算法。 编程来编程去,编程都不是目的。你不能局限于拖拽控件,不能局限于相应事件消息,打印的问题交给开源库。除非是甲方给出必须解决的,你就应该用手头最熟练的工具,用最少的时间解决掉这些杂碎的工作,然后全身心投入工作中。就像测绘在工程建设中只是支持工作,永无出头之日;同理,计算器技术在你的主业中只是支持工作,你那么纠结其中,也不会有出头之日的! --------------------------------建议路线----------------------------- 最后还是给一条建议的学习路线。 常规来说,学习编程首先是学C或者C++。要明确说一下,这是两门截然不同的语言!学C的我是反对谭浩强先生的书的,我建议是《C程序设计语言》。但是根据周围人的反馈,这本书对于完全不懂编程的人来说开头有点云里雾里,所以我待会说完全没有建立编程思维的人。学习C++,我看初学者最后还是最喜欢《C++ Primer》。注意,这里没有Plus,有Plus的是莫名其妙的书。学完这里,你可以考虑去买一本《Effective C++》,然后大致学一下,知道C++是一门危险的语言,以后使用要小心,编译错误经常有,编译速度不顺心就够了。接着,根据你所在的部门不同,会有不同的要求。如果是搞GIS的,继续学习C#的可能性很大,这时候,你有福了,C#很简单,看看例子就会了,而且IDE很体贴,不用操心了。如果你还在传统部门,那么100%你会用VC,而且一半可能会用VC 6。VC 6很多人都在用,但是VC 6绝对是垃圾。语法不规范,头文件更不规范,没有对符号的很好的索引,反正就是不舒服。但是搞MFC基本上还是VC 6最好,所以打听好这个,再继续。如果你很幸运的是做运算模块的,那么别的你就别管了,看书看论文,在搞好数学(这个是关键)。如果你不幸要做界面,那看看MFC就好了。图书馆随便弄一本吧,这个方面我不想推荐什么。 如果这个时候你觉得自己学了很多了,抱歉,你幻觉了。上面学的基本上没什么用,你和外面找来的程序员比,没有任何优势,而且你没有构架和算法的素养,你的劣势倒是非常显著。下一步的工作是弄算法。但是我不建议大家对算法太多纠缠,你又不ACM,会用就行了。下一个OpenCV,IMSL还有其他的库,然后学会用里面的函数,研究自己的主业,选择最合适的算法和数据结构,选择最合适的库,就好了。最好了这一步,你差不多可以出师了。 如果你还想进一步,这个时候你的任务更加明确了,为什么这么说,因为要做什么你很清楚了。你应该更加勤勉的学数学,研究稳健估计呀,研究插值呀等等。慢慢你会发现程序不尽人意的地方,你就会有方向的修改。至于后面研究并行计算之类的,那是你自己的选择了。到这一步,你随心所欲选择吧,前面说的都是bullshit了,你已经能自持了。 其实大多数人是在第一到第二阶段走不过去,也就是所谓的“编程思维没有建立”。编程语言是你算法的直译,但是这个翻译有翻译的规则。很多人感到的是无从下手。所以我给出二号方案:先学习matlab或者mathematica。推荐mathematica的原因是它的语言设计思路是我见过最清晰的,比matlab好,比较容易打基础。但是matlab是科学计算交互的标准(我们院是的),学会matlab更容易找到编程的感觉,而且绝大部分人不把matlab视为编程,这个就是优势。 至于后面的路,我觉得最重要的是读代码。读代码,仿照别人的进行修改,逐渐可以找到编程的感觉,是最有效的途径。然后,之所以建议用matlab,C#之类的语言开始,因为它们都有一个优势,就是要么编译很快,要么无需编译,你的动作很快就能产生结果,对的错的一目了然,这个也是编程的最佳助手,了解错的才能做出对的。相对而言,C和C++的编译那真是稀烂,太慢,会给人不连贯的感觉,所以我并不非常推荐。 杂谈了半天,希望能对大家有所帮助,如果想交流的,找我或者邮件或者QQ都好 本文来源:https://www.wddqw.com/doc/7a91ed156edb6f1aff001faf.html