GMTC北京站本周日开幕,58个议题全部上线,点击查看 了解详情
写点什么

微软最具价值技术专家:我的 16 年软件开发经验总结

2019 年 3 月 01 日

微软最具价值技术专家:我的16年软件开发经验总结

大家好,我是宝玉。有同学说是从自学编程出身的,碰到过很多的问题,走了很多弯路,日常搬砖,增删改查,非常困惑没有自信。



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


以前没多大的感觉,并且这种边写边改的模式看起来开发速度很快,但是后面遇到了不少问题。


比如说因为没有分析需求,所以做出来的东西不是客户想要的结果,就得要多次返工重写,浪费不少时间;写之前也没有设计,逻辑都混在一起;难得接手一个复杂的、大的功能模块开发,也不知道如何拆解分工协作;以为功能上线就完事了,没想到还要写测试代码进行功能测试;还有些日常的小工具像源代码管理、Bug 跟踪等等,竟然都要用。


最夸张的是有一个代码文件有上万行代码,最大的函数有一千多行的逻辑。可以想像,维护这样一个项目是多么的痛苦!因为很多业务逻辑没有抽象,都是重复的,修改的时候得一个个查找替换,一不小心漏了就出 bug 了。


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


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


最近为了筹备我在极客时间的专栏《软件工程之美》的内容,我在重新梳理软件工程相关的资料和知识体系时,看到了很多同学对软件工程理解的留言,也很有感触,如今再回顾当年学的专业课,很多专业概念已经记忆模糊,唯有对一位老师的教诲记忆深刻,对我毕业后的职业生涯影响深远:“Everything is a project。”



这句话对我影响很大。我真的开始在日常生活中,把每一件事都当做一个工程项目来推进。


2010 年在上海的时候,我机缘巧合参加了一个关于产品设计与用户体验的线下活动,我可能是与会人员中,为数不多的非专业产品设计的同学。在活动中组织者安排了一个游戏环节,每 5 个或 6 个人分成一个小组,来设计一个给老年人使用的手机,限时 30 分钟,完成后,每组选一个人上台花 5 分钟展示作品,最后投票选出做得最好的一组。


我的第一反应就是把它当作一个项目,于是快速地拟定了如下计划。


  • 0~10 分钟(分析):头脑风暴,收集想法。

  • 11~15 分钟(设计):根据头脑风暴结果,确定最终设计。

  • 16~25 分钟(开发):将想法画在纸上。

  • 26~30 分钟(发布):完善结果,准备展示。


这个计划小组成员都很认可,于是我们严格按照这个计划进行手机的设计。同时我观察了一下其他组的情况,大家都在热火朝天地讨论各种想法,似乎没有意识到时间其实是有限的。轮到演示的时候,我们组毫无争议地拿到了第一,因为我们不仅准备充分,而且设计的手机功能完整,而其他很多组甚至还没来得及把想法完整地画下来。


后来我才了解到,这种有目的、有计划、有步骤地解决问题的方法就是工程方法。工程方法不是软件工程独有的,几乎所有工程类别都可能会应用,例如建筑工程、电子工程等,只不过步骤可能略有不同。



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


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


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


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


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


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



这个工具叫 MS Project,是微软出的软件,在专栏中的「项目管理工具」我会再详细介绍


在制定计划的过程中,也帮助我做了一个很重要的转变,面对问题我会参考软件生命周期和瀑布模型,把一件事情分成几个阶段:分析、设计、实施、测试、完成,然后制定相应的计划。


这种方法不仅非常有效,让我的做事效率大幅提高,而且让我在看待事情上,能够更全面地、站在更高的角度去思考。


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


所以我其实一直在微博上、微信上,很多地方都说过,软件工程是大学里最重要的一门课程。我希望《软件工程之美》专栏能帮大家重新理解软件工程,从苦钻技术不得法变得行有章法。


现在专栏上新优惠倒计时最后 1 天,限时¥68,感兴趣的同学可以准备入手了(马上要恢复原价¥99),现在订阅还可以邀请你加入「软件工程学习群」,我们一起交流学习进步;还给大家申请了额外福利,来自 InfoQ 顶尖技术大会——QCon 全球软件开发大会(门票价值 6800 元),2018 年全部 2 场大会 PPT 珍贵资料免费送给你。(获取方式:“极客时间”服务号后台回复“软件”)



2019 年 3 月 01 日 13:056028

评论 1 条评论

发布
用户头像
虽然是广告贴,多少还有点点干货,给你个赞。
2019 年 03 月 04 日 14:25
回复
没有更多了
发现更多内容

架构师训练营 第五周 作业

CR

架构师训练营-第四周-作业1

A Matt

极客大学架构师训练营

代价与平衡

林昱榕

极客大学架构师训练营 CAP 代价 平衡 意识

一致性hash

GalaxyCreater

算法

事件驱动架构(W5总结)

麻辣

架构师训练营 W5 学习总结

Kun

极客大学架构师训练营

week 5 作业

Gavin

架构师训练营第五周心得

努力努力再努力m

极客大学架构师训练营

缓存设计

GalaxyCreater

作业

一致性hash算法的实现

阿飞

架构 算法

Golang实现一致性哈希(consistent hash)

张磊

架构师训练营第5周作业

养乐多

第五周-学习总结

molly

极客大学架构师训练营

架构师训练营-第三周-总结

A Matt

极客大学架构师训练营

week 5 总结

Gavin

架构师训练营 - 作业 - 第五周

心在飞

极客大学架构师训练营

架构师训练营-第五周-作业

狂奔嘀兔纸

极客大学架构师训练营

week05 作业

Geek_196d0f

架构师训练营 week5

devfan

学习总结 - 架构师训练营 - 第五周

走过路过飞过

关于 openresty 中的时间使用

lockdown56

week5作业

架构师训练营-第五周-课程总结

狂奔嘀兔纸

极客大学架构师训练营

架构师训练营 第五周 作业

一雄

极客大学架构师训练营 作业 第五周

Week05总结

张磊

架构训练营第五周作业

子豪sirius

应用服务器性能优化

stars

极客时间架构师训练营 - week5 - 作业 1

jjn0703

架构师训练营第五周作业

努力努力再努力m

极客大学架构师训练营

第五周学习心得

子豪sirius

架构师训练营第五周-作业

草原上的奔跑

极客大学架构师训练营

微软最具价值技术专家:我的16年软件开发经验总结-InfoQ