读《游戏之旅--我的编程感悟》有感

我不是学计算机的,但此书给我的感触颇深。

    此书成于2005年,我真希望自己能早6年读到这本书呀。(2007年大学的时候就读到)

    作者叫云风(个人主页:www.codingnow.com),是个技术高手,网易游戏开发部门的重要人物。他书中有这样一段话:“身处当今热门行业中,可谓衣食无忧,而在国内的游戏制作圈子里混迹多年,业内也小有名气。而这些并非我去追求的,它们自然而生。”

    作者算得上是个天才,狂爱技术,业务精湛;但又谦虚好学,极为刻苦,且爱护新进青年,不含高人一等之态。在百忙中写下此书,花费了他不少精力和时光,只为中国并不成熟的游戏产业的发展做一丝丝促进。

    他的成长精力可以看出,十足的爱好,不拘泥于课本,能够充分利用自身环境,刻苦努力,是其成才的因素。并非为了钱财,只是为了一点小的理想,写出更好的代码,做出好玩的游戏,疯狂的求知欲,踏实的作风,都为其成才的动力。

    我并不想泛泛而谈这些感悟,下面主要总结几个书中所谈的例子。

    作者写这本书,自称为“智者不擒二兔”,感到实在很不应该。因为作者当时在忙于的项目就不止一个,又接下了写书的任务,实在很不明智。当然,他为了能够为中国游戏开发者给出一些经验,还是竭力写完了此书(花了一年多)。结果是身体被严重的拖累了。我在学习中是否也有这样的事情呢?这是明摆着的。

    作者的计算机技术基本不是在学校学习的,他7岁接触电脑,在父亲的引领下手下接触BASIC和汇编,而后去另一个大学生家里用pc机搞东西,在大学期间则开发出了“风魂”,显然这些都不是学习的功劳。或许计算机科学有其特殊性,所需要的硬件单元普通且便宜,故不需学校的指导也能入门。但是我在其中更看出作者云风肯实践,却不拘泥于课本的精神。

    虽然他所学并非来自学校,但是我认为这一点并不能说明学校是无用之所。事实上,他也在书中说道许多老程序员拘泥于老方法,无法更上时代步伐,不借鉴最新的技术。而他则紧跟着学术界的潮流,经常性的看学术界的新知识,以补充自己,方能不断进步。可见,学校的用处很大,不过现今中国大学问题颇多,导致许多情况下学生难以从中汲取知识罢了。

    他有一句话:做什么事情除非完全弄懂了,否则不去做(略有小的偏差)。例子就是他用c语言,而很长时间不用c++,直到2000年以后才改用c++,就是因为他对c++还没有彻底了解(了解的含义显然非普通程序员所想)。

    但不能就此认为云风是一个保守的人,他是一个极具创新精神的人。他在书中各种场合反复强调,一个程序员要开阔眼界,不要以为C++就万能了。应该看看其他程序语言,每种程序语言都有其开发的原因,比如C就根植于机器本身,而其他语言也有其发展的原因,开阔眼界,从各种语言中借鉴,都是很重要的。他的创新精神在一个例子中表现出来(汗颜,对这本技术书,我只是看看想法,对具体的细节没有来得及看),他将数据结构中的链表和数组组合起来,构成新的数据结构,用他的话说,只要是可以在工程中有用,就不必拘泥于“数据结构”中的固定表述,他不是科学家,而是工程师,创造的东西即使只在某些场合可以使用那就可以了。

    从他的书中,我还看到真正健全的人格,不会为环境所压倒,而是能够利用周围的环境,他毕业于中南工业大学,应该不是一个好大学,但是他显然从初中开始就很好的利用了周围的一切好环境,用来丰富自己。这一点难做到吗?我一直以为很难,但实际上中国国情如此,你的人生背景如此,怎能游离于环境之外,怪罪于环境之上呢?

    在他的书中还看到了一些新理念。云风不是一个电脑呆子,只是呆在办公室里看代码(当然他比一般的电脑呆子更强),他热爱历史国学,酷爱攀岩,最近知道他已从网易辞职,去追求自己热爱的攀岩了。他利用一切假期阅读,从中汲取新的只是。比如他谈到自己从前曾经做过,但是并没有总结的东西:配对编程(也叫极限编程,xp编程)。他说从前有过这个经验,知道看了一本书,才知道国外这种方法已经应用起来。两个水平差不多的人,一个人坐在电脑前码代码,另一个在后面说代码,动手的人无须思考,动脑的人无须打字(最少1分钟交流一次)。因为脑子反应比打字速度快,故而开发速度大大加快。好处不止一点,两人工作一段时间后交换次序,重复不断。这样一来,两个人都可以比较快的了解此工程的内容,更可以使办公人际关系大大提高。此外,若让10多人轮流进行此工作,更能够使整个团队了解此工作的内容,对于后期维护也大大方便,且即使有人跳槽,剩下的人也能够继续完成此事。且二人配合,防止了私人聊天的事情发生(到底有些私事不可以北其他人知道),工作效率大大提高。这样工作8小时超过加班,何乐而不为呢?可见,作者很爱跟踪新思想。

    作者反复强调,中国的游戏产业尚不成熟,他所写书,所培养新进同事只是希望能为这个产业出一丝力气。我感觉,岂止是游戏产业?微波、射频产业、芯片产业,哪一项不是深深落后于发达国家,正因为落后,我等学生也难以跟上时代的步伐,常有无力之感。正因为落后,所以资源不足,大学的教育才跟不上社会的需求(当然,教育改革跟不上也是重要原因,而中国人的官本位,不求实践、只求实惠更加剧大学生不凭真才实学吃饭,我即是一例,幸好有所觉醒,时刻警惕警惕!)。一个有理想的中国人就应该投身于自己的行业,努力提高技术,不仅为了自己,也为了小辈有更好的环境。

    记住!实践、工程经验,不断从他人身上学习,不闭门造车,是成为一个优秀程序员的关键。很喜欢Cleve Moler的一句话:我从来是个程序员,不是个科学家

    从书中可以看到云风身上的一种工程师精神,这种工程师精神正是我一直欠缺的,可惜了6年光阴。莫等闲,白了少年头,空悲切。

    下面结合自己所学讲讲规划。我所写是微波,所需掌握技术无非基础知识(电磁场、微波技术),具体知识(微带线、功分器、天线),高深知识(导波场论、电磁学数值方法),仿真软件(HFSS、ADS)等。而计算机技术则包含有数据结构、编程语言、工程经验,等等(还有好多好多,各种思想方法,平台特点,算法等等)。我认为,如果搞计算机,则是外行人,且有闭门造车之嫌。搞微波,则虽是半路出家,却还有行业邻居,实验仪器,项目依靠。所以今后10年、20年就应该投身微波技术这个行业,多吃苦,多努力。如果喜欢编程,计算电磁学也是有用武之地的,切记“智者不擒二兔”。

    忍不住摘抄作者学习C++的过程,不理解C就不要用C++,我感觉是作者的肺腑之言。

    “学习C++首先应学会C,至少是C++中类似C的那个部分。”

    “再入门书籍《C++编程思想》第一卷:标准C++导引刘宗田等译”

    “再《C++ Primer》和《The C++ Programing language》”

    “还有语法问题,应该看C++标准的电子文档(英语的),而不是看书”

    “更深一层《C++的发展与深化》、《深度探索C++物件模型》,中译本很好,读起来是一种享受”

    “更深一层《Effective C++》、《More effective C++》、《C++深思录》,这几本等有了几年编程经验再看”

    “泛型技术方面,《STL源码剖析》,侯捷写,国内书中为数不多的精品,更深入的template《C++设计新思维--泛型编程与设计模式之应用》”

    “对C++标准库,《C++标准程序库》”

    “而学习计算机的人,都应该读的是《计算机编程艺术》,学术界史诗般的巨著”

    “可以先看看《C语言编程设计400例》,从范例中看,比纯粹看教科书,更能速成。”

    此书确是诚心之作,于李笑来的书有的一比。

    此次阅读之后,我发现即使不能“一日三省吾身”,也应该每周抽出一天去书店、图书馆读书,并做个总结,反思自己的错误,完善自己的人格。在今天以前,浮躁之气已在身上显现,而现在在心平气和,很有盼头了。所以以后(无论在学习否),每周日或留待书店或图书馆。心应该沉下来。


