程序员写代码时应该反复问自己的10个问题

标签: 程序人生 建议 谏言 | 发表时间:2014-10-16 18:20 | 作者:techug
出处:http://www.vaikan.com

你想成为一名优秀的程序员吗?

那么,现在是时候放下《24小时学会xxx语言v8.3》超级骗子书,相反,你应当 养成每天反问自己以下10个问题的习惯。

你的代码中是否有一种模式存在?

找寻模式中的可行与不可行将发现其中看似无关的想法或基本原则。要对工作达到深入的理解,你必须养成反问自己“是否有一种模式存在?”的习惯。

它不仅仅适用于你的代码。是否有适应各类型商业变化的模式吗?是否有一种适用于技术发展的模式?你有没有看到同类型的错误如雨后春笋般冒出来?

所谓理解就是要理解模式 — 以赛亚·伯林

怎么让代码变得更简单?

开发者经常想得到复杂的和可扩展的解决方案。做一些极为复杂的东西,觉得自己就是自己宇宙的主宰。问题是将来你 永远无法预知产品和业务会如何改变

“架构”和代码更像是园艺而不是建筑。你必须要有能力去 适应不断变化的环境。越复杂的解决方案越难做。

简洁是终极的复杂 —   列昂纳多·达·芬奇

你知道程序为什么要这样运行吗?

知道东西像那样运作和知道为什么会像那样运作是两个完全不同的事。如果你知道事情为什么会那样,那么你就能够做出更好的决策。

一个伟大的程序员和知道有某种编程语言的人来说,差别在于 理解为什么的深度。

同样的原理也适用于问题修正。“重启一下服务。” “你试过重启吗?” 当有问题发生时,我们经常会想到这些话。每次你这样说时,你就失去了一个学习的黄金机会。

理解为什么出现这样的错误,将修正根本原因,避免出现治标不治本。最起码,你以后不要再犯同样的错误。

之前有没有人写过这样的代码?

无论何时,你发现自己发明了一个复杂的算法,你很可能走在了错误的轨道上。除非你搜索到一份 别人正好解决了这个问题博士论文。

需要编写一个向用户鼠标旁的item添加标签的算法?看看 Voronoi
Tesselations
. 想要找到卡车送货的最短路径?看看 Dijkstra. 想要找到用户输入内容的最接近的标记?应该是找到它的 Levenschtein distance.

这只是几个简单示例,相信我,它们无处不在。

我能够看得更远,那是因为我站在巨人的肩上 — 艾萨克·牛顿

你知道这种技术的出处吗?

你认为你知道REST吗?

你有读过Roy Fielding描述REST的 论文原文吗?你真的明白它的最初用意吗?那种在IDE v7工具中比你多用REST API生成向导5分钟的家伙写出来的博客可不算数的。

帮自己一个忙, 试图去读概念或原理的原始文档,然后通过各种手段去了解行业领袖的最新发展动态。 如果你不知道他们是从哪些开始的,那就紧跟他们的步伐吧?(不知道他们从哪来,就跟着他们到哪去吧!)

我喜欢现在所做的吗?

请面对编程其实是很难的。

除了很难以外,编程还是发展很快的。Art框架从2年前的“笨重恐龙”已经发展到今天的标准。为了站到你“游戏”的顶端,你必须树立一个终生学习和研究的信念。

如果你不喜欢你所做的,那么你就没有跟上其他家伙(喜欢自己所做的)的可能。所以找到让你激情燃烧的编程类型!不要因为市场缺口或者收入不菲而决定成为一名安全专家,不要因为一篇文章说UX是最热门的职业而决定成为一名UX专家。

再说一次, 做你喜欢的。

做你喜欢的,所需的资源将随之而来的 — 彼得·麦克威廉斯

这些代码还可以用在其它地方吗?

我看到程序员最大的一个限制就是, 自己失败的想象力。

如果我们学习到一个适应于特定环境的东西,或者看到解决某个特定问题的技术时,我们认为这就它唯一适用的地方。这是完全错误的。 每当学到新东西时,反问自己:“其他地方还可以使用吗?”

当发现了在图表上定位节点的新的伟大的方法时,是不是可以将它应用于二维数据集中感兴趣数据的定位呢?当发现通过websockets从客户端发送数据到服务器端的新方法时,它怎么才能应用到可扩展的后台服务上呢?有时是错误的,但有时也是正确的。

这给我们带来了下一个问题……

逻辑只能带你从A到Z,想像力去可以带你到任何地方 — 阿尔伯特·爱因斯坦

今天有什么做错的吗?

增加创收的最简单方法是 降低错误的损失

游戏开发公司Valve和其他几个公司很认为这个 观点。这同样适用你成为web开发者的进步过程。如果你害怕失败,你就不会有大的突破。

勇敢、尝试、失败、学习然后再来。

不要害怕错误,它能让你认识失败,然后重新来过。— 本杰明·富兰克林

难道真的没有办法吗?

我们生活在世界上 很小的一个地方是不可能的除了少数例外)。

假设不管你做的什么事情都是可行的,然后采用向后的方向回推回去。你可能会发现,你想做的暂时是不切实际的,但它足以改变世界,可能变成现实的速度比你想像的还要快。

似乎一切看起来都是不可能,除非你完成它 — 纳尔逊曼德拉

我可以向谁学习?

永远不要在一群你在其中是最聪明的人的地方工作。

