转载:程序员应该扪心自问的10个问题

想成为一名web开发人员?那么,扔掉《24小时突击掌握xx语言》这类骗子书籍。你应该养成一个习惯,每天问问自己下面这10个问题。
1.此处有没有模式?

研究在哪些情况下行得通,哪些情况下行不通的设计模式,能够让我们发现潜在的规则,了解看似不相关的概念和行为。为了更深层次地了解工作,你需要时不时地问问自己,“此处有没有设计模式?”。

这句话适用的不只是你的代码。在根据业务要求而变的类型变化中有没有模式?技术发展有没有模式?你是否经常看到同样类型的bug连连弹出?

理解其实就是一种感知模式。——以赛亚·伯林

2.如何让它变得简单起来?

通常作为web开发人员,我们会想着拿出复杂又可扩展的解决方案。搞点复杂的会让你觉得自己非常的高大上。问题是,你永远无法预知你的产品和业务在未来将会发生怎样的改变。

架构和编码与其说像建造,还不如说更像园艺艺术。你必须得能够适应不断变化的环境。解决方案越复杂,它的适应力就越弱。

简单才是终极的复杂。——达芬奇

3.它为什么这么工作?

知道事物能工作,与知道它为什么这么工作是两个完全不同的事情。知道一些事物的行为原因,有助于你做出显然更好的决策。

伟大的程序员,和那些只是知道一门编程语言的人之间的区别是,两者处于的知识层深度不同,前者深刻地理解其工作原理。

这也适用于修复问题的时候。“只要重新启动服务即可。”“你重启了吗?”当弹出问题的时候,我们往往会说类似于这样的话。然而,如果你这样说了,那你就失去了一次学习的黄金机会。

知道为什么会出现问题,才能从根本上修复问题,才能避免再出现这样的问题。

4.之前有人做过吗?

当你自我感觉发明了一种复杂算法的时候,可能就意味着你正在错误的道路上了。最好的方法是搜索其他人是否已经解决了这个问题。

需要写算法,以便于添加标签到最接近用户鼠标的菜单项中?别急,已经有解救方法了。想为送货车找一条最短路径?也已经有解决方法了。想找类似于用户刚刚enter的标签,那么也不用自己绞尽脑汁写了。

上面这些只是几个例子,但是相信我,你碰到的问题,别人早就碰到过了。

我能看得更远,那是因为站在巨人的肩膀上。——牛顿

5.谁第一个提出来的?

你觉得自己知道REST?

那么,你读过Roy Fielding说明REST的原始文件吗,你了解它的期望目的吗?暂且不说那个在IDE V7中使用REST API生成向导比你更有经验的博主了。

所以,告诉自己试着去阅读概念和理论的原始来源。然后通过各种方法去了解行业思想领袖给出的最新开发成果。如果你不知道是从哪里开始的,那么你怎么理解目前的发展进程呢?

6.我真的热爱我目前的工作吗?

首先让我们面对一个事实:编程很难。

即使很难,编程也在不断发展。如果用现在的标准来看,2年前的框架简直笨拙地就像一头恐龙。要想留在这一行,那么你需要终生致力于学习和研究。

如果你确实不喜欢编程,那么要想跟上那些热爱的人的步伐,希望并不大。找找你为什么对她没有兴致的原因。不要因为与市场存在差距或因为待遇还不错,就决定成为一名安全专家,不要只是因为最近的文章上面评论说,UX是高科技领域中最热门的职位,就立志成为一个UX专家。

重要的事情说三遍:做自己热爱的事情。做自己热爱的事情。做自己热爱的事情。

做自己热爱的事情,你所需要的资源也会随之而来。——彼得·麦克威廉斯

7.还可以用在哪里?

我发现web开发人员最大的局限之一就是失败的想象力。

我们在特定的情况下学习的东西,或看到某种用于解决特定问题的技术,我们往往会认为这就是它们的唯一用途。但是,这个想法基本上都是错的。每次你学到新的东西的时候,都应该问自己:“还可以用在哪里?”。

学到了一种超棒的新的定位方法来定位图形节点,那么它是不是也可以运用到在有2个维度的数据集中查找某一个数据点?发现一个越过WebSockets从客户端发送数据到服务器的很棒方法?那么它该如何应用于制定一个可扩展系列的后端服务?有时候此路不通,有时候却是可行的。

逻辑能力能让你从A到Z,但是想象力却能让你去往任何地方。——?爱因斯坦

8.我败在哪里?

最简单的革新方法就是降低失败的成本。

游戏开发公司Valve和它的一些同行就将此当作金科玉律。这同样适用于web开发人员,如果你害怕失败,那么你将永远不会有大的突破。

勇敢地去尝试,从失败中学习,然后再试一次。

不要害怕犯错。认识失败。然后从头来过。——本杰明·富兰克林

