专栏首页申龙斌的程序人生学会10多种语言是种什么样的体验?

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

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

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

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,前前后后修改了无数次,至今仍在一些比赛中发挥作用。

CASL

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

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

JAVA

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

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

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

C#

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

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

Haskell

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

qsort [] = []
qsort (x:xs) = qsort smaller ++ [x] ++ qsort larger
    where
        smaller = [ a | a <- xs, a < x ]
        larger  = [ b | b <- xs, b >= x ]

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

[(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挣钱了。

R

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

我的教训

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

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

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

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

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

--- END ---

本文分享自微信公众号 - 申龙斌的程序人生(slbGTD)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-01-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 零基础学编程026:学什么编程语言最有前途?

    (封面图来自于网络) 想学习编程的朋友可能一直纠结于到底学哪一种编程语言最有前途,我google了一下,在维基百科的下面这个页面里大概有500多种编程语言,这些...

    申龙斌
  • Steemit中的几处反直觉设计

    我在2017年6月开通了Steemit账号(https://steemit.com/@speeding),一开始没想过发表在这上面的文章可以赚钱,后来随着tum...

    申龙斌
  • 双重支付Double-Spend【区块链生存训练】

    有些初入币圈的朋友经常会问到一些区块链中的术语,比如“双重支付”,这是我在区块链生存训练【块20】给出的简短回答: 区块链中解决了数字货币中的一项关键技术,称为...

    申龙斌
  • 每周分享第 33 期

    欢迎投稿,请前往 GitHub 的 ruanyf/weekly 提交 issue。

    ruanyf
  • 【译】如何设计云原生应用的架构?

    「云原生 (Cloud Natvie)」 是一种将应用程序以微服务的形式构建并使之运行在容器化和动态编排平台之上的方式,这些平台充分利用了云计算模型的优势。「云...

    潘少
  • 软件体系结构:你需要了解的5种模式

    分层模式可能是最著名的软件体系结构模式之一。许多开发人员使用它,却不知道它的名称。这样做的目的是将你的代码划分为“层”,其中每个层都有一定的责任,并向更高层提供...

    liuxuewen
  • 镁客网每周硬科技领域投融资汇总 | 本周人工智能领域融资事件最多

    镁客网
  • 工作效率提升 1400%,PK 锤子工作站就用这几个小程序

    知晓君
  • 支付宝小程序公测!教程新鲜出炉

    支付宝你这次真是太贴心了,太为广大程序猿朋友们着想了,让我们做到了“一次学习,到处使用”的境界。你也太为写书的朋友们着想了,稍微替换下名字估计就是一本《支付宝小...

    一斤代码
  • 推荐一个项目:数据结构和算法必知必会的 50 个代码实现

    看了这么久小吴的文章,不知道你们有没有发现,目前文章中涉及到的编程代码有 Java、C++、Python、JavaScript 这么多种,但就算法而言,实际上这...

    五分钟学算法

扫码关注云+社区

领取腾讯云代金券