【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

菜鸟程序员如何用三个月将“前浪”拍在沙滩上?

  • 2020-10-08
  • 本文字数:2742 字

    阅读完需:约 9 分钟

菜鸟程序员如何用三个月将“前浪”拍在沙滩上?

编程这件事听起来很复杂,但在大多数情况下,编程过程既轻松又有趣。当然,也并不是有经验的工程师编写的代码就一定优于“菜鸟”工程师。那么,作为一名开发者,如何能让自己从众人中脱颖而出?本文也许会给你一些启发。


不管你是有 20 年的实际工作经验的资深开发者,还是刚刚进入科技行业,没有实习经验的“菜鸟”,这都不重要。因为当涉及到效率、生产力和自身的编程天赋时,多年来积累的智慧和经验可能起不到多大的作用,所以单纯用资历来定义一名开发者是极其狭隘的。


我刚进入 Salesforce 开发顾问行业时,基本上不知道如何在这个平台上实现解决方案和集成等问题。而现在,我却正在创造公司记录,被认为是行业中最有前途的开发人员之一,甚至经常有猎头和雇主过来挖我,我几乎完全靠自己的能力来设计解决方案,并且没有一次失败过。


“我招聘了比你更有经验的开发人员,但与我招聘的其他任何人相比,你做得更快,也做得更多。”

——CEO 对我说


在进入这个行业后,我只用了三个月的时间就超越了同行。在最初的三个月里,我几乎都在坚持不懈地训练和学习。因为我深知自己在很多方面都存在不足:


  • 我不是天才或神童。

  • 我不是一个有天赋的开发者。

  • 我不是对编程无所不知。

  • 我不能凭直觉在一瞬间找到解决办法。

  • 我还有很多东西要学。


尽管有着上述诸多困扰,但也阻挡不了我成为一名合格的开发者。那么,是什么让我脱颖而出,并最终以其他更有经验的开发人员都无法跟上的速度完成编程任务和项目?

尽早建立最佳编码实践是第一要务

回顾我为获得计算机科学学位所花的全部时间,我可能会认为自己不是一名合格的程序员,几乎不知道如何解决实际的编程问题。


我竭尽全力地解决分配给我的编程项目——这些项目我现在可以在一夜之间轻松地完成。但彼时,理解实现一个解决方案所需要的逻辑,甚至理解完成一项任务所需要的面向对象原则,对我来说都非常困难。


如果没有去谷歌搜索解决办法,我估计我是无法继续攻读计算机学位的,而是会去攻读哲学或工商管理学位。


但突然有个时刻,我开始对我所具备的技术能力有所改观。我开始观察编程语言的实际工作方式,具体设计原则的使用和实现方式,以及设计代码时要避免的事情和要采用的最佳实践,我开始感觉到我处理问题的方式的转变。


我开始用所学到的原则来设计和思考我的解决方案,这让我以一种更有目的性和方向性的方式来组织我的想法。


从编程的角度来说,我读过的对我改变最大的书是 Robert C. Martin 的《代码整洁之道》,它强化了这些原则,并使它们深入我的内心。


我命名函数的方式、我简化代码的方式以及我构造类的方式有效地保证了我的开发方式的合理性。它让我真正地退后一步,思考我在写什么,我是如何组织代码的——时刻注意我写的东西是否合乎逻辑,是否可读。


在满足需求时,我把注意力更多地放在可读性、设计和简单性上,根据我的经验,这样的结果通常是,代码生成速度快、面向未来、可重用且易于扩展。


也就是说,作为一名程序员,你应该了解最佳编码实践、所使用的语言或框架的限制、SOLID 原则、设计模式和敏捷实践。


仅仅编写有效的代码是不够的,而是要编写有效的、容易理解的、模块化的、能够经受时间考验的代码。这就需要更多的思考,但总的来说,这让你可以不断地基于你创建的应用程序进行构建,从而创造更大的价值。

将编程看作是艺术创作的工具

编程常常被视为一种神技——几乎就像一门外语,很难翻译,只有受过良好训练的人才能优雅地用它写作。然而,这种观点与事实相去甚远。从编程中抽离,重构你对编程的看法,而不仅仅把它看作是一门技术工艺。


代码是一种工具,你可以用它来推动自己实现最终目标和你设计的解决方案。我审视代码的方式与画家审视画笔、技工审视扳手、木匠审视锤子的方式相同。


伟大的艺术家与常人的区别是他们运用工具的能力,这些工具与他们的思想和想象力相结合。当你茫然地盯着空白的 IDE 试图编写第一行代码时,请记住这一点。


重要的是,我们要了解如何使用这个工具。对我来说,真正有效的是做一些事情,不断提高我使用这个工具的技能,而不是简单地理解代码的语法和理论术语。我们要重点考虑下我能做什么,我能完成什么,我应该走什么路,以及我想要达到的目标,这些会为我以代码为工具谨慎探索最终解决方案的方式带来启发。


在这一点上,唯一限制我的是我个人的想法和能力,在于我是否能够找出不同的方法使用代码来处理和解决我所拥有的特定的解决方案。


这就是为什么我不会浪费时间去学习一种语言的所有语法,也不会无休止地阅读文档,试图记住一种语言或框架必须提供的所有内容。我发现,最大的价值在于,根据测试原则、设计规则和理论,理解构建和设计代码的不同方法。

我可能不是什么都懂,但我什么都可以学

