GMTC北京站两周后开幕,58个议题全部上线,点击查看 了解详情
写点什么

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

2020 年 10 月 08 日

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

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


不管你是有 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:332424

评论

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

Redis 学习笔记 09:数据库

架构精进之路

redis 七日更 28天写作

数字人民币带来更好支付体验 没有网络时也能使用

CECBC区块链专委会

数字人民币

19年末我从外包辞职了,10000+小时后,走进字节跳动拿了offer

Java架构追梦

Java 架构 字节跳动 面试题 面试经历

【Http】- Http之状态码

双木之林

网络 HTTP

双仓合约量化交易系统开发搭建

薇電13242772558

区块链 数字货币

不是吧?阿里“百万级”性能优化小册居然能让系统运行得这么快

程序员小毕

Java MySQL 架构 性能优化 JVM

中金数据集团与腾讯云合力拓展信息安全、区块链业务领域

CECBC区块链专委会

区块链产业

一周信创舆情观察(1.11~1.17)

统小信uos

Spring 源码学习 16:单例 Bean 创建

程序员小航

Java spring 源码

华为云登顶HotpotQA多跳知识推理问答评测

华为云开发者社区

深度学习 华为 华为云

安卓开发视频教程!2021年Android常见面试题,附面试题答案

欢喜学安卓

android 程序员 面试 移动开发

数字货币交易所APP开发|数字货币交易所软件系统开发

开發I852946OIIO

系统开发

Spring Boot 中集成Redis

武哥聊编程

Java redis springboot SpringBoot 2 28天写作

亲历者说 | 完整记录一年多考拉海购的云原生之路

阿里巴巴云原生

阿里云 容器 微服务 云原生 dubbo

HTML(五)——建立表格

程序员的时光

程序员 前端 七日更 28天写作

我凭借这份pdf,最终拿到了阿里,腾讯,京东等八家大厂offer

Crud的程序员

Java 程序员 架构

DBA 的效率加速器——CloudQuery v1.3.2 上线!

CloudQuery社区

数据库 运维 开发日志 dba 数据库管理工具

python+requests接口测试基础

测试人生路

软件测试

Nginx实现在局域网内真正的ip_hash负载均衡​

会飞的猪

区块链高水平专业人才稀缺成发展掣肘

CECBC区块链专委会

区块链人才

Soul网关源码阅读(十)自定义简单插件编写

Java 源码阅读 网关

android高级开发面试!面试中Handler这些必备知识点你都知道吗?面试真题解析

欢喜学安卓

android 程序员 面试 移动开发

场外OTC交易系统开发|场外OTC交易软件APP开发

开發I852946OIIO

系统开发

1121212

熙羽1

阿里用5大核心技术+10大高级框架+200个经典案例全面解答了并发网络编程

996小迁

编程 架构 面试 笔记 亿级流量

Git神作!2021年Java春招高级面试指南,吃透至少P7

比伯

Java 编程 架构 面试 计算机

即将爆火的Java突击手册,全面详细对标P7岗,github已标星81.6k

Crud的程序员

Java 架构

Seata RPC 模块的重构之路

阿里巴巴云原生

阿里云 开源 云原生 RPC seata

MySQL锁机制

程序员小毕

MySQL sql 线程 优化

TARS 染色日志|收集记录特定日志

TARS基金会

微服务 运维 日志 日志分析 TARS

《认识产品经理》课后总结

DB

产品经理训练营

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