0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

华为资深工程师:程序员与码农的差异在哪?

5RJg_mcuworld 来源:电子发烧友网 作者:工程师谭军 2018-07-04 12:01 次阅读

一位驰骋商界多年的老友问:“你现在在华为做什么工作呀?”我很骄傲地说:”系统架构师“,可是他却愣了很久。

但当我老婆在旁边补上一句“码农“时,老友瞬间秒懂,却把我受伤的心孤独地留在风中凌乱。

作为与 UNIX 同年代的人,我当初选择计算机专业仅仅是因为抓到什么就学什么罢了。

本科毕业遇到互联网危机,便没有想法地去读了研,研究生毕业找工作,面试官问为什么要做软件开发。

答曰:“不给钱都喜欢做的事情,何况还给钱”,从此便踏入了编码这一行,只是从来没想到一做就是十几年。

但凡一件事情做久了,无论成功与否,都会有一些真切的体验和心得。以前也读过一些工作中如何成功、快乐,诸如马斯洛理论之类的文章。

也许是因为自己领悟能力比较差,唯一的收获是庆幸自己当初选择了编码作为自己的工作,因为编码天生就具有让人愉悦的工作内容和工作氛围,快乐如影随从。

1

编码世界:规则简单有效,粗暴却完美

从事编码,可以锻炼逻辑思维能力,教会你如何思考。就像学习法律一样,学法律的人未必都是为了成为律师,但法律教会了你一种思维方式。

同样的,通过编码可以学习到这个世界上最严谨的思维方法。因为在编码的世界里,对错是简单甚至绝对的。

只要敲下键盘,计算机就会判定孰是孰非,0 或 1,规则简单有效,粗暴却完美。

从事编码,可以获得持续的创造力。跟写作、绘画、作曲一样,编码也是一种创造性的工作。

只要有一台计算机,掌握了基本技能后,你便拥有了无限的超能,便能随心所欲地创造出新的东西,丰富和美好这个世界,是不是很棒?

更酷的是,编码可以品味孤独。除了跟别人交流、学习,程序员大部分时间都是独自在工作,只要双手触摸到键盘,内心顷刻便会变的宁静,多酷呀!

伴随着键盘清脆的低吟,沉浸在一个人的世界里,跟烟雨蒙蒙天,一杯茶,一个人听着淅淅沥沥的雨声品味孤独,简直有异曲同工之妙,多感性呀!

能够选择编码作为工作的人,大部分都是喜欢为人处世简简单单的人:这群人有着天真烂漫的好奇心,虽不苟言笑,但却内心火热,善于分享,乐于助人,甚至有时为了解决问题、宁愿不眠不休,却深以为乐……

跟这样一群简单纯粹的人在一起,我觉得世界上最好的工作氛围,也不过如此。

2

程序员的三个境界

但 IT 时代的膨胀已经让编码工作如同文艺复兴时的印刷匠一样,编码门槛越来越低。

例如,遍地《一周XX速成》、《20天XX精通》,仿佛会写代码就成了程序员,这让很多人认为从事编码工作就是码农。

其实,印刷匠很多,成为大师的不多;码农很多,但程序员并不多。程序员不是码农,码农也不是真正的程序员。

程序员在英文里对应有三个单词:Coder、Programmer 和 Software Engineer。

我觉得这三个词,生动形象地描述了程序员所需要经历的三个阶段,或者说三个境界:

Coder:只要求能够熟练使用编程环境,精通几种编程语言、开发框架和开发库,擅长写代码就可以了。这个阶段的程序员能够按照既定的设计完成编码。

Programmer:要求在 Coder 的基础之上,精通设计模式、算法实现和编码技巧,并具备熟练应用的能力,这个阶段的程序员能够独立编码解决现实问题。

Software Engineer:要求在掌握业务知识的前提下,理解为什么这么实现,在综合考虑架构实现,权衡开发成本后,为解决业务问题提出最优方案,并能与业务人员顺畅沟通,让业务人员理解方案。

