学会10多种语言是种什么样的体验?

开发 开发工具
本文主要是想和大家分享我学会10多种语言的体验。

80年代末,我***次接触了Apple II电脑上的BASIC编程语言,从此走上了一条程序人生。十多年前我在博客园上开通了自己的博客,由于下象棋时经常出点“毒”招,所以网名干脆就叫“毒龙的程序人生”,2016年8月底申请公众号,名字就叫“申龙斌的程序人生”了。

回想这些年,由于项目需要或兴趣使然,竟然学了十多种编程语言。

学会10多种语言是种什么样的体验?

BASIC

***次接触计算机大概是在1987年,当时我的学校竟然引进了20台昂贵的Apple II计算机,我连如何操作电脑都不会,直接就学BASIC语言。

那时也不懂什么结构化编程,反正就是抄着书上的代码学,虽没写出什么成规模的BASIC程序,但也算编程入门了。记得曾把几个程序小心翼翼地保存在一张1.2M的大软盘中,可惜现在软盘也没了踪影,所以一行BASIC代码现在也没有留下,想怀念怀念过去都没了可能。

FORTRAN

FORTRAN是在读本科时学的,当时科学计算很流行,这是数学系的必修课。一个班几十人连接一台大型机(我已经忘了它的名字),提交程序后得等上十多分钟才能看到程序的编译结果,所以代码要写得非常认真,提前把代码写在本子上,仔细检查各种语法和逻辑错误,否则上机1小时可能连编译都无法通过。

参加工作时竟然还用FORTRAN语言做过项目,当时有一位北大毕业的CHAI师傅,能用FORTRAN写上几百行的代码,我就跟着他修改这一堆代码。当时能写代码的人就是高手,不管什么可维护性,GOTO语句满天飞,每做一个项目就复制、修改一份源程序,***程序版本混乱,无法维护。

最让我震惊的是当时MIPS工作站上的一套国外开发的地震解释软件,竟然包含了全部的FORTRAN源代码,那套代码有上万行,注释详细,逻辑清晰。

那时的我明白了结构化编程的重要性,即使语言本身的特性不好,也同样能够写出可维护的优美代码。

PASCAL

大学里开了《数据结构》这门课,所有的例子代码都是用PASCAL语言写的,所以我又学了PASCAL语言。

以前学FORTRAN和BASIC时,养成了非结构化编程的坏毛病,因为有行号,语句之间可以随意跳转,也没有模块化的概念,乱用全局变量,程序的可维护性几乎为零。PASCAL这门语言的特点就是严谨,begin和end虽然啰嗦,但结构非常清晰,靠这门语言养成了结构化编程的好习惯。

工作后还曾经用Dephi(在Pascal基础上升级的面向对象的可视化编程语言)写过一个小项目,可惜也没有实际的应用效果。

C

C语言因为性能好,被UNIX、Windows各种机器所支持,所以使用广泛。大学时我们班里没有开这门课,我跑到计数班去听这门课,上机课就混他们的机时。

C语言中指针等概念虽然麻烦,但还是慢慢掌握了。我一开始学语言的动机实际上就是想着写游戏,当时俄罗斯方块正流行,自己也尝试着写一个。有一次,老师在微机课上巡查,发现我正在玩俄罗斯方块,当场对我提出严厉的批评。

我轻轻地按下一个功能键,游戏马上停止,此时显示出一排排的C代码,我正在调试自己写的C程序呢。老师盯着看了看,无语,向其他学生走去。

实际上,自己根本不可能沉迷于自己写的小游戏,而是更关心如何让动画更流畅、代码如何写得更简洁,如何调整难度级别、改进一下记分系统等等。在写游戏的过程中,逼得自己去掌握了编程的语法和算法。

工作后,这门语言的用处还挺大,当时分到物探方法室工作,主要接触UNIX工作站,只有C语言能用也会用,所以就经常帮着师傅们写点小程序,做些上万行数据的统计、格式转换之类的小活,实际上可是帮了他们的大忙。

Visual Basic

Visual Basic可视化式的编程开发开创了一个新的时代,当时用鼠标点点拖拖就可以产生一个Windows程序,这种感觉太美妙了,由于我有以前的BASIC基础,所以学这种语言飞快。

Visual Basic这款产品的兼容性真是没得说,最早的开发环境是在Windows 98上开发的,后来windows升级到2000, xp,windows 7,它仍能运行。

我现在仍在维护的一个用VB写的程序就是瑞士积分编排程序的表格生成器SwissTab,前前后后修改了无数次,至今仍在一些比赛中发挥作用。

Visual Basic

CASL

CASL这语言估计很多人没听说过,它并不是一门真正的语言,只是一门考试用的汇编语言。参加工作后,项目并不多,就去报考高级程序员试试,其中有一道大题就是写CASL这种汇编语言。

由于我并非计算机专业毕业,基础知识薄弱,想通过高级程序员还是非常有难度的。***年我没有通过,来年我把那套高程教材几乎都翻烂了,把所有的练习题都做了一遍,把历年的高程题都试了一遍,从而顺利通过,那时是1996年。就因为这个高级程序员证,还提前2年混到了中级职称。

CASL

JAVA

