程序员写代码时应该反复问自己的 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开发者的进步过程。如果你害怕失败,你就不会有大的突破。

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

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

难道真的没有办法吗?

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

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

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

我可以向谁学习?

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

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

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

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

时间: 2024-08-03 03:06:18

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

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

问题描述 你想成为一名优秀的程序员吗?那么,现在是时候放下<24小时学会xxx语言>超级骗子书,相反,你应当养成每天反问自己以下10个问题的习惯.你的代码中是否有一种模式存在?找寻模式中的可行与不可行将发现其中看似无关的想法或基本原则.要对工作达到深入的理解,你必须养成反问自己"是否有一种模式存在?"的习惯.它不仅仅适用于你的代码.是否有适应各类型商业变化的模式吗?是否有一种适用于技术发展的模式?你有没有看到同类型的错误如雨后春笋般冒出来?所谓理解就是要理解模式-以赛亚·伯

程序员写代码时的各种内心戏 ……

01.读大神写的代码的时候:这是什么----我X,太牛X了. 读刚来的程序员写的代码的时候:这是什么----我X,太傻X了. 02.读大神写的代码的时候 当读其他程序员写的代码的时候 03.当别人写的bug,让自己发现的时候: 我操这个大撒比写出这么个烂代码 幸亏有哥这样神一样的存在才发现 哥真是救世主 没有哥这个公司分分钟要倒闭. 当自己写的bug,被自己发现的时候: 卧槽,隐藏的很深啊! 哥就是犀利,自己开发自己测试, 看测试那帮撒逼什么也不会干,这么明显的bug都测不出来, 真是一群废物!

当机器人取代程序员写代码,会发生什么呢?

编者按:在过去的十年时间里,软件开发行业已经发生了非常大的变化.过去,程序员需要在大学或工作中花费好几年时间才能学习掌握一些编程知识,熟悉了解一些昂贵的服务器性能,而现在,只需几周时间就能搞定一项网页开发编程语言了.基于人工智能生成的代码,为整个行业带来了颠覆创新,也让我们处在了下一代范式快速转型中,身处在这个拐点上,我们不得不说,未来网页开发很可能会不复存在,以后甚至都不需要任何编程劳动力了. "计算机想要在围棋上击败人类,可能还要等100年!"--<纽约时报>,1997

优秀程序员写代码的七个优秀习惯

伟大的程序员都有三个优点:懒惰.急躁和傲慢.为什么这么说呢?懒惰会促使他们去写一些省事儿的程序来辅助他们或别人更好的工作,这样他们就无需再 去回答一些不想回答的问题.没耐心会激励他们去写一些程序,不等你提出就主动满足你的需求.傲慢会促使他们写出可靠无误的代码,因为他们不想受到批评和指 责.但是,伟大的程序员也并不总是高效的,那些每天都能将自己的工作完成的很好的开发者,比那些偶尔编码到令人眩晕的高度的程序员要更高效.为了提高你的 就业能力,你不需要成为一个伟大的开发者,而是一个高效的开发者.下面的

给优秀程序员写代码的五个建议

成为一个优秀的程序员其实就是和成为其他优秀的专业人员一样,需要尽可能多的去做一些有质量的工作.而有句很流行的话就可以用来总结:做,正确的做事,要立马就做.(Do it. Do it right. Do it right now) 1. 将你一天要做的事情列成一个清单 完成复杂活动(activity)的最好方法就是要将他们拆分成简单的各项活动.而在每天早上,就把你一天要完成的活动进行拆分,然后你要制定一个相应的日程安排表,而这样就能够帮助你: 去更好的理解这个活动. 你每天都会有一个集中的目标.

mvc前台用@写代码时如何获取input的value值或js的变量值

问题描述 mvc前台用@写代码时如何获取input的value值或js的变量值 <script> $('input[name=c1]').change(function () { var value1 = $(this).val(); var value2 = $('input[name=c2]').val(); var value3 = $('input[name=c3]') if (value2 != """") { value3.val(@Calc

在vs2010中用c++写代码时将textbox的文本转换为double类型时总是出错

问题描述 在vs2010中用c++写代码时将textbox的文本转换为double类型时总是出错 double du = double.Parse(textBox5->Text); double dlje = double.valueOf(textBox4->Text); double dljn = atof(textBox3->Text); 错误: 错误 2 error C2062: 意外的类型"double" 错误 5 error C2062: 意外的类型&quo

64位-MFC程序读写并口时,什么避免状态寄存器10和11位高电平时的影响数据位和控制位的状态?

问题描述 MFC程序读写并口时,什么避免状态寄存器10和11位高电平时的影响数据位和控制位的状态? Win7 64位系统使用MFC程序读写并口时,发现并口状态位寄存器控制的10号.11号管脚为高电平时,并口数据位管脚电平被强制置低,控制位的14和17号管脚周期性跳变.经Google.百度查了发现并口有一套为打印机设计的一套通讯协议,但不知道什么去除通讯协议的影响.或者还有什么接口直接操作并口? 我目前的项目需要用并口与外部设备通讯,输入信号用到并口状态寄存器. 编程使用的接口是WinIo(下载网

当一个程序员写不出代码了,该怎么办?

你已经对着电脑n个小时了.不知道该写什么代码,或者一种摔键盘的冲动正在你的胸中酝酿. 咖啡一杯接着一杯.不敢再喝了,因为搞不好要有副作用了,心跳加速,身体不由自主地颤抖,出冷汗,但还是无法产出任何代码. 所有重新发现编程趣味的努力都徒劳无功,因为你的最后一点能量都用来驱逐大脑中正在攻城略地的话: "我写不出代码了!" 编程的本质是棘手 即使是最优秀的程序员也会遭遇无法解决的软件工程问题.碰到这样的问题,并不一定意味着你缺乏技能或知识. 编程不是一项容易的工作,我们可以通过采取非正统的方