17 年编程生涯的三大经验总结

今年将迎来我编程的第十七个年头。我的编程之旅始于九十年代末,上大学的时候,主要涉足基于表格的网页设计,传统的ASP,和Microsoft Access数据库。原来只是当作业余爱好的编程现在已经成为了我的事业和激情。我一生一半的时间都在学习、蹒跚、成功、失败,并且经常情不自禁地为代码 美丽和复杂的天性而折腰。

我在代码上淫浸了足够长的时间,因此看到了很多语言和平台的兴盛和消亡,看到了很多模式被普及,被苛责,然后再次被推广。在某些时候,我常常分不清这是大势所趋还是明日黄花。

编程的流行趋势是短暂的,但我坚守的规则,往往在生活中的其他地方也能发挥作用。事实上,生活就像代码(我已经买了这个域名来证明这一点!)。以下是我总结的3个伟大的经验教训,历经一次又一次编程和生活的大浪淘沙。

1.可商榷的决定往往是一种权衡。

伟大的辩论总是发生在开发社区中。无论它是最近关于TDD作为web开发的一种可行方法的辩论,还是什么水平的开发人员应该使用ORM(或 micro-ORMs)。无论是.NET MVC应该优于WebForms还是以JavaScript为中心的app应该比基于页面的app更受青睐,对我来说,答案都一样:看你权衡之后的取舍?

在任何比较两种流行方法的辩论中,我们总是会从自己的立场出发,两利相权取其重,两害相权取其轻。在我的职业生涯早期,我曾执着于追求所谓的正确答 案。感觉过程是线性的:摆脱做事的老办法,转而投向新的并且更好的方法的怀抱。曾经有一段时间我深信,编写自己的SQL查询是一种过时的练习,并且 ORMs是最后赢家。

但是,我了解到,更好的办法应该由内容决定的。例如,今天完全成熟的ORMs在隔离映射相关数据网格到对象的冗长管道提供了伟大服务,但隔离也使得某种非标准查询变得困难并且有潜在的效率低下问题。n+1 select problem就是经典的在少写代码和写更多高效代码之间做权衡。我使用ORM的程度完全受我期待应用程序使用的数据量,我所受到的潜在的时间限制,app长期可扩展性需求这三者的影响。(顺便说一句,我目前是micro-ORMs,比如说Dapper的忠实粉丝,它能让我编写我自己的SQL和一些精巧的对象-关系映射)。

我已经将这个经验应用到了我生活的其他方面。我是应该买一套公寓还是长租房子?我是应该启动自己的生意还是工作于已经成立的公司?没有绝对正确的选择。当你权衡利弊了之后,你便可以更好地应对生活中的各种难题。

2.清晰并不总和简洁相关。

和大多数工程师一样,我对持续重构一直到代码尽可能地少和简洁的机会垂涎三尺。如果可以选择更少又更简洁的代码来完成同样的任务,那么我为什么要选 择要个更多代码的方案呢?通常情况下,更简洁的语言会导致更好的交流。画蛇添足只会阻碍核心信息的提取。但是,最终的目标不应该是简洁——而应该是可交 流。于我而言,下面这段直截了当的代码,在它更长的时候……

if (HasFarm() && HasBoat())
{
  Broadcast("You are wealthy!");
}
else if (HasFarm() && !HasBoat())
{
  Broadcast("You are OK!");
}
else if (!HasFarm() && HasBoat())
{
  Broadcast("You are OK!");
}
else if (!HasFarm() && !HasBoat())
{
  Broadcast("You are poor!");
}

……反而比这个简洁版本更明确。

(HasFarm() && HasBoat()) ? Broadcast("You are wealthy!") :
(HasFarm() || HasBoat()) ? Broadcast("You are OK!") :
Broadcast("You are poor!");

虽然这是一个品味问题(有些人可能会觉得后者看上去更加一目了然),但是我在这里要表述的观点是,有时候解释的最伟大方法并不是简化。这个经验也适 用于日常生活,我花了大量时间来思考怎么样才能更好地传达消息以便于对方接收——有时更详细的讲解并非没有价值,而是更明确传达信息的必须。

