2006年年终总结(原名:一篇没有写完的BLOG)

2006已经过去,2007已经开始。
过去的一年,有高兴,有激动,有不少难以忘记的时刻,有很多痛苦的思考。当我面对和回首自己过去的一年,我不知道自己除了时间之外究竟还失去了什么,自己除了痛苦之外还有多少收获?
人是可以活的洒脱些,就看一个人究竟要的是什么?就看你付出了多少?
要行动,要思考,要计划,要不断的沟通。
技术的狂热,当我在Miami Java User Group第一次聚会上看到Michael Feather的依然这么执着,依然的狂热,对于C++,对于functional programming,一个普通的程序员的极限就是这样吗。

一个Senior Programmer

首先是一个人,要做一个什么样子的人?
“观身如身,观心如心。”
如果是一个人,一个人的架构一定要比程序员的架构高。我们要一个什么样的身,基本的是健康的,就要经常锻炼了;中国一向有一个修身的传统,可见修身包括很多,怎么去修身,社会有社会的价值,个人有个人的志向。修身对谁都是一个既迷茫又痛苦的话题,“求仁得仁”,回到一个很糟乱的话题了,一个人到底想要得是什么?为了想要的得到底付出了什么?包括痛苦,包括性命,“求仁得仁”这个成语本身,伯夷、叔齐并没有欢天喜地的结局,相反,太执著,太倔强,为了得到可以牺牲了权利,身份,温饱,生命。一个人想来想去,问来问去,问的都是自己,都是自己的心。屈原先生应当是这方面的最有权威的专家了。能研究做学问的学问—哲学的人智商肯定不能低,“观身如身,观心如心。”这句话理解起来费力;还说了“观身观心”,痛苦的时候观自己的心;走投无路的时候寻找去观他人的心。
如果人一生有幸福和痛苦的话,那痛苦和幸福一定有一个起点,那是不是凡事都有起点。如果一生有起点的话,这个起点在哪儿?一个人能不能自己选择起点?
技术,技术是什么?什么是技术?如果技术是一个世界,技术之外呢?技术之外的世界呢?
人类也不知道生命出现之前的状态,一个人是不知道前世的;也无法将来到这个世界的最初的感觉的存储在自己的大脑的。那么一个人还是能想象死亡的。
一个人最痛苦的是什么,失去生命吗?如果说失去生命是最痛苦的,那是为什么呢,有人体验过吗?肯定没有。为什么人要惧怕死亡呢,因为要失去一些东西吗还是人的状态要发生了转变还是人类无法预知死亡之后的东西?如果是这样,恐惧的是失去,恐惧的是巨变,恐惧的是未知。如果一个人要恐惧失去,就应该恐惧死亡;如果一个人恐惧巨变,就应该恐惧死亡;如果一个人恐惧未知,就应该恐惧死亡。同样,一个人恐惧死亡,肯定会恐惧失去,恐惧巨变,恐惧未知。

开聊有益

偶尔看一下中央二套的两会节目,竟然在讨论青少年上网的社会/教育问题。
抨击我国现状教育的不在少数,学校教育大体上就是一种“推”的教育方式,是一种社会培养人才的最重要的体系,是对未来人才的储备机制,正如宣传所说青少年就是花儿的年华。人生只有一次,家长,社会的期望终归是一种期望,孩子有孩子的乐趣,孩子的年华,孩子的思想。
就针对个人而言,回想数十年“寒窗读书”有意思的好像真没多少,或许是背了些英语单词,记了些简单的英语句子;还有就是几篇语文的文章名字或者几个名句;还有几个数理化的专业术语。如果说是从业研究方向,可能还正能捡起些东西来。一般人对于孩子教育不外乎认为培养兴趣,培养性格等几个方面,当我们进入社会,发现做人本身就不是件容易的事情,何况培养人,培养人才。
一提到问题/隐患,很多人不约而同的想到改革这个话题,我有个朋友谈到,教育抓得是人的未来,医疗抓得人的命,谁都无法逃脱其中,改革这两项何其难啊。这真是一阵见血的评论。
培养性格是很重要的一方面,培养什么样的人才至少需要前瞻性的眼界了解社会的人才需求方向,所以做大师就不是那么简单的事情了。
一个人走出校门的同时进入社会,肯定能强烈感觉到社会需要什么样的人才的,很多时候就是社会在“拉”了,在这个过程中人类表现了异常聪明的一面,总是在做自我培养,提高自身。中国哲学的本身很大成分上都是和自己斗争的过程,大体上是自我培养的哲学体系,可见中国人对于社会还是异常重视尊重的。学校教育带来的很大的弊端就是自闭,一不小心就走入了以自我为中心的圈子;同时容易让人抑郁。估计很多人在人生的某些阶段都会有抑郁,自闭的问题;要提高自我必须要认清出这个问题,解决这个问题。
中国人大体上不怎么提倡Open这种方式,我们在社会中愈来愈发现Open的重要性,所以更多人都宁愿自己是一个心理,眼睛,思维都很Open的人。
我自身已近从事软件开发三年多,如果让我回首认为该毕业的时候如何策划培养自己,除了性格之外有三点:
1。沟通能力,做好任何一件事情,寻找任何一个机会,每一次自我的提高,都是从沟通开始的。世界变得越来越平,沟通的空间时间也在增长。
2。语言(掌控)能力,能够多掌握一门语言,相当于给自己多了一个世界,机会,眼界,空间。。。。。。
3。技术能力,这是一个从事软件开发人员的立身基础,也是对于行业知识的积累。
世界如此美丽,希望每一个人都要好好的珍惜。