编码工作达到这个阶段,才能称得上是真正的程序员,才真正实现了从工作到职业的转变。

不可否认,这个世界上有一些天才的程序员,他们喝着咖啡,哼着歌,便完成了上面三个阶段的修炼。但绝大部分人,都需要为此付出巨大的时间和精力。

能否成为职业的程序员,影响因素和方法论很多,各种学习类、技术类的总结遍地都是:主动思考、及时总结、制定规划等。但我认为其中最重要的是能否做到专注。

许多没有达到第三个阶段的程序员,就是因为受到各种因素诱惑,变得心猿意马,不够专注。

因为不够专注,他们不在意做好自己本职工作,不在意锤炼自己的技能,不在意学习新兴的技术。

慢慢的,他们会认为从事编码没有出路,进而毫无例外地把编程看成是体力劳动,只会粘贴拷贝代码,知其然而不知其所以然,导致技术停滞不前。

在这样的状态下工作 5 年、10 年,对于他们来说,没什么区别,程序员真的就是吃青春饭的码农。

3

程序员 VS 码农:我们不一样

要避免程序员变成码农要做到如下几点:

必须对编码保持热情,并持续学习;

必须保持好奇心,乐于探求事物本质;

必须对所做的工作及时总结,主动优化代码,让系统变得更加有机;

必须主动尝试更好的开发方式、更先进的工具,来提升开发效率,并想办法避免重复性的工作;

必须不断改进设计,将编程变成创造性的工作。

只要通过这样逐步地积累经验和长时间锤炼,知识体系才能构建完备和丰富,才能避免沦落为码农。

几年前,我曾经重构过一个模块,从外部看模块所在的系统,都是类似这样的,简洁而漂亮:

但从程序员编码实现的层面看,它实际上是这样的:

这个设计在最初的版本没有任何问题,使用继承扩展管理对象的接口能力,但仅仅过了两个版本,项目组 PL 说实在撑不下去了。

增加一个接口,需要修改 200 多个地方,如果再过一个版本,估计要修改 400 多个地方了。

后来我把它改成这个样子,使用聚合消除了耦合

从代码实现层面看,在功能刚开始开发时,这两个设计区别不是很大。

但随着系统演进、越来越多的功能加入,继承关系带来的耦合会导致模块之间关系越来越复杂。

牵一发而动全身,终究有一天哪怕只做很小的改动,也将成为压死骆驼的最后一根稻草。

这次重构的成果是代码量由 43K 减少到 15K,扩展新的接口能力不再需要修改已有代码。我想,这或许就体现了码农和程序员的区别吧。

CT 是一个业务复杂度极高的行业,要想从码农成长为程序员,需要经历更多的煎熬,需要发挥更多的创造力,同时也意味着,我们比以往任何时候都需要越来越多的码农成长为程序员。

既然我们选择了编码作为职业,注定会经历各种心劫:枯燥、沮丧、迷茫,甚至浮躁……

然而无论处于哪种心境当中,我相信,只要想起自己曾经满怀惊奇、兴奋与真诚敲下的那个程序——“Hello,World!”我们就会充满了渴望和力量,因为那是程序员最初的梦想:改变世界。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码
    +关注

    关注

    6

    文章

    924

    浏览量

    54727
  • UNIX
    +关注

    关注

    0

    文章

    296

    浏览量

    41390

原文标题:华为资深工程师:为什么码农很多,程序员却不多?

