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

简介: 你想成为一名优秀的程序员吗? 那么,现在是时候放下《24小时学会xxx语言v8.3》超级骗子书,相反,你应当养成每天反问自己以下10个问题的习惯。 你的代码中是否有一种模式存在? 找寻模式中的可行与不可行将发现其中看似无关的想法或基本原则。
你想成为一名优秀的程序员吗? 

那么,现在是时候放下《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开发者的进步过程。如果你害怕失败,你就不会有大的突破。 

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

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


难道真的没有办法吗? 

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

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

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

我可以向谁学习? 

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

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

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

 

目录
相关文章
|
7月前
|
设计模式 算法 程序员
程序员为何需要反复修改Bug?探寻代码编写中的挑战与现实
作为开发者,我们在日常开发过程中,往往会遇到反复修改bug的情况,而且不能一次性把代码写的完美无瑕,其实开发项目是一项复杂而富有挑战性的任务,即使经验丰富的程序员也难以在一次性编写完美无瑕地完成代码,我个人觉得一次性写好代码是不可能完成的事情。虽然在设计之初已经尽力思考全面,并在实际操作中力求精确,但程序员仍然需要花费大量时间和精力来调试和修复Bug。那么本文就来分享程序员需要反复修改Bug的原因,以及在开发中所面临的复杂性与挑战。
180 1
程序员为何需要反复修改Bug?探寻代码编写中的挑战与现实
|
7月前
|
设计模式 Java
好好的“代码优化”是怎么一步步变成“过度设计”的(上)
好好的“代码优化”是怎么一步步变成“过度设计”的(上)
300 4
|
缓存 小程序 前端开发
赢麻了!smardaten闷声干大事,竟然用无代码开发了复杂小程序!
赢麻了!smardaten闷声干大事,竟然用无代码开发了复杂小程序!
|
4月前
|
设计模式 程序员
故意把代码写得很烂,这样的 “防御性编程“ 可取吗?
故意把代码写得很烂,这样的 “防御性编程“ 可取吗?
|
7月前
|
算法 程序员
为何程序员在编写程序时难以一次性将所有代码完美无瑕地完成,而是需要经历反复修改Bug的过程?
为何程序员在编写程序时难以一次性将所有代码完美无瑕地完成,而是需要经历反复修改Bug的过程?
71 7
|
7月前
|
设计模式 Java 中间件
好好的“代码优化”是怎么一步步变成“过度设计”的(下)
好好的“代码优化”是怎么一步步变成“过度设计”的(下)
156 5
|
7月前
|
设计模式 Java 中间件
好好的“代码优化”是怎么一步步变成“过度设计”的
本文记录了作者从“代码优化”到“过度设计”的典型思考过程,这过程中涉及了很多Java的语法糖及设计模式的东西,很典型,能启发思考,遂记录下来。
|
消息中间件 JavaScript 小程序
用1个月重构了同事写的烂代码,我总结出了15条重写烂代码的经验!
用1个月重构了同事写的烂代码,我总结出了15条重写烂代码的经验!
|
编解码 前端开发 程序员
为啥只跟着视频敲代码学不好编程?
为啥只跟着视频敲代码学不好编程?
455 1
学习编程照着别人的代码敲进去有效率吗?
这是很多新手都有的一个困惑:书/视频都看懂了,就是不会自己写。 这也是当初一行学编程时非常困扰的一个问题,之后不会写就对着敲代码
156 0