JUnit 4 实战

尝试使用JDK 5.0进行开发,当然不能少了JUnit这个framework了。尽管在pre-release的时候我已经开始使用JUnit 4.0,真正用的时候还是翻了翻一下文档http://www.junit.org/index.htm,自己写了一个小例子。
JUnit通过Annotation的方式,让自己写完的Test Case看起来干净,简单,少了很多杂质似的。

import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import junit.framework.JUnit4TestAdapter;


import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;


/**
* @author Steven
* 
*/
public class JUnit4ExampleTest {


      public static junit.framework.Test suite() {
            return new JUnit4TestAdapter(JUnit4ExampleTest.class);
      }


      @BeforeClass
      public static void setUpBeforeClass() throws Exception {
      }


      @AfterClass
      public static void tearDownAfterClass() throws Exception {
      }


      @Before
      public void setUp() throws Exception {
      }


      @After
      public void tearDown() throws Exception {
      }


      @Test
      public void testCase() {
            assertTrue(true);
      }


      @Test(expected = RuntimeException.class)
      public void testException() {
            throwException();
            fail("after exception");
      }


      @Test
      @Ignore("Ignore flag!")
      public void testIgnore() {
            fail("The case should be ignored.");
      }


      private void throwException() {
            throw new RuntimeException("Random");
      }


}

注:Maven2的surefire plugin对于JUnit4没有进行支持或者说仍然不兼容,这点是需要注意的。

失落与决断(原名: 重拾心情)

星移斗转 世事变换,不期来到了Miami;而且已经呆了快两个月了。
重拾心情,决定回来写BLOG了,开始多写东西;尽管这一年没有post几篇文章,可没有停止过胡思乱想,考虑未来的去向,出差来到miami做项目,经历用户的折磨,看到了异样的文化背景,异样的开发理念,异样的管理方式;休闲时间去了Disney,去了Everglades看到了Alligator,参加了美国式的party。。。。。
差异
在过去的两个多月里,感受到了完全不一样的社会文化—享受型社会,分工精细,四五十岁仍然在coding的程序员,悠闲的工作氛围和生活氛围。
人性
美国一向是个民主自由的国度,众口铄金,简直一个天堂的地方。来到这里,才发现无论任何地方,人性都是一样,是没有国界的。
挑战
一向在我的眼中,开发就是技术,软件就是技术,突然到了新的环境,周围都是数十年的软件经验,技术已经不在任何风险控制之内;都是三十岁以上的人,不需要太多复杂的过程,不需要太多的流程,管理之中充满了太多的经验的因素。一个高级管理者甚至能够随手找到几行代码和你讨论一个具体的细节问题。也见识了什么叫着一堆经验丰富的高手在一起不能作出一个好的project。
学习
很久没有静下来思考技术,学习技术,今天去深入的学习和思考CVS,内心的喜悦再一次提醒我,我需要继续前进。。。单纯的积累性的学习已经显得那么苍白无力,我们的目标在哪里,能用我们的所学能给自己留下什么,给这个世界留下什么?遗憾吗?在这一两个月的时间,一下子从公司大学式的生活中释放出来,看到了很多或者简单,或者复杂的大小摩擦,一下子感觉到这个世界是如此的复杂,到处充满了挑战;学会了要去换位思考,学会了要尊重别人的思考,给别人机会把想法讲完的机会并试图理解他,每个人都需要一个释放的窗口,总是需要不断的学习和交流。用平静的心态思考,真心的帮助每一个人是一个永远的方向,每一个人都有自己的想法,就看怎么来表达了;每一个人都是又聪明又智慧,就看他如何来使用这些聪明和智慧了。

最近连续的拍了很多照片,发现拍照片是一个培养一个人发现美的很好的方式。
选择
当我平静的思考自己的时候,发现人生还是很少时候是有选择的。结果往往都是很明显的,方向决定了,大不了来个殊路同归。太多的时候是我们经历的太少,见识的太少,勇敢的走出去!
简介
前一阶段看了如何使用maven2,ssh2,cvs,cruisecontrol构建一个development environment。现在正在看如何使用CVS进行项目的多团队并行开发的source code版本控制;同时在看ruby的source code.
下一步
静心学习english,看source code,看CVS,接受挑战,在这个美丽的世界上。
胸怀
想明白了我们所能选择的,想明白了我们所能失去的,想明白了我们所能付出的,想明白了我们所能留下的,想明白了我们所想要得的,enjoy所想,所说,所做。。。
有趣
有时候我们不知道自己真正想要的,却在哪里漫无目的的期待,漫无目的的辛勤积累。
要看软件这个行业,还是要到硅谷去,那里或许值得一看。

