`
guojch
  • 浏览: 70272 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转:如何成为强大的程序员?

阅读更多
转自: http://www.infoq.com/cn/news/2013/02/howto-strong-developer

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

相关推荐

    ArcGIS教程:什么是 Python?

    针对有编程经验的用户,"Python教程"和"针对程序员的Python"都是很好的学习资源,它们会帮助你快速掌握Python语法和语义,并将其他语言的知识转化为Python技能。 在ArcGIS中使用Python,不仅可以编写脚本来自动化...

    转职成为TypeScript程序员的参考手册

    ### 转职成为TypeScript程序员的参考手册 #### 前言与背景介绍 TypeScript作为一种由微软开发并维护的开源编程语言,其设计初衷在于弥补JavaScript在大型项目开发中的不足,尤其针对的是那些希望利用面向对象编程...

    Android开发关键技术之旅:Java程序员快速学习通道

    根据提供的文件信息,本文将围绕“Android开发关键技术之旅:Java程序员快速学习通道”这一主题进行深入探讨,并结合Java编程背景,解析与Android开发相关的重点技术和实践路径。 ### Android开发的关键技术概览 #...

    C++ 编程惯用法 高级程序员常用方法和技巧

    理解这些概念并熟练运用是成为高级C++程序员的基础。封装通过将数据和操作这些数据的方法组合在一起,提高了代码的安全性和可维护性;继承允许我们创建一个类作为另一个类的扩展,实现代码重用;多态则允许不同类型...

    如何成为一个合格的C++程序员

    3. **模板与泛型编程**:模板是C++的一个强大特性,它允许程序员编写通用代码,支持不同类型的数据。掌握模板不仅可以提高代码复用性,还能提升程序性能。 4. **标准库**:深入理解STL(标准模板库),包括容器(如...

    C++STL程序员开发指南 pdf

    这份《C++ STL程序员开发指南》可能是你探索这一强大工具箱的宝贵资源。 STL的核心组成部分包括: 1. 容器:STL提供了多种类型的容器,如vector(动态数组)、list(双向链表)、deque(双端队列)、set(红黑树...

    程序员专用表白特效

    在IT行业中,编程不仅仅是解决技术问题,它也可以成为表达情感的一种独特方式。"程序员专用表白特效"就是一个很好的例子,利用代码和技术实现浪漫的表白场景,为爱增添科技色彩。这个资源包提供了华丽的表白特效,...

    当程序员的第一件事!!初学者看过来

    在踏入程序员这一职业路径之初,了解“当程序员的第一件事”对于每位初学者来说至关重要。本文将围绕这个主题展开,深入探讨对于编程新手而言至...希望每位初学者都能在这条道路上越走越远,最终成为一名优秀的程序员。

    程序员必读(java/.net)

    继承使代码复用成为可能;多态则增强了程序的灵活性。 3. **JVM**:Java虚拟机(JVM)是Java程序运行的基础,它负责解释执行字节码,实现跨平台运行。JVM有其自身的内存模型,包括堆、栈、方法区等。 4. **集合...

    程序员二进制计算器 v1.36

    专为程序员打造的计算器,二进制运算强大,支持64位。 采用表达式驱动,输入表达式便即时显示结果,抛弃传统计算器繁琐的按钮,表达式可粘贴或回调重复使用。 支持二进制串直接运算,如0b1101 & 0b0011= 0b0001。 ...

    批量重命名工具(程序员必备)

    总之,批量重命名工具是程序员提升工作效率的重要助手,而Advanced Renamer Portable凭借其强大的功能和易用性,成为了一个值得信赖的选择。无论是简单的文本替换还是复杂的正则表达式应用,它都能胜任,帮助程序员...

    电子书(如何成为一名优秀的JSP程序员)

    **电子书介绍** 《如何成为一名优秀的JSP...通过阅读《如何成为一名优秀的JSP程序员》这本书,读者将能够全面理解和应用JSP技术,进而在实际项目中发挥出其强大的功能,为成为一名顶尖的JSP程序员奠定坚实的基础。

    BlueJay:程序员计算器

    通过这些特性,`BlueJay` 成为了一个强大而全面的工具,能够满足程序员在日常工作中遇到的各种计算需求。无论是简单的数学问题还是复杂的编程挑战,`BlueJay` 都能轻松应对,极大地提升了程序员的工作效率。

    《程序员》杂志

    《程序员》杂志是一本专注于IT行业的专业出版物,旨在为程序员和相关技术从业者提供最新的编程技术和行业动态。这本杂志的2012年第8期很可能涵盖了当年热门的编程语言、开发工具、软件工程实践以及新兴技术趋势。...

    单片机程序员常用工具

    与系统自带的记事本相比,Notepad++提供了更多的定制选项和增强功能,使其成为程序员的首选文本编辑器。 "sscom5.13.1.exe"是一个串口通信工具,通常用于单片机开发过程中的数据收发测试。通过SSCOM,程序员可以...

    java程序员必备技能(为java学习引航)

    熟悉Java语言的基础语法结构,如变量声明、数据类型、流程控制语句(if、while、for循环等)、函数定义与调用、类与对象的定义等,都是成为一名合格Java程序员的基础。 #### 二、命令掌握 熟悉JDK自带的一系列命令...

    C++类各种类型转换_数据类型的相互转换_

    总的来说,C++的数据类型转换是一门深奥的学问,熟练掌握各种转换方法是成为一名合格的C++程序员的关键。在编写程序时,应始终注意类型安全,避免不必要的类型转换,特别是那些可能导致数据丢失或错误的转换。通过...

    UNIX程序员手册

    《UNIX程序员手册》是UNIX操作系统开发和编程的重要参考资料,它为程序员提供了系统调用、库函数、工具程序以及shell命令的详细信息。...通过深入阅读和实践,你可以成为一名熟练的UNIX/Linux程序员。

    如何成为一个优秀的JSP 程序员下载

    标题“如何成为一个优秀的JSP程序员下载”暗示了我们即将探讨的是关于JSP编程技术的提升和专业发展路径。描述中的重复内容并没有提供额外信息,但可以理解为强调成为优秀JSP程序员的重要性。 **标签解析** 1. **...

Global site tag (gtag.js) - Google Analytics