9.如何实现这个目标?

我们生活的世界中只有很少一部分事情是真的完全不可能的。

要抱着自己想做的任何事情都是可能的这样一种想法去做事。可能你会发现你想做的事不符合当前实际,但随着世界的不断进步,它也许比你想象地更快成为了现实。

事情未成功之前,它永远是看似不可能的。——曼德拉(前南非总统)

10.我可以向谁学习?

不要在你是最聪明的地方工作。

选择那些拥有能够激励你,挑战你,让你做得更好的同事的工作和企业。不必与代码相关,在文本编辑器和命令行之外还有一个世界。学习其他领域的事情,然后应用于你的工作中。

不管如何,仅仅胜任工作是不够的。

时间: 2024-12-24 17:34:12

转载:程序员应该扪心自问的10个问题的相关文章

[转载]程序员必须知道的10大基础实用算法及其讲解

算法一:快速排序算法   快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来. 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists). 算法步骤: 1 从数列中挑出一个元素,称为

转载 程序员技术练级攻略

转载 程序员技术练级攻略 博客分类: 转载 本文转载自陈皓(http://coolshell.cn/articles/author/haoel) 博客: http://coolshell.cn/articles/4990.html 月光博客6月12日发表了<写给新手程序员的一封信>,翻译自<An open letter to those who want to start programming>,我的朋友(他在本站的id是Mailper)告诉我,他希望在酷壳上看到一篇更具操作性的

[转载] - 程序员对内存的理解

程序员对内存的理解 原文链接 在C和C++语言开发中,指针.内存一直是学习的重点.因为C语言作为一种偏底层的中低级语言,提供了大量的内存直接操作的方法,这一方面使程序的灵活度最大化,同时也为bug埋下很多隐患. 因此,无论如何,我们都要对内存有一个清晰的理解. 一.对内的分配 32位操作系统支持4GB内存的连续访问,但通常把内存分为两个2GB的空间,每个进程在运行时最大可以使用2GB的私有内存(0x00000000—0x7FFFFFFF).即理论上支持如下的大数组: char szBuffer[

每个程序员都必读的10篇文章

作为一名Java程序员和软件开发人员,那些每个程序员都应该知道的XXX的文章教会了我不少东西,它们提供了某个特定领域的一些实用的并且有深度的信息,这些东西通常很难找到.在我学习的过程中我读到过许多非常有用的文章,我把它们添加到了书签里,方便以后阅读或者引用.我个人认为所有开发人员都能从这些文章中受益,因此我也写了篇“每个程序员都应该了解的”文章,准备分享给你们.这是我的个人收藏.在这篇文章中,你会看到每个程序员都应该了解的一些经典文章,涵盖了内存,unicode,浮点数,网络,面向对象设计,时间

程序员必须进行的10项投资(转)

你的健康 显而易见,开发人员经常都是坐着不动的.每天坐8到16个小时,只休息很短的时间,你的肚子周围很容易会堆起赘肉.肥胖是其它疾病的催化剂,而其中心脏病又是最可怕的.多花点时间运动一下就能避免这样的情况,如果有可能的话,花点钱办一张健身房的会员卡. 长时间以不符合人体工程学的姿势打字,也容易使开发人员选成重复性的肌肉损伤,比如说腕管综合征.每隔几个小时拉伸一下你的手腕或者买块鼠标和键盘都能用的手腕护垫可以避免这样的损伤. 盯着屏幕也会给你的眼睛造成压迫,这就是为什么建议配一副防眩光眼镜而不是普

一个Java程序员应该掌握的10项技能

1.语法:必须比较熟悉,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样的语法错误并且知道任何修正. 2.命令:必须熟悉JDK带的一些常用命令及其常用选项,命令至少需要熟悉:appletviewer.HtmlConverter.jar.java.javac.javadoc.javap.javaw.native2ascii.serialver,如果这些命令你没有全部使用过,那么你对java实际上还很不了解. 3.工具:必须至少熟练使用一种IDE的开发工具,例如Eclipse

Java程序员常犯的10个错误

本文总结了Java程序员常犯的10个错误. #1. 把Array转化成ArrayList 把Array转化成ArrayList,程序员经常用以下方法: List<String> list = Arrays.asList(arr); Arrays.asList() 实际上返回一个ArrayList,但是这个ArrayList是Arrays的一个内部私有类,而不是java.util.ArrayList类.这个私有类java.util.Arrays.ArrayList有set(), get(), c

程序员必须知道的10大基础实用算法及其讲解

程序员必须知道的10大基础实用算法及其讲解 原文出处: cricode 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比 较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构 上很有效率地被实现出来. 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子

程序员必知的10大基础实用算法

    算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2) 次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的 架构上很有效率地被实现出来. 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists). 算法步骤: 1 从数列中挑出一个元