阅读更多

4顶
0踩

非技术

转载新闻 17 年编程生涯的三大经验总结

2016-06-02 11:51 by 副主编 mengyidan1988 评论(3) 有8507人浏览
今年将迎来我编程的第十七个年头。我的编程之旅始于九十年代末,上大学的时候,主要涉足基于表格的网页设计,传统的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.codeceo.com/article/17-year-3-tips-programming.html
英文原文:Programming's three life lessons
翻译作者:码农网 – 小峰
  • 大小: 67.2 KB
4
0
评论 共 3 条 请登录后发表评论
3 楼 huanglei7211 2016-06-14 17:15
flex_莫冲 写道
简洁的前提是可读性高

赞同!一切不以可读性为目的的编程,都是耍流氓
2 楼 welcomezhang 2016-06-12 22:28
简洁的前提是可读性高
1 楼 flex_莫冲 2016-06-03 14:56
简洁的前提是可读性高

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 15年编程生涯,资深架构师总结的7条经验

    “ 编程虽然苦,但有兴趣就会有乐趣。把简单的事情做到极致,回报自然就来了。朝闻道,夕死可矣。 ——尼古拉斯·小Q  我和很多人交流过一个有趣的现象,那就是刚毕业到30岁这段时间,会觉得时间过得...

  • 一个30多年编程经验的程序员总结

    主要介绍了一个30多年编程经验的程序员总结,在我30多年的程序员生涯里,我学到了不少有用的东西,下面是我这些年积累的经验精华,需要的朋友可以参考下

  • 十年总结 靳雄飞 程序员编程经验

    此为靳雄飞师兄十年的程序员生涯的总结,主要谈的是经历以及思考,而不是编程技巧

  • 一个软件工程师的7年工作经验总结

    一个软件工程师的7年工作经验总结

  • 程序员职业生涯系列:关于技术能力的思考与总结

    引子儒、释(佛)、道三家思想:释(佛家):处理好人与心的关系,我们要战胜自己;儒(儒家):处理好人与人的关系,我们要团结好他人;道(道家):处理好人与自然的关系,我们应该顺势而为。明人陆绍珩《醉古堂剑...

  • 2021年总结:缘起性空,归来不少年——回顾这荆棘的一年

    转眼,这已是我在CSDN写下的第九篇年终总结,真是岁月如梭。《缘起性空,归来不少年》。是啊,归来不再少年,我已经是而立之年了。当我写下这几个字的时候,心里还沉甸甸的。曾经的我总以为,博士毕业继续回到贵州...

  • 我的软件开发生涯 (10年开发经验总结和爆栈人生)

    转自: https://www.cnblogs.com/unruledboy/p/DevCareer.html简介网名灵感之源,智能实验室创始人,从事软件开发超过10年,写过千万下载量软件,热衷开源,写过多个爆栈项目(系统开发技术栈、.Net技术栈、数据库...

  • 30年程序员经验总结

    14.对某方面的无知可能会让你一败涂地,因为你在这方面毫无经验。  即使到了今天我依旧在不断惊叹,有的同行竟然仍然没有收集足够的日志、崩溃报告和使用信息来掌控自己的软件。那些对这方面信息不屑一顾的...

  • 2021年编程类书籍推荐清单

    编程书籍推荐

  • 5年Python生涯总结出10个玩Python必备的网站

    系列文章目录 ... 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习..

  • web前端程序员两年学习经验与总结

    前言 我于2017.4接触编程,今天是2019.7.29。论接触时间,大概有2.25年了。 今天想跟大家聊一聊,我这两年的学习经验。 正文 2017.11我正式入职一家公司,做web前端实习生。那个时候的我掌握的技能非常有限,只会...

  • 6个高效学习编程的方法

    学习编程的重点就是懂如何学习

  • 两年前端职业生涯总结

    作者:TaylorPzreal ... 时间如白驹过隙,2015年9月27日我...计划于今年十一写总结,迫于公司项目压力,拖置现在,必须要做第二年的总结了,总结自己的这一年历程并憧憬未来,也写给需要的人。  来到帝都,我一

  • 【2021年度总结】回忆过去,大专生的三年

    回忆过去,大专生的三年前言大学三年总结工作半年的总结展望未来总结 前言 在这三年其实过的还是挺充实的,每年都有去写总结,今年毕业了本来有很多的经历可以去写可以去记录的事情,拖了很久的稿子不知道写什么,...

  • 编程高手箴言.pdf

    这本书是作者十余年编程生涯中的技术和经验的总结。 内容涵盖了从认识CPU、Windows运行机理、编程语言的运行机理,到代码的规范和风格、分析方法、调试方法和内核优化。 最重要是里面有作者对许多问题的认知过程和...

  • 一个汽车软件测试工程师的三年工作总结

    入行汽车电子行业已经要三年了,闲下来的时间爱总结总结,感受一下现在自己的行业水平,技术水平和发展想法。首先,工作三年了,除了业务知识积累之外,我觉得增长更多的是沟通与做事方式的长进。经常挂在嘴边的一句...

  • 毕业三年总结

    毕业一年总结 毕业两年总结

  • 大学四年零基础自学Java的路线

    还有进程、线程、协程,内存屏障,指令乱序,分支预测,CPU亲和性等等,在之后的编程生涯,如果你能掌握这些东西,会让你在遇到很多问题的时候瞬间get到点,而不是像个无头苍蝇一样乱撞(然而敖丙还做得不够,所以...

  • 如何写代码——编程内功心法

    本文将分享一下根据我这几年来的编程经验总结出的一些关于如何写代码的个人见解。由于“跟我混”的一些小伙伴编程功底相对来说比较薄弱,所以在此总结一篇“编程内功心法”帮助他们渡过职业生涯的第一个瓶颈期。顺便...

Global site tag (gtag.js) - Google Analytics