童话说说技术创业美文职业
投稿投诉
职业母婴
职场个人
历史治疗
笔记技能
美文纠纷
幽默家庭
范文作文
乐趣解密
创业案例
社会工作
新闻家居
心理安全
技术八卦
仲裁思考
生活时事
运势奇闻
说说企业
魅力社交
安好健康
传统笑话
童话初中
男女饮食
周易阅读
爱好两性

程序员和工程师有什么不一样?

1月17日 藏于心投稿
  我刚刚工作的时候,面试官曾经跟我说:好好干两年,可以迅速从程序员成长为工程师。当时我觉得太诧异了,从很多招聘启事来看,“程序员”不就等于“工程师”吗,只是“工程师”更好听一些而已。等我工作久了,才知道“程序员”和“工程师”真的是不一样的程序员只写程序,工程师写能在现实世界中创造价值的程序。
  可惜,很多软件开发人员未必清楚两者的差别,甚至做了很久也只算程序员而不算严格意义上的工程师。所以我就自己的观察和经验,谈谈程序员和工程师的差别。
  第一、工程师不写黑箱程序
  “程序数据结构算法”,这个著名的公式大家都知道。不幸的是,它不适合描述工程领域或者现实世界的程序。有很多程序,数据结构和算法都写得很棒,功能足够强大,系统足够复杂,但是它很难调试,一跑起来就无法停止,而且谁也不知道程序现在到底在干什么,里面发生了什么。
  别觉得好笑,我遇到过很多工作三四年甚至五六年的开发人员,仍然不停地生产黑箱程序:出现问题的第一反应是直接杀掉进程重启(天哪你们的程序不能安全关闭吗)。当然还有更生猛的,直接用开发机连上生产数据库(防火墙上开个洞)去调试。
  你说他们技术不好吗?明明各种技术问题也能搞定。你说他们没有系统意识?做过的程序也不简单。但是,他们做的充其量只能叫“程序”,而不是工程上成熟的“系统”。
  怎样的程序不是黑箱?你需要考虑它的层次划分,你需要考虑哪些(功能之外的)运行信息必须暴露和记录,以什么方式暴露记录,你甚至还需要考虑这些暴露和记录对性能的影响,以及程序需要对外提供什么操纵接口当你把这一切都考虑清楚,写出能够让运行细节“尽在掌握中”的程序的时候,你的一条腿就迈进了“工程”的大门。
  这方面,互联网和软件开发的大厂会更加关注一些,但也不是说个人就毫无追求的空间了。网络爬虫大家都会写,大家也都知道如果要数据抓得准,调试起来很麻烦。我有个朋友在某大厂写过一套“可视化”的爬虫,可以用逐步操纵语句的执行,迅速定位问题所在。这种水平的工程师,属于可遇而不可求的类型,每次说起来大家仍然啧啧称赞。
  第二、工程师注意实现和接口分离
  Java面试的一道经典问题是:请描述抽象类和接口的区别。通常,大家都会知道“接口”和“实现”要分离。不幸的是,很多人理解的“接口”,只是狭义的特定语言提供的Interface,而没有考虑“接口”真正的含义。
  接口的真正含义是什么?计算机最擅长处理的是信息,它可以让信息脱离现实的障碍高速流动起来。如果说“实现”是干脏活累活,“接口”就是发出干脏活累活指令的窗口。脏活累活干一遍就足够了,但发指令的窗口却可以有千千万万。
  更具体一点说,完成功能的是程序员,完成功能并且设想它会在什么情况下使用,并且让人方便使用的,是工程师。我见过不少这样的程序:登录会话一开始放在本地内存里没问题,到了要切换到数据库里方便会话转移就得大兴土木,虽然要做的其实仍然只是存取而已;程序自动加载的数据出了问题,就根本不能手动加载;以前手动加载的数据,改成自动加载就要推倒重来
  有没有接口意识,能不能真正区分接口和实现,这是区分程序员和工程师的一大标识。
  第三、工程师注重功能的逻辑联系
  很多系统都在不断的变化和改进过程中,程序员看到的是功能点,工程师看到的是功能点之上的逻辑。
  任何系统当然都是由若干功能构成的。但在功能点之上,还需要一张有逻辑意义的大网,才能把功能点组合起来,把复杂度降低,成为大家能理解的对象。最简单的“登录”,就包含数据输入、数据验证、登录信息记录等等功能,“登录”是这些功能的逻辑集合,也是理解这些功能的基础。
  随着时间的推移,业务的增长,新功能可能越来越多,比如用户数据的加载,对好友的通知,广告的推送准备等等。这些功能实现起来当然都容易(因为很具体),但功能堆积的后果是复杂度急剧上升,因为功能之间的逻辑联系被切断了。所以,工程师必然需要思考,这些功能应该怎么组合,放到哪些具有逻辑意义的动作比如“登录”里去?正是经过这样持续不断的思考,系统的复杂度才能够被一直维持在较低的水平,容易让大家理解。
  这个例子看起来很简单,但做起来却没那么容易。我有时看到复杂的系统操作手册,简直让人哭笑不得:1)点这里;2)点那里;3)输这个这些操作对应的逻辑意义那么准确,分明就该是一次性自动完成的啊,把它们割裂开来的后果大大提高了系统的复杂度,既不方便维护,也不方便操作。最后来擦屁股的,只能是开发人员自己。
  我经常反思自己接受的教育,在学校里写程序,和工作了写程序,有那么一点相同,但又好像完全两回事,到底有什么不同,只有亲自体会、思考了才能明白,所以我想把自己的所见所感写出来。悟性好的有机会接受很好训练的同学,估计不需要了解这些。但对于没有这样条件的同学,但愿我的这点念叨能给你们一点帮助。
  原文来自:虎嗅
  作者:余晟,微信公众号:余晟以为(yuriisays)
