写点什么

从“野路子”到“正规军”的软件开发之路

  • 2019-02-21
  • 本文字数:1166 字

    阅读完需:约 4 分钟

从“野路子”到“正规军”的软件开发之路

大家好,我是宝玉。我的专栏《软件工程之美》刚刚上线,很开心看到了很多同学对软件工程的理解和期待。



有同学说是从自学编程出身的,碰到过很多的问题,和很多人一样,我也是野路子出身的,2000 年自学 Asp 编程,大学期间兼职给别人做了不少网站。但那时候拿到一个项目,上手就是写代码,没有对需求进行梳理分析,也没有设计,直接就是想到哪写到哪。


这种边写边改的模式看起来开发速度很快,但是后面遇到了不少问题。比如说因为没有分析需求,所以做出来的东西不是客户想要的结果,就得要多次返工重写,浪费不少时间;写之前也没有设计,逻辑都混在一起。最夸张的一个代码文件有上万行代码,最大的函数有一千多行的逻辑。可以想像维护这样一个项目是多么的痛苦!因为很多逻辑也没有抽象,都是重复的,修改的时候得一个个查找替换,一不小心漏了就出 bug 了。


有一件事我一直没好意思提起,就是大二暑假还给别人山寨过一个“金领办公系统”,如果你搜索一下“金领办公系统 asp 源码”估计还能找到下载,可以看看我当年作为一个野路子程序员是什么水平了,各种拼音+英文混合的命名、意大利面条式代码、重复代码到处复制……


幸运的是,我大三转到了软件工程专业,重新学习了软件工程、数据结构、面向对象这些基础课程,毕业也顺利的成为一个程序员。


经过专业学习后,对我后面成长还是帮助很大的,这个帮助主要体现在两个方面。


第一个,就是学习新技术的时候,很快能领悟和融会贯通。比如说我学过瀑布模型,后来去看微软的 MSF,去看敏捷开发,就能根据以前的理论基础,去看它们共通的地方、不一样的地方、各自的优缺点,这样很快就能掌握。


第二个呢就是做事的时候,会更有章法,有理论指导。写程序前会先注意对需求进行梳理,搞清楚产品经理想要的是什么,这样就不用有太多的反复。写代码之前我会先做设计,思考有哪些共同的模块,应该怎么抽象。


后来到飞信的时候,因为表现出色,我开始有机会去管项目。


我还记得第一次作为项目经理去管一个小项目,我一时之间还真有点懵,不知道该怎么做。好在学过软件工程,尤其对瀑布模型、软件生命周期特别熟悉,于是就尝试着按照生命周期模型,先把项目拆分成几个阶段,然后在每个阶段里面,按照模块再去细分,再去制定项目计划。


幸运的是,我还找到了当初的项目计划表,分享给大家看看。



在制定计划的过程中,也帮助我做了一个很重要的转变,那就是不再是像以前只盯着一个小模块,不是再只想着技术实现,而是站在项目的整体去思考。


这个项目后来按照我当时制定的计划进展的很顺利。如果之前没有软件工程的这些理论基础,也许我后来还会转型做管理,但是一定没有当时那么顺利,要多走很多弯路。


所以我其实一直在微博上、微信上,很多地方都说过,软件工程是大学里最重要的一门课程。


我希望《软件工程之美》专栏能帮大家重新理解软件工程,从苦钻技术不得法变得行有章法。


2019-02-21 16:265751

评论

发布
暂无评论
发现更多内容

「云原生上云」后的聚石塔是如何应对 双11 下大规模应用挑战的

阿里巴巴云原生

阿里云 云原生

爆买剁手之后,我们的快乐为什么越来越贬值?

脑极体

技术应用丨DWS 空间释放(vacuum full) 最佳实践

华为云开发者联盟

内存 存储 磁盘

进一步深挖工业数据价值

CECBC

数据安全;工业互联网

大企软件系统问题多?归乡名企工程师:解决很简单,分分钟做个新系统

Learun

敏捷开发 快速开发 企业开发 CRM 企业应用

同步与异步,回调与协程

Linux服务器开发

线程 后端 协程 底层应用开发 Linux服务器开发

Accept-Language是什么? 就在身边,你却没看见的“冷知识”系列(不定期偶遇)

八苦-瞿昙

随笔杂谈 HTTP

GO训练营第2周总结

Glowry

你敢信?就是这个Netty的网络框架差点把我整疯了,哭jj

小Q

学习 编程 面试 Netty 网络

cncf serverless 所有项目全解读

coldTea214

云计算 Serverless 容器 cncf

精彩回顾 | 一张图读懂OPPO应用与数据安全防护

OPPO安全

OPPO安全

深入了解进程间通信:System V信号量+共享内存

ShenDu_Linux

Linux 进程 内存管理 通信协议

区块链在国际贸易领域应用的法律问题

CECBC

区块链

关于物联网规则引擎技术,你想要知道的都在这儿!

华为云开发者联盟

数据 联动 iotda

当居住空间被智能包裹:OTA智能社区改变了什么?

脑极体

LeetCode题解:455. 分发饼干,贪心while循环,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

年轻人快来学习TCP 协议如何解决粘包、半包问题!

程序员小灰

c++ Linux TCP 后台开发 Linux服务器开发

OPPO技术开放日第六期丨OPPO安全解析“应用与数据安全防护”背后的技术

OPPO安全

OPPO安全

中国CRM突围指南

ToB行业头条

CRM

测试过程中如何快速定位一个bug

测试人生路

软件测试

从零做网站开发:基于Flask和JQuery,实现表格管理平台

华为云开发者联盟

jquery flask 框架

浅谈互斥锁与进程间的通信(举例说明)

ShenDu_Linux

Linux 程序员 架构师 进程线程区别

数字货币将带来怎样的“革命”

CECBC

数字货币 货币

《视觉系统中的深度学习》PDF及源代码免费下载

计算机与AI

学习 计算机视觉

架构师 3 期 3 班 -week2- 作业

zbest

作业 week2

linux后台开发必知的linux系统内存知识总结

linux大本营

c++ Linux 后台开发 架构师 内存管理

设备常用网管配置举例

在K8S/OpenShift上开发应用程序的14种最佳实践

东风微鸣

Kubernetes 最佳实践 k8s最佳实践 openshift

《迅雷链精品课》第九课:区块链P2P网络

迅雷链

区块链

Serverless 应用引擎的远程调试和云端联调

阿里巴巴云原生

Java Serverless 云原生 后端

为什么从蚂蚁离职?base拉胯,高潜也被倒挂,就是酸,忍不了

Java架构师迁哥

从“野路子”到“正规军”的软件开发之路_技术管理_宝玉_InfoQ精选文章