2006年中期反思

一本流水账
1.前一段时间,换了几次机器,我就把我的数据导到了一块portal hard disk,包括我自己从去年到今年写的不少日志。这些数据随着portal hard disk一声巨响摔在地板上而销声匿迹。
2.考虑合同的问题,结果是和公司续约了。
3.dreamhead离开沈阳,去了北京。
4.定位项目组重组了。
5.学习英语.
6.在这近一年的项目开发之中,作为核心开发人员,实践迭代开发,试图让agile drive development,每一个月我们发布一个版本给最终用户试用,使得用户对我们的系统了解的成竹在其胸;在开发中引入了单元测试的全套方案,最大力度的进行功能单元测试和集成单元测试,开发的发布版本即是给用户的予发布版本;极力推崇简单设计,简单的解决方案;在项目组不断讨论,甚至到不带改进开发的许多细小环节;开始考虑自动build。在迭代开发,可能问题域不断的变化,对于软件的架构设计带来极大的考验,而且对于问题域的关注凸现重要出来。在项目结束之际,我们发现架构是如此重要,我们的架构是如此的脆弱,发现我们很多的软件设计没有架构或者不能称之为架构(有人把架构定义为一系列解决方案/模式的集合),迭代要求架构的灵活性要更高。不论业务模型,架构模型,都应该有大的思想方向。
7.非常大的收获是vvenli送给我们的日记本,带有每天日期的日记本。在读SICP的时候,发现无论是一个规律,一个模式,都是循序渐进的积累过程。任何目标,理想,成功都不是一朝一夕的事情,在规律范围之类都是可以切分,度量的,都需要我们循序渐进的完成小单元的目标。
8.在最近一段时间和一些同事接触,觉得唯有好学才是进步和才力的源泉。想起诸葛亮的一句话,从google搜索下来:
夫君子之行,静以修身,俭以养德。非淡泊无以明志,非宁静无以致远。夫学须静也,才须学也,非学无以广才,非志无以成学。淫慢则不能励精,险躁则不能治性。年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐,将复何及!
—<<诫子书>>
9.这半年书看的少,想问题想的多。
10.生命太短暂,太脆弱,谁都可能下一时刻看到上帝;生命需要关注眼前,需要策划。

走向设计(To Consider Design)

recently i always consider design:
1.keeping it simple,keeping it clean
2.coding for modularity
3.when working Bottom-Up,then working Top-Down.
4.abstract and high-cohesion,low-coupling
5.open one’s eyes for contract
today,when i’m reading the art of unix programming and get it:
Perfection in design is attained not when there is nothing more to add, but when there is nothing more to remove.

The followings from 《the art of unix programming 》-Modularity

There are two ways of constructing a software design. One is to make it so simple that there are obviously no deficiencies; the other is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.
1.Modularity:Keeping It Clean,Keeping It Simple.
2.Hatton himself suggests as a rule of thumb a 2x conversion between logical and physical lines, suggesting an optimal range of 400–800 physical lines.
3.Perfection in design is attained not when there is nothing more to add, but when there is nothing more to remove
4.Modularity is expressed in good code, but it primarily comes from good design.
5.A good API makes sense and is understandable without looking at the implementation behind it.The classic test is this: Try to describe it to another programmer over the phone. If you fail, it is very probably too complex, and poorly designed.
6.Coding for Modularity

读《Managing Open Source Projects》

The following are two general principles of organization:
People must understand the organizational structure in which they are supposed to work.
There has to be someone who can make final decisions. This is especially important if the project or company is in a crisis. If the ship goes down, the captain does not call for a meeting. Everyone must obey orders, know exactly where to go and what to do, and do it without argument.

入手《Code Complete Second Edition》

昨天冒着大雨和redwood跑去华储买回了cc2e。买的时候还是有些犹豫—这本书真是太重了。我们刚买完书出来,dreamhead打电话过来他在华储正在买这本书。:)感谢redwood帮我把这本书背回了家。
拿到这本书我最大的期望是:我早在一年前能拿到这本书该是多么美妙的事情啊。
“这个世界从来就不缺少十几岁的少年天才,而三十几岁的优秀软件设计师凤毛麟角”。
我们重来都不缺少工程师,总是缺少尽可能多的优秀的工程师。任何想成为优秀工程师的人都不能容忍忽略这本书—cc2e的价值。(“最好是好的敌人”)
我们深信,这本书就是献给那些愿意成为优秀软件构造者长期以来进行不断的努力、奉献、执著追求的人。只有这样的人,才能把这么一本“砖头”饶有兴趣的读下去、读完。