一个人怎么写大型软件
写于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
这里的关键词,就是小,只做一小部分的系统,只做一小部分的功能。只有这样才能做出成果来。
所以,要时时告诫自己,不要做无关的事情。
总之,把每一行代码都用在重要的功能上,把每分钟时间,都花在相关的地方。
当然,在你完成你那些关键部分的功能之后,还是需要别人加入,才能真正完成你的软件。
一个人怎么写大型软件相关推荐
- 大型软件公司.Net面试题(一)
大型软件公司.net面试题!一定得看 1:a=10,b=15,在不用第三方变量的前提下,把a,b的值互换 2:已知数组int[] max={6,5,2,9,7,4,0};用快速排序算法按降序对其进行排 ...
- 上班时间写开源软件,结果被单位告被警察抓,这算什么?
据说是在单位写了个开源程序,然后就被警察抓去审问? 这事虽然已过一年,但它给程序员带来的震撼还没有散去. 这事会不会发生在自己头上? 事关重大,不得不察. 注:在本文中,"版权"和 ...
- AI写文章软件盘点,一键生成代码、脚本、论文、作文
AI写文章软件盘点,一键生成代码.脚本.论文.作文!这些现代化的内容创作工具必将给你个性化.高质量和高效率的内容创作带来前所未有的便利和快捷体验. AI写文章软件盘点,一键生成代码.脚本.论文.作文: ...
- 借鉴丰田方法对大型软件组织进行敏捷改造 (上)
借鉴丰田方法对大型软件组织进行敏捷改造 (上) 本文以 ThoughtWorks 中国公司与 某大型 电 信 设备 提供商 合作的 咨询项目 案例 为 背景 , 介 绍 如何采用丰田倡 导 的精益生 ...
- 项目启动 ora-00942:_如何解决大型软件项目开发难题?唯快不破!
目前多数信息管理软件可以满足行业内的通用需求,而在特殊流程和场景定制上成本很高.对于大型软件项目需求方来讲,主要面临三方面难题: l 软件行业专业性强,产品业务和技术实现衔接难: l 供应商及其输出品 ...
- c1200 写频软件_摩托罗拉XIR C1200数字对讲机试用——来自HAM族的呼叫
虽然本人年龄不是很大,但作为HAM(无线电爱好者)一族,玩对讲机的时间已有十年之久.自从跟HAM这个爱好结缘后,对讲机和BG4VHP这个呼号就成为我形影不离的伙伴. 模拟频率占用过于紧张,而数字通讯变 ...
- 写游戏软件要学什么_为什么要写关于您所知道的(或所学到的)的内容
写游戏软件要学什么 I'm either comfortably retired or unemployed, I haven't decided which. What I do know is t ...
- Windows10 【系统周期表】【系统下载表】【大型软件表】
系统周期表 商用名称 商用英文名 代号 版本 系统版本 上市日期 服务周期 备注 Windows 10 无 Threshold 1 1507 10.0.10240.17443 2015.07.29 2 ...
- gp3688写频线制作_摩托罗拉GP3688写频软件
摩托罗拉GP3688写频软件是摩托罗拉GP3688对讲机推出的一款写频软件,摩托罗拉GP3688对讲机具有语音清晰,灵敏度高,通话距离远的特点,主要用于对讲机频率和功能进行设置,需要说明的是仅支持wi ...
最新文章
- 距离矢量路由协议(一)
- Ubuntu Snap 简述
- OpenStack技术峰会PPT集萃
- PK3Err0040: The target device is not ready for debugging. Please check your configuration bit settin
- 通过excel模板文件根据数据库数据修改其中的单元格数据
- 中国都有哪些骨干网?带宽各是多少?
- php调用函数的变量,从内PHP函数调用的变量在外部函数使用
- “爸爸,什么是机器学习呀?”
- shell编程题(三)
- AutoKeras使用
- PHP header发送各种类型文件下载
- sendmail邮件服务器的基本建立过程
- 配置syslog发送_Citrix ADC Syslog配置推荐
- 拓端tecdat|用Python粒度分析及其在沉积学中应用研究
- 基于逻辑回归的评分卡模型简单概述
- Main Menu菜单栏消失解决
- 总结python中的乱码问题
- 基于树莓派4b的ubuntu20.04mate配合思岚科技A1激光雷达读取数据,建图、保存和基于arduino的下位机控制
- 玛塔机器人函数_USA Today旗下专家详测!玛塔机器人到底靠什么打动了歪果仁?...
- B站APP测试框架解析
热门文章
- 联想计算机怎么添加打印机,电脑和联想打印机连接不上怎么办啊
- 北京现代2015款途胜中控系统、多媒体系统、车机系统升级教程
- 普渡大学计算机科学在美就业,优势背景助力美国普渡大学计算机科学CS本科申请!...
- vue 视频上传组件
- 最新校招笔试面试六十题
- js处理移动端有虚拟按键影响页面布局的处理方法
- win10老是弹出计算机管理器,win10系统Ie11老是弹出“管理加载项”提示框取消的处理办法...
- 教你win10浏览器禁用加载项操作方法【系统天地】
- verilog奇偶分频详解
- Carsim-simulink联合仿真注意事项