内容简介:程序员所积累的编程知识在十年后将有多少变得没用?
为什么知乎上有 8个人邀请,你们都觉得我很老了么?我还很年轻,悄悄的告诉你们,姚老师比我老,你们该去邀请他。
以前学了现在没用的技术,有很多,越数越伤心,还是回忆下 2007年的事情吧:
10年前
1. 业余在玩 Flash 游戏开发,当时页游还没有火,我觉得是个机会,市面上很多页游都是八位机的水平,估计他们以前都没什么游戏开发经验,所以大家都持怀疑态度,我想看看 Flash 的 2D 效果能做到什么程度,于是花了了两周时间做了 Flash 下的第一个小游戏:Flash Game – Final Weapon 。。。
嗯,模仿 PopCap 的 heavy weapon 加了些有趣的元素,比当时所有市面上的 Flash 游戏效果都好一大截,至今为止,仍然有很多市面上的 Flash 游戏没达到这个 Demo 的效果。
2. 带领一只六人团队开发 XBox 360 的预研项目,把公司一套 3D引擎移植到 XDK 的 D3D9下面,D3D8 到9 跨度很大,废了比较多的时间,觉得 D3D9 才是未来。当时 360 的性能并没有说的那么好,单核性能差不多只能到我笔记本单核的 50% 左右,但是它有六个核,和原有引擎的单线程体系差别比较大,因此性能十分堪忧,这个坑填了很久。原有引擎很多基于 SSE 的运算代码全部不能使用了,花了不少时间改写成为 PowerPC 的 AltiVec 指令,最终才将整个引擎终于在 360 上从 “不能用” 变为 “能够一用” 了。当时写了篇关于 360 的优化文章:PowerPC 汇编入门与优化 。
3. 研究游戏同步技术,当时国内没人觉得游戏还有 “同步” 问题,没有任何参考资料,2007年游戏市场上清一色的 MMORPG 游戏,大家觉得只有做 MMO才是挣钱的。我看当时网游里 95% 的 RPG游戏,在对比单机游戏上只有 39%的 RPG比例,觉得十分不合理,玩家迟早要厌烦,RPG垄断的局面必然被打破。但是传统 RPG那一套在快速动作游戏上基本没法行得通。我不断的抓包,推敲模拟传统局域网游戏和国外快速动作游戏的同步方式,写了篇文章:《帧锁定同步算法》配合之前写的《网络游戏同步法则》以及《影子跟随算法》,基本上从两个方向讨论游戏同步的两大核心方法:帧同步和状态同步(客户端预测插值)。
4. 学习策划知识,翻译 MUD之父 Richard Bartle 的《MUD玩家分类理论》,当时游戏“成就系统” 在国外刚刚兴起,国内游戏还没有这个东西,觉得十分不错,我又翻译了 《成就系统最佳实践》。
5. 弄 server 内存分配优化,参考 kernel 的 slab 内存分配算法,于是优化并重新设计了一套 slabtree 分配算法,给服务端整体内存分配性能提升了一倍,不再受运行时间和碎片的影响 。大致原理见:如何设计内存池? – 知乎
10年后:
1. Flash 基本挂掉了,没人再提了,不过如今页游还是在发展,只是远没当初那么火爆,当年学习 Flash 的 程序员 都纷纷 cocos 和 u3d了,现在做页游想招聘一个 Flash 程序员更是难上加难,不过 Flash 的 API 我觉得设计的真的很漂亮,我见过 2D 引擎里比较上乘的接口设计了,今天很多用 H5封装的游戏引擎,比如白鹭引擎,没事扫了一眼,他们从对象树到 API名称,还是再模仿 Flash 的接口,可见影响力有多大。
2. 360也挂掉了,当年游戏机清一色的 PowerPC (主机)和 mips(掌机,PSP)架构,如今换成了 x86(主机)和 arm(掌机)结构了。D3D9 也早已被淘汰。
3. 同步技术到今天都还在很多讨论,作为研究的比较早的人,我的三篇文章曾经帮助了不少游戏解决他们的同步技术。《街机三国》的制作人跟我说,当时做 DEMO就是卡在同步上,后来看到了我的 《帧锁定同步法》解决了《街机三国》的同步问题,最终项目得以立项,然后他们就发财了,我得到一句真诚的 “感谢”。听说《王者荣耀》也还在用基于 “帧同步” 的改良方式。
4. 当年花过好几年的时间学习策划知识,业余也喜欢自己兼任策划和程序做些小游戏,但如今成就系统早已不是什么新东西,巴图的理论也出现了更为科学先进的玩家分类方法的论文,加上 2009 年以后我就不做游戏了,这些知识基本也就白费了。
5. 后来发现和 tcmalloc 很像,用了 7年这套代码,比 libc 自带的 malloc 强太多了,一路都是最好用的内存分配算法,后来我自己忙其他项目懒得添加新特性和继续优化就换成 jemalloc 了。当年 “内存分配” 这个技术,但凡有点经验的人,都会来两手,也是比较关键的模块之一,如今好玩看看就行,自己重新实现边际效用太低。
总结
总结下,翻翻历史,以前学过现在没用的技术实在是一大把,我承认技术是有 “道” 和 “术” 的区别,我写了十多年代码的时候以为 “术” 容易淘汰,而只有 “道” 就能长存,一旦掌握了恒久不变的道,就可以以不变应万变;而又写了十多年代码以后发现从更长的尺度上来看,并没有一成不变的东西。
道法精深,短期是可以帮助你尽快的掌握运用新的 “术” 但是随着具体实践的不断发展,人类认识世界的范围逐步扩大,理论体系这个上层建筑的 “道” 也需要不断修正,推陈出新,适应新的实际情况。
早期基于的端游开发经验,帮我在 Flash 平台上可以更短的时间内掌握要点,并做出超过同期水平的东西。手游兴起后,我虽然没趟这滩浑水了,但看到很多第一批成功的团队,也都是早年在端游或者页游上有经验的人。
另一层面上,道也不是一成不变的:以前积累的各种单核技术下的 “道”,碰到 360 这种 6核cpu,每个核都不行的体系,基本全废了;以前写代码,每一行我都想追求极致性能的做法,后面变得没那么重要了;内存分配算法,在某一阶段内自己可以做到领先,但不能持续了解最新相关方法,不持续迭代,兴趣转移了,隔段时间也就被 jemalloc 超过了,所以也并无一成不变的算法。
总之,基本原理要掌握,不能成天只搞具体技术忽视理论提高;也不能痴迷纯粹的 “理论”,还是要勇于实践掌握新进的 “术” 才能更好的迭代进化你自己的 “道”,否则空有理论,只能坐而论道了。这不,我一把年纪了,最近几个月还在玩 beautifulsoup4 做爬虫呢。
并没有什么 “一成不变” 的 “基本原理” 可以让你学一次就吃一辈子的。
钱学森不是说过么,脱离工程的理论,是没有价值的。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 90% 的程序员,都没用过多线程和锁,怎么成为架构师?
- 可怕,原来 HTTPS 也没用
- 抓包神器:tcpdump! 我还真没用过
- 校招面试心得看得再多也没用
- 应用层加密普及后,网络层压缩就没用了
- [译] 求你不要再写没用的提交信息了
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Programming Rust
Jim Blandy / O'Reilly Media / 2016-8-25 / GBP 47.99
This practical book introduces systems programmers to Rust, the new and cutting-edge language that’s still in the experimental/lab stage. You’ll learn how Rust offers the rare and valuable combination......一起来看看 《Programming Rust》 这本书的介绍吧!