举例来说,我想要更明确和更详细地告诉我爸爸应该如何关闭iPad(“按住右侧的按钮一段时间……”)。或者,我看似多此一举地键入了一些我已经提 交到本地分支的内容给我的同事(“刚刚犯的错误已被修复”),然后当它涉及到部署更新到产品中时,我就能很明确地知道哪些具体的提交被合并和出现(“检查 4812-4822行,其中包括在6/15发行版本中的DoneDone问题,将在今晚的产品发布中提出来。”)。

3.累计良性债务,并且要持续偿还。

我在一个特别害怕欠债的家庭中长大。八十年代中期,我的父母倾其所有又东拼西凑,付了他们第一套房子75%的首付,然后在七年内付清了剩余款项。用现金支付是常态。信用支付在他们看来几乎是一种罪过。作为一个孩子,我的看法是,债务完全是坏的。我从不认为欠债是一种优势。

直到我看到其他人是如何对待债务的——在我20出头的时候——我终于知道了债务也可以是有益的。如果你能够合理地承担债务,那么之后你也能获得成功。如果借助现在更好的上升空间可以加速你之后的成长,那么债务可以成为一笔巨大的财富。

代码也是如此。有时它值得你现在承担一点债务——错过抽象或者有一些未优化的SQL代码——如果这样做可以让你更快地发布内容给不断增长的观众的话。关键是要了解你必须偿还它,以及你可以在适当的时间段之后偿还。

这就是债务在生活和编程中的窍门。偿还债务需要持续进行。将一周10%的时间用于重构,相当于你是在按时支付编码的信用卡账单。如果你保持一种持续、可支撑的还债状态,那么累积债务实际上对你是有好处的。

