编程的下一步

经由TheServerSide.Com上看到Sun公司的Janice J. Heiss对该公司的高级IT架构师,曾是立陶宛女子国际象棋冠军的Victoria Livschitz的采访以及一些谈论(12),很值得一读:

The Next Move in Programming: A Conversation with Sun’s Victoria Livschitz

关于OO,她说,Object (对象)只是基本的抽象而已,很多东西并不能完全由OO句法来描述,特别是跟进程或时间有关的东西都没有被很好地处理,象“前后”,“因果”,甚至“系统状态”等构造都应该成为编程语言本身的一部分:

“…Processes are extremely common in the real world and in programming. Elaborate mechanisms have been devised over the years to handle transactions, workflow, orchestration, threads, protocols, and other inherently “procedural” concepts. Those mechanisms breed complexity as they try to compensate for the inherent time-invariant deficiency in OO programming. Instead, the problem should be addressed at the root by allowing process-specific constructs, such as “before/after,” “cause/effect,” and, perhaps, “system state” to be a core part of the language….”

她对开发人员的忠告是,不要人云亦云,要保持怀疑的态度,寻找更直觉的方案:

“…Don’t take everything you’ve been told about good software engineering as gospel truth. Don’t be bamboozled. Maintain your sense of skepticism and look for more intuitive metaphors. …”

ASP.NET控件

有几位兄弟在写ASP.NET控件,并且希望能推销出去赚点钱。这里有个很好的榜样,

Peter Blum的验证控件

可以参考一下他的网站,产品价格的设置,产品的文档等等

Scott Hanselman对他赞不绝口,在给他做免费广告,还向ASP.NET之父Scott Guthrie建议把他买下来,把他的东西结合进ASP.NET的将来版本里去

三个美德(2)

三个美德在Programming Perl第2版里有比较详细的定义,抄袭如下:

Laziness

The quality that makes you go to great effort to reduce overall energy expenditure. It makes you write labor-saving programs that other people will find useful, and document what you wrote so you don’t have to answer so many questions about it. Hence, the first great virtue of a programmer, Also hence, this book. See also impatience and hubris. (p.609)

Impatience

The anger you feel when the computer is being lazy. This makes you write programs that don’t just react to your needs, but actually anticipate them. Or at least pretend to. Hence, the second great virtue of a programmer. See also laziness and hubris. (p.608)

Hubris

Excessive pride, the sort of thing Zeus zaps you for. Also the quality that makes you write (and maintain) programs that other people won’t want to say bad things about. Hence, the third great virtue of a programmer. See also laziness and impatience. (p.607)

关于Laziness,也请参考Eli Robillard的 More Lazy Programming

懒惰,是指致力于减少总的能量消费的一种品质,该品质使你写些非常有用的节省劳力的程序,并且使你写下清晰细致的文档以避免将来要回答很多问题。(从比较广义的角度讲,它使你采用一致性的风格编程,考虑怎么更好地抽象化对象,模块化功能,怎么清晰有效地组织你的程序,怎么重构你的程序,尽量采用现成的工具/组件等等,以减少重复的劳动以及返工)

没有耐心,是计算机在偷懒时,你所感到的一种愤怒。这使你写的程序,不光是仅对你的需求作出(被动的)反应,而且(积极地)预计到你的需求,(即使不能完全做到),也起码要假装能这么做,(也就是说,你在写程序时确实考虑到了性能/scalability方面的因素)

骄傲,是一种品质,它使你写出/维护别人说不了坏话的程序

三个美德

很久以前,在学习Perl语言的时候,读过Perl作者Larrry Wall的经典著作《Programming Perl》。在书中(前言,第14页),他提到了一个程序员应有的三个美德(virtues):Laziness(懒惰), Impatience(不耐烦), Hubris(骄傲)。

在一篇采访中谈到他是怎么创造了Perl时,他说,他懒惰,因为用现成的工具需要写很多编码或写起来极其困难,所以他写了自己的工具来简化;他没有耐心,因为现成的工具慢,所以他写出了快的工具;他自傲,他觉得他能比别人做得更好。

能写出这么优秀的工具/语言的,大概这地球上也没几个人。但作为一个程序员,自信自强,对modulization/abstraction/…./clean,maintainable code,对performance的自我意识以及追求,应该还是力所能及的吧

注:有人说我懒,所以找理由来写写懒,

谋生

昨天中午,因为设计组的一个印度人即将离开公司,内容组的几个人,技术组的几个人,(忽然想起怎么没有设计组的人?),一起去外面吃午饭为她饯行,去的是附近一家名为“西贡”的越南餐馆。在等的时候闲聊时,她说,她跟她丈夫准备在下星期接手某个大购物中心里的一家“地下铁”餐馆。

我见过的几个印度人都很有远见,做软件的同时也在谋其他的出路。但也发现他们都很有经济基础,不是这里亲戚朋友多,就是来得时间长或工作时间很长了,积蓄比较多。

反过来看看自己,好象永远开的是单行道,一条路走到黑,走不通时再谋其他出路。唉,是天生的书呆子,还是脑子没开窍?心里能感到安慰的是,还好,现在做的是自己喜欢的东西

XEN–支持XML的C#语言扩展