挑选拥有可以启发你、激励你做得更多的同事的工作和公司。不要与编程扯上关系,在文本编辑器和命令行外面还有一个完整的世界存在。从其他领域学习,设法应用到你的工作中。

永远不要满足于能胜任现有的工作!

(本文修改自 这篇译文)

相关 [程序员 代码 问题] 推荐:

程序员写代码时应该反复问自己的10个问题

- - 外刊IT评论
你想成为一名优秀的程序员吗. 那么,现在是时候放下《24小时学会xxx语言v8.3》超级骗子书,相反,你应当 养成每天反问自己以下10个问题的习惯. 找寻模式中的可行与不可行将发现其中看似无关的想法或基本原则. 要对工作达到深入的理解,你必须养成反问自己“是否有一种模式存在. 是否有适应各类型商业变化的模式吗.

招聘 JavaScript 程序员时应该问什么问题

- rex - 一名开发
有使用过服务端 JavaScript 框架吗?. ECMAScript 和 JavaScript 的区别是什么?. 有用过 JavaScript 代码校验工具吗?. 有读过或推荐的 JavaScirpt 书籍吗?. 会为你的 JavaScript 代码写单元测试吗?. 为什么基本上所有对象都有 toString 方法?.

10个我最喜欢问程序员的面试问题

- - 博客园_新闻
英文原文: 10 Programmer Interview Questions I’d like to be asked . 最近我拜读很多文章,都是介绍面试问题的,我真心不理解,面试官代表公司想要聘用的是最优秀的程序员,那就意味着需要想出一些有意义的面试问题. 如果你就提一些毫无用处的垃圾问题,那么很容易遗漏很多能干的程序员.

强制程序员使用统一的代码格式,好吗?

- - TECH2IPO创见
Java程序员Stijn Geukens与其他10位程序员一起为企业开发产品,但是他们11个人每个人都有自己喜好的编程平台,语言编写起来也是千奇百怪. 不过,这种情况很快就会发生变化,因为企业即将强制要求所有的程序员使用统一代码格式,统一使用Eclipse Java平台. 于是Stijn Geukens便在Stackexchange上 提问,“这样的强制要求是否值得.

IBM新专利:通过代码提交评判程序员

- - 奶味网-IT人- 最新RSS订阅
新闻来源:Slashdot. 觉得老板只需要用软件扫描一下你提交的代码就能判断你的工作效率进而决定解雇还是留下你这种事情怎么样. 这不是幻想 - 这是 IBM 最近披露的最新专利申请的内容. IBM 称, 对一名开发者的代码提交以及其他操作的统计可以用来产生一份用于同其他人比较的 "总结报告", 从而帮助管理层避免在低效率的程序员身上浪费时间.

程序员,都去写一写前端代码吧

- - 四火的唠叨
文章系本人原创,转载请保持完整性并注明出自 《四火的唠叨》. 你可以认为我是一个极端的人,就像有许多人专注于自己的领域而不屑于其它“肤浅”的工作范畴一样. 比如我见过不少认为做portal没有技术含量的判定,做工程都是充满苦逼行为的言论,最近则还有那些“大数据”崇拜者的疯狂吐槽……我的极端则有些不同,我的极端在于我认为绝大多数优秀的程序员,都要尝试多方面的事情.

[译]程序员要学会读源代码

- - 呦呦鹿鸣
在“沟通”这个复杂的领域里,写出能让人类领会并理解的连贯段落比敲出几行让解释器或编译器不致于“呕吐”的软件代码要难得多. 这就是为什么——就软件开发而言——所有的文档大概都是很差劲的. 而且,由于为人写作比为机器写作要困难得多,文档恐怕在可预见的将来还会继续差劲下去. 译者注:卢克(Luke Skywalker)是电影《星球大战》中的一个角色,他来自塔图因星球,在发现了莉雅公主输入到机器人R2-D2中的求救信息后,他与绝地骑士欧比旺一起迎战邪恶的银河帝国,最终救出了公主.

程序员的成长和代码行数的关系

- - 外刊IT评论
Cook写了一篇 博客,其中提到:. 我的朋友Clift Norris发现了一个基本常数,我称之为Norris常数,一个未经培训的程序员在他或她遇到瓶颈之前能写出的平均代码量. Clift估计这个值是1500行. 超过这个数以后,代码会变得如此混乱,以至于本人都无法轻而易举的进行调试和修改. 我还不了解足够多的初级程序员来验证这一结果,不过我自己认识到,程序员生涯的下一个瓶颈将发生在20,000行.

优秀程序员眼中的整洁代码

- - 博客园_知识库
  有多少程序员,就有多少定义. 所以我只询问了一些非常知名且经验丰富的程序员.   Bjarne Stroustrup,C++语言发明者,C++ Programming Language(中译版《C++程序设计语言》)一书作者. 代码逻辑应当直截了当,叫缺陷难以隐藏;尽量减少依赖关系,使之便于维护;依据某种分层战略完善错误处理代码;性能调至最优,省得引诱别人做没规矩的优化,搞出一堆混乱来.

程序员新人怎样在复杂代码中找 bug?

- - IT瘾-geek
我曾经做了两年大型软件的维护工作,那个项目有10多年了,大约3000万行以上的代码,参与过开发的有数千人,代码checkout出来有大约5个GB,而且bug特别多,open的有上千,即使最高优先级的showstopper也有上百. 优先解决那些可重现的,可重现的bug特别好找,反复调试测试就好了,先把好解决的干掉,这样最节约时间.