首页 程序人生 回顾我的软件开发经历(1)

回顾我的软件开发经历(1)

二十多年前,刚从大学毕业,对软件开发认识非常有限,掌握的技能也不多。

第一份工作

第一份工作是搭建一个BBS论坛,模仿当时流行的三夫户外论坛。

那时,对知识如饥似渴。由于买不起书,我常常去书店找到相关的ASP书籍,用钢笔将代码抄写在笔记本上,第二天再输入到电脑中。结合手头的书籍,认真学习ASP,虽然辛苦,但那段时光充实而愉快。

在这份工作中,我设计了一个不限层级的论坛帖子浏览树结构,这成为我职业生涯中引以为豪的成果之一。采用添加层级号和动态分级的方法来实现。同时,这也是我第一次接触**.NET和C#**,并学会了安装和初步使用,为后续的技术发展奠定了基础。

第二份工作

第二份工作是开发一个综合钻井平台,也是第一次在真正的项目中从事客户端开发。

印象最深的是我们团队曾在大山里进行封闭开发。

在这段时间里,重新阅读了数据库相关的书籍,加深了对数据库的理解。

后来,参与了对日外包项目。外包软件的要求非常严格,甚至包括Excel的格式。在这期间,我的Excel水平逐渐提高。

对日开发的流程非常正规和严格,我用心学习和体会,对计划、量化和评审有了深刻的理解。例如,做计划时要有计划时间、实际时间以及两者的差距;写代码时,错误率是可以量化的;评审时,要先了解上下文,按照上下文进行评审,评审后要有跟进;如果出现问题,除了解决当前问题外,还要排查是否有类似问题存在,找出来并解决,不要留到以后。这些经验在后来的CMMI3认证中起到了很好的作用。详见博客CMM的感想和对CMM的理解。

在做对日外包期间,对Excel和Word的使用更加熟练。印象比较深的是,对日外包要求写详细设计,并且要求写单元测试。

当时对单元测试不太理解,甚至对私有函数都进行测试,想尽各种办法测试。现在回想起来,虽然有些脸红,但这是我成长的必经之路。后来,对单元测试有了深入的理解,并将其视为开发人员的“登山杖”。在多个公司中,即使我不是唯一的单元测试倡导者,也是少有的实践和推进者。

面向对象编程的启蒙

在此之前,对面向对象编程的理解还很浅薄,写代码时往往是想到哪写到哪。接下来的几年中,我逐渐对面向对象编程有了深入的了解,并开始关注软件开发过程和业务。

代码生成器

工作几年后,第一次接触到了代码生成器。当时的工作主要是使用C#进行增删改查操作,代码生成器非常有用。于是,主动维护这个工具。在此后的十几年中,我逐步完善和丰富这个代码生成器,从中学习到很多技术,也得到了很多感悟。我将这段经历整理在回顾我的软件开发经历:我与代码生成器的涅槃之路。

编写代码生成器时,《C# Primer Plus》这本书让我受益匪浅。边读边用边思考,有时想法走在前面,再通过阅读寻找技术支撑;有时阅读走在前面,再从代码生成器中找到合适的使用点。这种阅读体验非常奇妙。

通过编写代码生成器,对重构有了深入的理解和实践,并在此后的工作中成为重构的积极实践者和倡导者。

在这段时间里,还有几个让印象深刻的事情:1. 试图理解和编写详细设计,这是当时的理解和感悟对详细设计的理解,后续还会对详细设计有新的理解和感悟。2. 试图理解和编写概要设计对概要设计的初步理解。

敏捷开发的实践

这段时间,正在阅读《敏捷软件开发:原则、模式与实践》,结合工作中的感悟,感觉这本书说得太好了,很多问题与我们的现实非常相似。推荐同事们一起阅读,并尝试在工作中应用。我们先实现无逻辑的前端页面,实现跳转。通过前端页面的演示,我们对业务有了深入的理解,再实现功能,取得了很好的效果。

这段时间,也尝试带领团队做业务,感触最深的是接触客户、抓住业务重点,这是驱动团队的有效手段。坐在办公室研究竞品,也需要用心,带着想法去研究,多交流,否则会流于表面,团队也会很被动,没有动力。这是当时的一些思考软件开发中的一些想法。

书籍的影响

