即将开始的项目非常庞大,仅仅是语言的文法规则打印成
A4纸就有将近30页.
自己以前也的确没有独自驾驭这种规模项目的经验,心中多少有些忐忑。
大学的时候就写过一些程序,但大多是自己处于学习起步阶段的一些涂鸦之作,并没有太多系统设计的思想和体会,更多的是 编程熟练工的一些积累.
在实验室的时候虽然写过不少程序,但多是零零散散的一些东西,为这个项目写一些程序,为那个功能模块写一些
程序,即使是自己的学位论文,涉及到的程序量也不到2万行。这期间主要的技术成长在于 提升了对系统底层的了解,但大系统设计的经验并没有太多增益.
硕士期间兼职参与的那个RSS阅读器,代码量大概也只有5万行,排除掉VisualStudio框架自动生成的code,实际有效代码量应该也就是4万多行。
及至毕业到了Cadence, 过手的代码量倒是不少,仅仅是我所在的team直接负责的SFE模块的代码量至少也在10万行以上,而整个产品涉及到的代码量则是几十万行的规模了,但由 于产品已经相对成熟,自己平时所做的事情大多是小范围的bug fix和enhancement,鲜有架驭大项目的检验。即便是前一段时间一个耗时将近7个人月的项目,实际的code量也应该不到一万行,大多数时间精 力花在了测试,协调上了。不过这一段时间自己在设计模式,软件工程上倒是有一些收获。
所以仅仅以自己所具备的项目经验来看,独自驾驭现在的这个项目是有一定的风险。
但我想,万事都会有一个初始的体验,求伯君设计出十几万行的WPS的时候也就是一个初出茅庐的毛头小子,Bill Joy设计出FreeBSD的网络协议栈的时候也未必就一定要先有设计出其他网络协议栈的经验.
当然,这两个例子中的人物都是天才式的人物,我不敢奢谈自己能达到他们的高度.
我想说的是,努力的付出,执着的追求在一定程度上是可以弥补经验的不足的,起到超越现有极限的效果,而为了达到这个目标,你则要准备好付出一定的代价: 比如说你不大可能再拥有正常人的稳定轻松的生活.
言归正传,对于即将开始的这个项目,自己并没有太长的时间来作充足的设计,考虑到方方面面之后再开始动工,因为其他的项目组所负责的模块会依赖于自己所负 责的这部分,所以公司对自己的期望是能够尽快拿出一个可以work的版本,与外部模块进行联调。考虑到这一点,跟我的老大讨论过以后,决定将语法规则分成 0,1,2三个等级,
等级0是最核心的一些语法元素,这些语法元素是跟外部模块联调所必需的;
等级1则是一些使用较少的语法元素,与外部模块产生依赖的机率相对较低一些;
等级2包括的则是一些存在疑问的语法元素,因为对这个语言的iEEE的标准,我还没有能够完全消化,对一些语法元素的理解还不是很到位。
将语法元素分完等级以后,就可以制定阶段性工作目标了,从现在开始的第一个阶段是实现等级0中的所有语法,接下来的第二阶段是实现等级1中的语法,再往后 的第三阶段则是实现等级2。在第一个阶段的中后期,即可以与外部模块进行联调,这样在一定程度上就避免了自己所负责的这部分模块成为系统瓶颈。
这样一划分,感觉待解决的问题本身也相对清晰了一些,好掌控得多了。毕竟,将一件复杂的,超出现有智能处理范畴的事物分而治之,分解为多个可以被自己现有能力掌控的子问题,是人类面对复杂事物的一种惯常的思维方式,这也正是算法设计中分治法的体现了.
自己以前也的确没有独自驾驭这种规模项目的经验,心中多少有些忐忑。
大学的时候就写过一些程序,但大多是自己处于学习起步阶段的一些涂鸦之作,并没有太多系统设计的思想和体会,更多的是 编程熟练工的一些积累.
在实验室的时候虽然写过不少程序,但多是零零散散的一些东西,为这个项目写一些程序,为那个功能模块写一些
程序,即使是自己的学位论文,涉及到的程序量也不到2万行。这期间主要的技术成长在于 提升了对系统底层的了解,但大系统设计的经验并没有太多增益.
硕士期间兼职参与的那个RSS阅读器,代码量大概也只有5万行,排除掉VisualStudio框架自动生成的code,实际有效代码量应该也就是4万多行。
及至毕业到了Cadence, 过手的代码量倒是不少,仅仅是我所在的team直接负责的SFE模块的代码量至少也在10万行以上,而整个产品涉及到的代码量则是几十万行的规模了,但由 于产品已经相对成熟,自己平时所做的事情大多是小范围的bug fix和enhancement,鲜有架驭大项目的检验。即便是前一段时间一个耗时将近7个人月的项目,实际的code量也应该不到一万行,大多数时间精 力花在了测试,协调上了。不过这一段时间自己在设计模式,软件工程上倒是有一些收获。
所以仅仅以自己所具备的项目经验来看,独自驾驭现在的这个项目是有一定的风险。
但我想,万事都会有一个初始的体验,求伯君设计出十几万行的WPS的时候也就是一个初出茅庐的毛头小子,Bill Joy设计出FreeBSD的网络协议栈的时候也未必就一定要先有设计出其他网络协议栈的经验.
当然,这两个例子中的人物都是天才式的人物,我不敢奢谈自己能达到他们的高度.
我想说的是,努力的付出,执着的追求在一定程度上是可以弥补经验的不足的,起到超越现有极限的效果,而为了达到这个目标,你则要准备好付出一定的代价: 比如说你不大可能再拥有正常人的稳定轻松的生活.
言归正传,对于即将开始的这个项目,自己并没有太长的时间来作充足的设计,考虑到方方面面之后再开始动工,因为其他的项目组所负责的模块会依赖于自己所负 责的这部分,所以公司对自己的期望是能够尽快拿出一个可以work的版本,与外部模块进行联调。考虑到这一点,跟我的老大讨论过以后,决定将语法规则分成 0,1,2三个等级,
等级0是最核心的一些语法元素,这些语法元素是跟外部模块联调所必需的;
等级1则是一些使用较少的语法元素,与外部模块产生依赖的机率相对较低一些;
等级2包括的则是一些存在疑问的语法元素,因为对这个语言的iEEE的标准,我还没有能够完全消化,对一些语法元素的理解还不是很到位。
将语法元素分完等级以后,就可以制定阶段性工作目标了,从现在开始的第一个阶段是实现等级0中的所有语法,接下来的第二阶段是实现等级1中的语法,再往后 的第三阶段则是实现等级2。在第一个阶段的中后期,即可以与外部模块进行联调,这样在一定程度上就避免了自己所负责的这部分模块成为系统瓶颈。
这样一划分,感觉待解决的问题本身也相对清晰了一些,好掌控得多了。毕竟,将一件复杂的,超出现有智能处理范畴的事物分而治之,分解为多个可以被自己现有能力掌控的子问题,是人类面对复杂事物的一种惯常的思维方式,这也正是算法设计中分治法的体现了.