http://www.ngnc.net/open_your_own_project.htm 《如何开放你的项目,获得更多“援助者”的支持》
袁德俊(2004年6月21日)
“开放”一个最具人文精神的词语,它推崇的是“协作”精神。拥有这样的精神,每个人将会永远保持活力,将令每个团队充满凝聚力。“让我们团结一心,攻克一座又一座堡垒,战胜一切困难,登上我们心中的高峰!”。“开放”也是一个“理想”,值得我们追随。同其它理想一样,它也需要我们不断实践探索,付出艰辛努力,才可以实现。
本文仅在此介绍一种“开放”的模式,并用实例“NGNcalc2x(函数型科学计算器)的开发模式”说明细节。(我个人观点,开放源码,并不是唯一的开放方式,也更不能用“最好的”,“最适合您的”等词语来修饰。)
一、“开放”你的心胸,诚挚邀请“援助者”的支持:
一提“开放”,很多人会有这样的想法:开放源代码,“这是表达我的开放姿态的最好例证”;“大家可以研究,借鉴,但不要修改”;“大家可以在这个版本的基础上增加功能”;“大家也可以用邮件告诉我您希望增加的功能”;“如何处置?一切由您的良心决定”;“这可是我们公司的命根子,开放了不是砸自己的饭碗吗!”;
还有一个现象,大家都亲身经历过吧。初学编程时,下载大量的Sample,Source,编译执行,研读学习;日后工作中,遇到项目,难题,最先用的就是搜索一下,看有否现成的源码;运气好,碰到代码标准规范,注释丰富的源码(有详细描述达到SDK水平的不感多想)可以事半功倍;但大部分是一堆并不能解决实际问题,BUG百出,甚至根本谈不上规范的东西;回到头来,还得自己一行一行的啃。
如同项目组内的协同工作一样,只有接口清晰,责任明确的协同环境,“拥有团队精神”的参与者,才是项目高效运做,出精品,高质量完成任务的保障。
每个个体的位置不同,目标不同,就不可能要求,所有的人以同样的方式与他人交流。采用何种方式“开放”你自己需要您自己选择。这里是我的体会:“开放”你的心胸,诚挚邀请“援助者”的支持。(“援助者”的概念来源这篇文章:《“雕塑”系统--开放式软件项目协作平台》)
任何项目中的个体,都需要相互支援,才可以通过共同的努力完成同一目标。个体与团队的关系是从属关系,个体要服从整体。在团队内部,只有一个是共同的,就是都是为了完成同一个目标而一起工作的,无论是协调管理,和具体实施,不存在等级只是项目协作和管理的需要,岗位的不同。一个团队内部的个体又是相对独立的,每个个体加入团队的初衷可能各不相同,从事整体工作的一部分,在给予的同时希望获得也是各不相同的。一个团队需要好的领路人,也需要一个好的相互协调、互助、相互给予的氛围。一味强调个体服从整体,牺牲个体利益,满足整理利益,或只注重个体利益,都不能经久。一个能力超强的“超人领袖”,事必躬亲地工作,未必可以得到人心涣散的团队的支持。
以平等的心态,开放的心胸,邀请他人“支援”你的项目,或以同样的心态“支援”他人,每个个体做自己最擅长的,在团队中找到自己的位置,才是最重要的;而无论是邀请,还是被邀请,双方都应该努力地做到清晰地表达各自的需要,和各自所能给予对方的东西,才是团队建立的基础;仅凭热情,无论如何饱满,在一个混沌的氛围中也无法长久,只有清晰到透明的协作氛围才是团队勇往直前的保证。这就是“雕塑”精神,只有通过雕琢,才可以将自己清晰的思想表达给观众,与观众共鸣“交流”。协作的核心也是在“交流”顺畅的基础上的“共鸣”。“努力工作,充分表达自己”;“以开放的心态,找到彼此心目中的位置”。
二、反复审视自己的需要,给予“援助者”同样的回报:
无论开放你的“源代码”与否,在你感觉到力不从心,需要他人援助的时候,请确认以下问题:
首先,你做了那些工作,距离你心目中的目标还有那些工作需要做。
然后,将你做的工作进行反复审视,做到确信,你做的工作都是有价值的,能够清晰的阐述你自己工作的成果,和未来项目的发展方向。如果,这时你无法做到清晰,发觉到任何隐患和不确定。要不,你自己解决,达到“清晰”“准确”的标准;要不,将问题清晰地表达,连同问题一起寻求“援助”。切记,一定要反复审视。
第三,根据你所需要的支援,何以回报给予你支持的“援助”者。回报不只有“物质的”,“精神的”同样重要。你如果身无分文,但你有远大的理想但不好高务远,或许你可以找到与你有共同追求的同路人。
在确认上数问题后,我不感保证你一定可以获得你期望的“援助”。但我可以保证,如果你做不到这些,你可能会更失望。如果你是个暂时的“独行者”,请坚持,你一定要坚信,可以遇到你的同路人,甚至是可以荣辱与共的挚交。
三、NGNcalc2x(函数型科学计算器)的开发模式:
NGNcalc2x是NGNc脚本语言的Sample程序项目。“开放”它的目标是充分完全地阐述基于NGNc脚本语言的开发模式。作为“函数型科学计算器”本身,以及多平台目标,又具备很多现在流行的开发理念,也同样具有范例作用。相信它拥有足够的包容力。
目前,NGNcalc2x的工作成果,请参考下面2篇文章,做了比较详细的说明,也同时说明了工作方向,本文仅做个别补充,和系统化;
《NGNcalc2x开发手册》、《NGNcalc2x开发手册附件》;
(一)目前工作成果:
(1)脚本有关成果:
基本四则运算计算器:(NGNc脚本源文件);
清晰的需求分析,和系统设计(参照上面的2篇文章);
基于控制台模拟器的NGNcalc2x的专有I/O控制插件:Calc2x.dll
控制台模拟器:SimConsl.dll
(2)脚本制作有关工具:(目前还不具备完备SDK的特性)
NGNc脚本编译器:支持标准c语言结构,过程,循环,条件分支等基本特性,插件化管理函数库;
NGNkrnl脚本虚拟机:基于堆栈的虚拟机系统。用于执行NGNc编译器编译成果目标代码(自定义格式的中间代码);
NGNide集成调试环境:支持基本的脚本调试特性,全局局部变量、结构浏览,断点等基本调试性能,GUI控制界面;(参考:《“NGNide”简介》)
NGNkrnlW脚本编译结果打包程序:如同Flash等资源文件的,Mini播放器。以命令行方式执行脚本目标代码;
Plugin Maker函数库插件接口制作工具:规范函数库接口的辅助工具,通过使用,可以方便地将标准c函数集成为NGNc脚本能够使用的函数集插件。
以上成果,都做了基本的优化和测试,基本具备了现在流行的基于脚本的栈虚拟机系统的全部特性。
(二)目标阶段工作描述
(1)完成“函数型科学计算器”的全部脚本能力
(参照:《NGNcalc2x开发手册附件》)
(2)基于NGNc的体系结构,完成NGNcalc2x的多平台支持工作
(以SimConsl体系结构为基础完成,其相关文档,在工作组内部浏览,这里不做讨论)
(三)NGNcalc2x(函数型科学计算器)“定单”
参照《“雕塑”系统--开放式软件项目协作平台》的“定单”规范书写。
作者:袁德俊,程序员,NGNc脚本系统独立开发者,“雕塑”系统(软件项目协作开发平台)发起人之一;
概述:NGNc脚本语言范例项目,函数型科学计算器,多平台体系架构。关键字:NGNc、NGNkrnl、NGNide、控制台模拟器、虚拟机、脚本语言、开放式软件协作开发;
正文:(略)相关如下:
[url=http://www.ngnc.net/NGNcalc2x/development_handbook.htm]《NGNcalc2x开发手册》、
[url=http://www.ngnc.net/NGNcalc2x/development_design.htm]《NGNcalc2x开发手册附件》、
更新提交时间:2004年6月21日
援助预案:(参考:正文部分的相关文章,以及本文的“目标阶段工作描述”)。以下各个方面的“援助者”开发成果归各自所有,未来项目的商业化将共同讨论“物质”或“未来物质”支付方式,每个项目参与者的开发成果不得单独进行任何商业化行为,整个项目为一个整体,不得分割。对于“雕塑”系统建设前,保存各自开发档案,系统建设完毕,自动入库,为各位建立专门ID。该项目,希望以“邀请各位共同参加NGNc的发展和开发”为最大的支付手段,共谋发展。联系方式:ngncalc2x@ngnc.net
(1)“函数型科学计算器”脚本编写人:通过辅助制作工具的使用,以NGNc的语法规则,编写全部脚本。并提出清晰的I/O控制插件函数集;预案一:有独立同等规模传统程序设计经验者,要求有c或c++编程经验,熟练使用vc[1]、borlandc[2]系列的ide(集成开发环境)环境。(人数1人,附作品演示)。预案二、具有c或c++语言知识,了解并使用过vc[1]、BorlandC[2]系列IDE开发环境,有过开发经验者为佳,可以通过学习快速掌握一门语言和开发环境的使用。(人数不限,可协作完成)。支付方式:无物质支付,未来物质支付方式未定(如果NGNc以及此Sample工程商业化,将同作者商讨);个体评价(一定有;在“雕塑”系统建立后,建立档案ID后输入;之前,在作品中属名即可)。支付方式与预案总描述一致。
(2)多平台支持系统总工程师:组建NGNcalc2x的项目组,负责管理和协调组内人员。设计子系统与脚本的接口,并将子系统进一步细分,抽象最小插件系统规模,以抽象的I/O操作,规划I/O操作脚本子系统的“定单”。同时,对最小插件系统的分平台,编制“定单”。在组内分配工作。预案一:有同等规模系统的项目组织和规划经验,熟悉c、c++开发方式,长期使用vc、Bc开发平台工作者。有多平台系统规划经验者为佳。预案二:有较丰富的c、C++开发项目经验,有过项目组织协作经验,对多平台系统开发有思考并有志从事此项开发者。(以上2预案的人数要求都是1人,均需提交作品演示和介绍,并说明个人能力)。支付方式:同(1),目前不考虑商业化问题,支付方式与预案总描述一致。
(3)多平台支持子系统工程师:协作支持总工工作,完成具体定单,预案工作跟随具体定单。请有兴趣者投寄个人简历,项目将进行备案,待项目成立前,同各位联系。初步设计要求:有c、C++开发经验,或相关开发工具学习和使用熟练者。
(4)外观与测试人员:辅助设计计算器界面和控制流程。要求有一定美术功底,预案一:有过界面控制设计经验者。预案二:对项目有兴趣者。
(5)应用平台子系统工程师:协助总工完成未来系统扩充与应用的工作。包括Web数据交换,网站,桌面函数管理工具,以及商业化后的相应管理工作。具体定单日后产生,请有志趣者,参与本项目。
(3、4、5)都将以“雕塑”系统的首批个体成员的身份备案,待项目详细定单产生,再联系。支付方式与预案总描述一致。
注[1]:vc:是Microsoft Visual C++的缩写,归Microsoft Corporation版权所有。
注[2]:borlandc:是Borland C++的缩写,归Borland International, Inc.版权所有。