JAVA语言大概是在2000年学的,此时的JAVA语言火得一塌糊涂,“一次编写,到处运行”的理念好像是各个软件项目的救命稻草。本来以为它的优势是桌面端程序,没想到后来服务器程序却变成了它的强项,J2EE/EJB大行其道,写个服务器端程序非要吹出J2EE四个字来。

当前室里几个人组成了一个团队,写出了胜利信息网网站发布系统,2003年上线,一直沿用到了现在。这种跨平台的语言真是节省了大量的工作量,我们的java,JSP程序都在windows端编写、调试,***的程序部署在unix机器上的weblogic上,非常方便。

JAVA

此系统被强行交给信息室维护,项目和人员全部解散,以后我再也没有用JAVA做过项目。

C#

这是在项目中应用最多的一门语言,相对其它语言来说,在Windows上开发,学习门槛较低,在国企里能建立起这样一支队伍已属不易。现在带着团队还在完善、推广和维护的系统就是EDSS系统了。

JAVA

另外用C#写的几个小程序:

  • 用C#写的CGM解析程序
  • 以前用C#写的一个中国象棋引擎程序
  • Eclipse油藏模型解析程序
  • SeismicPro地震剖面显示程序
  • LDM地震数据体的存储格式分析与应用
  • AlphaGo挑战李世石,我的点格棋程序挑战孩子

Haskell

2008年,无意中接触到纯函数式编程语言Haskell。这种语言与以前学的命令式编程(Imperative Programming)完全不是一种思路。Haskell语言是一群数学家发明的,写起来就像一条条公式,欣赏一下这段优美的快速排序代码:

  1. qsort [] = [] 
  2. qsort (x:xs) = qsort smaller ++ [x] ++ qsort larger 
  3.     where 
  4.         smaller = [ a | a <- xs, a < x ] 
  5.         larger  = [ b | b <- xs, b >= x ] 

用一行代码打印100以内的勾股数:

  1. [(x,y,z) | x<-[1..100], y<-[x..100], z<-[y..100], x*x + y*y == z*z] 

后来出现的新编程语言很多都借鉴了函数式编程语言中的语法特点,Python中也能写出类似这样的语句。

Objective-C

2011年,苹果APP非常吃香,我也交了99刀的学费体验了一把苹果开发者。历经一年的折磨,踩了无数坑,终于提交了一个小程序XQViewer,当时也不懂什么推广和流量,最终只卖出了几美金,连第二年的开发者证书费用都交不起,更别谈用APP挣钱了。

Objective-C

R

看《大数据时代》和《赤裸裸的统计学》这本书时,又学了一点R语言,这门语言中竟然全部都是向量计算,统计功能强大,我试着用R分析孩子们的考试成绩,短短的代码,立刻可以生成多种直观的分析图表。

R

我的教训

1)学习新技能时没有目的和计划性,虽然学了10多种编程语言,只有C#算是用得最熟练的,其它的都不精,连最重要的前端JavaScript竟然都没好好学。不管学哪门语言,一定要写一款产品,然后不断打磨它。

2)各种语言实际上主要分为两大体系:过程式(或命令式)、函数式,过程式阵营中掌握JAVA或C#即可,纯函数式的编程语言几乎没有,只要了解Haskell或Lua等的理念即可,实际上现代的编程语言都已经吸收了函数式编程的先进思想。

3)学了一堆语言的一点点好处,就是当遇到一个实际问题时,马上会想到用某种语言解决起来会更加简洁高效。

4)学了十多种语言后,再学其它语言时,只用一、二周就能学完所有语法,比如Python。其实最麻烦的部分是每种语言都带着庞大的类库,这些东西只能通过项目慢慢熟悉。

5)学了这些语言后,现在发现只剩下一个优势了,就是当别人编程遇到障碍时,能够很快发现对方可能的错误,看来我的使命就是辅导别人学编程了。

【本文为51CTO专栏作者“申龙斌”的原创稿件,转载可通过作者微信公众号(申龙斌的程序人生)获取联系】

戳这里,看该作者更多好文

责任编辑:赵宁宁 来源: 51CTO专栏
相关推荐

2011-03-07 09:45:51

FileZilla

2015-09-09 09:41:28

十年代码

2015-04-08 10:40:09

2017-03-10 09:09:41

C语言体验

2019-07-08 17:34:29

共享办公ideaPod文印

2019-04-03 14:51:18

CPU性能工艺

2020-04-07 08:05:51

程序员互联网职业

2019-01-11 10:39:24

软件架构虚拟空间机器人

2015-11-03 08:51:21

程序员怪物

2021-01-14 21:46:02

Vue.jsReact框架

2009-07-31 16:24:55

ibmdwEclipse

2016-08-30 21:09:33

2018-05-30 15:22:03

KotlinAndroid开发

2020-11-06 17:49:38

程序员技术开发

2010-08-02 13:30:34

移动开发移动开发平台

2022-06-13 23:30:27

代码词汇高质量

2013-06-26 10:49:09

云端大脑科技技术

2018-05-30 15:07:37

KotlinAndroid开发

2014-12-24 09:56:31

编程语言

2013-03-20 10:22:51

编程语言编程开发语言
点赞
收藏

51CTO技术栈公众号