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

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

3天内不再提示

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

GReq_mcu168 来源:未知 作者:李倩 2018-06-26 10:00 次阅读

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

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

作为与 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!”我们就会充满了渴望和力量,因为那是程序员最初的梦想:改变世界。

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

    关注

    215

    文章

    33593

    浏览量

    247100
  • 编码
    +关注

    关注

    6

    文章

    835

    浏览量

    54454
  • 程序员
    +关注

    关注

    4

    文章

    931

    浏览量

    29570

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

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    高清视频编码器与流媒体平台的完美结合

    随着数字化时代的快速推进,高清视频已经成为我们日常生活中不可或缺的一部分。在这一背景下,高清视频编码器与流媒体平台的结合变得尤为重要。两者之间的完美结合不仅为用户提供了高质量的视频体验,还推动了视频
    的头像 发表于 02-20 15:14 158次阅读
    高清视频<b class='flag-5'>编码</b>器与流媒体平台的<b class='flag-5'>完美</b>结合

    哈夫曼编码怎么算 哈夫曼编码左边是0还是1

    哈夫曼编码是一种基于频率的变长编码方式,常用于数据压缩和信息传输领域。它是由美国数学家大卫·哈夫曼在1952年发明的,被广泛应用于无损压缩领域。 哈夫曼编码算法的基本思想是根据字符出现的频率构建一棵
    的头像 发表于 01-30 11:27 508次阅读

    简单介绍PLC存储器寻址规则

    在PLC编程时,字节或多字节的变量一般支持绝对地址寻址(比如,IW0、MD4等)。要想正确寻址,则必须要搞清楚寻址的规则。目前常见的规则有两种:字节寻址和字寻址。
    发表于 01-18 10:17 205次阅读
    <b class='flag-5'>简单</b>介绍PLC存储器寻址<b class='flag-5'>规则</b>

    如何利用3D点编码提升PETRV1/V2及StreamPETR性能

    由于3DPPE在构建图像特征的位置编码时引入了显式的深度信息,使得对应的位置先验与真实物理世界的分布更为一致,从而有效的减缓了沿射线方向的误检。
    发表于 11-24 11:38 224次阅读
    如何利用3D点<b class='flag-5'>编码</b>提升PETRV1/V2及StreamPETR性能

    PCB布线规则解析

    无法避免线宽的变化,应该尽量减少中间不一致部分的有效长度。 倒角规则 在PCB布线时,走线拐弯的拐角应避免设计成锐角和直角形式,以免产生不必要的辐射;要求所有线与线的夹角应大于等于135°在走线确实
    发表于 11-14 16:06

    编码器是如何实现定位功能的呢?

    上用的一般是光电类型编码器,下边简单说明一下简单说下编码原理和位置测量光电编码器是在一个很薄很轻的圆盘子上,通过紧密仪器来腐蚀雕刻了很多条细
    的头像 发表于 11-13 08:07 973次阅读
    <b class='flag-5'>编码</b>器是如何实现定位功能的呢?

    CC430系列有似arduino那样简单的开发环境吗?

    最近想玩玩大气压传感器,想起手上还有TI的Chronos手表套件,上边有个大气压传感器,但是CCS开发环境不好用,求推荐类似arduino那样的,简单粗暴无脑的开发环境,当然得带ez430-Chronos库函数的,energia好像不支持CC430吧?​​
    发表于 10-19 07:36

    SRRC证书样式和代码编码规则即将施行

    为优化无线电发射设备型号核准证书样式和代码编码规则,根据《无线电发射设备管理规定》,近日,工业和信息化部修订发布了《无线电发射设备型号核准证书样式》和《无线电发射设备型号核准代码编码规则
    的头像 发表于 10-14 16:50 381次阅读
    SRRC证书样式和代码<b class='flag-5'>编码</b><b class='flag-5'>规则</b>即将施行

    Map+函数式接口如何完美的解决if-else问题?

    最近写了一个服务:根据优惠券的类型resourceType和编码resourceId来 查询 发放方式grantType和领取规则
    的头像 发表于 09-07 11:07 401次阅读
    Map+函数式接口如何<b class='flag-5'>完美</b>的解决if-else问题?

    Python编码与解码

    磁盘)中需要被表示为一组字节(0到255之间的值),而将Unicode字符串转换为字节序列的规则称为编码
    的头像 发表于 07-05 15:59 534次阅读

    掌握指标使指定编码器更简单

    本文章介绍了编码器为闭环控制电机应用带来的好处,并探讨了光学和磁性换能器的相对优缺点。介绍了关键的编码器指标,并展示了如何在机器人拾取和放置应用程序中指定编码器的性能级别。
    的头像 发表于 06-27 09:43 414次阅读
    掌握指标使指定<b class='flag-5'>编码</b>器更<b class='flag-5'>简单</b>

    简单粗暴的EMC设计笔记

    整理了EMC工程师常见的兼容性问题、具体解决方法,以供大家做学习笔记。
    的头像 发表于 06-06 15:33 366次阅读

    使用attachInterrupt() 的编码器读数不规则如何解决?

    嗨,大家好。 我需要使用 wemos d1 迷你板的中断功能读取编码器。但是,绘制读数会导致波形不规则。 因此,我测试了在没有中断功能的情况下进行读取,仅使用 digitalRead,并且在绘图
    发表于 05-25 09:02

    霍尔编码器电机与TB6612电机驱动相关学习

    简单粗暴的说下,电机-电机驱动-单片机该怎么连线。 先简单认识一下霍尔编码器电机 以上选用的平衡小车之家的,市面上基本都跟这个差不了多少。 电机线-+这两个引脚 与电机驱动相连接 来控
    发表于 05-16 15:37 3次下载
    霍尔<b class='flag-5'>编码</b>器电机与TB6612电机驱动相关学习

    什么是低功耗设计呢(UPF编码篇)

    UPF编码基础(内容:电源网络定义,多电压域设计,低功耗模式,低功耗单元规则(rules),芯片边缘供电定义,IP供电描述)
    发表于 05-15 14:22 805次阅读
    什么是低功耗设计呢(UPF<b class='flag-5'>编码</b>篇)