程序员给非极客讲打岔的真正代价

打岔是程序员效率低下的最大起因之一。好的,公平起见,它们很可能是所有人效率低下的一个较大因素,只是相对而言,它们对程序员的危害更严重。为了理解我的意思,让我们看看某位销售人员,他花在电话或去参加会议的时间有许多天了,有个会议,在此之前需要看下笔记,对于销售人员的打岔 意味着 花费时间处理打岔,摇摇头,以及“我刚才要做什么……哦,想起来了。”对于经理,每天常常是一系列的无止境的打岔。我具备一定的管理能力,还是发现当我坐下来吃午餐的时候,仍然没有开始做当天计划的第一件事情。Paul Graham有一个非常棒的文章,是关于经理和他称之为“制造者”(makers)的人,以及明确包含程序员在内的一组人 的每天不同情况。

对于一个程序员,打岔是不同的。你坐在那里,12个调用进入调用堆栈。一个显示器上是一组精心挑选的数据,用来输入到一个复杂表单,负责生成情景。另一个显示器上是你喜欢的有dark主题的IDE,调试器里的当前代码行标着令人愤怒的黄颜色。你为了重现这个情景花费了50分钟——你最终敲入合适的输入值,理解事件被触发的顺序,foreach和while循环每次花几分钟就可以得到正确的值,在异常被触发、便于你处理剩余的代码库部分前,设置好断点。这时候,就是这么凑巧,你明白了订单集合里为什么有22个,你知道_underbilledCustomerCount的确切值是什么,因此你已经匆忙记下来这个字符“8xZ204330Kd”,因为它是随机生成的、由数字和GUID组成的验证码,你不需要理解也不想理解,你仅仅需要知道它是什么就可以了。这一时刻,你开始变得兴奋起来,因为你即将揭开一个你非常确认的第三方类库调用引起的空引用异常的秘密——

“嗨!!!怎么样了?听着,你知道客户订单崩溃是,恩,非常糟糕的,对吧?我能知道确切的修复时间吗?”

[caption id=”attachment_219” align=”alignnone” width=”550”]打岔 打岔[/caption]

操!!!!

项目经理吓到你了,当你准备操作下一个命令时,你点击了“step over”而不是“step...

为什么你要关注Nodejs

我知道我的很多读者都是讨厌JavaScript、支持.NET的活跃核心的家伙,因此请容许我简单谈论一下Nodejs

清楚起见,我在本文不主张任何东西。做为一个成熟的开发者,你看到社区正在发生的一切,对于为什么有些东西是新的、以及新想法是如何被新技术催生出来,我想这是重要的。我希望本文能够带来一些。

认识Nodejs

简单讲,Nodejs是为JavaScript提供的运行时,它鼓励非阻塞I/O和快速的网络。Nodejs本身不是用JavaScript写的,它只是用Chrome的V8引擎来执行JavaScript。引擎提供了很多当今强大的工具(比如Bower,GruntJS等),但是主要用在简单的web服务器平台。

Nodejs有魔法般的可伸缩性吗?

在我第一次听到Nodejs时,大家的讨论一直是你怎样才能用它产生一个快速的、可伸缩的网站/APP。然而这是真的,它的本性没有魔法。诀窍是Nodejs鼓励非阻塞的行为。Nodejs本身是单线程的(尽管你可以运用它的多个实例),但是它鼓励你去考虑事件和回调等事情。当等待这些回调时,线程是不忙的,因此它能够承载比传统web服务器(比如IIS或Apache)每个线程更多的流量。

Nodejs是一个令人钦佩的技术,我认为它真正的好处是,它不依赖线程池来完成智能异步。它鼓励在服务器端写异步的代码。如果请求在等待一个操作,它就能够释放线程去处理另一个请求。

这意味着你能够容易地用Nodejs每个线程来构建更好的可伸缩性。Nodejs的吞吐量并不一定比你从IIS或Apache得到的多,这是因为后者在这个问题上可以产生更多的线程。Nodejs不能把横向扩展的概念做为一个明显的选择,因为它取决与被独立应用的情景。这有解决方案,只不过这些方案就是你在寻找或‘购买“的(比如Azure,AWS等)。

.NET能从Nodejs学到什么

由于我能够说(我对这些技术做了深入的研究),我认为.NET正在借鉴Nodejs。这就是为什么有那么多OWIN的东东,结合OWIN和scriptcs就可以使.NET非常接近Nodejs的愿景。但是做为开发者,我能学到什么?

如果你像我一样,在ASP.NET(等等)有很好的技能和经验,我非常想从Nodejs的优点中获益。你应该考虑的一个概念是非阻塞I/O,和事件回调。它大量存在于ASP.NET MVC 和 Web...

一窥Emacs 24.4:默认自动缩进

我过去写过一篇关于electric-indent-mode的文章,它被加进了Emacs 24.1。在Emacs 24.4,用户可见的最显著变化之一就是它开启了这一功能。这是Emacs朝着“现代化”迈开的一大步,也是最近几次默认设置变化较大的一次。让我们借助一些Ruby例子来看看这个模式是如何工作的( 代表光标位置)。没有electric-indent-mode:
def something| 

在敲回车之后,会得到: