GMTC深圳站本周日开幕,14大专题全部上线,完整日程>> 了解详情
写点什么

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

  • 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


2020 年 10 月 08 日 13:332507

评论

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

Windows Sandbox

Dare Devor

Sandbox Virtualization

架构师课程第七周 作业

杉松壁

web 性能压测工具类

jason

多问为什么

声远

技术 沟通 软件开发流程

架构师训练营 - 第 6 周命题作业

红了哟

Vagrant 创建多台主机

FeiLong

vagrant 虚拟机

week7

不在调上

思想无语言边界:以cglib介绍AOP在java的一个实现方式

八苦-瞿昙

随笔 随笔杂谈 aop

架构师训练营第七周学习总结

张明森

运行 client-go 测试用例.md

FeiLong

Kubernetes

我关闭了微信朋友圈广告!

诸葛小猿

广告 微信朋友圈 关闭

LeetCode 题解:1051. 高度检查器,JavaScript,先排序再比较,详细注释

Lee Chen

LeetCode 前端进阶训练营

谈谈你是如何理解JS异步编程的,EventLoop、消息队列都是做什么 ,什么是宏任务,什么是微任务?

GKNick

redis系列之——事物及乐观锁

诸葛小猿

redis 乐观锁 事物 原子性 隔离性

可读代码编写炸鸡八 - 变量兜兜转转像是一场梦

多选参数

代码 代码组织 代码规范 可读代码编写 可读代码

从推特被黑看安全木桶效应

石君

安全设计 安全事件

关于性能优化的总结

罗亮

盘点本周区块链国内大事件

Geek_987812

解决火狐新窗口打开网页被拦截问题

Lee Chen

前端进阶训练营

看动画学算法之:排序-归并排序

程序那些事

Java 算法 排序 归并排序

生活不止眼前的代码,老程序员现摘现炒苦瓜吃苦的周末时光

陆陆通通

程序员 美食 舌尖

CECBC区块链专委会副主任吴桐受邀成为伏羲智库兼职研究员

Geek_987812

区块链技术 吴桐 商务部CECBC 伏羲智库 政务链

Go: 通过例子学习 Map 的设计 — Part I

陈思敏捷

map Go 语言

道德的神

多选参数

故事

ARTS打卡-07

Geek_yansheng25

架构师训练营 - 第 6 周学习总结

红了哟

第七章作业

小胖子

Java中生成随机数的不同方法

wjchenge

Golang实现结构体数组按多字段排序

卓丁

多字段排序 结构体多字段排序 Go 语言

计算机网络基础(六)---网络层-网络地址转换NAT技术

书旅

laravel 计算机网络 网络协议 计算机基础 NAT

架构师训练营第七周作业

张明森

2021星空论坛:破局创新,论道数字化转型

2021星空论坛:破局创新,论道数字化转型

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