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

q107770540 2014-10-17 10:40:04
加精
你想成为一名优秀的程序员吗?

那么,现在是时候放下《24小时学会xxx语言》超级骗子书,相反,你应当养成每天反问自己以下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开发者的进步过程。如果你害怕失败,你就不会有大的突破。

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

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


难道真的没有办法吗?

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

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

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


我可以向谁学习?

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

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

永远不要满足于能胜任现有的工作
...全文
20436 114 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
114 条回复
切换为时间正序
请发表友善的回复…
发表回复
坏坏DE超 2014-11-13
  • 打赏
  • 举报
回复
看过注意下就好了。。。
月光晒谷 2014-11-12
  • 打赏
  • 举报
回复
想要做到简洁确实需要能力
jsshizhanab 2014-11-12
  • 打赏
  • 举报
回复
你永远无法预知产品和业务如何变化,感触颇深。总是自己在哪儿意淫将来业务的方向,每次都是错
WZSDXS 2014-11-12
  • 打赏
  • 举报
回复
问了 发现我要疯了
「已注销」 2014-11-12
  • 打赏
  • 举报
回复
不错,学习了~
岭上梅西 2014-11-12
  • 打赏
  • 举报
回复
每次写代码倒是真的有在思考:怎么让代码更加简单 !
sglogin 2014-11-12
  • 打赏
  • 举报
回复
小猫钓鱼045B 2014-11-11
  • 打赏
  • 举报
回复
引用 27 楼 devmiao 的回复:
不觉得《24小时学会xxx语言》属于超级骗子书。 其实很多问题没法讲,也无需讲。优秀的人知道自己该怎么做。价值观的事情多说无益。 其实我也会看《24小时学会xxx语言》,我也会看案例教程。当然,我不优秀,但是起码属于正常的人。 这就好比一个人吃猪肉不用担心会变成猪一样。决定你身体每个细胞的是你的DNA,而不是猪肉上的碳、氧、氮等。一个人的理想和信念,乃至他的价值观决定了他做什么和成为什么样的人。内心足够强大而不会因环境堕落。
说的真好!膜拜!
love小贝壳 2014-11-11
  • 打赏
  • 举报
回复
lixupengC 2014-11-10
  • 打赏
  • 举报
回复
路过 看不懂
u010231493 2014-11-09
  • 打赏
  • 举报
回复
模式的话,我一般都找个合适的模式写。。。
jk_algo 2014-11-08
  • 打赏
  • 举报
回复
学习一下 总结就是:每天反思每天总结
huazhiyuan5566 2014-11-07
  • 打赏
  • 举报
回复
所谓理解就是要理解模式 — 以赛亚·伯林 受教了!
封荣城 2014-11-07
  • 打赏
  • 举报
回复
第一条 代码中是否有一个模式存在 受用
sj842166947 2014-11-06
  • 打赏
  • 举报
回复
忘世麒麟 2014-11-06
  • 打赏
  • 举报
回复
引用 17 楼 Peter_Hugh 的回复:
吾日三省吾身??
吾日三醒:凌晨憋醒、早上闹醒、午休后自然醒(半小时)
  • 打赏
  • 举报
回复
这是要散分的节奏啊
梵海木 2014-11-05
  • 打赏
  • 举报
回复
小白-彬 2014-11-04
  • 打赏
  • 举报
回复
好久没有学习了,天天加班
Humbunklung 2014-11-04
  • 打赏
  • 举报
回复
引用 33 楼 wizardforcel 的回复:
[quote=引用 6 楼 shenyi0106 的回复:] 能按照这要求写出代码的人,基本上都是5年以上的coder。 但是5年以上的coder成本和刚毕业的coder成本孰大孰小? 除此以外,开发周期也是不可避免的问题。 每一个coder总是趋向于把他的代码写的无限完美,但是这是只是理想,迫于各种客观条件(福利待遇,开发周期,所处时期的自身技术水平,以及职业发展规划)限制,都不可能完美,甚至可以糟糕来形容。 究其原因有一下几个: 1. 老板只要结果,不要中间过程。 2. “明天必须上线,否则就滚蛋!”。
是的。。。聪明的程序员会做权衡 看看老板给的时间够不够 看看这个月的工资值不值得这么去做 这些事情是自己周末沉思的时候 或者写自己的项目的时候 才会想的吧 公司的东西。。不该出现的不出现就行了[/quote] 颇有同感,哈哈。
加载更多回复(94)

7,774

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