写于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

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

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

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

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

一个人怎么写大型软件相关推荐

  1. 大型软件公司.Net面试题(一)

    大型软件公司.net面试题!一定得看 1:a=10,b=15,在不用第三方变量的前提下,把a,b的值互换 2:已知数组int[] max={6,5,2,9,7,4,0};用快速排序算法按降序对其进行排 ...

  2. 上班时间写开源软件,结果被单位告被警察抓,这算什么?

    据说是在单位写了个开源程序,然后就被警察抓去审问? 这事虽然已过一年,但它给程序员带来的震撼还没有散去. 这事会不会发生在自己头上? 事关重大,不得不察. 注:在本文中,"版权"和 ...

  3. AI写文章软件盘点,一键生成代码、脚本、论文、作文

    AI写文章软件盘点,一键生成代码.脚本.论文.作文!这些现代化的内容创作工具必将给你个性化.高质量和高效率的内容创作带来前所未有的便利和快捷体验. AI写文章软件盘点,一键生成代码.脚本.论文.作文: ...

  4. 借鉴丰田方法对大型软件组织进行敏捷改造 (上)

    借鉴丰田方法对大型软件组织进行敏捷改造 (上) 本文以 ThoughtWorks 中国公司与 某大型 电 信 设备 提供商 合作的 咨询项目 案例 为 背景 , 介 绍 如何采用丰田倡 导 的精益生 ...

  5. 项目启动 ora-00942:_如何解决大型软件项目开发难题?唯快不破!

    目前多数信息管理软件可以满足行业内的通用需求,而在特殊流程和场景定制上成本很高.对于大型软件项目需求方来讲,主要面临三方面难题: l 软件行业专业性强,产品业务和技术实现衔接难: l 供应商及其输出品 ...

  6. c1200 写频软件_摩托罗拉XIR C1200数字对讲机试用——来自HAM族的呼叫

    虽然本人年龄不是很大,但作为HAM(无线电爱好者)一族,玩对讲机的时间已有十年之久.自从跟HAM这个爱好结缘后,对讲机和BG4VHP这个呼号就成为我形影不离的伙伴. 模拟频率占用过于紧张,而数字通讯变 ...

  7. 写游戏软件要学什么_为什么要写关于您所知道的(或所学到的)的内容

    写游戏软件要学什么 I'm either comfortably retired or unemployed, I haven't decided which. What I do know is t ...

  8. Windows10 【系统周期表】【系统下载表】【大型软件表】

    系统周期表 商用名称 商用英文名 代号 版本 系统版本 上市日期 服务周期 备注 Windows 10 无 Threshold 1 1507 10.0.10240.17443 2015.07.29 2 ...

  9. gp3688写频线制作_摩托罗拉GP3688写频软件

    摩托罗拉GP3688写频软件是摩托罗拉GP3688对讲机推出的一款写频软件,摩托罗拉GP3688对讲机具有语音清晰,灵敏度高,通话距离远的特点,主要用于对讲机频率和功能进行设置,需要说明的是仅支持wi ...

最新文章

  1. 距离矢量路由协议(一)
  2. Ubuntu Snap 简述
  3. OpenStack技术峰会PPT集萃
  4. PK3Err0040: The target device is not ready for debugging. Please check your configuration bit settin
  5. 通过excel模板文件根据数据库数据修改其中的单元格数据
  6. 中国都有哪些骨干网?带宽各是多少?
  7. php调用函数的变量,从内PHP函数调用的变量在外部函数使用
  8. “爸爸,什么是机器学习呀?”
  9. shell编程题(三)
  10. AutoKeras使用
  11. PHP header发送各种类型文件下载
  12. sendmail邮件服务器的基本建立过程
  13. 配置syslog发送_Citrix ADC Syslog配置推荐
  14. 拓端tecdat|用Python粒度分析及其在沉积学中应用研究
  15. 基于逻辑回归的评分卡模型简单概述
  16. Main Menu菜单栏消失解决
  17. 总结python中的乱码问题
  18. 基于树莓派4b的ubuntu20.04mate配合思岚科技A1激光雷达读取数据,建图、保存和基于arduino的下位机控制
  19. 玛塔机器人函数_USA Today旗下专家详测!玛塔机器人到底靠什么打动了歪果仁?...
  20. B站APP测试框架解析

热门文章

  1. 联想计算机怎么添加打印机,电脑和联想打印机连接不上怎么办啊
  2. 北京现代2015款途胜中控系统、多媒体系统、车机系统升级教程
  3. 普渡大学计算机科学在美就业,优势背景助力美国普渡大学计算机科学CS本科申请!...
  4. vue 视频上传组件
  5. 最新校招笔试面试六十题
  6. js处理移动端有虚拟按键影响页面布局的处理方法
  7. win10老是弹出计算机管理器,win10系统Ie11老是弹出“管理加载项”提示框取消的处理办法...
  8. 教你win10浏览器禁用加载项操作方法【系统天地】
  9. verilog奇偶分频详解
  10. Carsim-simulink联合仿真注意事项