`

如何成为强大的程序员

 
阅读更多
Aaron Stannard 是新创公司 MarkedUp 的CEO,他最近花费大量时间雇佣、评估很多不同的程序员,并和他们一起协作。在这个过程中他发现并总结了十种程序员无法意识到自己潜力的原因,意在让更多程序员发掘出自己的潜力,从而成为强大的程序员。

  Aaron 提到,他的公司中所使用的技术非常复杂,某些大型企业都很难掌握,所以对于想要加入团队的程序员来说,入门门槛非常高。因此,尽管他们非常仔细地雇佣新人,但还是很难找到足够天才的程序员。于是,他总结出十种阻碍程序员职业生涯发展的行为,并据此来帮助想要提升自身的平凡的程序员们。

  1. 太害怕学不会新的工具、语言和框架

  一般的程序员会墨守他们最喜欢的工具,而不希望学习新的,因为他们认为,离开了那些语言和工具,多年的经验就会付诸东流。而强大的程序员会拥抱那些挑战和机会,积极地学习新的工作方式。

  2. 直到特性“完成”的时候才会提交。(但永远都不会完成!)

  他在 MarkedUp 公司中把这种行为叫做“囤积提交(commit hoarding)”。有些程序员没有足够的信心来承受团队中其他成员的批评和审查,因此会把自己的工作藏起来,直到“完成”状态才提交。

  这种开发者会损害团队中其他人员的生产力,因为团队看不到他每天的成果,而且他也不会在正常开发的过程中寻求帮助,这样就会造成很多“最后一分钟”的缺陷,从而让交付延迟。而强大的程序员会知道,代码并不是他们自己,因此会把代码经常自信地呈现在其他团队成员的眼前,获得批评和建议。

  3. 只是“知其然”会很危险

  在这里 Aaron 举了微软最近在 C# 5.0中引入的async和await关键字 为例,这两个关键字会让创建和管理异步调用变得很容易,但是也会造成上下文切换、对共享资源进行多线程访问的成本,仅仅对此有基本了解的程序员会盲目地使用这些特性,把所有I/O调用都封装成C#中的Task对象,这会创建出危险的、不可预测的而且非常难以测试的代码。

  好的开发者不仅“知其然”,而且会了解为什么这么做以及应该在什么样的条件下使用。

  4. 分析瘫痪(Analysis paralysis)

  分析瘫痪是指在程序开发初期进行系统分析,常因为太过执着于控制所有可能的变化和意外,而造成大量时间的浪费,裹足不前。这是一种很经典的问题,会影响很多一般的程序员。它通常是由过度分析造成的,但是 Aaron 认为其根本原因在于不敢做出坏的决定。一般的程序员会担心犯错,只想一次成功。

  而强大的程序员不会害怕,他们会编写很烂的代码,对其进行单元测试,如果认为无法达到目的,就会在45分钟之内把它抛弃。强大的程序员会积极地限制用来研究的时间,因为他们知道那是个陷阱——看起来是有效的,但经常都无效。

  5. 没有对工具和开发过程投入

  如果你想要成为天才程序员,那么就需要投入时间提升技能和知识,而将你和普通的代码工人区分开来的是快速编写出生产级别代码的能力。你可以同时拥有好的代码和速度,但是你需要先对你用于构建的过程投入。

  一般的程序员不会对工具、过程和环境投入,只会使用大量的时间学习新的语言特性和 API 如何工作,但那并不会改变什么。

  通常,你作为程序员所能够做出的最大改进并不是专注于你所编写的代码,而是优化你编写代码的过程。

  6. 羞于请求帮助

  一般的程序员羞于或者不想让人知道自己不懂,所以他们装作什么都知道,但这样就有可能提交某种非常可怕的代码到库中。说“我不知道怎么做。”没什么错,强大的程序员知道这一点,所以当被问题难住的时候就会请求帮助。

  7. 不知道如何让其他程序员更容易使用你的代码

  在所有技术团队中,工作很重要的一部分就是人员的并行(human parallelism),也就是多个人能够同时对同一代码库工作的能力。但是对于团队来说,能够异步工作也很重要,当你不在的时候我可以修改你的代码,反之亦然。

  一般的开发者并不这么认为,他们会开始对一项任务编写代码,认为他们会永远拥有这段代码。而强大的开发者会知道技术债务的说法,从而试图通过设计代码来对其限制,让它尽可能可维护和自解释。

  编写可读的代码需要程序员改变他们的看法——你的代码要比你在组织中存在的时间长。

  8. 不知道如何阅读其他人的代码(或者不想读)

  当一位一般程序员看到用他所不熟悉的语言或框架编写的代码库时,就想立刻重写,而不考虑业务价值或者推向市场的时间。而强大的程序员会接受这样的观点,重写所导致的业务成本通常是不可接受的,所以应该避免这种行为。他们会试图坐在计算机前,理解、学习然后修改现有的代码。

  阅读代码要比编写代码还难,但是强大的程序员会投入时间来学习如何超越。

  9. 不能从最终用户的角度编码(你考虑的范围太狭窄)

  有句话说得好:作为程序员,你的工作不是解决技术问题,你之所以解决技术问题,是为了解决业务问题。

  一般的程序员只会陷在技术问题之中,而不知道最初是为什么要解决这个问题。更严重的是,一般程序员无法从头开始创建出具有业务价值的东西。当被要求基于简单的用户设计新特性的时候,他们会死板地、照着字面对故事或者说明书做出解释,这样交付的产品用户根本无法使用。因为他们不会考虑相关的用例;不会考虑最终用户的体验;并且在做面向用户的内容时,设计都会很笨重。这导致他们无法编写业务应用,只能做产品。

  好的程序员会从最终用户的角度来看他们的代码。我怎样才能让它更轻松地解决用户的问题呢?故事的文字内容之外有哪些方面会让这个特性给用户带来更多收益呢?

  10. 无法判断任何编程任务的业务价值

  这个问题和上一个是相关的,很多技术上很强的程序员之所以无法意识到自己的潜力,是因为他们不会停下来,从业务或者组织本身的角度去看一下他们的工作。

  强大的程序员能够自我管理,对选择如何投入时间做出很好的业务决定,他们会问这样的问题:这是我现在应该做的最有价值的事情吗?我应该为之投入多少时间?离交付日期有两个星期,我现在能做什么,从而更容易满足那个日期呢?

  一般的程序员不会,他们只会拿着说明书,然后盲目地实现,直到结束,不关心他们的工作和公司的业务目标有什么关系,以及对其他团队和业务组会产生什么样的影响。这样,他们就会在业务价值很低的技术任务上浪费大量开发时间。

  Aaron 在最后做出总结:如果你想要成为更好的程序员,那么就要从改变你看待代码以及编码的方式开始。你需要理解所编写的每行代码背后的业务成本;你需要从客户或者最终用户的角度来看待工作;你需要接受代码会比你在组织中存在的时间更长,所以要以其他开发者能够继承的方式来设计;最重要的,永远都不要害怕新的挑战,也不要害怕请求帮助,你无法独居一隅来提升工作效果,软件开发也是社会化的工作。
分享到:
评论

相关推荐

    如何成为程序员如何成为一名C++程序员

    如果你对成为一名C++程序员感兴趣,下面是一条详细的路径指南,帮助你实现这一目标。 首先,你需要掌握基础编程概念。编程不仅仅是关于C++,它涉及到逻辑思维和问题解决能力。学习基本的编程概念,如变量、数据类型...

    参赛项目,创意网站推荐

    在追求成为强大的程序员的道路上,充分利用网络资源是至关重要的。这些资源不仅能提升你的技术技能,还能激发你的创新思维和设计灵感。以下是一些在大赛中常用的技术...记住,不断学习和实践是成为强大程序员的关键。

    gmate, 插件集和改进使Gedit成为强大的程序员文本编辑器.zip

    gmate, 插件集和改进使Gedit成为强大的程序员文本编辑器 GMate这里软件包包含一些gedit改进,使它的更类似于 TextMate 。 软件包包含代码 Fragment 。插件和rails相关文件的自动注册。如果你在Gmate中包含的插件有...

    成为优秀程序员的 101 个技巧

    "成为优秀程序员的 101 个技巧" 本资源为程序员提供了 101 条实用的技巧,从搜索问题答案到编写有用的注释,从承诺不足到超额交付,从寻找导师到成为导师,从适当命名变量到删除不用的代码,从学习阅读代码到建立...

    如何成为一名Java初级程序员

    ### 如何成为一名Java初级程序员:全面解析与学习路径 在当今快速发展的信息技术领域,Java作为一门强大且广泛应用的编程语言,对于希望踏入软件开发领域的初学者来说,掌握Java成为了一项重要的技能。本文将深入...

    建一支强大的小团队 小小程序员的痛处

    - **培养程序员的综合能力**:除了基本的编程技能外,还应注重培养程序员的需求分析、测试、运维等方面的能力,使其成为真正的全栈工程师。 - **推行敏捷开发**:采用敏捷开发方法论,如Scrum或Kanban,提高团队的...

    程序员教程—大家可以看看 想成为程序员,需要哪些知识

    本文将深入探讨成为一名程序员所需要掌握的基础知识,以及如何通过PDG格式的学习资料来提升你的技能。 首先,编程语言是程序员的基石。你需要至少熟悉一到两种编程语言,例如Java、Python、C++或JavaScript。Java是...

    怎样成为游戏开发程序员

    ### 怎样成为游戏开发程序员 游戏开发是一个充满创意和技术挑战的领域,它不仅需要扎实的编程基础,还要求开发者具备良好的艺术感觉、创新思维以及团队合作能力。想要成为一名游戏开发程序员,可以从以下几个方面...

    从程序员到行业专家

    这是因为随着职业的晋升,如成为项目经理,不仅需要有扎实的研发基础,还需要强大的项目管理能力。一个成功的项目经理不仅仅要处理计算机和程序,更要能够制定正确的管理方针,为企业提供适合的计算机辅助技术,以...

    C程序员成长攻略

    它之所以能够成为众多程序员首选的语言,是因为C语言不仅功能强大,而且在计算机科学领域有着极其重要的地位。C语言的特点和魅力吸引了大量的编程爱好者和专业人士,它成为了许多程序员职业生涯中不可或缺的一部分。...

    程序员技巧收集助手-程序员的好帮手

    【程序员技巧收集助手】是一款专为程序员设计的实用工具,旨在帮助他们更有效地积累和管理在编程工作中遇到的各种技巧和经验...通过合理利用这款工具,程序员可以更好地管理自己的技能库,成为更高效、更专业的开发者。

    程序员必备文本编辑器

    总的来说,EditPlus凭借其强大的功能和良好的用户友好性,成为了程序员们钟爱的文本编辑器之一。无论是初学者还是经验丰富的开发者,都能从中找到适合自己的使用方式,提高编程工作的效率和舒适度。

    程序员记事本

    总的来说,《程序员记事本》是一个强大的辅助工具,它不仅提供了一个安全的存储空间,让程序员可以安心存放他们的代码和思考,而且通过其强大的组织和检索能力,极大地提高了工作效率。无论是在日常开发还是项目协作...

    程序员表白专用程序

    "程序员表白专用程序"就是一个这样的创意项目,它利用JavaScript(简称JS)这门强大的前端编程语言来为程序员们提供一个独特的方式来向心仪的对象表白。JavaScript是Web开发的基础,广泛应用于网页交互、浏览器扩展...

    程序员高级程序员 程序设计辅助理解软件

    这个压缩包可能包含了关于以上知识点的教程、案例分析、习题集等,通过系统学习,可以帮助程序员深化对软件设计的理解,提升编程技能,为成为高级程序员或软件设计师打下坚实基础。同时,对于准备参加软考的人员来说...

    程序员的鄙视李安

    - **Java**则以其跨平台性和稳定性成为企业级应用的首选。 - **JavaScript**作为前端开发的必备技能,随着Node.js的流行也在后端开发中占有一席之地。 ### 二、编程范式 #### 函数式编程 vs 面向对象编程 在部分...

    如何成为优秀的JSP 程序员

    要成为一名优秀的JSP程序员,不仅需要掌握基本的语法和概念,更需要对整个Web开发流程有深入的理解。以下将详细阐述成为优秀JSP程序员所需的知识点和技能。 【基础篇】 1. **JSP基础知识**:理解JSP的基本结构,...

    一个优秀的程序员的十个习惯

    成为优秀的程序员不仅在于编写高质量的代码,更重要的是养成一系列有益的习惯,这些习惯能够提升个人技能,促进团队协作,以及保持对技术的敏锐度。以下是对标题和描述中提到的十个程序员习惯的详细解释: 1. **...

    程序员C++提高编程PDF.pdf

    在C++编程语言中,模板是一种强大的特性,它允许程序员编写与数据类型无关的代码,从而达到代码复用的目的。模板可以应用于函数和类,分别称为函数模板和类模板。在黑马程序员的《程序员C++提高编程PDF》讲义中,...

    unix程序员手册 unix程序员手册

    手册将详细介绍这些命令的用法,包括它们的参数和选项,以及如何通过管道(pipe)和重定向(redirect)来组合命令,实现更强大的功能。 Unix的编程接口,尤其是C语言接口,是Unix系统的核心部分。手册会涵盖标准...

Global site tag (gtag.js) - Google Analytics