文章转载自 开源中国社区[http://www.oschina.net]

时间: 2024-08-01 06:37:10

17 年编程生涯的三大经验总结的相关文章

CSDN头版头条 《近匠》 Wijmo 5 CTO:从Web到移动,我的25年编程生涯

现年52岁的Bernardo Castilho先生是GrapeCity(中文名为葡萄城)ComponentOne公司的CTO,在与他的对话过程中,充满风趣严谨和厚重的历史感.     当作为年轻人的我们崇拜着各式娱乐男神女神时,他的偶像却是这个世界上最为杰出的科学家,从少年时代开始,编程成了他的兴趣爱好,并最终成为了他许以一生的职业.作为Wijmo 5开发团队的Leader之一,他是HTML5.JavaScript等众多技术的行家里手,在采访他之前,笔者特地在CSDN论坛上发起了一个问题征集的活

关于DAO数据库编程的几点经验

前言 本文是作者在DAO数据库编程中积累的经验,希望对使用DAO进行开发的朋友有所帮助. 一.如何在新建时没选数据库支持的程序中加入数据库支持 以对话框DAO-Access为例: 1.1用类向导新建类.Name:"mydb", Base Class:"DaoRecordset",选择正确的数据源和表. 注:vc6无法直接对access2000进行支持,要用的话先转换为97版才行. 1.2在mydb头文件加入#include"afxdao.h".在

程序员编程生涯中常会犯的7个错误

时间久了,我发现很多程序员总是犯着相同的错误,前仆后继,却毫不自知. 下面就是程序员在他们的软件开发生涯中最常犯的7个错误. ▼没有明确的目标 心中没有终点目标,那就只会随波逐流. 如果你想在软件开发的职业生涯上获得成功,那么你需要有一个明确的目标. 仅仅只是对遥远的未来有一个模糊的想法是不够的. 相反,你应该有坚实的目标--在某个时间段内的首要目的--明确定义的目标. 我认识许多程序员和所谓的专业人士庸庸碌碌地在同一个岗位上干了几十年,是的,你没听错,就是几十年! 这是一场悲剧,但如果没有目标

积累编程过程中的经验

我已经无法容忍自己在编程学习的路上缓慢的进步速度了,可是自己又总是很低效的学习,所以从现在开始,在该系列博客中,积累着记录在编程过程中的经验和反思,希望能真正让自己快速成长起来. 下定决心,保持耐心,专注当下,坚定去做而不是去茫然恐惧. 习得 学习他人代码最好的方式就是进到程序中单步去调试,了解大体的框架和流程,然后再深入的去研究 C语言中strlen()的陷阱 strlen()的作用是取得字符串的有效字符个数,但是当赋给字符串的字符大于该字符串的长度时,有可能将字符数组最后的'\0'标识覆盖,

如何在编程生涯中有一个好的开端

想要进入软件开发的领域其实是很难的.当然,如果你还是一名刚刚入门的程序员,那么我相信你深刻理解没有经验或者没有太多经验想找一份工作是如何困难.如果你已经在软件开发这一行干过一段时间,那么我相信你也会深刻理解想要在这个竞争激烈的行业鹤立鸡群又是如何困难. 我接触过很多刚刚入门的开发人员,他们非常迷茫,因为他们不知道该往哪里投入自己的精力来发展自己的职业生涯,也不知道未来的方向在哪里.选择是如此之多,让人眼花缭乱:有那么多的技术,有那么多的道路.那么那一条才是正确的呢? 正确的思考方式 下面我会给出

杨致远告别雅虎:17年酋长生涯谢幕

中介交易 SEO诊断淘宝客 站长团购 云主机 技术大厅 雅虎创始人杨致远 新浪科技讯 北京时间1月18日凌晨消息,雅虎周二宣布,公司联合创始人杨致远已经辞去公司董事及所有职位,未来不会以任何形式参与公司事务.此外杨致远还将辞去雅虎日本董事会董事.阿里巴巴(微博)集团董事会董事职位,辞职立即生效. 杨致远表示:"从创办雅虎到现在,这段时光是我人生最为激动和有价值的一段经历.但现在是我离开雅虎追寻其他利益的时候了." 据<华尔街日报>报道,杨致远在宣布辞职前并未通知雅虎其他董事

程序员:增加编程经验的3种途径

最近,有位论坛会员陷入了一个与许多入门级程序员相同的尴尬局面中:企业们不喜欢雇佣没有经验的人,并且多数都不愿意提供培训.如果那么多的企业都不雇佣没有经验的人,那么这些人要从哪寻得他们所需的经验呢?不幸的是,这种局面是大多数IT人士所面临的主要问题. 通过与这位会员长期的交流与反复的讨论,就加快他的职业生涯发展,除了给他<开始编程生涯的5个建议>之外,我另外还提出了三条建议,以助他积累增加编程经验. 1. 无偿工作(或几乎免费) 企业界通常可能并不想雇佣经验少或没有经验的人,而非盈利界通常乐意(

学习Python编程的19个资源

用Python编写代码一点都不难,事实上它一直被赞誉为最容易学的编程语言.如果你准备学习web开发, Python是一个不错的开始,甚至想做游戏的话,用Python来开发游戏的资源也有很多.这是快速学习这门语言的途径之一. 许多程序员都把Python作为编程之旅的开始,然后是像PHP和Ruby这样的语言.它也是2014年最热门的web开发语言之一,并极力推荐学习.但是,Python应该怎么学呢?应该从哪里开始? 我来为你解决这个问题,因为我自己学习编程和开始做开发的时候也依靠了很多这里的资源.当

【机器学习面试终极通关指南】从打造性感履历到跨越面试三大关卡

Reddit上最近的一个比较火热的讨论是,在工业界工作的机器学习/数据科学工程师如何打造一份漂亮的工作成果履历(portfolio)? 用户_Julia提问:我是一名数据科学工程师,想专注于这个领域好好发展职业生涯.我做了一些小的分析数据集的开源项目,还发表过一些论文.但我的问题更多是关乎博客.研究论文和开源项目,以及如何在工业界建立Data Science/ML的职业生涯.对此,_Julia介绍了自己的情况,进一步描述了问题: 我打算写博客.虽然我也在FB/Twitter发文表达兴趣和意见,但