一个人怎么写大型软件

写于2016年,2020年重新发布。

最近尝试了一下做MOBA(利用Unity3D),还有游戏引擎。我发现它们都是很复杂的系统,可能都要10万行代码或更多。
 

一个人的局限性


这两年,我做过许多尝试,但是常常因为软件太复杂而放弃(或者休息一段时间)。我发现了一个人的局限性。有很强的程序员,也有很垃圾的,听说他们的效率有一百倍之差。但是无论你有多强, 你一年能写出来的代码行数,也难以超过2万行。当然,一个菜鸟一年也能写出2万行。所以,你再厉害,你写代码的速度也还是和别人一样,搞出10万行的代码,没有5-10年时间,是不可能的。

 

2020年注:从这几年的编程经验来看,搞出10万行代码,一个人2年就够了。


这是人本身的局限,就是你处理细节的速度只有这么快。这里的一个细节指的是一行代码。同样的时间内你只能处理好这么多细节,这与你的能力无关。
 


那怎么办


当然你不会放弃你做这些东西的梦想。你又没钱请人,也不能说服别人你的软件有前途。最后,你想到了一个办法。以游戏引擎为例。(一定要切记,人处理细节的速度是很有限的。)
 


只做几个子系统


游戏引擎,首先要分两大块,第一,是运行时引擎(在游戏的时候运行的那部分),第二,是工具,包括场景编辑器,资源导入工具等。如果运行时引擎只要10万行代码,那么,工具的代码,可能需要20万行以上。所以,一定要告诫自己,千万不要做场景编辑器等工具,否则将会陷入无底深渊(可能要花上十几年时间来做,到时候,你的游戏引擎早过时了)。好了,你已经砍掉了三分之二的工作量了。


接下来,运行时引擎,包含了许多子系统。包括渲染引擎(直接操作DirectX的代码),场景图,物理引擎(碰撞检测和刚体物理),动画系统,脚本系统(是的,要运行一个脚本语言,比如Lua),粒子特效,日志系统,GUI。所以,一定要告诫自己,我不会去做物理引擎,我不会加入脚本语言,我不会做粒子特效,我不会做GUI系统(一个GUI系统,可能就要花掉你整整一年时间)。
所以,你仅仅做渲染,场景,动画。你砍掉了80%。


那么,在做渲染引擎的时候,你仍然要看,比如,你可以没有阴影,没有透明物体,等等。总之,你不用和人家Ogre等引擎一样功能齐全,也不用那么高效(可以省掉很多让人头疼的效率优化代码)。所以,你又砍掉了2/3。


如果一个比较完整的游戏引擎要30万行(10万行运行时,20万行工具),那么,你的目标仅仅是,大约是其中的2%(你可以乘一下),也就是6000行。


没错,你只需要几个月时间就能做出来。



不要做无关的事情


你在想,嗯,好了,我只做渲染引擎,但是我需要读入3D模型文件,比如Collada(dae)。于是,你就花了几个星期搞出了读入Collada模型的代码。


你在想,我没有场景编辑器,但是我必须有一个文件格式,来编辑场景里面物体的位置, Material等等。于是,你又花了几个星期时间,做了一个场景文件格式。


你很有可能把一个又一个月的时间,花在比较无关的事情上。你想做的只是渲染本身。但是却不得不去做一些读入文件的功能。
所以一定要注意集中自己的精力,只去做最重要的部分。千万不要在不相关的东西上花太多时间。像模型文件,不要导入Collada这种复杂的东西。自己搞一个简单的格式,只包含顶点数据的文件。然后,就可以省掉许多时间。



Laser Focus

这里的关键词,就是小,只做一小部分的系统,只做一小部分的功能。只有这样才能做出成果来。

所以,要时时告诫自己,不要做无关的事情。

总之,把每一行代码都用在重要的功能上,把每分钟时间,都花在相关的地方。

当然,在你完成你那些关键部分的功能之后,还是需要别人加入,才能真正完成你的软件。

 

 

你可能感兴趣的:(编程)