1. Coding Alone

    写代码是我的工作,我也乐在其中,你可以想象一下在某个风轻云淡的炎热夏日,我在面对屏幕在宿舍不停的敲打键盘,间歇时便啜口白开水,然后继续… 一个web应用,从数据库设计,业务逻辑代码,很酷的特性,前端页面和样式一手包办,老实说如果让别人帮我作,我都不放心,我担心他写出东西不符合我的期 望,又难以启齿说他写得不好。这样,我发现一直以来都是一个人在写代码,我可以写出一个别人都喜欢用的应用程序,但是却没有人会在看完你写了一段很酷的代 码而大声称好,也没有人乐意指出我的不足,跟你说这块代码写的有问题。我觉得很沮丧,就像你写的书无人问津。而即使现在在公司里也不例外——团队之间的合 作似乎并不体现在共同参与同一个项目,更多的是一种依赖关系。项目里你负责的部分写好了代码,只要它工作正常,在项目计划好的时间内完成,那就成,没有人 在意你写成什么样。我想结对编程可能会是个好主意,但是结对编程绝对是幻想,公司不大可能付出这样的成本,但是我觉得可以尝试,就像Thoughts on two months of pairing说的那样,结对编程真的会解决一些问题,”Get Shit Done”,而且对现在的我来说可以解决我的问题。结对编程的好处是:

    • 两个人之间可以互相督促,把工作完成,提升效率。
    • review对方的代码,减少bug。就像Thoughts on two months of pairing说的那样,有时你写另了一段代码觉得ok,但是经过别人的review就很容易发现问题,然后自己再看时就发现自己写的有多么荒谬。
    • 互相学习和提升。每个人都是在这技术领域唯一的冒险者,有着不同的理解和技巧,大家可以取长补短。

    另外,我并不想把结对编程和敏捷开发联系起来,虽然更多时候,结对编程就是一种敏捷开发的方式,因为我想强调的是结对编码要优于独自编码。 Jeff Atwood的On Working Remotely也 谈到他曾经一个人编码的经历,现在他在家中和他的code partner一起“甜蜜”地工作,在“野外”寻找一个这样的code partner我觉得比找gf还要困难,因为两个人需要在编码水平差不多的情况下,对编程的理解需要一致,有共同的想法和目标,但最重要的是两人需要既是 code partner也是朋友。

  2. 怎样使你对编写程序发生兴趣?

    怎样使你对编写程序发生兴趣?
    海龙问我,有没有一本书能够使自己对编程感兴趣,我当时说我不知道,好像没有,事实是许多人在学了C/C++之 后,就失去了对编程的兴趣,觉得编程既枯燥又难学,我得承认C/C++语言绝对是一流的程序设计语言,它经历整整三十年依然为广大厂商和程序员采纳,可问 题是是否C/C++是最好的入门语言。C/C++固然是其他C体系语言的基础,比如Java,我也是在学习了C/C++之后学的Java,这时学习难度并 不是很大,至少是在语法方面,可是呢,你知道,许多人在C语言的指针问题上出了问题,它很难学(至少是对初学者来说),所以它绝对是个不折不扣的瓶颈,而 C++的面向对象实在是可怕(与其他面向对像语言相比),一堆需要花许多时间来理解的概念(至少我不明白,我认为这是蹩脚翻译惹的祸,辞不达意),友元、 虚函数、纯虚函数、模板等。另一方面,学校只教会你一门语言的语法,却不会告诉你编程的本质以及如何设计出好的程序来,什么才是真正的面向对象?什么是设 计模式?这暂且不说,再回到C/C++是否是最好的入门语言问题上来,很显然,你知道我要说什么:我想说不。那么谁才是最好的入门语言呢?我很想说是 Java,因为许多其他大学都将Java作为首选,而且我自己用起来最流畅的就是Java。可是我仍然认为Java也不是最佳的,因为我觉得最好的入门语 言首先应该具有一下几个特点: 0.简单易学 1.语言本身和自然语言(英语)相似度高,代码对人类可读性高。 2.可交互的 3.面向对象 4.通用性高 5.自由灵活 6.平台独立 7.开发效率高(见效快) Java只具有0,3,4,6,7,而0也要看条件,1 马马虎虎也算是。而这里我想说的是Python语言。我不想过多谈论Python有多么好,那没有任何用处。可是如果你若问我如何对编程感兴趣,那么我会 说:去学习Python吧。你看,Linux操作系统自带Python不是没有道理,而Googel、豆瓣使用它作为开发语言也不是心血来潮。我觉得初学 者如果能够迅速用一门语言解决掉一个有趣的或是是挑战性的问题,那么这会在很大程度提高自己对编程的兴趣,成就感也很重要不是?不需要编译也不要链接,也 没有莫名其妙笨拙的编译链接错误,只需几行代码,执行并给出结果,那该多好。看看下面最简单的例子: C++版

    #include void main() { cout « “Hello, world.” « endl; }

    Python、Groovy版本

    print “Hello,world.”

    试想一下你从来没有学过C/C++…
    你得明白,编程语言这玩意只是个工具,如果花在学习工具上的时间占用了大量时间或者很难学,很有可能使大家望而却步,根本就没有机会去解决那些有趣的问 题,是吧? 可是我仍然没有回答最初的问题,怎样使你对编写程序发生兴趣?因为即使是选择Python也不能使我对编程感兴趣啊,其实我觉得这得问你自己除了编程外对 什么事情特别的感兴趣,拿我自己作例子,大一时我对骇客技术十分好奇,我想黑掉一个网站,可是我不懂那些骇客技术使用的编程语言,我想大干一票,怎么办? 没办法,学习一个语言吧,于是我开始学VBScript(一种Windows上嫡系脚本语言),而且上了瘾,虽然这个语言现在我已经忘光了。可是如果你对 对Linux感兴趣、对好玩的硬件、对网络感兴趣,那么你就得去学C/C++,对不对?如果你是一名艺术爱好者,那么你可以去学Processing、 CSound,我可以双手按在圣经上发誓,这两种语言绝对能够让你痴迷,并沉醉于其中,只要你真的是热爱艺术,或者你发现游戏里那些带着智能的行为实在是 很迷人,那么你可能会去寻找一种你可以控制这种智能行为的方式,那是什么呢?编程,Java、C/C++或其他语言(Inform),又或者你对开发网站 很感兴趣,想写出想豆瓣那样的网站来,那么,啥都别做了,开始学习Python(ruby on rails,groovy on grails)吧…

  3. Everyone can cook

    最近看了迪斯尼出品皮克斯制作的动画电影《料理鼠王》,说的是一只会说一口流利英语的老鼠有着灵敏嗅觉而且对厨艺这方面有着不可思议的天赋,在通过与人类 的交往中展现了自己的天才厨艺,而且深刻地反映了贯穿影片始终的主题:Eeverone can cook. 可是并非人人都能成为优秀的厨师,这就是苏大后庄小吃一条街那些炒菜的师傅以及我们的老爸老妈与汉庭坊里的厨师之间的差别。其实这句话与Martin Flower在《重构》中一句经典的话:”任何一个傻瓜都能写出计算机可以理解的程序”(相当于Everyone can code)如出一辙,但他的后半句是“只有写出人类容易理解的程序才是优秀的程序员。”而这句话与我高中时代的化学老师兼班主任说的话又十分相似:要把你 写的化学方程式和计算过程写得能够让学校门外买早饭的老太婆都能看懂。(如果你是江浦高级中学的学生,并且是王宏明老师教的化学,或许你会熟悉这句话)最 近我还看到了IBM网站上的一篇文章叫《Everyone can refactor》http://www.ibm.com/developerworks/cn/linux/opensource/os-ecref /index.html 可是怎样才能写出人类容易理解的程序呢?举个例子吧: 反例: 一个方法调用:w44();你知道什么意思吗?w代表with,44是逗号“,”的ACII码值,它是用来将字符串以逗号隔开的格式化。如果不去看方法里 面的代码,鬼知道它是什么意思。 而下面的: november(20, 2005);你可能一眼就看出它是什么意思。 它的原型是public void Date november(int day, int year); 而同样 java.util.Calendar c = java.util.Calendar.getInstance(); c.set(2005, java.util.Calendar.NOVEMBER, 20); c.getTime(); 也能实现上面的功能,但是两者谁更容易使得学校门外买早饭的老太婆理解呢?

  4. Processing…Processing…Processing…

    我琢磨Processing已经有些日子了,对于这种小型计算机语言,我总是抱着”Just for fun”的态度来尝试,的确它真的满足了我的猎奇心理,而且很好玩很强大很有创造力。语法很简单,由于是基于Java语言,所以在很多方面,它秉承了 Java特性,对我来说学起来很快,不过这种语言不是给一般的程序员使用,It targets visual designers and artists.许多年前,凡高用颜料和画纸、画笔、调色板创作油画,古代中国人用墨水、宣纸和毛笔创作水墨画,当代有素描画、蜡笔画、炭笔画、水彩画 等,我在高中时代甚至用蓝色圆珠笔和素描纸作画…可是在计算机技术横行的时代,传统的艺术形式显得太保守了点,现在Processing正颠覆这些传 统,可是你不要以为他是Photoshop、Flash、Google SketchUp、3DMAX或是其他设计软件,Processing是一种计算机语言,就像Java、Python、Scheme. 他是用Java语言写的,Open Source,用来创作数字艺术,你通过编写程序代码,创作一件艺术品,通过分形,递归,适当的和谐函数,你可以获得极佳的效果,当然你可以将它保存生成 的图像格式(如png,tiff,jpg等),同时还可以输出Applet小应用程序在网页上显示(他可是基于Java的,没什么好奇怪的吧),个人觉得 图片就没有这个必要了,一般动画影片可输出为Applet,可能忘了告诉你,Processing还可以创作动画和影片等许多多媒体形式。 Processing可以运行在Windows、Linux、Mac上,需要Java虚拟机,所以如果你没有安装Java环境的话,记得下载一个自带 Java的包,Processing的官方站点是www.processing.org,感兴趣的话,尝试一下。下图是我的初次尝试:

    From Processing From Processing From Processing From Processing From Processing From Processing From Processing From Processing