今天终于下定决心,把我使用的编程环境从Delphi转变成Lazarus了。这也许是一个明智的选择,但做出这个决定的过程包含了辛酸和无奈。

这应该是我第三次安装Lazarus了。以前安装之后总是感觉有很多不尽人意的地方,最终还是放弃了。这一次,也许是因为我看到了希望,也许是Lazarus的发展达到了我需要的程度,总之,我下定决心要使用Lazarus了。

说起Delphi,这个伴随我半生的编程工具,让我又爱又恨。它给我的工作带来了帮助,给我的生活增添了色彩,也消磨了我生命的大部分时光。

我的生活离不开编程,我的编程很长的一段时间以来Delphi,但Delphi的不断升级让我感觉到了疲劳。从Delphi3到DelphiXE,经过 一次次的升级之后,我不再升级了,而不再升级的结果是我的编程环境与新的操作系统距离越来越远了。距离感带来的不适让我产生了更换开发环境的想法,经历的多年的选择之后,我最终决定选择Lazarus。

说起我的编程生涯,总会想起年轻时的事情。

记得还在上学的时候,我在泰山脚下的工人文化宫参观了一个新技术展览,其中让我感触最深的是计算技术的发展。在展览中看到的计算机是一种叫手摇计算机的东西,现在说起来可以算是古董了,但那个时候还是一种先进技术。不过,那个时候已经有了比较原始的电子计算器,工作中已经可以不再使用手摇计算机了。这种古董并没有普及,原因是价格太高,而它的功能很大程度上代替不了我们的老祖宗发明的计算工具——算盘。

看了展览之后,正值那一学期开设的一个新的课程:计算机编程语言。当时的教材是学校的老师自己刻板后油印的,学习的内容是一种适用于PC-1500袖珍计算机的Basic语言。这时候我对计算机的未来有一个预言:计算机将成为未来工作中不可或缺的重要工具。出于这种预言和对未来的期待,我开始到书店里购买有关编程的书籍。不过,后来才知道,由于不知道编程语言是依赖于计算机型号的,也不知道需要开发环境,所以花了很多冤枉钱,也浪费了很多时间。那时候我买了Basic、Cobol、Fortran编程的书籍,在没有计算机的情况下学完了全部的内容。当时能够上机测试的只有PC-1500袖珍计算机。一年后学校买了苹果计算机,但是我那一级学生的计算机课程已经成为过去式,没有使用苹果计算机的资格了。为了测试自己学习的结果,费了好大的劲才获得了当时学校里唯一的计算机老师的同意让我到计算机教室里参观了一次。

参加工作后我首先从事的是工程设计。大量的结构计算、工程测量结果的计算、水力学计算等等需要消耗很多的时间和精力。一项工程的设计如果花费半个月,那么计算的时间就需要差不多十天甚至更多。为了节省时间,一台因为没有人会用而在仓库里沉睡的PC-1500袖珍计算机成了我的专用品,凡是需要重复计算或者试算的计算过程我都编写了程序,这也成了我真正编写程序的开始。需要十天的计算过程,我编写程序、录入计算机花费的时间不会超过一天,计算过程最长的需要大约三十分钟,短的会在一分钟之内出结果。

后来有了台式计算机,我开始真正接触了编程环境,可以使用Basic。那时的Basic功能有限,而且需要一个解释环境。为了找到更好的开发工具,利用外出学习交流的机会我得到了true basic、qbasic。后来还得到了Fortran。

在那个没有网络,软件匮乏的年代,买了计算机就跟买到一个新的本子差不多,如果不自己写东西,再好的计算机也是一种摆设。除了当打字机用,那时的计算机似乎找不到其他的用途。而作为文字处理软件,电脑里只有汉化的ws,那是一个功能很简单的文字处理软件。还有一个中国人自己开发的hw,功能同样很差。后来听说有一个人因为汉化的软件不好用就自己写了一个叫做cced表格处理软件,而我觉得cced的功能还不够,但他的想法给了我启发,于是我也自己写了一个集文字处理和表格处理于一体的软件,功能超过了当时我见到过的所有文字处理软件。这是我学习了Pascal后编写的第一个大型软件。正当我把它变得更强大的时候,Dos时代结束了。

window操作系统的出现带来了编程环境的改变,我不得不舍弃turbo Pascal去寻找新的能够在window中使用的开发环境。在使用了Visual FoxPro、Visual Basic、Visual C++之后,最终我还是选择了Delphi和C++ Builder,而在C++ Builder迷失了本性之后,Delphi 7成了最佳的选择。

微软的window没有停止升级的步伐,Delphi也一直在升级。每一个新版本出来之后,出于对新功能的渴望,都会跟着升级,而每一次的升级都需要把原来编写的程序代码进行修改以适应新版本开发环境的变化。

开始的时候把这种升级当作一种乐趣,而后来逐渐感觉到是一种负担。直到Delphi XE2出现后,感觉再也不想承受这种负担了。

之所以最后能够下定决心使用Lazarus,应该与感受到到在CodeBlocks+wxWidgets的强大功能有关,也应该与多年来从事自由软件开发的经历有更大的关系吧。

现在决定放弃Delphi改用Lazarus也许会面临对原有程序代码的更大的改动,但不知道这次改动之后是否还会因为升级而改动?希望不会吧。但愿未来是美好的。

