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

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

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

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

[color=darkblue][size=medium][b]1. 太害怕学不会新的工具、语言和框架[/b][/size][/color]

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

[color=darkblue][size=medium][b]2. 直到特性“完成”的时候才会提交。(但永远都不会完成!)[/b][/size][/color]

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

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

[b][size=medium][color=darkblue]3. 只是“知其然”会很危险[/color][/size][/b]

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

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

[b][size=medium][color=darkblue]4. 分析瘫痪(Analysis paralysis)[/color][/size][/b]

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

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

[b][size=medium][color=darkblue]5. 没有对工具和开发过程投入[/color][/size][/b]

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

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

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

[b][size=medium][color=darkblue]6. 羞于请求帮助[/color][/size][/b]

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

[b][size=medium][color=darkblue]7. 不知道如何让其他程序员更容易使用你的代码[/color][/size][/b]

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

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

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

[b][color=darkblue][size=medium]8. 不知道如何阅读其他人的代码(或者不想读)[/size][/color][/b]

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

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

[b][size=medium][color=darkblue]9. 不能从最终用户的角度编码(你考虑的范围太狭窄)[/color][/size][/b]

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

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

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

[b][size=medium][color=darkblue]10. 无法判断任何编程任务的业务价值[/color][/size][/b]

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

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

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

Aaron在最后做出总结:如果你想要成为更好的程序员,那么就要从改变你看待代码以及编码的方式开始。你需要理解所编写的每行代码背后的业务成本;你需要从客户或者最终用户的角度来看待工作;你需要接受代码会比你在组织中存在的时间更长,所以要以其他开发者能够继承的方式来设计;最重要的,永远都不要害怕新的挑战,也不要害怕请求帮助,你无法独居一隅来提升工作效果,软件开发也是社会化的工作。
Git Worktree + Claude Code:多终端并发开发完全实战 深入讲解如何使用 Git Worktree 配合多终端 Claude Code 实现并发开发,通过实战案例展示如何在 Android 开发中提升 2-3 倍效率,彻底告别等待 AI 的问题。 阅读详情

相关推荐

在hyper-v管理器中修改WSL虚拟交换机后,打开wsl闪退

此次是因为修改了WSL虚拟交换机造成的wsl打不开或闪退,还有一种可能是关闭了hyper-v造成了wsl。

DN金猿的博客 1152

如何成为强大程序员

作者 侯伯薇 发布于 2013年2月8日 Aaron Stannard是新创公司MarkedUp的CEO,他最近花费大量时间雇佣、评估很多不同的程序员,并和他们一起协作。在这个过程中他发现并总结了十种程序员无法意识到自己潜力的原因,意在让更多程序员发掘出自己的潜力,从而成为强大程序员。 Aaron提到,他的公司中所使用的技术非常复杂,某些大型企业都很难掌握,所以对于想要加入团队的程序员来...

weixin_30295091的博客 271

鸿业市政道路9.0+R17 (破解).rar

鸿业市政道路9.0+R17 (破解).rar

职场生涯:程序员最害怕什么?看一看你中招没?

一、不称职的上级,无能力的同事 1、没有人喜欢跟他们认为不称职的人一起工作,没有人喜欢在没能力的人领导下工作。因为这种不称职和没能力会给程序员工作生活在很多方面带来巨大的痛苦折磨。 2、怕听到那些高薪低能的市场部的人走近的脚步声,嘴里嘟囔着一大堆抓不住重点的话,总是要求“这事很急,要尽快完成” 3、需要再一次重写整个系统…用另外一种语言….用另外一种技术/框架….要一次完成而不是分阶段(先替换一个模块,然后另一个)….因为有些高层领导认为他们的这种实现是最好的,其它的都不好,需求立即全部替掉。 ..

C语言C++学习俱乐部:765860056 666

阻碍程序员成长的五大原因