在曾是C#语言设计师之一的Peter Golde的题为“The future of programming languages”的blog上看到了一个连接,是谈论怎么在 C#, VB 或 Java语言里直接支持XML的:

Programming with Circles, Triangles and Rectangles

这里是个样品程序:

  public class card {
    sequence{
      string  name;
      string  title;
      string  email;
      string? phone;
      logo?   logo;
    };
  }

  public class logo {
    attribute string url;
  }

  public class Test {

      static void Main() {
        card c = <card>
                   <name>John Doe</name>
                   <title>CEO, Widget Inc.</title>
                   <email>[email protected]</email>
                   <phone>(202) 456-1414</phone>
                   <logo url="widget.gif"/>
                 </card>;
        c.*.{ Console.WriteLine(it); };
      }
  }

音乐的力量

老乡碎玉是个音乐fanatic,喜欢收集各种经典音乐的CD。上海音乐小贩摊子上经常会有些水货CD,很便宜,但不少是没有说明的,为了在其中找到那些通过正常途径买不到或很贵的的精品,她大概都能花上几个小时坐在那里一张张试听,跟大海捞针似的,找到一张好的CD的话,感觉好像天上掉下了馅饼 ,简直就是偏执狂,

都说音乐能启发想像力,好像音乐对脑子也有刻录效应。记得几年前,一个昏沉沉的下午,我在读金庸的小说《笑傲江湖》打发睡意,正好读到令狐冲访绿竹翁一段,录音机里放着那英和王菲合唱的《相约九八》。也不知道怎么的,以后每次听《相约九八》时,脑海里都会浮现出令狐冲向任盈盈倾诉对岳琳珊的爱慕之情的那个场面来。

根据这书,(I am very gullible, ain’t I?):

“…Music stimulates your brain’s creative centers. Try playing a selected piece every time you work on your target problem. The music will help reconnect you to ideas you had the last time you worked on the problem….”

直觉/幻觉

有一杯水,有一杯酒,用一勺子,舀一勺子水到酒杯里,然后把加了水的酒搅匀,再回舀一勺子酒水到水杯里,是酒杯里的水多还是水杯里的酒多(体积)?(注意,小聪明者,假设原来酒杯里的酒不含水,有人说了,那是酒精,。。。)

闭上眼睛好好想一想,得出答案后,告诉我你是怎么思考的?

****2/9/2004 11PM****

如果你要计算的话,假设酒杯/水杯的体积是40毫升,开始时都是3/4满,勺子的体积是10毫升,酒不会蒸发,水与酒混合后体积不会缩小或增大

其实这不是要考谁对谁错的问题,主要是看思路,有的人是视觉型,视觉能力强,有的人是计算型。象我,什么都不想,完全凭直感,认为是酒杯里的水多,但我有些疑问,因为根据我以往的经历,我的直感大多是错的,计算了一下,才知道答案,然后画了个,才明白我的误区,不象我们敬爱/可爱的Grace MM,一张图下来一分钟内就知道答案了,难怪能通过那么多轮考试而被微软录用,

我发现跟技术有关的人(看回贴的程序员就知道了),很多都会采用计算方法,这跟我们日常的思路有关,就是所谓的思考之窠臼,右脑用少了,

不断的学习

早在七十年代,Alvin Toffler就在他的《未来的震撼》(Future Shock)中说,

The illiterate of the 21st century will not be those who cannot read and write, but those who cannot learn, unlearn and relearn”(21世纪里的文盲不是那些不能读写之人,而是那些不能学习,忘掉已学过的无用的知识,再学习之人)。

昨天在读Eric Sink在MSDN上的连载《The Business of Software》的第四篇《Getting Started with Your Own Software Company》时,发现了他早先写的一篇《Career Calculus》的连接。

在文中,他说,一个开发人员的职业生涯可以用下列基本方程来代表:

                            C = G + LT

   C代表Cluefulness,是代表你在软件开发领域的能力(capabilities),专业知识(expertise),智慧(wisdom),知识(knowledge)的总和,也是一种向雇主显示你有多少价值的尺度,也能衡量你的职业生涯是如何的成功
   G代表Gifting,是指你的天赋,与生俱来的自然cluefulness,因人而异
   L代表 Learning,是指你增加或减少你的知识的时间变化比率
   T代表Time,是指时间

由此可见,增加知识的唯一途径是通过正的L,即正的知识对时间的导数(First Derivative)。要想得到正的导数,增加知识,你需要不断的学习(Constant Learning),勇敢地认识/理解自己的错误(Seize Your Mistakes)。

接着读

我们敬爱的Dino Esposito阐述了MTS与ObjectSpaces之间的共通处:to make developers’ life easier

First MTS, Next ObjectSpaces

他那里还了解到Ctrl-Alt-Del键组合是David Bradley发明的,以及一些有关的秘密

Clemens Vasters 发现开发人员对Indigo的兴趣还不是很大,很多开发人员还在写C/S程序

Longhorn In Budapest: The relevance of Indigo today

对怎么通过System.Web.Mail来发电子邮件有疑问的可以参阅Dave Wanta写的详细FAQ:

System.Web.Mail Explained

开心是不是可以考虑利用博客堂来赚点Google的美金?

参考Tim Bray写的You Can Get Paid For This

我是不是最后一个知道的? MVP们可以开始登记参加高峰会了!忘了我的ID了,晚上来试