文章出处:【微信号:mcuworld,微信公众号:嵌入式资讯精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    程序员里的鄙视链

    在软件工程师(中国叫做“程序员”或“”)的圈子里,文人相轻的现象可是非常严重的,在程序设计的各个领域里都有着错综复杂的“鄙视链”。
    发表于 12-19 10:31 4020次阅读

    5年给新人程序员的6个建议

    程序员新人的6点建议:5年的辛酸反省与总结
    发表于 04-08 08:04

    单片机工程师程序员

    从业这么多年,我也一直在纠结一个概念,我做的单片机软件开发是否属于IT行业? 大家都知道IT这个概念,但很少人找到单片机。一、单片机工程师程序员吗?那从我的认知来说,我觉得“算是”。因为单片机工程师
    发表于 11-09 09:14

    程序员之间就在这5个关键点!

    如果一个企业老板大声嚷嚷说,“我要招个程序员”,那么十之八九指的是“”——一种纯粹为了钱而写代码的技术人员。这其实是一种非常狭隘和错误的做法。 1.
    发表于 12-01 18:49 623次阅读

    编码人员,程序员,开发人员和软件工程师之间的差异

    我们都听说过这些职位,但是你知道编码程序员,开发人员或软件工程师之间的确切区别吗?许多人声称,这种差异
    的头像 发表于 03-19 14:01 4561次阅读

    软件开发工程师程序员的区别是什么

    不管是CPPer,Javaer,还是PHPer等等,不少开发人员经历过这样的困惑:我到底是工程师(SDE,or Developer),程序员(Programmer),还是Coder(编码)呢?
    的头像 发表于 08-27 10:35 2.7w次阅读

    程序员工程师的五个必要条件

    的40岁危机困扰焦虑着。另一方面,有些程序员工作高效,能力出众,每当机会来临时总能获得职位上升,收入迅速的提高,个人价值的提升又从精神上给自己带来满足感,常常斗志昂扬,而这样能解决复杂问题的程序员才叫工程师。本文中笔者将根据自己
    的头像 发表于 08-26 09:12 5240次阅读

    软件工程师和高级工程师程序员的区别是什么

    在各种招聘广告里,总能看到软件工程师程序员或高级工程师的称谓。从工作职责来看,好像工程师程序员没什么区别,如果加上高级俩字,也不过需要的
    的头像 发表于 09-18 09:31 1.2w次阅读

    工程师的最大区别在哪

    工程师的区别并不在于技术水准的高低。
    的头像 发表于 10-17 09:15 4661次阅读

    电子工程师你知道程序员节的来源吗

    10月24日是什么节日你知道吗?程序员节!作为电子工程师的你要怎么过程序员节?为什么没有电子工程师节?10月24日让程序员节回归本真,请关爱
    的头像 发表于 10-24 16:00 3516次阅读

    初级程序员和架构有什么区别

    如题,初级程序员和架构的差别在哪里?
    的头像 发表于 04-01 15:25 4492次阅读

    程序员工程师的不同

    我刚刚工作的时候,面试官曾经跟我说:好好干两年,可以迅速从程序员成长为工程师。当时我觉得太诧异了,从很多招聘启事来看,“程序员”不就等于 “工程师”吗,只是“
    的头像 发表于 07-19 17:38 4215次阅读

    程序员和软件工程师有什么区别

    有些人说程序员主要是指写代码的人,而工程师着重在于设计。
    的头像 发表于 08-30 16:09 5941次阅读

    优秀程序员与糟糕程序员的变现差异

    软件蚕食一切,未来属于程序员。所以人人都想当程序员。但是并不是每个人都能当好程序员。在你做出决定前还是先看看自己能不能当好程序员吧。
    的头像 发表于 11-07 16:14 3027次阅读

    单片机工程师程序员吗?真实的月薪到底有多少?

    从业这么多年,我也一直在纠结一个概念,我做的单片机软件开发是否属于IT行业? 大家都知道IT这个概念,但很少人找到单片机。一、单片机工程师程序员吗?那从我的认知来说,我觉得“算是”。因为单片机工程师
    发表于 11-04 17:36 16次下载
    单片机<b class='flag-5'>工程师</b>是<b class='flag-5'>程序员</b>吗?真实的月薪到底有多少?