1、任何一个人,无论他的资格如何,都可以成为软件开发人员。2、大学教育没有对人起到任何帮助。3、开发人员不注重自己的知识更新。     如果你问一个开发人员,他最后所读的书,或者是如何保证自己的知识更新。往往无法得到确切的回答。没有人想提升自己或者多做点事情。很多人甚至都没有听说过《代码大全》这本书。4、每个人都想当经理。     工作到5年左右,就有机会成为项目组长。一旦成为

My Backup 701

我这位老程序员对时代危险和机遇的一点感悟

最近有些多愁善感,忧虑我自己作为一名程序员的发展前途,就发了一些感想的小作文,没想到C站程序员们的评论非常火热,我索性将连续几篇所忧所想的小作文整合一下,作为博文发表出来,方便小伙伴们阅览。

守护石大数据 3231

程序员的职业危机是什么?一个12年互联网人的4点思考

上周表弟打电话给我,他说对自己的职业发展感到很困惑,想让我开导一下,表弟是91年的,2014年二本毕业后,在一年制造业公司做工程质量相关工作,他说自己做得很不舒服,感觉工作量大且工资也低,自己也越来越迷茫,想进互联网行业当个程序员,但又考虑到自己 28了,学多久能行不好说,也不知道互联网行业、程序员职业会不会过几年就凉下来了,到时候遇到中年危机怎么办呢,他感觉到不知所措。 我给他说:“自改革开放...

IT-编程资讯 4875

如何成为强大程序员

http://kb.cnblogs.com/page/171286/ Aaron Stannard 是新创公司 MarkedUp 的CEO,他最近花费大量时间雇佣、评估很多不同的程序员,并和他们一起协作。在这个过程中他发现并总结了十种程序员无法意识到自己潜力的原因,意在让更多程序员发掘出自己的潜力,从而成为强大程序员。   Aaron 提到,他的公司中所使用的技术非常复杂,某些大型企业...

weixin_33708432的博客 440

AI是程序员的天敌还是救星?掌握这几点,你将成为“超级程序员

本文探讨了AI对程序员职业的深远影响。AI虽威胁初级程序员的简单重复工作,却为中高级程序员提供强大助力,催生"超级程序员"。AI已成为行业分水岭,将程序员分化为精英和被淘汰者。程序员必须变思维,主动拥抱AI,将其视为工具和生命线,从"写代码"向"运用AI实现目标"。唯有如此,才能在AI时代找到出路,实现个人崛起。

kaka0722ww的博客 1487

你为什么成为一名程序员

兄弟姐妹们,还记得自己成为一名程序员的初心吗?遥想公瑾当年,不,遥想我当年,似乎是“命中注定”走上这条路的。因为不在计划之内嘛,所以走了很多弯弯路。 路漫漫其修远兮,我们就来上下求索一下,权当是一次复盘吧。我先来说道说道自己在程序员这条路上的点点滴滴,也许能够给颓丧或者迷茫中的你一些启发和感悟。在人生的不同阶段里,我们都需要和过去的自己认真地说一声“拜拜”,然后才能思索出未来前进的方向。 01、...

沉默王二 7700

[]如何成为强大程序员

Aaron Stannard是新创公司MarkedUp的CEO,他最近花费大量时间雇佣、评估很多不同的程序员,并和他们一起协作。在这个过程中他发现并总结了十种程序员无法意识到自己潜力的原因,意在让更多程序员发掘出自己的潜力,从而成为强大程序员。 Aaron提到,他的公司中所使用的技术非常复杂,某些大型企业都很难掌握,所以对于想要加入团队的程序员来说,入门门槛非常高。因此,尽管他们非常...

weixin_30918415的博客 72

你是如何成为 Lisp 程序员的<>

自:http://www.byywee.com/page/M0/S267/267038.html 你是如何成为 Lisp 程序员的 Admin 2010年8月20日 名人名言:没有引发任何行动的思想都不是思想而是梦想。——马丁  你是如何成为 Lisp 程序员的  问题之:你是如何成为 Lisp 程序员的? 答:我成为 Lisp

我的一亩二分地 1089
上一篇: Reflections工具包
下一篇: 开发者的生活写照
guojch
博客等级 码龄18年 1粉丝 15原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值