科普程序员和软件工程师一样你别逗了

“对于行内人来说,程序员和工程师的区别大家都了解,但是对于行外人来说,甚至刚刚入行的来说也同样的认为程序员=软件工程师,认为都是写代码的,没有什么区别。他们之间有什么区别呢?

很多程序员都得到过鼓励——小王,好好干,希望你能在两年内成长为一个工程师,刚听到的时候都很纳闷,工程师不就是比程序员好听一些吗?其实等自己真正成为工程师后,或者面见过很多工程师后才知道,两者还是有比较大的区别的。

结合工作经验和自己的认识,来谈谈程序员和工程师的差别!

第一、工程师写“系统”,程序员写“程序”

其实无论是程序员还是工程师,都是在写程序,但是他们彼此写的完善性不同,所以差别化对待,分别取了一个名字!一起来看看其中的区别。

程序员都知道,“程序=数据结构+算法”,但是不幸的是,它不适合描述工程领域或者现实世界的程序。有很多程序,数据结构和算法都写得很棒,功能足够强大,系统足够复杂,但是——它很难调试,一跑起来就无法停止,而且谁也不知道程序现在到底在干什么,里面发生了什么。

看官们可能觉得好笑,或者不理解,程序还能自己“乱跑”?

你别觉得好笑,很多工作三四年甚至五六年的开发人员,仍然不停地生产这样的程序,程序跑起来无法结束,第一反映就是直接杀掉进程,还见过更生猛的,直接用开发机连上生产数据库(防火墙上开个洞)去调试。

你能说这些程序员技术不行吗?但是人家各种技术问题能搞定,各种功能能实现;

他们没有系统意识?也不是,做的系统也挺复杂!

但是,他们做的充其量只能叫“程序”,而不是工程上成熟的“系统”。

所以他们也就只是程序员,而不是工程师!

想成为工程师一样写程序,需要怎么样呢?

你需要考虑它的层次划分,你需要考虑哪些(功能之外的)运行信息必须暴露和记录,以什么方式暴露记录,你甚至还需要考虑这些暴露和记录对性能的影响,以及程序需要对外提供什么操纵接口……当你把这一切都考虑清楚,写出能够让运行细节“尽在掌握中”的程序的时候,你的一条腿就迈进了“工程”的大门。

说一个工程师大牛的例子:

网络爬虫大家都会写,大家也都知道如果要数据抓得准,调试起来很麻烦。有一个工程师大神,写过一套“可视化”的爬虫,可以用逐步操纵语句的执行,迅速定位问题所在。这种水平的工程师,属于可遇而不可求的类型,每次说起来大家仍然啧啧称赞。

第二、工程师注意实现和接口分离

Java面试的一道经典问题是:请描述抽象类和接口的区别。通常,大家都会知道“接口”和“实现”要分离。不幸的是,很多人理解的“接口”,只是狭义的特定语言提供的Interface,而没有考虑“接口”真正的含义。

我见过不少这样的程序:登录会话一开始放在本地内存里没问题,到了要切换到数据库里方便会话转移就得大兴土木,虽然要做的其实仍然只是存取而已;程序自动加载的数据出了问题,就根本不能手动加载;以前手动加载的数据,改成自动加载就要推倒重来……

完成功能的是程序员,完成功能并且设想它会在什么情况下使用,并且让人方便使用的,是工程师。

有没有接口意识,能不能真正区分接口和实现,这是区分程序员和工程师的一大标识。

第三、工程师注重功能的逻辑联系

很多系统都在不断的变化和改进过程中,程序员看到的是功能点,工程师看到的是功能点之上的逻辑。

任何系统当然都是由若干功能构成的。但在功能点之上,还需要一张有逻辑意义的大网,才能把功能点组合起来,把复杂度降低,成为大家能理解的对象。最简单的“登录”,就包含数据输入、数据验证、登录信息记录等等功能,“登录”是这些功能的逻辑集合,也是理解这些功能的基础。

随着时间的推移,业务的增长,新功能可能越来越多,比如用户数据的加载,对好友的通知,广告的推送准备等等。这些功能实现起来当然都容易(因为很具体),但功能堆积的后果是复杂度急剧上升,因为功能之间的逻辑联系被切断了。所以,工程师必然需要思考,这些功能应该怎么组合,放到哪些具有逻辑意义的动作——比如“登录”里去?正是经过这样持续不断的思考,系统的复杂度才能够被一直维持在较低的水平,容易让大家理解。

希望大家在程序员的道路上走的更远一点,多思考一些,都向着工程师的道路走走。

精彩好文推荐阅读:

节聊聊令人羡慕的程序员:嫁人当嫁程序员!

看了蔡阿姨为女征婚启示才明白,真后悔没有选择这种工作

30岁学编程晚吗?一个32岁入门的70后程序员的传奇故事

目前+人







































中科白癜风医院
湖北治疗白癜风的医院


转载请注明地址:http://www.yujinxiangqiangzhi.com/rjcs/11994.html


  • 上一篇文章:
  • 下一篇文章: 没有了
  • 公司简介 广告合作 发布优势 服务条款 隐私保护 网站地图 版权声明