这次Java 2006研讨会请来两位来自Google总部的Java大师Josh Bloch与Neal Gafter 来台湾参加,我和我找来帮我壮胆(从新加坡过来的,英文很好)的同事都获益良多。在联络感情、练英文、以及陪他们在台北吃喝玩乐四天之中,我们聊了不少关?于技术方面的话题。不过我们聊的内容不是在于技术本身怎么去使用,而是聊一些我们对于这些技术的看法,从他们的见解中,有些跟我心中的想法是一致的,只是?现在有大师背书,更加确认我的想法。这算是英雄所见略同吗??
其中,我们聊到AOP(Aspect Oriented Programming)。AOP这个概念打从它出生,就有许多人关注和推广。不可否认的,它确实对于面向对象程序设计(以下简称OOP)带来了许多好处?和影响,可是在实际的程序/系统开发上,使用的人并不多。其实这样情况是很自然的,OOP的概念也不是从Java之后才有,早在1970年代的 Smalltalk就是一套面向对象的程序语言,只是OOP演化了这么久,借着Java才大红大紫。何故?Java是个好的程序语言,但它并没有让OOP 变得多简单,主要是人们心态和逻辑上的「进化」,当传统的结构化程序设计(Structured Programming)无法满足对逻辑的需求时,OOP刚好弥补了SP的不足。虽然OOP的学习曲线颇高,但整个环境大势已让大家渐渐地朝这个方向走?了。
Josh和Neal也一致的认为,AOP是不错,但要发光发热还需要时间。目前底层的程序设计师,对于OOP都还不能全然的掌握,要他们再去学个AOP,写出来的程序只会更烂,不会更好。
我们还聊到另一个更新的概念 – DBC (Design By Contract)。事实上原本Java就有DBC里的interface概念,所以不靠外力的话,Java也可以利用现有的语法来达到DBC的实作。不?过就像之前Java语言本身没有泛型(Generic)之前,有许多外挂的套件或其它变通的方式来让Java达成泛型的功能,而iContract就是 DBC for Java的一种实作,有兴趣的读者可以上网搜寻,数据还不少,只是理论方面居多。DBC在学术里是很受欢迎的,但要走出这个象牙塔,一样得等待人们进化才?行。
我们这四天也不是全都在聊这种严肃的话题。我也基于个人的好奇,而问了他们一些有关程序开发人员最在乎的生涯规划的问题。
Don't Copy & Paste
很多初学者问我是怎么学习Java(或是程序设计)的?该怎么走才能到达我今?天这样的程度(成就?好像没什么特别的成就)?遇到这两位大师,当然未能免俗的也问了他们类似的问题。网络上最常出现的问题就是:我已经考上SCJP或我?已经会Java基本的语法了,接下来我该怎么走?
当然我不是问这么白烂的问题(其实也没有好到哪去),我问他们该如何提升自己的实力?
「Don't Copy & Paste」,?两位大师语气很重地说了这句话。他们说你在Copy & Paste的过程中,因为你不了解你copy的东西,它往往90%都是不必要的,而且以他们的经验来说,几乎都会出错!有重复性或可reuse的功能,就?把它们设计成library或framework。就算你非copy不可,也要确切知道每一行程序代码在干什么,这样将来出错时,才知道怎么找出bug来修?改。相信很多senior再带junior时,一定都遇到只会copy,而不懂到底copy了什么的junior;而最后当然是由senior边收边念地?收烂摊子。
此外,至于如何更上一层楼,两人的回答很一致:「Join Open Source Community」。 Join的方式从单纯的review code,到真正的贡献你所写的code都算,要join到什么程序,就看个人的功力啰。就像学习书法或画画,刚开始也都是临摹别人/前人的作品,有了基?础之后,进而发展出自己的风格。学习程序设计也适用这样的方式,review code就是这个用意!人家的code不一定写的好,初学时你可能无法看出不好的地方,或是还没有能力修改地更好。
Joshua Bloch: Google首席Java架構師(Chief Java Architect)
Neal Gafter:Google專任工程師兼Java講師
兩人在到Google之前都是Sun的資深工程師,對於Java核心及Class Library的開發與設計著有貢獻,合著《Java Puzzlers》一書。 Bloch並著有暢銷書籍《Effictive Java》。
Community除了code之外,另一个很重要的是mail list或是forum。经由大家脑力激荡,你可以在整个讨论的过程序学到很多。除了写程序功力上的帮助之外,你还可以学会team work、process、version control,而且志同道合的学习伙伴会让你在学习的过程中更愉快、更有信心。不过大家要join这些open source community第一个要克服的问题,可能是英文,读好还,因为你可以边读边查字典;写的话就只能多练习啰。
两位大师的程序设计生涯已经超过25年,是什么让他们能这样一路坚持下去?他们的回答是:「Passion」,依自己的兴趣做自己想做的事,这样才会持?久。但要怎样才能让这股热情一直持续呢?这就要看你所做的事情,是否能让你获得正面的回馈,Josh说,他觉得他能够写一本好书,让大家从这本书中得到很?多的帮助,他认为这样的成功对他的意义很大,进而更有动力继续写出更好的书。
四天的交谈中,我认为最有趣的是问他们如何从软件中赚钱?他们的回答也很妙。他们说,如果他们知道的话,现在早就是大富翁了。现在全世界能只靠纯软件赚钱的,应该只有微软吧?!其它像是Sun、IBM、HP早就转型做service,之前做IDE的大厂Borland,也早放弃了这块市场,虽然它曾经是个龙头。
除了做软件愈来愈难赚钱外,现在最难赚钱的是硬件,比尔盖兹好像在十年前的不知道什么场合说过,硬件将会是免费的。他的预言好像快要实现了,现在在光华商场,不用一万元就可以买到还不错的PC,最后真正的决战会是在软件上面。
而Google现在又正在打破软件的观念,Web Application愈做愈完整,功能也渐渐的取代了传统桌面软件。软件不太可能变成全部免费,但买套软件回来安装的行为,也许在不久的将来就会渐渐的?消失。我可以长期租用某项软件服务,或是临时租用某项软件功能,这样一来可以更落实使用者付费的观念,而使用者也不用常常追着新版的软件跑。
Google 20
关于Google的种种问题,之前大家早就问烂了,杂志也报导了很多。我问Josh说,「你们平常的工作?量就不小了,还要写书、演讲等等,你们真的有周末吗?大家都知道Google里很多东西都不缺,尤其是吃的,」但Josh说,礼拜五Google一定不供?应晚餐,目的就是要你回家陪家人吃吃饭,至于工作的事,就吃完饭再说吧。另外Google也不准员工夜宿辨公室,所以Google辨公室里什么都有,就是没有睡觉的地方,你可以写Code到天亮,但就是不能睡,要睡觉请回家。
大家都知道有名的Google 20,是指80%的时间你得做正事,另外20%的时间你可以自由发挥,?这是这家软件巨人对员工分配工作时间的管理原则。Josh说他就把20%的时间拿来写书、演讲,像这次来台湾就是用这20%的时间。而Google Calendar是Neal的宝宝,当初是他用20%所研发出来的,但现在变成他的80%。怎么利用时间,是每个Google人必需学会的课题。
这四天带着他们在台北东吃西吃,Josh开玩笑说,回去应该会胖个两磅,这又令我想起网络上流传的另类Google 20,?内容说Google的办公室里,在20公尺的范围一定会有吃的跟喝的,因为吃的、喝得都不缺,所以每位Google的员工都会胖个20磅。Neal笑说这?不是真的,他说Google的餐厅有各式各样的美食,在Google里待了这段时间,早就学会了控制饮食。因此,
虽然台北之行吃了许多好料的,但可影响不?了他的体重(果然是大师级的意志力!)。
Josh 给我的感觉像个顽皮的大孩子,相对的 Neal 就严谨许多。但他们的共同特点是,当要办正事或是谈论到比较技术话题时,他们都会用很认真的态度来回 ? 答你。我们不就是要学习他们两位这样的态度吗?工作时认真工作,休息时尽情玩乐。 Think big, Think different and do your best!
台湾微软今日(10/13)首度公开展示将于年底推出的SharePoint Server 2007新功能。除强化与前端Office应用程序的整合外,新版更提供包括RSS、Wiki、Blog等Web 2.0相关技术,藉以让企业分散各地的资料与人员串连起来,达成「统合通讯」。
台湾微软今日(10/13)展示SharePoint Server 2007新功能。相较于2003版本,新版将支持RSS、blog、Wiki等Web2.0相关技术。
SharePoint Server 2007即将与2007 Office System于年底一同推出,并被微软定位为未来信息工作者协同作业的基础。也因此,新版除强化与前端Office应用程序的整合外;另外增加了以往所没有的Web 2.0机制。
台湾微软信息工作者事业部产品营销经理王炘杰表示,企业内部人员、信息及系统环境日趋复杂,协同运作的需求亦逐渐增加。而Web 2.0机制便可让企业分散各地的资料、人员串连起来,藉以因应「统合通讯」(Unified Communication)的概念。
而随着Web 2.0技术在因特网的发展愈趋成熟,将这些技术拓展应用至企业内部网站已成为必然的趋势。他表示,此次SharePoint Server 2007便增加许多Web 2.0技术,包括RSS、AJAX、Wiki、Blog、与Social Network等。
支持RSS是SharePoint 2007强调新增的功能。SharePoint 网页中的每项内容,如Blog、公告、Wiki等,皆提供RSS机制。使用者则可在Outlook或SharePoint 提供的个人网站区中,按下RSS检查器进行订阅服务。订阅的范围除外部网络的内容外,也包含SharePoint企业内部网络中员工的Wiki、Blog 等内容。
此外,任何员工皆可在自己的网站制作文件分享予其它人。SharePoint Server 2007提供许多Wiki和部落格的样版,使用者可透过在线设定与建立Wiki和部落格。
搜寻方面,SharePoint Server 2007结合了Social Network技术。微软将其称之为知识网络(Knowledge Network)的Web 2.0搜寻技术,可搜寻组织中员工的个人档案及专长,并将这些员工以项目形式建立关连,让系统自动发现员工没有记载的专长与相互关系。
王炘杰举例表示,像是搜寻「SharePoint Server」,即可找出公司中有哪些员工具备这方面的专业知识。而微软也将于明年推出一款名为Knowledge Network for SharePoint的外挂程序,让使用者可扩大搜寻其它如SAP或Siebel等商用软件内的数据。
另一方面,SharePoint Server 2007强化了与前端Office中的Word、Excel、Access、InfoPath等软件的整合,可先在离线状态下在前端经由Word、 PowerPoint等编辑档案,再连上网络,透过Web Services的方式将档案发布到SharePoint上。另外,使用者也可以利用如Word编写部落格或Wiki的内容再发布上网。
王炘杰表示,提供一个统合通讯的工作平台,是本次2007 Office System所提出的远景,SharePoint 2007在其中便扮演关键角色,未来它不再是一般的企业入口网站,而将提供企业一个单一的共同运作环境。
==================================================================================================
Today, I speak from this podium a final time as your president. As I depart, I want to thank all of you - students, faculty, alumni and staff - with whom I have been privileged to work over these past years. Some of us have had our disagreements, but I know that which unites us transcends that which divides us.
今天,我将以校长的身份,最后一次在这个讲台上演讲。即将离任前,我要感谢诸位学生、教师、校友和员工,而且非常荣幸在过去的5年里能与你们共事。我们中的一些人意见不尽相同, 但是,我知道,我们的共识远远超越分歧。
Some things look different to me than they did five years ago. The world that today’s Harvard’s graduates are entering is a profoundly different one than the world administrators entered.
在我看来,现在于5年前不同了。今天的哈佛毕业生正在进入的世界和管理人员当年所进入的世界相比已是大相径庭了。
It is a world where opportunities have never been greater for those who know how to teach children to read, or those who know how to distribute financial risk; never greater for those who understand the cell and the pixel; never greater for those who can master, and navigate between, legal codes, faith traditions, computer platforms, political viewpoints.
现今世界,机遇对于这些人来说是空前的:他们知道如何教子女阅读;他们知道如何组合投资;他们懂得【计算机科学】 基本存储单元和像素概念;他们能掌握各种法典、传统信仰、计算机平台、政治观点并在其中游刃有余。
It is also a world where some are left further and further behind - those who are not educated, those trapped in poverty and violence, those for whom equal opportunity is just a hollow phrase.
同时,现今世界,一些人越来越落后于时代。这些人没受过教育、深陷于贫穷和暴力、平等机遇对他们而言,仅是一句空话。
Scientific and technological advances are enabling us to comprehend the furthest reaches of the cosmos, the most basic constituents of matter, and the miracle of life.
科技进步正在使我们能够探索宇宙的边陲、物质最基本的成分及生命的奇迹。
At the same time, today, the actions, and inaction, of human beings imperil not only life on the planet, but the very life of the planet.
与此同时,今天,人类所做的及没能做到的事情,不仅危害到这个星球上的生命,也危害到该星球的寿命。
Globalization is making the world smaller, faster and richer. Still, 9/11, avian flu, and Iran remind us that a smaller, faster world is not necessarily a safer world.
全球化正在使地球变得愈来愈小、愈来愈快和愈来愈富有。尽管如此,9/11、禽流感及伊朗提醒我们,更小更快的世界决不意味着其更安全。
Our world is bursting with knowledge - but desperately in need of wisdom. Now, when sound bites are getting shorter, when instant messages crowd out essays, and when individual lives grow more frenzied, college graduates capable of deep reflection are what our world needs.
我们正处于一个知识爆炸的世界之中,不过,迫切需要智慧。现在,在(新闻采访的)原声摘要播出变得愈来愈短,即时信息淘汰了杂记文,个人生活变得如痴如狂之际,这个世界还是需要能够深思的大学生。
For all these reasons I believed - and I believe even more strongly today - in the unique and irreplaceable mission of universities.
考虑到这些理由,我过去信仰,而今天甚至更加强烈地信仰大学独特的、无可取代的使命。
Universities are where the wisdom we cannot afford to lose is preserved from generation to generation. Among all human institutions, universities can look beyond present norms to future possibilities, can look through current considerations to emergent opportunities.
大学是人类把不可或缺的智慧世代流传的殿堂。就人类所有公共机构而言,仅仅大学,能够超越当前的准则,注意到未来的可能性;能通过目前的判断,注意到突发的机遇。
And among universities, Harvard stands out. With its great tradition, its iconic reputation, its remarkable network of 300,000 alumni, Harvard has never had as much potential as it does now.
哈佛在大学中间,鹤立鸡群。凭其伟大的传统、因袭声誉及其非凡的300000校友网,哈佛的潜力前所未有。
And yet, great and proud institutions, like great and proud nations at their peak, must surmount a very real risk: that the very strength of their traditions will lead to caution, to an inward focus on prerogative and to a complacency that lets the world pass them by.
可是,就像伟大和自豪的国家在其鼎盛时期一样,它们必须克服一个完全不能掉以轻心的危险因素:它们传统的绝对强势将会导致谨小慎微、追求内部特权及自满,这将使它们不能与时俱进.
And so I say to you that our University today is at an inflection point in its history. At such a moment, there is temptation to elevate comfort and consensus over progress and clear direction, but this would be a mistake. The University’s matchless resources - human, physical, financial - demand that we seize this moment with vision and boldness. To do otherwise would be a lost opportunity. We can spur great deeds that history will mark decades and even centuries from now. If Harvard can find the courage to change itself, it can change the world.
今 天,哈佛正处于其历史的转折点。此时此刻的自然倾向是,把贪图舒适和随波逐流留凌驾于进步和方向性之上,但,这可能是错误的。大学无与伦比的资源¬—人、 财、物—要求我们远见卓识和勇敢地抓住这个时机,否则,将会坐失良机。我们能推动将会被历史永世铭记的伟大的事业。如果哈佛能找到勇气来改变自己,它就能 改变世界。(6月30日,哈佛大学校长劳伦斯·萨默斯演讲,感谢weibaoning的投稿)
====================================================================================
ABCNews.com报道,众所周知的摩尔定律被英特尔验证是有效的,并被人们认为能在半导体行业里继续存在下去。而摩尔第二定律则成为软件厂商最大的隐患,因为按照摩尔的这两条定律可以发现,软件更新的速度很难赶上硬件。
几乎每一个生活在这个现代社会里的人都听说过摩尔定律(Moore's Law),它甚至成为了这个数字时代的基础,也成了我们日常生活中的节拍器。
但是肯定很少有人听说过摩尔的“第二”定律。在接下来的几年里它将会被证明比第一个定理还要重要。事实上,如果这两个定律继续继续存在,那么它们将会给微软这样软件巨头带来灾难。
摩尔定律是硬件革新步伐当中的重要主题,并陪伴着落后的软件行业继续前进。这大概就是微软一再推后发布新系统并带来众多麻烦的原因之一。
展望未来,革新步伐的不一致不仅仅会影响软件和电脑市场,同时一些一科技为基础的产品比如飞机、手机、电视甚至MP3播放器,这些人们每天需要的东西都会受到或多或少的影响。
根据行业分析机构Venture Development Corp.的估计,所有目前正在正在进行着的项目当中,大约有一半都要落后与预定的时间,超出的时间平均为四个月。同时更糟的是,我们目前新产品的革新速 度已经开始逐渐变的慢下来,这些都是以我们舒适的生活、娱乐甚至健康为代价的。
40岁的“定律”
我们把摩尔定律称为摩尔的第一定律。你肯定还记得它的内容,就是半导体芯片的精度将会以18到24个月为周期翻倍。这个定律是由高登·摩尔 (Gordon Moore)于1965年提出的,他是Fairchild公司和英特尔公司的联合创始人。摩尔的预言因为65纳米芯片的出现而被证明是继续有效的,同时摩 尔定律还被认为至少能在半导体领域里存在20年甚至更长的时间。这个定律不仅适用于存储芯片,在微处理器方面也表现的相当好,从手机到个人电脑甚至到遗传 学,几乎所有的领域都要用到它。
这将真正地告诉了我们摩尔定律在我们的生活中的重要地位,无论我们是不是知道它。
那么第二定律到底是怎么一回事呢?
几乎没有人知道摩尔在写有第一定律的那张纸上的另一个定律,它只是一个很短的段落,尽管描述的不是很清楚甚至很深奥,但是他仍然有力地向我们形容了什么 是第二定律。它是这样说的:“我们可以花更小的代价建立出更大的系统,而且它的功能也会很庞大,它由很多相关联的部分组成。它能实现非常庞大的功能,而且 这种功能会和设计和结构紧密地结合在一起,它可以让这些巨型系统的制造商快速并经济地设计和构造出各种各样的设备。”
大概一年前,我在 《连线》杂志上再次重新看到了这段话,给我的感觉就是一段关于电子设备效率的晦涩难懂的话。而且正像摩尔第一定律还不是一个真正正确的定律,但是芯片制造 商们向消费者允诺,称他们会尽可能地保持技术发展的速度,所以摩尔第二定律也要被提倡做出类似的允诺:任何电子系统的整体效率每24个月翻一番。
尽管《连线》杂志的这篇文章称这些电子设备需要更好的电池来提供能量,不过我认识到了对于这个高科技的世界里的一些其他东西,摩尔第二定律对它们的意义将更加深远。
软件必须要赶上硬件的步伐
单凭经验来考虑,芯片的性能翻倍,软件就需要以四倍的速度增长。而且根据摩尔第一定律,芯片的性能每隔两年都会发生飞跃性的改善,那么代码的数量将会每隔一年就增加一倍。不幸的是,这种事情不会成为现实。
环顾周围,你会发现任何一个地方都会有这种问题出现。目前手机使用的代码平均为200万行,到2010年会增加到1000万行。如果根据摩尔定律来看, 电视所需要的代码将是这一数字的两倍。而目前的汽车需要的代码数量平均为3500万行,到2010年这个数字会突破1亿行。
而现在这些 数不清的科技产品将得不到足够的发展,因为根据摩尔定律,硬件的发展速度远远跟不上软件。这当然会对去年那些堂吉诃德式的商业行为产生影响:为什么微软这 个依靠开发和销售操作系统的软件巨头,在它的下一代操作系统Vista上屡屡受挫。Vista的延期发布就像是抛锚了一般,尤其是戴尔。但是微软还是一次 又一次的推迟发布。
硬件和软件之间的这种差距在继续拉大,它让人们越来越觉得不安,同时它的恶化速度也会越来越快。
尽管这样,但是我们没有浪费一丁点时间。摩尔定律会继续影响着整个行业,有力并无情地要求更多科技行业不断创造奇迹。写程序是很有趣的事,可以把自己的想法付诸实行。写程序的工具很简单,只要有一部PC,适当的开发环境,就可以上工了。这样有限的工具却可以创造无限的可能,这也正是程序 设计迷人的地方。只要你能力够,你可以将你脑海中的创意写成程序,变成一套软件。
培养程序能力,不是一蹴可及的,下面提供我的一些建议,希望对有志进入程序设计领域的你有所帮助。
培养兴趣
把程序设计当成兴趣可以让你学得更快乐,学习效果自然会更好。在我到一个单位面试时,主管看了我的履历之后问我:「你怎么有这么多时间学会这么多东西、做这么多事?」 我的回答是:「把工作、学习、和娱乐结合在一起,时间就会是别人的三倍。」
我承认我很幸运,可以把程序设计当作赚钱的工作,学习的题材,以及茶余饭后的休闲活动。不是每个人都像我这般幸运,但是我相信至少大家都可以把它当成兴趣。相信我, 调整你的心境,把它当成是兴趣,而非苦差事,你非发现你的「程序功力」与日俱增。
慎选程序语言
慎选程序语言很重要,一开始就学太难的程序语言很容易让你遭遇到挫折而放弃。你可以挑比较容易且有趣的语言下手,建议您可以从下面的语言中择一:
VB:简单,好用,书籍多。
Java:比VB稍难,比C/C++简单,书籍多,用途非常广,相当有前途。可以当作学习C++的跳板。
Python:简单,好用,各个平台都支持(包括Windows,Linux,MacOS,BeOS,…)。国外很红,国内较少人用。原文书不少, 但中文书目前只有一本(欧莱礼出版)。我预期 Python 会是下一个热门的程序语言。
这 三个语言只是我给各位的建议,你也可以多听听别人的意见。在选定一个程序语言之后,就要执着,不可以很快放弃,又改学另一个程序语言,否则永远都只懂皮 毛。有句谚语是 这么说的:「A jack of all trades is master of none」。如果你号称会C++、Java、…等十种程序语言,只不过每种程序语言都停留在Say Hello的阶段,相信面谈主管很快就会 对你 Say Goodbye。
当你学精某程序语言,然后想再学另一个程序语言,你会发现有了前一个程序语言札实的根基,学任何新的程序语言都很快。
使用适当的开发工具
现 在RAD工具软件盛行,Visual Basic、Delphi、JBuilder、VisualAge、VisualCafe都是。有了RAD工具,只要「拉一拉,选一选」程序就完成一半 了。许多硬底子的程序员 颇不以为然,认为初学者使用RAD工具不是好习惯,不过我倒不这么认为。我认为RAD工具可以降低初学者学习的门槛,提高兴趣。只是,在你学会「拉一拉, 选一选」的简单步骤之后, 应该要找机会精进自己,弄懂内部的机制,不然不仅会有一种不踏实的感觉,甚至有许多程序会写不出来。我再强调一次:RAD可以当初学者入门的工具,但小心 不要使它变成让你 停滞不前的借口。
另外也要学会使用开发工具所附的诸多功能(特别是除错功能)。许多人买了昂贵的 Enterprise 版开发工具,却只用到copy-paste功能,那么这套开发工具和 Windows 所附的 记事本就没有两样了。建议您开始使用一套新的开发工具前先花些时间把 User Guide 翻一翻。
现在许多开发工具都有免费版本可以下载,初学者不妨多多利用。
多读好书,少上课
大 量阅读好书,是精进自己的不二法门。在这种快餐时代,许多人没耐心读书,反而喜欢到处上课,所以现在到处都是计算机班。如果遇到厉害的好老师,当然上过他 (或她)的课 会收获很大,只是目前好老师的比例实在不高(虽然我自己也在开 Java/Enterprise Java/Java Swing 的课,但我还是得这么说)。我曾在网络上看到有人说:「没听过补习班教 出什么程序高手」,这倒也有几分真实性。不过一方面要归咎老师之外,一方面也要归咎学生,因为我发现通常上课的学生会在家里读书和写程序练习的比例不高。
相较于上课动辄花费上万元的高代价,买书只需要区区几百上千,划算多了,更何况书上的内容又比上课来得多且详细。不过「买书容易,看书难」。怕自己偷懒的话,找志同道合 的朋友组织「读书会」,彼此加油打气,还可以互相切磋。最好是像我前面提到的:把它变成兴趣。
加强英文阅读能力
加强英文和崇洋无关,而是有它实际的价值。许多信息都是要直接看英文的资料,因为没有中文版可看。
「可是我的英文很烂!」
这不是理由。没人生下来就能阅读英文,都是一点一点累积起阅读能力的。给自己一个机会,找一本单字文法都比较简单、且页数又少的书籍下手,很快地,你会发现技术书籍的 单字就是哪几个在重复出现,阅读这样的书一点都不难。
请注意:原文书的写作风格也有相当大的差异,有的书的确是不好读。所以,如果你刚开始要尝试阅读原文书,不要挑到像 Bjarne Stroustrup 所写的 The C++ Programming Language 这类难懂的书……尽管它是经典。
问人之前,先问自己
遇 到问题,可以到国内外的程序设计相关讨论区去请教别人,如果态度谦逊,且问题叙述清楚,相信许多有经验的前辈会很乐于参与讨论。不过,凡是遇到问题就发 问,这不是好事, 因为你会因此越来越依赖别人,而失去了自我解决问题的能力。自己应该尝试着查书、写程序测试、甚至阅读原始码,来找出答案。如此一来,真的没办法而请教别 人时,也才能 比较深入地讨论。
多写程序
学程序设计不可以只看书,将随书光盘的程序执行一次,就认为自己已经学会了。应该开始写一些程序,且由小到大,由简单到复杂。找一些有趣的题目(比方说:计算器,踩地雷, 小画家,俄罗斯方块),可以提升写程序的动力。
我看到许多学生大一的程序作业都是copy同学的,失去了练习的机会。等到二年级之后,想开始写程序,却写不出来了。初学程序设计的阶段,应该给自己多一些机会写程序。
向上延伸,向下延伸,向旁延伸
当你发现你已经可以掌握此程序语言之后,你可以选择:
向上延伸:学习对象导向分析设计、Design Patterns、以及软件工程。让自己具有做大型计划的能力。
向下深入:深入了解内部底层的机制,例如操作系统(甚至硬件)内部。
向旁延伸:学习不同的API,例如:多媒体、数据库、企业运算…。
另外,数据结构、算法等基础也很重要。
结论
一分耕耘,一分收获,用对方法,持之以恒。每半年检阅自己这段期间以来的进步,相信你也会很高兴地说「我做到了」!
====================================================================================
世上一切皆项目--“项目黑洞”管理中的若干问题
当今社会,一 切都是项目,一切都将成为项目。项目的具体执行单元——项目团队是由一组为了实现某一项目的相互协作的个体所组成的正式群体。它的根本使命是在项目经理的 直接领导下,为实现具体项目的目标,完成具体项目所确定的各项任务而共同努力,协调一致和有效地工作。项目团队运行的成功与否,决定着项目最终的成功还是 失败。
目前,特别是IT行业的项目管理,绝大多数项目都经受着“项目黑洞”的痛楚:项目无法按期完成、项目合作方的工作难以协调、用户需求 经常变动等。由于项目具有明确的时限性,在项目执行的过程中,项目能否按时完成成为了衡量项目质量的关键的、和最明显的标准。但是由于项目经理对项目团队 的稳定性、冲突、会议以及压力对生产力的影响存在着认识不清,管理不善这样的问题,导致了项目团队生产力下降,项目进度迟缓,最终导致了项目实际进度赶不 上计划进度。
1.人员流动对项目团队生产力的影响
人员流动性的增强作为一种社会现象,逐渐被人们所接受和认可。项目经理也认为项目 团队中适当的人员流动是可以理解的,甚至认为可以增强团队的适应能力,只要能够及时雇佣同样技术的人员来代替他,就不会影响到项目团队的生产力和项目的进 度。但是,实际上,团队人员的流动将从多方面削弱团队的生产率。
1.1 人员流动对团队可用人数的影响
假设有这样一个场景:从一月 开始,有一个N(假设为100)人的项目组,这N个人已经在一起工作了两年。三月一日开始实行的一些新的人事政策引起了固定的人员退出率R,假定每月损失 n(假设为8)个人。每当有人退出时,项目经理就立刻再雇用一个人来代替他,并对新加入的人做C(假设为2)个月的培训,然后新人才能融入项目之中。这个 管理场景可以使用图1来表示。那么,该团队在项目周期内的可用人数是否达到100人呢?
直觉也许会告诉我们,每当有一个人退出时,就立刻雇 用一个来代替他,虽然在开始,人员要进行培训,但是等到培训结束,新员工投入到团队工作之后,团队的可用人数将慢慢恢复到原来水平——100人。但实际却 不是这样乐观。通过模拟程序运行,可以得出在不同时间段,团队的可用人数。如图1所示:
通过模拟输出可以看出,在开始的两个月内 团队可用人数直线下降,到5月1日之后,团队可用人数将围绕84上下起伏,但再也不可能恢复到原始团队可用人数——100人。这是因为在3月和4月份,只 有人员的退出和雇用新人进行培训,而没有人员补充到团队的项目工作中去;到了5月份,有部分新人完成了为期两个月的培训,投入到项目工作中来,同时又有人 员的退出,这两者的综合作用结果是:虽然团队的整体人数一直维持在100人,但总是有部分新人在接受培训,从而使团队的可用人数只能维持在84(平均可用 人数)上下波动,而再也不能达到原来的100人了。可以看出,项目团队人员的流动性对团队可用人数的影响非常大,可用如下公式表示:
NE = R*C
其中
egative Effect,负面影响;
R——人员退出率
C——培训周期
1.2交流损失
团 队中人员的流动直接导致团队可用人数的降低,进而影响了团队的生产力。为了尽量保持团队总人数不变,项目经理在损失一个人时,立即雇用一人来替代他。但这 样做只能保持团队人数在一个低水平的平衡,在形式上保证了团队具有84个人的生产率,由于培训后的新人投入项目团队的工作过程,产生交流损失,影响到团队 的生产力,使得团队的整体生产力达不到已经配合默契的84人团队所具有的生产率。
经过培训的人员加入开发团队,初期的影响是负面的。第一天 这个新来的人员干不了什么有用的事情,为了学习和交流,他还会占用其他人的时间,降低了团队的生产力,也即交流损失。随着共同工作的时间越来越长,由于团 队的一种潜力——凝聚效应,团队能够逐渐消除交流损失。成员们在一起经历很多事情,团队就会变得越来越健壮,升值能够克服交流的损失,从而作为一个整体, 能够比单个个体的简单加和做得更好,如图2所示。
因此项目经理一定要树立起团队人员的流动是团队生产力低下的重要原因,项目管理需要通过多方面来保持团队的稳定。
增 强团队的凝聚力,用以保持团队的稳定。首先要增强成员与成员之间的吸引力。成员利益一致,关系和谐,互相关心、爱护和帮助,吸引力就大;其次要增强团队活 动对成员的吸引力。团队活动的内容、形式、频率适合成员,吸引力就大;最后增强团队对满足成员个人需要的吸引力。团队满足成员个人的各种物质和心理需要, 是增强团体吸引力的最重要条件。
为了尽量减少交流损失,除非必要,否则就不要自己去凝聚一个团队:出去找一个已经成型的团队来用。同时还要把凝聚在一起的团队——准备充分、并且也愿意接受新的工作——作为项目的收获之一。
2.冲突没能及时解决
只要在项目开发过程中有多个参与者,就一定会有冲突存在。但是,有时项目经理缺乏直接同项目组成员之间的信息交流通道,抑或未能对成员间的冲突未能很好的把握,没能及时解决冲突,导致冲突影响到项目的进度。
冲突应当引起重视,并尽快得到解决。最好是在项目启动之前,就设定一个快速便捷的经理和团队成员之间的信息通道,比如项目意见经理信箱等。
项 目管理中的冲突并不是缺乏职业道德的行为,而是各人解决问题的方法上的分歧。对于冲突,通过正式的谈判不容易取得理想的效果,因为谈判通常都是零和游戏, 我所得到的任何东西都是你所失去的;而通过非正式的调解可以很容易的解决,也就是通过一个不涉及冲突的第三方来帮助冲突双方达成共识。
要在 冲突完全形成之前就去调解,甚至在项目开始之前,我们就要先宣布:所有人的“赢”都是受重视的。在任何冲突刚出现,还没有变得很明显的时候,就需要一些受 过训练的调解人,来告诉冲突双方:你们根本不是敌对的双方,你们是站在同一边的,跟你们作对的是这个问题。这样,冲突双方可能很快达成有意义的共识,冲突 双方开始理解、尊重对方的需要,尽量思考以前从没想过的方案。交涉每进展一步,彼此之间的信任就会加深一层,成功的机会也就多一分。
3.会议常常没有明确的议程
在 项目管理过程中,特别是项目正面临着巨大的困难时,企图加快项目进度的、没有确定议程的会议就非常多。这些会议的本意都是解决问题的,但是由于组织者本身 都不知道面临的问题是团队的哪个部分出问题了,所以会议常常没能够制定出明确的议程,结果是与会人员就会特别多,因为这些人在参加会议之前会想到:不出席 会议是否完全安全呢?讨论没结果,因为参会人员太多,问题难以落到实处;最终浪费了与会人员的宝贵时间和精力,甚至信心。
为了避免这种现象浪费项目开发的时间进度,对项目期间会议的召开,建议遵循以下两点原则:
A.个会议一个公开的议程。为每个会议制定一个公开的议程,每个会议都要尽量短,让人们可以根据需要选择参加其中的一部分;会议要严格按照议程进行,这样人们就不必担心自己不参加的会上有与其相关的主题。
B. 前进行一个小小的仪式。在每次会议开始的时候先进行一个小小的仪式。如果做的合适,可以让所有人注意到保持会议精简的价值以及项目的目标和理想状态。仪式 可以分为五步:一是主持人告诉大家:哪怕减少一个与会者也是有价值的;二是其他人对此表示同意;三是主持人根据会议的情况,选择一个最不应该浪费时间的 人,给他自由,帮他们节约宝贵的时间;四是此人在离开之前告诉大家他对会议的希望;五是其他人表示同意他离开;六是此人离开会场。然后重复二至六步,直到 没有人可以减少为止。此时留在会场中的将是同问题相关并迫切希望解决问题的人员。
4.通过压力抢进度
项目开发好像总是不能够在规定的时间内完成。在预感到项目时间紧迫时,项目经理就会尽力拧紧螺丝钉——让项目团队中的成员超负荷工作,让开发人员加班,企图通过压力抢进度。
实 际上增加加班时间只会降低生产力。虽然项目开发人员都喜欢压力,至少在压力不太大的时候是这样。适当的压力乃至于加班可能是有用的策略,它们能使员工集中 精力,并且让他们感到工作的重要性。但是如果压力太大,加班时间太长,员工就会感到疲劳,筋疲力尽、直至灰心丧气,如果压力再大一点,他们就会离开项目。 即使那些没有离开项目团队的人员,在超负荷的压力下,也将无法更快的思考问题。这些都严重影响了团队的创造性、积极性,进而降低了团队的生产力。
虽然项目经理们也知道过分的增加加班时间只会降低生产力,但是正如汤姆"迪马可所说:“经理之所以会施加那么多的压力,也许是因为他们不知道该做什么,或者因为其他办法的困难而感到气馁。”
综上所述,为了保证项目团队的高效运作,使得项目按期完成,需要做好项目团队的管理工作:尽力保持团队成员的稳定性,将冲突解决于襁褓之中,为每个会议安排明确的议程,给予团队的压力要适度。