怎样编写优秀软件

原文地址(source):http://www.ideabyte.net/softwaredesign.html

软件必须是自由的

优秀软件是自由软件。我将避免使用“开源”,因为它根本没有包含社会层面,它和技术本身同等重要。你可以从这里了解更多。

广泛被接受的工具和语言

编写优秀软件的语言是被广泛使用的,这使得有人能够阅读和修改代码。优秀的语言,比如C、Python和Java。当然也有例外,一些较少被使用的语言是更好的选择。

保持简单

优秀软件不做不必要的事情。换句话说,没有不必要的功能。实现没人使用的功能只会产生bug。设计软件时,保持简单应该作为最高优先级。正如爱因斯坦说的“让事情尽可能简单,而不是比较简单。”

太多抽象是糟糕的。如果你把代码隐藏在多层抽象之后,你也隐藏了bug。太多的抽象让代码难以理解,难以跟踪执行路径和debug。它也会降低性能。抽象之上的抽象经常可以在Java编写的企业软件中看到。优秀软件可以用Java编写,但是Java也让编写恐怖的、结构复杂代码变得非常容易。C++也是如此。

不要弄成火箭科学

使用具有真正意义的变量名。不要使用单字符变量名。它们几乎不可能理解和追踪。也有单字符的变量名,它们是被普遍接受了。例如对于坐标,用x和y就行。对于循环,就使用i,j等等。除此之外,不要这样使用了。通常地,对于优秀软件,代码的结构是清晰的,还有可查的、记录下来的代码风格。

文档是重要的

...

学习Google在解决问题方面的4种思想

原文地址(source):http://www.inc.com/rebecca-borison/four-things-you-can-learn-from-googles-culture-of-problem-solving.html

谈到办公室—和办公室文化—应该是什么样子时,Google经常被作为例子。很多公司调查了这家搜索巨头,在雇佣员工和创造有趣环境、以让人们乐于来此工作上,是如何做的。

但是在有些地方甚至是更重要的,Google或许也是个例子:怎样以一家公司的身份来解决问题。

哈佛商业评论的一篇文章里,关于数字战略和创新的专家Greg Satell就这种解决问题的文化提出了一个具体的例子。随着业务的进展,在2002年,联合创始人Larry Page走进办公室厨房,挂起了Google AdWords引擎给出的页面输出结果的打印页。他在顶部写道,“这些广告是垃圾。”

“在大部分公司,这将被视作残酷的——一位自大的高管因员工的低劣工作成果而公开羞辱他们——但是在Google不是这样的。”Satell写到,“事实上,他的这一不寻常的行为恰恰是自信的表现,指出一个艰难的问题,他知道他的天才工程师们愿意去解决的。”

Larry Page的策略起作用了,在那些日子,Google工程师们已经改善了AdWords,把广告引擎推向了行业领导者的位置。根据Satell所说,关键点在于Larry Page关注于问题本身,而不是问题背后的人。Satell分享了这种策略起作用的4种不同解释。

1.人们想做一份优秀的工作

员工并不想搞砸,因为错误就对着他们吼,不会对你有什么帮助。相反地,Larry Page找到广告小组大喊,他只是提出了一个问题,他也理解,他的员工出于人性,将受到激励去解决它。

初试Sketch

原文地址(source):http://nagarjun.co/post/105572899840/moving-to-sketch

在设计过程中,我用过大量工具。一般地,我用Evernote记录研究,并在那里形成想法。一旦做完了,我就尽量用纸和笔画成粗糙的线框图。如果对于纸上的总体布局觉得满意,我就把该线框图迁移到工具里,如果是web应用,就用Balsamiq之类的工具;如果设计移动app,我就用Adobe Photoshop创建像素级匹配的原型。有些情况,我甚至使用Adobe AfterEffects制作UI动画,因此开发人员能够像素对像素地再现某个想法。

我已经使用这些工具有多年了。Balsamiq相当易于学习,但是非常基础。我用了两年才能驾驭Photoshop。Photoshop不是专门做UI原型设计的,人们只是用到了它们的部分功能。我通常对于被折衷的工具感到不舒服,尽管我已经习惯好多年了,但是,在我听了有关它的情况之后,我决定本周公平地尝试一下Sketch。我知道有些晚了,但是乐于最后搞定它。

Sketch截图

如果我使用Photoshop的时间不够长,可能就不会如此地感激Sketch了。用Sketch的前两天里,我90%相信,我将再也不会使用Photoshop来设计接口。Sketch就是为UI设计而生。它综合了Balsamiq的简单和Photoshop的强大。我只用了几个小时就习惯了它的text,我甚至重建了布局,之前我用Balsamiq做线框、并用前端技术开发的。这个过程觉得非常自然。

下面是我推崇Sketch的地方:

简单

不管怎样,在使用Sketch时,你会时不时地感到舒服。我发现自己能够轻松地在UI之间跳转,我甚至只用几个小时就记住了所有的快捷键。如果你以前使用Photoshop,你将喜欢上Sketch组织图层的方式。做为一名Mac用户,Inspector给我的感觉也是非常自然的。

Sketch里的画布(Artboard)与Photoshop里的画板(canvases)类似,除了你在窗口里可以有多个画板。Sketch甚至提供了预定义模板,用来设计响应式web应用、iOS app、Android...