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

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

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

只要敲下键盘,计算机就会判定孰是孰非,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!”我们就会充满了渴望和力量,因为那是程序员最初的梦想:改变世界。

叙述码农和程序员的不同之处相关推荐

  1. 码农与程序员的惊人差别

    不好意思,又标题党了,但内容是纯干货,以下入正题. 码农这个称呼很早就有了,不过我一直鲜有听到我周围的同事,朋友自称码农. 我一直以为,码农就是程序员自黑时候的戏称,是程序员群体的幽默. 写公众号后, ...

  2. 码农和程序员的几个重要区别!

    如果一个企业老板大声嚷嚷说,"我要招个程序员",那么十之八九指的是"码农"--一种纯粹为了钱而写代码的技术人员.这其实是一种非常狭隘和错误的做法,原因么,且听我 ...

  3. 码农和程序员等的差别

    码农--基本代码编写没问题,但代码并不漂亮,简洁度也不高. 黑客--通常是低级别的人,但熟练深入细致地了解某些特定技术. 程序员--可以独立编写代码并了解算法. 开发者--最好的通才,可以使用很多不同 ...

  4. 初学者内心最慌的问题:适不适合做一名码农(程序员)??

    什么样的人才适合做一名程序员.现在无论是线上还线下,都有越来越多的教育机构,速成程序员,我不否认里面可能有还不错的课,不可否认,在当今社会程序员算是一个中高收入的职业,所以越来越多的人想去当程序员,可 ...

  5. 码农、程序员、开发者

    我上周写过两篇文章: <啥叫工程?啥叫工程师?> <工程师和码农> 没有工程怎么会有工程师,没有软件工程怎么会有软件工程师.所以我说软件工程里含有组织岗位建制与分工.项目管理, ...

  6. “码农”一词是怎么来的?为什么中国程序员会被码农?程序员和农民有什么关联?

    原创: 思齐大神 来源:蚁开源社区 很多同学会问,IT行业在中国并不是特别差的行业,而程序员的工资也并不低,但为什么中国的程序员总被称作码农或者说是苦逼的程序员?中国的程序员生活和欧美的有什么不一样? ...

  7. 还在埋头干活?一个老码农给程序员的几个忠告

    开门见山,今天这篇文章是给程序员的几个忠告.好吧,我膨胀了,不是大 V 居然也好意思给别人忠告. 即使你不是程序员,看看也有好处. 1. 坚持学习,高效的学习 从去年下半年开始,大大小小的公司开始接二 ...

  8. 了解c语言程序员(工程师)岗位需要掌握哪些能力?_码畜,码农,码皇,程序员有什么区别?...

    这里是开发者交流聚集地,欢迎加入我们一起技术分享,互相交流! 技术交流群:关注本公众号,点击菜单栏即可获取 很多年轻的程序员可能不太了解,虽然大家看着都是写代码的,但从搬砖的码畜到码农到码皇之路还是挺 ...

  9. 码畜,码农,码皇,程序员有什么区别?

    很多年轻的程序员可能不太了解,虽然大家看着都是写代码的,但从搬砖的码畜到码农到码皇之路还是挺长远的,后面还隔着很多个程序员和工程师. 码畜基本就是高校的大量实习生,工资低,干的活基础,还愿意加班... ...

  10. 重磅!革命级AI代码补全工具,这款撸码利器让程序员界沸腾了!

    我们平时写代码的时候,多少都会依赖编辑器的代码补全功能,敲几个字母就能补全一个词.可是这么多年过去了,语言升级了很多次,而代码提示却没有升级,还是只能限定在一个词,毫无意义地按照字典表顺序排列,这对于 ...

最新文章

  1. 后端架构设计,如何扛住100亿次请求?
  2. 简述冯诺依曼工作原理_深入浅出讲解计算机原理
  3. 你真的会玩SQL吗?内连接、外连接
  4. python3 匹配空格 正则_玩转正则表达式
  5. plsql中文乱码问题(显示问号)
  6. android 9.0 https 适配,如何适配 Android 9.0? 在 Android 9.0 上发生 SSL handshake timed out 异常怎么解决...
  7. python程序打包exe
  8. MATLAB 写入 txt
  9. 【服务器】服务器运维必备软件;服务器安装环境、运维教程
  10. 软件测试个人绩效模板,测试工程师kpi模板.doc
  11. 西门子PLC的常见的通讯方式
  12. 在Chrome谷歌浏览器中使用H5地理位置API
  13. Day 2: 数据类型的使用,字符编码
  14. MLX90614使用和组装的说明
  15. 实战攻防之紫队视角下的实战攻防演习组织
  16. 蔡英珠:向前一步,跨越ICT“戈壁”
  17. python数据库-3
  18. 记《浪潮之巅》《硅谷之谜》《智能时代》
  19. html使用的特殊符号lt; gt: amp;等 意义对照
  20. 机器翻译:征服巴别塔

热门文章

  1. 计算机操作系统之CPU架构和原理(二)
  2. java 无法加载主类
  3. java高级实训输出张三李四_假设某数据库表中有一个姓名字段,查找姓名为张三和李四的条件是...
  4. 25.HTTP协议和WEB服务器APACHE
  5. 远程连接的计算机的ip地址,怎么远程控制已知IP地址的电脑
  6. utc时间 单位换算_DataTime.Now.Ticks精确的时间单位[转]
  7. 第二章 AIR202_Lua_串口控制
  8. 如何制作你自己的电脑游戏
  9. 怎样在Edge浏览器中开启IE兼容模式
  10. ubuntu18.04中如何设置开机启动脚本,开机启动命令