从Delphi到Lazarus——我的编程之路的更多相关文章

  1. 平板点餐软件编程体会---记我的Android编程之路

    前言 想开发一个平板点餐系统,研究下陈江根大侠分享的一个很高水准的实例,只是个单机版无实用意义. (如需运行源码请回复联系邮箱) 实现 Mysql 数据库+Tomcat WEb服务器,使用Servle ...

  2. 01-Python的介绍_Python编程之路

    首先用一句业内非常出名的话来介绍Python "人生哭短,我用Python" 这也是Python宣传时经常说的一句话 从这句话中,可以非常清楚Python他到底优点在哪里,为什么要 ...

  3. 02-Python的下载和安装_Python编程之路

    原文发布在特克斯博客www.susmote.com 之前给大家讲了关于python的背景知识,还有Python的优点和缺点,相信通过之前的介绍很多人已经清楚自己到底要不要选择学习Python,如果已经 ...

  4. 03-第一个脚本程序以及输入输出_Python编程之路

    上节课已经教大家安装了Python的解释器,那么这节课我们就可以正式来写代码了 说明:在下面的代码演示中,我将大部分使用python交互器演示代码的输入输出,注意">>>& ...

  5. 04_Python的数据类型1数值和字符串_Python编程之路

    上一节我们通过一个helloworld程序学习python的一些简单操作,还有输入与输出 这节我们来讲Python的数据类型与变量的操作 Python的交互器 在讲这个之前,我要先讲一下python的 ...

  6. 06_Python的数据类型3元组,集合和字典_Python编程之路

    上一节跟大家讲了Python的列表,当然不是完整的讲完,后续我们还会提到,这一节我们还是来讲Python的数据类型 首先要讲到的就是元组 元组其实拥有列表的一些特性,可以存储不同类型的值,但在某些方面 ...

  7. 07_Python的控制判断循环语句1(if判断,for循环...)_Python编程之路

    Python的数据类型在前几节我们都简单的一一介绍了,接下来我们就要讲到Python的控制判断循环语句 在现实编程中,我们往往要利用计算机帮我们做大量重复计算的工作,在这样的情况下,需要机器能对某个条 ...

  8. 09_Python定义方法_Python编程之路

    有关Python判断与循环的内容我们上几节已经跟大家一起学习了,这一节我们主要针对def 做一个讲解 def 定义一个方法 在项目编程中,我们往往要做很多重复的事,比如一个排序的功能(当然Python ...

  9. 10_Python函数方法加深_Python编程之路

    上节课已经简单的跟大家讲了如何定义一个方法,但是并没有深入去讲,这一节我们继续来学习定义方法中需要注意的几点 默认参数 前面我们讲到定义一个方法时是可以传递参数的,除了这个功能,实际上python在定 ...

  10. 11_Python的列表推导式_Python编程之路

    上一节我们结束了有关python的方法相关内容 这一节我们先来学习python的列表推导式 之前跟大家说过range方法的使用,在这里我就不做过多的解释了,如忘记了,请翻阅之前的介绍 列表推导式,是P ...

随机推荐

  1. LeetCode 1000. Minimum Cost to Merge Stones (区间 DP)

    根据寒神题解 https://leetcode.com/problems/minimum-cost-to-merge-stones/discuss/247567/JavaC%2B%2BPython-D ...

  2. url 统一资源定位符的组成

    协议 protocol :http 或者 https = http + ssl  或者 file 文件(本地): 域名 host 或 ip 地址: 端口 port 省略默认 80  : 路径 path ...

  3. Kali && Debain 防火墙规则

    Kali && Debain 防火墙规则 查看防火墙规则 iptables -L -n -v iptables -L -n -v 增加防火墙规则:开放指定的端口 iptables -A ...

  4. Idea启动多服务时的Dashboard展示

    1.提换.idea/workspace.xml文件中的RunDashboard标签 <component name="RunDashboard"> <option ...

  5. 揭秘!KubeSphere 背后的“超级大脑”:etcd 的魅力与力量

    作者:尹珉,KubeSphere Ambassador & Contributor,KubeSphere 社区用户委员会杭州站站长. 1. 开篇:揭开神秘面纱,etcd 如何驱动 KubeSp ...

  6. 云原生周刊:K8sGPT 加入 CNCF | 2024.1.8

    开源项目推荐 VolSync VolSync 使用 rsync 或 rclone 在集群之间异步复制 Kubernetes 持久卷.它还支持通过 Restic 创建持久卷的备份. KubeClarit ...

  7. 高效求解 n 个点之间的最大曼哈顿距离

    平面上有 n 个点,如何求出任意两点的曼哈顿距离的最大值? 曼哈顿距离的公式为: \[d((x_1, y_1), (x_2, y_2)) = |x_1 - x_2| + |y_1 - y_2| \] ...

  8. Docker容器与守护进程运维 --项目四

    一.Docker容器配置进阶 1.容器的自动重启 Docker提供重启策略控制容器退出时或Docker重启时是否自动启动该容器. 容器默认不支持自动重启,要使用 --restart 选项指定重启策略. ...

  9. Rust 版本一直是 1.4 或者其它版本

    Rust 版本一直是 1.4 或者其它版本 通过rustup update 升级或者 rustup default 设置版本也不行 解决方法 删除 rust-toolchain 这个东西,这个东西覆盖 ...

  10. Go服务自动触发单元测试覆盖率

    一.用到的工具 Gitlab Jenkins Shell go test 二.实现原理 在gitlab上配置jenkins的webhook,当有代码变更时自动触发jenkins构建job,job内的s ...