摘要:
[原文链接]职业人士最常见的一种抱怨是:时间太少。每周工作超过60小时的人会抱怨甚至挤不出时间来处理他们邮箱里的邮件,更别说有创见性处理大项目中的问题。但时间并不是问题,哈佛经济学家Sendhil Mullainathan说。最终阻碍你成功的是你的大脑“带宽”使用效率,或集中精力的能力。Mullainathan的研究主要针对是资源稀缺情况,当人们缺少某些东西时会如何应对——可以是缺钱,食物或时间。他和他的搭档普林斯顿大学的心理学家Eldar Shafir在周二的每年一度的Aspen Ideas节上公布了他们的发现。他们发现,这些资源短缺导致人们不能作出正确的决策。因为他们的大脑只能够处理这么多 阅读全文
摘要:
[原文链接]我并不认为程序员是一个情绪特别丰富的群体。但有一些事情却能很容易刺激程序员的神经,那就是代码格式和布局。如果看到一个函数的括弧在同一行上没有闭合,我的眼睛会喷血。如果看到有人没有恰好的在两个函数间留一空行,我的小腿会抽筋。但重点在这里——除非是在家里开发自己的业余爱好软件,我的这些个人喜好其实是无关紧要的。同样,作为一个团队中的一员,你的个人编程喜好也应该放到一边。编码风格很容易会和编码规范混为一谈,因为这两个词经常会被人换着使用。我认为,编码规范同时包括了编码风格和其它规范,不仅仅指代码格式。例如,像“返回成功/失败的函数应该用一个整数作为返回值”,这样的规则不属于编码风格。在这 阅读全文
摘要:
[原文链接]下面是一些迄今为止最好的关于编程的名言名句。阅读它们时相信你会有几分愉悦,你可以在一些会谈场合引用它们,一定能为你的团队吸引到不少的好程序员。UNIX很简单。但需要有一定天赋的人才能理解这种简单。–Dennis Ritchie软件在能够复用前必须先能用。–Ralph Johnson优秀的判断力来自经验,但经验来自于错误的判断。–Fred Brooks‘理论’是你知道是这样,但它却不好用。‘实践’是它很好用,但你不知道是为什么。程序员将理论和实践结合到一起:既不好用,也不知道是为什么。–佚名当你想在你的代码中找到一个错误时,这很难;当你认为你的代码是不会有错误时,这就更难了。-Ste 阅读全文
摘要:
[原文链接]几乎已经有10年了,科技界的专家们一直谈论着摩耳定律的终结。就在本周,《经济学家(Economist)》发表了一篇文章,讲述程序员们如何开始使用函数式编程语言来驾驭如今已成为标配的多核处理器。事实上,这些新式语言的发明人,例如Rich Hickey (Clojure语言) 和 Martin Odersky (Scala语言),都在勤奋的宣扬这些语言如何给了开发人员们更大的能力来处理复杂的并行性编程,来充分利用多核CPU。本周早些时候,我参加了Scala语言日大会,去听Martin Odersky的讲道,他几乎用了一半的时间来讲这个主题。种种信息一遍又一遍的在向程序员表明:你需要写并 阅读全文
摘要:
[原文链接]最近在读《real world haskell》里关于并行的一章时,看到作者首先对并发(Concurrency)和并行(Parallelism)的区别进行了定义和解释。以前我对这个问题也是一知半解,如果有人问题这个问题,恐怕我只能挠头说不清楚。而在这本书里,作者的解释是(简单翻译):一个并发程序是指能同时执行通常不相关的各种任务。以一个游戏服务器为例子:它通常是有各种组件组成,每种组件都跟外部世界进行着复杂的信息交互。一个组件有可能要处理多个用户聊聊;另外一些可能要处理用户的输入,并把最新状态反馈给用户;其它的用来进行物理计算。这些都是并发处理。并发程序并不需要多核处理器。相比之下 阅读全文
摘要:
[原文链接]这里将向大家分享的是一些我对编程的思考总结,这些经验在我毕生编程生涯中曾帮助我在无数的事情上作出正确的决定。这些编程策略有些是很显然的,但实际编程中往往被人们忽略。下面的例子是用Python写的,但这些概念适用于任何编程语言。2. 代码优化找出程序的主执行路径——你的程序大部分时间都执行这些模块。首先优化这部分代码,但也不要在程序实现的第一次迭代中进行优化。那些处理边界情况或失败/异常处理的地方,这部分代码不需要优化,除非它们引起了值得注意的性能问题。 :).3. 代码行数不要试图压缩代码行数,但你应该压缩每个任务的代码行数。写简单的函数/方法,每个函数/方法只完成一个任务,而不是 阅读全文
摘要:
[原文链接]我们说懒惰有三种。第一种,整天就是吃和睡。第二种,是告诉自己,“有一类人,就像我这种,是永远管理不好自己的。”在佛教思想中,这种懒惰会让你认为努力也是白费的,你永远无法获得精神上的救赎。无自信会让你打消任何企图努力一下的念头。而这第三种就是,把生命浪费在不是最重要的事情上,总是不从解决事情最本质的问题入手。所有的时间都在想办法解决次要问题,一个接一个,永远没有尽头,就像湖面涟漪的水纹。你在告诉自己,一旦完成了这个或那个,你将会去做一些更有意义的事情。…克服第一种懒惰——生活中只有吃和睡——的方法是反省死亡,反省万物终归尘土的自然属性。我们不知道何时就将死去,何事将会导致我们死去。所 阅读全文
摘要:
[原文链接]如果你有一个4.2GB的CSV文件,里面有超过1200万条记录,每条记录都有50列。现在你要做的是把其中某一列的值全加起来。你怎么办?这是我最近看到的一篇文章的开头部分。文章介绍的是如何使用unix命令来分析大体积文件的文章。像我这样一个基本上都在Windows平台上开发的程序员,对他提出的这样一个问题,首先出现在脑子里的就是内存溢出、CPU达到100%、跑一个晚上。而对于一个Linux/unix高手来说,这真是小菜一碟,正如文章中介绍的方法,一行命令就完成了这个任务。(假设文件名叫做data.csv,行数据用竖线分割,我们需要总计其中的第四列。)cat data.csv | aw 阅读全文
摘要:
[原文链接]“Scientia potentia est”——这是拉丁语,意思是“知识就是力量”。这是长久以来人们就熟知的信念:你对这世界了解的越多,你就能越好的在世界里生活。你对一件事了解的越多,你就能越好的掌控它。那最简单的汲取知识的途径是什么?读书。如果你想更好的掌控自己的生活,让生活按照自己意愿发展,你就需要读书,读大量的书。我想,所有的人都会同意这个观点。但问题是,如何能做到能够充分的阅读?就拿我来说,我对上一年的阅读量并不满意。我每年大概读6-8本书,我认为这个数字太低了。大概6个月前,我制定了一个新的读书策略:规定一个每天必读的页数,30页,每天坚持,不论有什么事。一个人一般30 阅读全文
摘要:
[原文链接]生命短暂,无可浪费,这我们都知道。然而,大多数人都处中一种缺省状态的生活中,逼迫自己去认为很幸福——虽然事实上不是。为什么?因为我们让社会来指定该如何的去生活、什么才是成功和什么才是幸福。像金钱和名誉这样的东西被赋予太大的分量,成为祸根,阻碍了我们寻求生活的真正本质:活出自我,做有价值的事情。如果让我给一个新生命(比如我未来的孩子)一点建议,我将衷心建议他遵循下面这10条诫律:1/ 不要跟别人比。自从上小学起,我们就被人们用分数来激励去竞争,忘记了教育的本质是学习。父母希望他们的孩子成为第一,或者要比xx更强,这样当在学校门口遇到xx... 阅读全文
摘要:
[原文链接]Colin走到我的办公室门口叫我去看他最新的研究成果。他拆解了他的显示器切换器(用来在两台PC之间切换显示器的设备),拆开的设备就摊放在他的桌子上。他用从RadioShack网站上淘来的部件重新组装了它,并用VB6开发了一套管理它的服务器和客户端程序,经过这样的改造,他实现当鼠移动到屏幕边缘时显示器就能自动切换的功能。Colin在做这个项目时获得了很大的乐趣,并且正在变成我们团队里最强大的程序员。这发生在Arduino创建之前一段时间,那时硬件Hacking的门槛还很高。VB6正在衰退,使用它的人被认为只能维护那些烂的LOB程序。从Co... 阅读全文
摘要:
[原文链接]你经常读编程博客吗?你经常读软件杂志吗?你经常读一些跟程序员相关的书籍吗?请停一下,放下你的计算机读物,下周再去读。去找一本跟IT无关的书。你是否曾经有过一种对编程世界如洪水般涌现的新事物不知所措的感觉?那正是你应该找一本不同的书去读的时候。找一本你觉得有趣的,或你喜欢的作家写的书。很多人认为读这些小说、读这些专业领域外的书都是浪费时间,但事实不是这样的。这些书的作用是让你的大脑转变一种思维视角。它们的作用是扩展你的知识领域。它们的作用是在替你准备消化下一个计算机里的新事物。你会发现一些有趣的现象,你会惊奇的发现看似不相关的主题却有着出... 阅读全文
摘要:
[原文链接]使用Linux shell是我每天的基本工作,但我经常会忘记一些有用的shell命令和l技巧。当然,命令我能记住,但我不敢说能记得如何用它执行某个特定任务。于是,我开始在一个文本文件里记录这些用法,并放在我的Dropbox里,现在,向大家分享这个文件。这个文件我会不断的更新。需要注意一点的是,有些用法需要在你的Linux系统里安装额外的软件。UPDATE: November 25, 2013检查远程端口是否对bash开放:echo >/dev/tcp/8.8.8.8/53 && echo "open"让进程转入后台:Ctrl + z将进程转 阅读全文
摘要:
[原文链接]我正好看到了下面的一段代码: publicvoidExecute() { ArrayListempIds =PayrollDatabase.GetAllEmployeeIds(); foreach(intempIdinempIds) { Employeeemployee =PayrollDatabase.GetEmployee(empId); if(employee.IsPayDate(payDate)) { DateTimestartDate = employee.GetPayPeriodStartDate(pay... 阅读全文
摘要:
[原文链接]最近我和一些程序员就编程问题进行了一次有趣的讨论。我通常会有这样的印象,感觉一些程序员过于强调代码的整洁。不要误会,我也很注重代码的整洁,在过去几年来也写过不少强调代码整洁的重要性的文章。但当我编程时,代码整洁只是我的第二重要目标,它永远不会取代我的首要目标:让软件先跑起来。让它能跑的很漂亮,这是我更大的愿望。当谈论起代码整洁时,很多人都能饶有兴趣的说出很多。他们坚持不懈的追求这个目标,有时他们在编程时还会穿上带有Uncle Bob的绿色的宣传图标衣服, 以此提醒自己什么是最重要的:写出整... 阅读全文
摘要:
[原文链接]现在距离我首次决定要创建Buffer这个应用已经将近2年时间里,在此之前的一年半时间里我一直为前一个创业项目而忙碌,就在那时,我开始发现一些规律,一些在创业过程中能影响你的生活起起伏伏的规律。就在那个时期,我学到了一个最重要的事情:当快乐时我做事做的最好。这几乎能体现在各个方面。如果我快乐着,我编程时会更有工作效率,我能更好的解决用户的问题,我发现我还能更容易集中注意力。就我而言,我发现有几个非常好的习惯能让我保持持续不断的快乐的感觉。而且,每当我的情绪有低落时,这些习惯是使我能迅速恢复到之前快乐水平的灵丹妙药。下面就是我坚持不懈的6个习惯:1. 早起... 阅读全文
摘要:
[原文链接]好的编程原则跟好的系统设计原则和技术实施原则有着密切的联系。下面的这些编程原则在过去的这些年里让我成为了一名优秀的程序员,我相信,这些原则对任何一个开发人员来说,都能让他的编程能力大幅度的提高,能让他开发出可维护性更强、缺陷更少的程序。* 我不要自我重复— 这也许是在编程开发这最最基本的一个信条,就是要告诉你不要出现重复的代码。我们很多的编程结构之所以存在,就是为了帮助我们消除重复(例如,循环语句,函数,类,等等)。一旦程序里开始有重复现象的出现(例如很长的表达式、一大堆的语句,但都是为了表达相同的概念),你就需要对代码进行一次新的提炼,抽象。http://en.wikipedia 阅读全文
摘要:
[原文链接]别以为是那些软件开发定律,别以为是开发出那些特殊用途的软件,别以为是软件设计技术本身。只有一条真理决定了一个软件程序员的成功还是失败。由于坚持这个真理,一个资深的程序员能在一天的时间里学会一门新的编程语言,而由于不坚持这条真理,一个初级的程序员用十年时间也只能挣到一份糊口的钱、永远是来实现别人的设计、永远不够优秀而得不到晋升的机会。这条真理让你看清了差的程序员和好的程序员的不同之处,好的程序员和伟大的程序员的不同之处,伟大的程序员和能通过自己的技术创造出一个亿万美元价值的程序帝国的超级程序员的不同之处。不是什么复杂的道理,不是什么难懂的理论。不是具有什么天赋或“编程超能力“才能做到 阅读全文
摘要:
[原文链接]多少年来,人们普遍有一种看法,认为软件工程应该和其它种类的工程一样:仔细的设计,精确的规划,然后进行开发—严格按照设计说明书。就像修建一座桥梁,不是吗?这种开发方式的问题在于:软件,它是“软”的。它可以无限的延展。任何需要的时候你都可以大幅度的修改你的软件,人们也都是这么干的。还有,因为软件可以被拿来对任何事物进行模型造型,你能要求软件开发人员去实现的可能的东西几乎是无穷无尽。想要在软件里模拟集成电路吗?干吧。想管理银行?没问题。让五亿人和他们的朋友保持联系?为什么不呢?小菜一碟。不仅如此,在开发的中途我们还能要求程序员去做各种修改,这种事情经常的以一种不可预期的形式出现。这可不是 阅读全文
摘要:
[原文链接]我读了Kevin Pang 的一篇可能非常老但非常好的有趣文章:每个程序员都该知道的10大编程格言。Kevin给了我们10条按他的观点的每个程序员必须知道的编程格言。可以看出,这都是不错的格言,而下面是我自己最喜欢的编程格言。保持简单直白(Keep It Simple Stupid)不要做重复的事情(Don’t Repeat Yourself)能干的人解决问题。智慧的人绕开问题(A clever person solves a problem. A wise person avoids it) –Einstein沉默会被理解为赞同(Silence is construed as a 阅读全文