开始阅读一本对我影响很大的书——《程序员修炼之道--从小工到专家》。当时看这本书时并没有太多收获,但在未来的几年里,会反复阅读这本书。在工作中,书中的很多观点会不自觉地浮现在脑海中,例如:石头汤与青蛙、DRY原则、正交性、不找借口等。

这段时间,我还阅读了另一本书《.NET框架设计:深入理解公共语言运行时(CLR)》。通过阅读,我对.NET有了深入的理解,掌握了MIL、垃圾回收机制、.NET内存布局、反射、程序集和元数据、异常处理等。现在想来,这本书对我的ORM框架帮助很大。

此外,我还阅读了《数据仓库》,感觉写得很好,很有收获。虽然在后续工作中并没有实际应用,但它的很多思想在我设计数据库时不知不觉地用上了。我还为自己写了一个记录花销、分析花销记录的程序,很多设计思路就来自《数据仓库》。

国家级预研项目

接下来的工作是一个国家级预研项目,类似于现在的高德地图导航。通过综合道路、交通、天气、施工等各种信息,为出行者提供精确的出行指导。

那个时候还没有滴滴和高德。系统非常复杂,各类数据也很多,最初搞得我焦头烂额。

后来,想起大学时学到的管理信息系统中有类似的部分,于是重新阅读了管理信息系统的课本,发现其中的数据流图特别适合梳理系统。

尝试为这个系统画数据流图,虽然现在想来画得并不好,但当时我用这个图理清了业务,也设计了系统,感觉非常明了。

同事们对此也非常肯定,认为我前一阵工作进度不明显,用了数据流图后,效果显著,能够清楚地跟别人讲解做什么、怎么做。这是一次非常好的体验。

C++的初次尝试

在做这个项目的过程中,我需要编写一个导航程序,这是我第一次使用C++。导航程序是用C++写的Windows程序,有界面,但没有使用MFC。

我根据自己编写代码生成器的经验,使用面向对象的方法,写成了一个类似MFC的程序,通过配置文件配置界面,通过继承和观察者模式处理事件。在当时看来,还是比较满意的。由于初次使用C++,很多技术不太懂,经常请教其他同事,也拿这个程序与同事交流,得到了同事的肯定。

在这个程序中,面向对象编程发挥了它的效力,但也有一些问题我当时没有理解到。记得聊天时,有同事说他现在喜欢写类似的C程序,感觉看起来流畅,不喜欢C++的跳来跳去。当时我不理解,现在有了新的感悟,虽然不完全赞同,但不过度使用面向对象观点是正确的。在后来的工作中,我会有意进行尝试:使用面向对象;不使用面向对象;接口不使用面向对象,实现不刻意回避面向对象等。

这段经历让我体会到,技术的学习和应用是一个不断探索和调整的过程,每一次尝试都为未来的成长奠定了基础。

2

站心网

二十多年前,刚从大学毕业,对软件开发认识非常有限,掌握的技能也不多。第一份工作第一份工作是搭建一个BB..

为您推荐

软件的复杂性正在杀死我们

现在有一个常见现象:企业想要更快更便宜地构建软件。这当然是一个可以理解和值得称赞的目标。且每个工程师都应该全心全意支持这个目标。然而事与愿违。虽然并非是故意的,但是随着时间的推移,我们会因为软件构建中..

关于软件开发你真正需要知道的几个事情

我之所以写这篇文章是因为有一个朋友最近决定跻身软件工程行业。我的这位朋友聪明,精力充沛,品貌兼优,又善于学习:每个人都认为这样的人才必将有一番作为。但是,在踏出第一步时,他依然有很多东西需要学习。我和..

回顾我的软件开发经历:我与代码生成器的涅槃之路

前言这是我《回顾我的开发经历》系列的第二篇,聚焦于我与代码生成器的故事。从最初的简单工具到最终演变成一个功能强大的ORM框架,这段经历不仅让我在技术上得到了极大的提升,也让我深刻理解了重构、设计模式和系..

软件开发的七条原则

原则#1:存在的原因软件系统存在的原因:为用户提供价值。所有的决定都应该考虑到这一点。在指定系统需求之前,在关注系统的各个功能之前,在确定硬件平台或开发过程之前,问问自己以下问题:这是否能为系统真正增加..

从事软件开发工作的一些感悟

