10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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

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

    阅读完需:约 4 分钟

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

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



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


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


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


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


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


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


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


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


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


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



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


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


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


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


2019-02-21 16:265695

评论

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

面试官:执行一条 SQL 语句,期间会发生什么?

Java全栈架构师

Java MySQL 数据库 程序员 面试

开源生态|超实用开源License基础知识扫盲帖(上)

Orillusion

开源 WebGL 元宇宙 Metaverse webgpu

InterpreterPattern-解释器模式

梁歪歪 ♚

设计模式

企业网站如何快速被搜索引擎收录

源字节1号

跨平台方案的比较

Geek_99967b

小程序 小程序容器

scp 高效操作之避免 zsh 路径展开

Nick

Linux zsh 6月月更 高效操作 scp

互联网电商项目天花板,从立项到交付快速落地,真正帮你解决大型互联网项目经验欠缺的短板

Java全栈架构师

程序员 面试 项目 架构设计 程序员进阶

每日一题 | LeetCode 1 两数之和

武师叔

Python 算法 JAV A Leet Code 6月月更

5分钟了解SDN控制平面

穿过生命散发芬芳

SDN网络 6月月更

过去一周区块链热点回顾|BAYC项目具有被无限铸币的风险

区块链前沿News

Hoo

Disruptor 高性能堆内队列 系列一

Nick

Java Disruptor 队列 高性能 6月月更

Flutter 利用 Redux 中间件完成购物清单离线存储

岛上码农

flutter ios 前端 安卓开发 6月月更

使用IDE并不是懒癌表现

Geek_99967b

小程序 小程序容器

同心助力,战役有AI

开源社

人工智能 疫情防控

孙勇男:实时视频 SDK 黑盒测试架构丨Dev for Dev 专栏

声网

自动化测试 Dev for Dev

FinClip2022重要功能汇总

Speedoooo

微信小程序 APP开发 小程序容器 微信登录

Hexo + Github从零搭建个人博客

梁歪歪 ♚

Hexo 博客搭建

Flutter的整体架构

Geek_99967b

小程序 小程序容器

阿里6月终于有HC了!耗时两月足足面试13轮成功入职阿里!拿到32*15Offer

Java全栈架构师

Java spring 程序员 面试 程序人生

答应我:监听日志文件变化的这三种方法你一定要会!推荐第三种!

Java全栈架构师

Java 程序员 面试 IDEA 代码人生

「技术人生」第8篇:如何画业务大图

阿里巴巴中间件

阿里云 云原生 技术文章

PC端实现运营小程序,是否能再创PC时代又一春!

Geek_99967b

小程序 小程序转app

Java设计模式学习总结

梁歪歪 ♚

设计模式

深入浅出-如何安全的传输密码

梁歪歪 ♚

加密

leetcode 51. N-Queens N 皇后(困难)

okokabcd

LeetCode 搜索 算法与数据结构

LabVIEW控制Arduino采集热电偶温度数值(进阶篇—2)

不脱发的程序猿

单片机 LabVIEW Arduino VISA 采集热电偶温度数值

华为云AppCube带你5分钟开发微信小程序

乌龟哥哥

6月月更

2022年SaaS行业十大趋势:SaaS的新机遇有哪些?

小炮

App中快速复用微信登录授权的一种方法

Speedoooo

APP开发 微信授权 微信登录

让开发效率飞速提升的跨端开发神器

Geek_99967b

小程序 小程序容器

红利、辛苦钱、利润和工资【读书笔记】

FunTester

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