转:如何成为一个伟大的开发者

作为一个开发者,最关心的不外乎提高自己的软件开发水平。那要从何做起呢?积累技术知识(比如Node或者No-SQL)?死磕那些经典的算法问题(比如气泡排序或者网址缩短)?或者是打牢基础?

作为一个程序员你的价值不是由你知道什么来衡量的,而是由你能做出什么来衡量的。两者看起来相似,但有着天壤之别。你的价值在于如何将项目不断向前推进,并带领团队一起进步。15年的开发生涯中,我从未需要去实现一个气泡排序算法或是网址缩短程序。我要做的是花成千上万个小时来编写和重构账户管理工具、邮件系统,编辑套件、测试套件,整理业务逻辑,部署脚本、JS层,进行架构分析以及文档管理等等。这些才是真正有意义的东西,完成了这些我们才能迈上新台阶。

开发这些组件,就像搭建项目的一砖一瓦,需要花费几百上千小时的努力来琢磨。它们组成了复杂的系统,但它们本身却保持简单。软件之美就是“简单”。这些年的经验让我悟出的道理是,把时间花在编码和重构上,这比纯粹靠“才华”和空想更能实现目标。

执行、完成任务然后迭代,才能实现软件开发“简单和高效”的目标。深植于我们脑海深处的关于创业的宗旨,就是先构建基础,然后迭代。软件开发亦是如此。先开发一个粗糙的版本,然后重构、修补错误、精简。要得到结果,你得老老实实去写代码!去执行!

一些聪明的懒人,总是炫耀自己的才华,让同龄人为之惊叹。但一个公司这样做是不能成功的,伟大的产品不会靠吹嘘而来。公司要依靠的是那些起早贪黑、团结协作、踏实编码的人。吹嘘容易,实干不易,且行且珍惜。

业界一直存在这样的误解:一个商业公司要完成伟大的产品,需要靠那些小圈子的名人怪咖。可在现实生活中,这样恃才傲物的一小部分人虽然在感兴趣的方面有着惊人的才华,但与团队相处很不融洽,工作起来也很不沉稳。他们不仅没有实际成果,自以为是的优越感还会影响团队的氛围。他们总认为自己天赋异禀,想干才干,爱干才干,但他们影响了团队,还会扭曲其他人的价值观。

要成为真正伟大的开发者,应该从实干做起,遵循以下准则。

规范的函数和变量命名

难以置信,在编程中这是如此简单却又如此重要的法则。清晰的函数命名,常常伴随着清晰的逻辑实现。例如:

def process_text string

end

这样的函数命名方式完全不能传达出来函数的功能是什么。而:

def safe_convert_to_html string
……
end

这样的函数命名方式,准确反映出了函数有且仅有什么作用。

除了“转换文本到HTML”之外,可能有开发者愿意实现其它功能,例如自动嵌入视频等,但通常这是不需要的。清晰规范的函数命名不仅能让人一眼看出它能做什么,也能让人知道它不能做什么。良好的命名规范可以提升代码可读性,让代码间关系更加清楚明白。不规范的命名,常常伴随着混乱的代码、BUG、糟糕的逻辑。

规范变量命名也同样重要,例如:

if (u2.made < 10.minutes.ago)
&& !u2.tkn
……

这样的命名方式很难让人读懂,即便读懂了,也很难保证完全了解的作者的意图。这个变量命名很糟糕,不能传达任何信息。而且“并且不(&&
!)”这样的语句本来就非常晦涩难懂,更别说在语句后面还跟着一个名词了。如果有人要重构这段代码的话,恐怕需要先费尽脑子搞清楚原作者是在干什么。如果将变量命名规范化,情况会很不一样。

if (new_user.created_at < 10.minutes.ago)
&&
!new_user.invitation_token

……

当然,变量命名太过画蛇添足也不行。例如我们将这段代码,进一步注释成这样:

user_is_recently_created = user.created_at <
10.minutes.ago
invitation_is_unsent = !user.invitation_token

if user_is_recently_created
&& invitation_is_unsent

user_recently_created,这个变量命名实在是浪费时间来解释显而易见的东西。

就像DHH说的那样,注释是个麻烦的东西,一旦逻辑改变,注释也要改变。如果代码能好的反映自身逻辑,便不需要注释。

时间: 2024-10-10 06:36:35

转:如何成为一个伟大的开发者的相关文章

一个资深iOS开发者对于React Native的看法

一个资深iOS开发者对于React Native的看法 当我第一次尝试ReactNative的时候,我觉得这只是网页开发者涉足原生移动应用领域的歪门邪道. 我认为一个js开发者可以使用javascript来构建iPhone应用确实是一件很酷的事情,但是我很快放弃了自己去使用它的念头.毕竟我因为爱好而从事ios原生开发多年,并且目前为止已经很熟悉这一套开发专业工具. 我已经创造了一些我引以为傲的iOS应用——一些使用Object-C和Xcode构建的应用,通常人们都是这么做的.这两样工具是苹果公司

【译】如何成为一个优秀的开发者