投诉 评论 转载

实习生的残酷世界在知乎刷到一贴,PO主在阿里实习一年后未能转正,经历曲折,不足为外人道也。而评论区里数十人组团咆哮,大意是“实习不给转正,公司臭不要脸”。同学,我来告诉你残酷世界更多的臭……这样干活效率翻倍!聊聊结对设计的三种模式【导语】一个单干的设计师容易把投机取巧当做常识,把嘲笑甲方当做话题,把熬夜赶图当做骄傲,把“不懂欣赏”当做借口。而今天聊的结对设计不仅可以帮你改正这些毛病,还能提高创意输出的质……谁让app工程师产生了泡沫?艾米说:移动互联网的飞速发展,造就了这个时代,也成就了不少优秀的职业人才,很荣幸能融入这个行业并能为此工作,这些年的工作中也发现不乏文中主人公的遭遇,但是有些个人主观意见,其实……加入创业团队,你确定你真的想好了吗?公司刚走了个做助理的小姑娘,本来不是多大的事儿,创业型公司人员流动频密,走了也就走了。但这次有点不一样,她带走了我们要做年审的资格证,而且声称我们剥削她,跑到劳动局把我们给告了……标签化生存互联网时代的个性化标签策略在互联网时代,有个性的人比较容易受到欢迎。因为这种个性是一个人特质以及价值观的某种体现,它能聚集起价值观同样相近的人,有价值观做捆绑,彼此的关系会异常牢固。物以类聚人以群分,人……二本文科女如何逆袭产品经理抱歉起了个看起来就很鸡汤的的文章名,入职一家上市公司的产品岗位刚满一周,有了一点小小的感慨。回想2015年这大半年,自己这一路走来,堕落过,迷茫过,愤怒过,犹豫过,但是最终貌似……阿里巴巴:产品经理内推到offer之路经历了一个月的面试等待,在上周末收到了阿里巴巴产品经理(商业领域)offer一枚,回想其中的酸甜苦辣,万分感慨。作为应届生,在正式进入找工作大军之前,收到一枚有分量的offer……产品干货如何快速融入一家创业公司在北京的第一次线下小聚,没那么多精心的环节策划,就是几个人在一起讨论如何解决一个问题,在交流中互相学习经验,分享心得。什么是创业公司这个问题不管对于即将加入或已经加……程序员和工程师有什么不一样?我刚刚工作的时候,面试官曾经跟我说:好好干两年,可以迅速从程序员成长为工程师。当时我觉得太诧异了,从很多招聘启事来看,“程序员”不就等于“工程师”吗,只是“工程师”更好听一些而……产品经理面试不知道怎么回答?来看看这篇做为人人都是产品经理的忠实粉丝(其实忠实读者更贴切),一直有要写点什么的冲动。刚好最近要换工作,那我们就聊一聊面试的那些事情吧。相信大家都是面试的经历(废话),面试失败的……产品经理面试:哪些问题是你没有准备的?上个月在准备阿里内推的时候,自己总结了下常见的产品面试问题。因为自己的知识积累很多是来源于前辈的分享,所以决定也把自己的经验分享出来。此文的面试问题,仅供大家参考。大家可以根据……你被大会忽悠了吗?参加那么多大会、沙龙,结果仍然是“然并卵”现在真是到处都是会,很多会都有很多人,参了这么多会,你学到了啥了?对你的工作有啥帮助?对你个人发展有啥帮助?这么多会上80都是忽悠。你让投资人告诉你创业?你让老板告诉你怎么做产……
为什么女人越来越拼,越来越努力了?心智成熟的人,是怎么做到的?判断一个人靠不靠谱,只用看7个特征成年人的安全感,都是钱给的上班族如何面对复杂工作?“精要主义之父”麦吉沃恩教你轻松工作大厂裁员频上热搜,关于“35岁危机”,这是我看过最中肯的建议在家远程办公,用好这10个高效tips如何处理工作中的负面情绪,减少它们对工作的影响职场解忧实用6大心理学合集:经典心理效应、饭局读心术、消费者心理、营商务谈判案例合集最实用的谈判技巧,让你开口就赢35岁宝妈裸辞,卖钵钵鸡月入百万:认知决定一个人的上限,勤奋北大毕业博士诈骗2600万获刑10年:人这一生,最该看透的三

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找作文动态热点娱乐育儿情感教程科技体育养生教案探索美文旅游财经日志励志范文论文时尚保健游戏护肤业界