随着科技的飞速发展,计算机领域成为了一个充满机遇和挑战的领域。对于计算机这个行业,我一直有着浓厚的兴趣,这份兴趣驱使我不断学习,不断成长。在这篇文章中,我将分享我的编程经历以及一些建议,希望能够给那些..

4款功能强大桌面虚拟机软件推荐

虚拟机软件是现代计算机中必不可少的工具之一,它可以让我们在一台计算机上运行多个操作系统,这为开发人员、测试人员以及研究人员带来了很多便利。在这里,我们将探讨四款最强大的桌面虚拟机软件:VMware Workstati..

开源软件:释放创新的力量,改变数字世界的游戏规则

在充满活力的技术领域,创新是至高无上的,有一种方法已获得显著的吸引力——开源软件。开源软件凭借其透明、协作和无限可能性的精神,彻底改变了我们开发、共享和定制应用程序的方式。从操作系统到数据分析工具,其..

免费开源的远程桌面软件RustDesk官网下载

RustDesk是一款轻量级且易于使用的远程桌面控制软件,与ToDesk、TeamViewer、AnyDesk等类似软件一样简单易用。它无需任何配置,使用方便,特别适合远程办公、远程教学或演示以及远程协助和技术支持等情况。RustDesk..

开源远程支持软件RustDesk官网下载

RustDesk 是一个用 Rust 编程语言开发的开源远程支持软件。它允许用户在 Windows、Linux 和 macOS 等操作系统上建立远程连接,以进行技术支持或协助。RustDesk官网:https://rustdesk.com/RustDesk下载地址:https:/..

好用的桌面虚拟软件推荐

好用的桌面虚拟软件有以下几个:VMware WorkstationVMware Workstation官网:https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.htmlVMware Workstation 是 VMware 公司推出的一款桌面虚..

C#获取Windows系统中所有已安装软件的名称和版本号

需求在Windows中使用C#做软件开发,有时候需要获取当前系统中已安装的软件及其版本号,接下来就简单介绍一下,如何通过C#获取来实现。示例代码已安装的软件,在注册表中都会有软件信息和卸载信息,我们只需要扫描注..

修复 Ubuntu 上“E: 无法找到软件包”错误的 5 种方法

如果您在 Ubuntu 上安装软件包时遇到“E:无法找到软件包”错误,请不要担心,因为修复它很容易。要点定期更新软件包列表,以维护安全且最新的 Ubuntu 系统,确保访问最新的软件包、安全补丁、错误修复和改进的依赖..

软件开发生命周期(SDLC)有哪些?

软件开发生命周期(SDLC)是指从需求分析到软件部署、运维及更新的全过程。它通常包括以下阶段:1、需求分析开发团队与客户合作,明确软件的功能和需求。通过收集、分析和确认需求,确保开发团队对软件的目标有清晰的..

Linux中dpkg --remove时提示:该软件包现在的状态极为不妥 error

问题描述在Linux使用dpkg安装软件包出现错误,但使用dpkg -l命令,可以看到软件包已经被安装了,此时,如果想要卸载掉这个软件包,使用dpkg --remove命令就会提示“该软件包现在的状态极为不妥”的错误信息。dpkg: ..

Tasksel - 在 Debian 和 Ubuntu 中轻松安装软件组

Linux 用户必须处理的多项任务之一是软件安装。可能有两种方法可以用来安装软件,特别是在基于 Debian 的发行版上,例如 Ubuntu 和 Linux Mint。第一种是使用包管理工具(例如 apt-get、apt、aptitude 和 synaptic)..

apt-fast:加快 Ubuntu 上的 APT 软件包下载速度

在这篇社论中,我们将介绍一个名为 apt-fast 的强大实用程序,您可以使用它来加速 apt、apt-get 或 aptitude 下载软件包的速度。apt-fast 是流行的 apt、apt-get 和 aptitude 的开源 shell 脚本包装器包管理工具有助..

2024 年 5 款最佳 Linux 开源企业软件

多年来,Linux 不仅在个人用户中逐渐受到欢迎,而且在寻求更多隐私并努力摆脱供应商锁定的企业和企业中也越来越受欢迎。令人惊讶的是,Linux 上提供的种类繁多的应用程序和程序可以满足小公司和拥有数千名员工的大公..

发表回复

返回顶部