http://blog.sina.com.cn/s/blog_68c6dfc30101p1b3.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本版本与网上其他资源不同之处在于,此版本可进行编辑,搜索,已进行内容识别扫描。可全选,可编辑,可剪切文字。 部分目录如下: 第1 章计算机,游戏,我_ 我,云风,从二十年前的计 算机游戏萌芽阶段一路走来。计 算机,并不神秘。程序,也只是 表达计算机控制逻辑的符号而 巳。 第2 章算法,程序的灵魂 算法,先千计算机存在于世, 比编程语言本身更为蜇要C 语言 只是工具,算法才是灵魂。这里 简单介绍了数据结构的基本知 识、算法放率的评估方法、几种 NP 问题的定义。 这里对游戏中最常用的搜索 算法问题之一寻路问题做了些许 探讨,并展开介绍了在以后可能 被广泛使用的智能算法。最后用 几个实例探讨了优化问题。 1.1 计算机...................................................................... 2 1.2 计算机游戏............................................................., 3 1.3 计算机与我......................, ... , ................................... 7 1.3 .1 启蒙............................................................... 7 1.3 .2 编程..... , .................................... , .......... , ......... 9 13 2.1 程序=算法+数据结构............................................ 14 2.1.1 算法,.......................................................... ,, 15 2.1.2 数据结构,.................................................... 17 2.2 搜索算法,.............. . ............ .... ..................... . .. . ....... 23 2.2.l 地图寻路问题................................................ 23 2.2.2 博弈问题,...................................................... 27 2.2.3 更为广泛的运用............................................ 28 2.3 智能算法,............................................................... 29 2.3.1 遗传算法(Genetic Algorithm) .... ·........ …... 29 2.3.2 模拟退火算法(Simulated Annealing) ....... 31 2.3.3 禁忌搜索(Tabu Search) ............................. 33 2.3.4 人工神经网络 (Artificial Neural Network) …..... ….............. 34 2.4 优化,....................................................................... 36 2.4.1 质数问题....................................................... 36 1.4.2 俄罗斯方块竞赛............................................ 37 2.5 Apple II 上的编程之路.......................................... 39 XIII 第1 章计算机,游戏,我_ 我,云风,从二十年前的计 算机游戏萌芽阶段一路走来。计 算机,并不神秘。程序,也只是 表达计算机控制逻辑的符号而 巳。 第2 章算法,程序的灵魂 算法,先千计算机存在于世, 比编程语言本身更为蜇要C 语言 只是工具,算法才是灵魂。这里 简单介绍了数据结构的基本知 识、算法放率的评估方法、几种 NP 问题的定义。 这里对游戏中最常用的搜索 算法问题之一寻路问题做了些许 探讨,并展开介绍了在以后可能 被广泛使用的智能算法。最后用 几个实例探讨了优化问题。 1.1 计算机...................................................................... 2 1.2 计算机游戏............................................................., 3 1.3 计算机与我......................, ... , ................................... 7 1.3 .1 启蒙............................................................... 7 1.3 .2 编程..... , .................................... , .......... , ......... 9 13 2.1 程序=算法+数据结构............................................ 14 2.1.1 算法,.......................................................... ,, 15 2.1.2 数据结构,.................................................... 17 2.2 搜索算法,.............. . ............ .... ..................... . .. . ....... 23 2.2.l 地图寻路问题................................................ 23 2.2.2 博弈问题,...................................................... 27 2.2.3 更为广泛的运用............................................ 28 2.3 智能算法,............................................................... 29 2.3.1 遗传算法(Genetic Algorithm) .... ·........ …... 29 2.3.2 模拟退火算法(Simulated Annealing) ....... 31 2.3.3 禁忌搜索(Tabu Search) ............................. 33 2.3.4 人工神经网络 (Artificial Neural Network) …..... ….............. 34 2.4 优化,....................................................................... 36 2.4.1 质数问题....................................................... 36 1.4.2 俄罗斯方块竞赛............................................ 37 2.5 Apple II 上的编程之路.......................................... 39 XIII 第3 章编程语言 至少要学会一种编程语言, 才可能编写游戏软件。流传于世 的编程语言数以百计,但真正流 行的却不多。各种编程语言之间 有它们的共通性,但也并非能够 一通百通,甚至也不存在一种适 合娇决所有问题的语言。 我认为大部分游戏程序员都 应该掌握工作平台的汇编语言。 这对理解硬件, 写出更好的代码, 还有软件调试都有莫大的帮助。 第4 章前Windows 时代 现在, Win d ows 一统江山, 它帮我们稳藏了硬件的许多东西。 这一章是对1 0 年前知识的一个回 顾,它们如今已经沉寂在历史中, 或是被Windows 掩盖。但是, 作 为喜爱创根l河底的程序员,我们有 必要对Window s 之前的时代有一 些了解。 XIV 3.1 C 语言................................................, .. ,, .......... ,.,,. 46 3.2 BASIC ..................................................................... 50 3.3 Ct+ ......................................................................... 51 3 .4 汇编语言,............................................................... 54 3.4.1 概述.............................., ... , ....................... ,,, .. 55 3.4.2 程序的本质....., .. , ... , ...................................... 57 3.4.3 寄存器........................................................... 58 3.4.4 寻址方式....................................................... 60 3.4.5 汇编指令....................................................... 61 3.4.6 CIC++ 语言和汇编....................................... 62 3.4.7 ,J 、结... . .. .. . .. .. .... .... ....... .... .. . . .. ............ .. ........... 63 3.5 其他语言................................................................ 63 3.5.1 Forth .............................................................. 63 3.5.2 Lisp ................................................................ 64 3.5.3 Java····..................................................... ....... 64 3.5.4 Python 、Lua 、更多...................................... 65 4.1 386 保护模式......................................................... 68 4.2 VGA 至U VESA ...................................................... 70 4.2.1 超越BGI ...................................................... 70 4.2.2 VGA·....... ··· · ···............................................... 72 4.2.3 VESA 标准................................................... 72 4.2.4 花絮............................................................... 74 4.3 保护模式下的开发工具.... …... ……............. ………··75 4.4 闲话Allegro .......................................................... 81 4.4.1 用C 与汇编写成的程序库….... …·….............. 81 442 BITMAP···.....................................................8 2 4.4.3 Sprite···.. ·.. ·.... ·.. ·.. ··.. ·.. ·········.. ··.... ···············.. ··85 4.4.4 几何图形和3D··........................................... 89 4.4.5 数据文件............... .-....................................... 91 4.4.6 声音............................................................... 92 4.4.7 其他的部分................................................... 93 45 67 第5 章Windows 编程 如果我们在Window s 下开 发游戏,那么理惮Window s 系统 就是尤为重要的事情。Window s 只是一个操作系统的特例,不属 子计算机理论知识的范畴。这导 致了许多已经掌握了编程知识, 理论功底也很扎实的程序员, 面 对Window s 下的开发无可适从。 第6 章汇编优化 汇编优化, 是在高性能游戏 引擎设计中很难避免的一个环 节。虽然不用汇编去做优化依然 可以写出高性能的程序,但优化 却可以变得更好。 但是,这一章并非从汇编开 始谈起。相反,一开始我就花了 不少笔墨谈汇编之外的知识。即 使是一些技巧性的细节, 也并非 必须用汇编才可以做到。 这一章着重介绍了在CIC++ 中和汇编进行混合编程的方法和 技巧,然后才具体谈到汇编指令 的高效使用策略。 4.4.8 ,J 、结............................................................... 94 4.5 cfido 中国惠多网.................................................. 94 5.1 Windows 编程入门............................, ................. 104 5.1.1 Windows 版本综述...... ,, ..... , ........................ 105 5.1.2 操作系统的核心................ ., ........................ 107 5.1.3 Windows API 和DLL.. ·······......................... 110 5.14 COM··........................................................... 111 5.1.5 Windows 的窗口和消息处理与传递........... 114 5.1.6 Windows GDI .................................. ............ 125 5.2 控制游戏的速度,................................................. 130 5 .3 浅谈M FC .................. .. ......................................... 132 5.4 小结,............................................................. . ....... 132 6.1 浅谈代码优化............................................... ..... .. 138 6.2 并不仅仅是汇编.................................................. 139 6.2.1 在算法实现时减少上下文的依赖关系.. ….. 139 6.2.2 低效的静态变量.................................... ... ... 140 6.2.3 数据的组织.................................... ... .......... 141 6.2.4 消除除法..................................................... 142 6.2.5 避免过大的循环.......................................... 144 6.3 汇编和CIC++ 的混合编程.................................. 146 6.3.1 使用外置的汇编编译器.. . ....... …............. …·146 6.3.2 使用内嵌汇编·· ·· · ··· ···········........................... 148 6.3.3 C++ 的函数调用规则........ ……..................... 150 6.3.4 寄存器的使用...................................... ........ 152 6.3.5 _declspec(naked)· ·· ·.... · · ·· · · ··... ·... ·.... · ·· · · ·· · ··.... 152 6.4 指令使用的技巧.................................................. 153 6.4.1 LEA: 别样的内存寻址指令................……·153 6.4.2 BSWAP: 扩展寄存器的个数......... ….... …··154 101 135 XV 第7 章S-I M D 指令 单指令多数据(SIMD , Single Instructio n-Mu l tiple- D ata) 编程是 现代CP U 高速处理多媒体数据 的发展方向。好的工具摆在一边 不去用就是一种浪费。 这里介绍得多的是MMX 使 用技巧,这方而也是我用得比较 多的,勉强算得上经验丰富。 第8 章引擎中的优化 单从内容来看,这一章是本 书的独家内容。我得以成名的开 源游戏引擎“风魂”的几乎所有 优化策略都在这章公开出来。虽 然引擎源码一直都是公开的, 想 研究的人自然可以通过阅代码 来学习,但是,由作者本人来解 释其中的优化策略,这是第一次 的文字记录。 XVI 6.4.3 缩短指令的宇节数............ . .... . .................…155 6.4.4 避免跳转指令............................................. 159 6.5 Pentium 的汇编优化策略...... ….......................... 161 6.5.1 UV 流水线................................................... 163 6.5.2 AGI 地址生成互锁 ( Address Generation Interlock)· · ………... 167 6.5.3 Pentium Pro, Pentium II 和Pentium III 的汇编优化策略......................................... 168 6.5.4 Pentium 4 的汇编优化策略…...... …............. 178 6.5.5 如何测试代码的速度…............................... 181 6.5.6 汇编能干的事情.......................................... 183 7.1 单指令多数据编程...... .. ..... ...... .. .. . .. .. ..... ... .. .. ...... 186 7.1.1 Alpha 混合.................................................. 187 7.2 MMX .................................................................... 191 7.2.1 MMX 的指令概况....................................... 192 7.2.2 SSE 及其对MMX 的扩展,......................... 194 7.2.3 SIMD 技术在C 语言环境下的使用...…….. 196 7.2.4 MMX 编码技巧.......................................... 197 7.2.5 SIMD 的应用举例...................................... 201 7.2.6 SIMD 编程注意要点. .................................. 203 7.2.7 SIMD 的性能检测....................................... 204 8.1 Blit 的优化........................................................... 207 8.2 脏矩形优化............................ . ............................. 209 8.2.1 "风魂”中改进的脏矩形算法...........…..... 215 8.2.2 滚动优化..................................................... 219 8.2.3 覆盖优化............................................. . ....... 222 8.2.4 脏矩形在3D 游戏界面中的运用....... .. .. . .... 224 8.2.5 时间和空间的权衡...................................... 229 8.2.6 关于估算..................................................... 230 185 205

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值