*前言:原作者George Fekete是一个拥有10年客户端和服务端的web开发者,擅长PHP.JavaScript,致力于各种中大型的web应用,Primal Skill的创始人,CTO.本文根据How to be a Good Developer翻译而来.* 作为一个苦逼的程序员,你需要在这个随时变化的行业中不断的提升身自己,学习并且实践,成为一个成功的开发者,才能在这巨大压力的竞争中找到自己的立足之地. 那么问题来了,什么是我们所说的成功的开发者,他们是了解各种语言和工具的博学者?还是把

构建一个属于软件开发者的键盘

摘要:有人推崇产品,有人推崇运营,也有人推崇战略-到底该推崇什么?李智勇系统地分析了这三者之间的思路,并引用黑格尔的一句话,给出了自己的看法:在尺度中已经蕴含本质,这在产品.运营.战略的侧重上体现的非常好. 视野不拉升或者认知不深入时,就容易在盲人摸象层面上反复,看到微信火了,那就产品最重要,看到阿里火了,那就平台最重要.实际上一个比较显然的事实是,没有锥子一样的产品,那你就火不起来:不能从产品升级为平台,那就很可能活不下去.当然,有些人会说平台也是一种产品,但就和人与猴子都是灵长目,实际上仍是

一个冷门语言开发者的2016年总结和2017年目标

这是一个辞旧迎新的时间,随着ERP二期项目的上线,忙碌的工作暂时告一段落,是时候做一个总结了. 2016总结 去年的今天,我好像正在做一个C#的信息处理工具?当时并没有写过总结一类的东西.不过这一年中也不时确立过一些目标,记录一下完成情况吧: 找份程序开发的工作.√完成了从船舶行业到IT行业的转换.每次说起船厂,都让我思绪万千.多的不说,几个月前看到自己参与过的6W吨原油船顺利交付,还是很开心的.很希望未来能在新的行业里面,证明自己的价值. 读<经济学>?买了商务印书馆的汉译世界学术名著丛书的

面试时,问哪些问题能试出一个Android应用开发者真正的水平?

一般面试时间短则30分钟,多则1个小时,这么点时间要全面考察一个人难度很大,需要一些技巧,这里我不局限于回答题主的问题,而是分享一下我个人关于如何做好Android技术面试的一些经验: 面试前的准备 1. 简历调查 简历到你手上的时候,你要做好充分的调查分析,不仅仅是对公司负责,也是对自己与候选人时间的尊重,明显不match的简历,就不要抱着“要不喊过来试试看”的想法了,候选人也许很不错,但如果跟你的岗位不match, 也不要浪费大家时间,你要想清楚现在需要的人是有潜力可以培养的,还是亟需帮忙干

一个iOS开发者对tvOS SDK的初探

http://www.cocoachina.com/ios/20151001/13652.html 作者:Chris Wagner原文地址:tvOS SDK: An iOS Developer’s Initial Impressions 在Walter Isaacson编写的<Steve Jobs>的最后一章中,Steve说过“我最终实现并让它拥有了你们能想象到的最简单的用户界面”.当时他指的就是Apple TV. Steve不幸离世已经过去很久了,但是人们一直翘首以盼着这款产品.就在昨天20

安卓碎片奇观:一个开发者对付600种ROM4000设备

腾讯科技讯 谷歌 (微博)开发的开源操作系统安卓,秉承开放原则,开放的代价就是自由和一定程度的混乱.安卓生态在软件定制(ROM)和硬件产品上的碎片化,已经不算新闻.而最近一个移动软件开发者公布的数据,也再一次展示了安卓碎片化的最新现状. 数据显示,这名开发者的软件,安装在了近四千种安卓设备上,海量的设备和定制系统,给软件适配带来了不小的负担. 在安卓系统上,全球的手机制造商可以根据免费源码自由修改定制,因此出现了大量的定制版安卓(俗称"ROM"或"UI").在全球的

[深度好文]想成为一个高效的Web开发者吗?来看看大牛分享的经验吧~外加一些自己的理解

前言: 无意间浏览到此篇文章,发现这篇文章无论是对于新手程序员,还是学过几年的程序员,都是挺有帮助的.于是,在此分享,后面也有我自己的一些理解,希望能帮到更多的朋友. 作为一个软(ku)件(bi)工(de)程(ma)师(nong),你有没有觉得做什么事都没时间?没时间学习新东西,没时间去回顾.整理原来写的烂代码,没时间写单元测试,没时间给接管你项目的家伙写文档,没时间思考,没时间喘气,没!时!间! 额--如果你肯花点时间看看这篇文章,我相信你会明白应该把时间花在哪. 我曾以为成为一个技术大牛的唯

你不该忽视的一个新时代——自由开发者的崛起(二)

接着上篇的话题说,既然代码和开发者才是最有价值的,怎么才能物尽其用,人尽其才呢?云技术的发展使得一切成为了可能. 云使得众包得以实现 既然程序员的核心能力是代码,现在又有了云,以源代码托管为中心的云服务:我们相信整个新世界将由代码组成,总得有一个最好的管理源代码的地方,这个地方一定在云端而不是自己的笔记本电脑上面,所以像Git@hub 和[email protected]这样以代码云服务的平台才得到了爆发式增长的机遇.成熟的Iaas, PaaS和SaaS服务,使得虚拟团队管理和在线开发协作变得更