这也是为什么我不浪费时间去浏览和记忆文档,不看学习编程语言的综合教程,不无休无止学习的另一个原因。


如果我真的有什么超能力的话,那就是快速学习并立即将所学应用到我所做的事情上的能力。是的,我确实会失败。而且失败了许多次。但经常失败是我的学习方式之一,失败可以强化学习,直到我完全理解一个主题。


通常,我不需在脑子里准备一堆技术和初级信息,因为我可以通过我能做的大量研究和我过去处理类似问题以及失败时积累的经验来推动我的编程。


我根据需要学习。这样,我就不会浪费大量的时间,用具体的细节和方法来填满我的脑袋。你处理的每一项任务都取决于你想要达到的目标。


如果有什么事情,我就会问谷歌搜索引擎,问题直指我要立即解决的难题。如果我不能通过谷歌搜索找到我需要的所有东西,我就会向我的 CEO 提出一些问题,设法解决这些更复杂的问题。然后,我会调整我发现的信息,以满足我当前的需求。我不会因为不知道解决办法而放弃。相反,我尽我所能去弄清楚我认为可能的事情。


秉持这种思维模式和方法,我将代码插入我所理解的特定设计原则,并将代码作为工具来设法实现我的解决方案。


我不是什么都知道,我也不想什么都知道。编程令人兴奋的一点是能够不断地学习和拥有创造性思维,当你尝试学习一种权威性的方法去做某件事,你会将其看成唯一的方式或方法,可以想象,那会大大阻碍你作为一名程序员的想象力和潜力。

结语

我坚信,任何人——无论其技能、天赋或经验如何——都有能力成为独一无二的伟大程序员。


你真正需要做的是,为了构建解决方案而完成思维和方法上的转变,并在整个职业生涯中保持绝对的谦逊。谦逊会让你保持初学者的心态,充满好奇与渴望,不断学习和适应日新月异的编程环境。作为程序员,我们在生活中表现出了不断学习的精神,打破了以前认为不可能的障碍。如果你没有这种精神,那么恐怕未来你的技术水平,也不会有太大的提高。


原文链接:


https://medium.com/better-programming/how-i-outperformed-more-experienced-developers-as-a-junior-developer-and-how-you-can-too-19bc6206fa68


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2020-10-08 13:332839

评论

发布
暂无评论
发现更多内容

2022年10月中国汽车智能网联月度观察

易观分析

汽车 智能网联

KubeEdge云原生边缘计算公开课首发

华为云开发者联盟

云原生 后端 华为云 企业号十月 PK 榜

活动预告 | 2022 SACC 中国系统架构师大会

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

Linux三剑客grep、sed、awk以及正则表达式

A-刘晨阳

Linux 运维 11月月更 三剑客

OpenMLDB BUG 悬赏令

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

干货收藏|Clickhouse 常见问题及解决方案汇总

云智慧AIOps社区

MySQL 数据库 Clickhouse Data 故障处理

大专学历参加大数据培训,学费多少?

小谷哥

Linux常用命令

我是一个茶壶

Linux 命令 11月月更

Linux进程管理

A-刘晨阳

Linux 运维 进程 11月月更

深度剖析「圈组」关系系统设计 | 「圈组」技术系列文章

网易云信

音视频 即时通讯IM

服务器的正向代理与反向代理

我是一个茶壶

服务器 正向代理与反向代理 11月月更

20款免费项目管理软件大盘点!你用过几款?

优秀

项目管理软件

企业如何正确使用低代码转型升级

力软低代码开发平台

【网易云信】深度剖析「圈组」关系系统设计 | 「圈组」技术系列文章

网易智企

音视频 即时通讯IM

一文读懂加密资产板块的盈利潜力与投资机会

鳄鱼视界

小巨人,大能量!融云成功入选国家级专精特新“小巨人”企业

融云 RongCloud

企业 IM RTC

前端性能优化常问面试题-防抖节流

肥晨

防抖 节流 防抖节流 前端面试题 11月月更

ArrayList源码解析

Jeremy Lai

源码 ArrayList

OpenMLDB 新手宝典 开发者上手必读

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

量化合约对冲交易机器人app系统开发案例

开发微hkkf5566

软件测试面试真题 | 什么是PO设计模式?

测试人

软件测试 自动化测试 PO 测试开发 UI自动化测试

硬核技术助力提效,腾讯广告持续探索产学融合新航图

科技热闻

【面试题系列】CurrentHashMap的实现原理

颜淡慕潇

Java HashMap底层原理 面试题系列

国内低代码开发平台有哪些作用?

优秀

低代码开发平台

Linux磁盘管理

A-刘晨阳

Linux 运维 磁盘 磁盘分区 11月月更

OpenMLDB 线上引擎资源需求预估模型,助你快速预估资源消耗

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

G1 垃圾收集器深入剖析(图文超详解)

mikechen的互联网架构

Java 架构 面试 G1垃圾回收器 11月月更

类和动态内存分配

Maybe_fl

赋能千行百业数字化转型,OpenHarmony生态新成果即将亮相HDC2022

OpenHarmony开发者

Open Harmony

Java NIO关键概念之Buffer

老农小江

Java 源码解读 java nio

Go 容器之队列的几种实现方式

宇宙之一粟

队列 数据结构与算法 Go 语言 11月月更

菜鸟程序员如何用三个月将“前浪”拍在沙滩上?_编程语言_Zachary Minott_InfoQ精选文章