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

    文章

    832

    浏览量

    54433
  • UNIX
    +关注

    关注

    0

    文章

    293

    浏览量

    41039

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

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

收藏 人收藏

    评论

    相关推荐

    华为硬件工程师手册_全

    华为硬件工程师手册_全
    发表于 01-15 10:13

    程序员与设计〓 群39566583

    程序员与设计〓 群39566583
    发表于 11-04 20:36

    深圳天瑞地安员工独白:我不是“”我是“攻城狮”!

      作为一位加入互联网行业的资深程序员来说,我一直觉得程序员相差无几,但是当我加入天瑞地安科技集团才深深的体会到,不仅仅人与人之间存
    发表于 02-11 18:02

    资深工程师讲述DCDC设计技巧

    资深工程师讲述DCDC设计技巧
    发表于 01-24 09:35

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

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

    大数据工程师和Java程序员相比有什么区别

    为什么大数据工程师比Java程序员工资高50%?
    发表于 07-17 07:39

    好的架构为什么是出色的程序员

    一个优秀的软件架构,首先一定是一个出色的程序员,这是本篇文章的议题。从本文我们可以了解到一个架构的工作是什么,他容易遇到的问题是什么,因此他为什么必须是一个出色的程序员
    发表于 07-17 07:03

    程序员的高薪职业发展方向,请查阅

    的类型还有另外一种看待程序员的方法,我们经常也会遇到,比如经常看到某些程序员的签名是成为架构。所以从技术知识、实践经验和程序员的专长去考虑也非常重要:系统
    发表于 06-30 17:33

    单片机工程师程序员

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

    程序员的三大方向分别是哪些

    的:①开发实体产品时,应用程序写得好的人,有时候需要操作系统的知识,比如调度优先级的设置、知道某些函数可能会令进程休眠。②写应用程序的人进阶为系统工程师时,他需要从上到下都了解,...
    发表于 12-21 07:56

    嵌入式软件工程师笔试面试的相关资料分享

    嵌入式软件笔试,嵌入式软件面试,程序员简历书写,Linux驱动工程师笔试,Linux驱动工程师面试,BSP工程师笔试,BSP工程师面试,应届
    发表于 12-24 07:46

    硬件工程师和软件工程师对比分析哪个更好

    企业的角度来讲讲。我个人认为造成这个差异的原因,第一个是基本上所有的公司,从初创公司到全球百强,都有对软件工程师的需求。现在哪个公司不需要几个
    发表于 12-24 08:05

    Linux开发工程师是吃青春饭的吗?

    Linux开发工程师怎么样?都说程序员是吃青春饭,Linux开发工作35岁之后还能做吗? 坦白说,如果程序员在35岁的时候,“工作经验”与刚毕业的时候差别不大,则其不可替代性就不高,很难在
    发表于 08-24 09:59

    什么样的工程师才能被称为资深,又如何成为资深Java工程师呢?

    即使在这个行业冬天里,企业也是愿意为有能力的资深Java工程师付费的。一个资深程序员达到50w+的待遇是没问题的。在IT届也流传着一个观点:1个优秀
    的头像 发表于 01-25 16:49 4051次阅读
    什么样的<b class='flag-5'>工程师</b>才能被称为<b class='flag-5'>资深</b>,又如何成为<b class='flag-5'>资深</b>Java<b class='flag-5'>工程师</b>呢?

    程序员工程师的不同

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