我的编程能力从什么时候开始突飞猛进?

作者:扶余城里小老二链接:https://www.zhihu.com/question/356351510/answer/1595886454

这可能是一个长篇。会陆续更新30天。先上图,证明自己学过编程。

陪伴我20年的显示器

20年了,还没坏。sun公司都倒闭了。当年我也是java的迷弟。只不过后来,我转了全栈。专心搞c++了。我是看《java未眠夜》,入了java的。后来买了这台显示器。好家伙21寸,1600×1200。现在都够用。

正题:先说一下学习历程,再讲突飞猛进的点

1 20世纪八十年代,我爷开了一个超市,里面有个合作伙伴,上了一台雅达利游戏机

当时,我是茶饭不思,等机器没人玩的时候,我就玩玩《钓鱼》这款游戏。爸爸跟我说,你想不想将来长大了也做一款? 我当时就暗下决心将来要做游戏。

2 我妈在某行工作(保密),有供员工学习的80486电脑,我每当有机会,就去跟班上的程序员学习。那个时候,他用debug调试+basic编程,还有cobol语言。我就跟他学如何用basic做数学题,画几何图形。

3 后来pascal来了,turbo c也来了。一路买书跟上。特意买了本强哥写的《c语言程序设计》。

4再后来windows3.11来了,3。2也来了。我就开始学习word和excel了。当然wps也一起学了。

5然后win95来了,3d max也来了。特意买来学习。那个时候,我是全校最靓的仔。

6 win98来了,vc6来了,delphi,c++builder也陆续进入眼帘,

太震撼了,

最终,我在mfc和bcb6里,选择了bcb的拖拽组件。写代码。

你问我那个时候靠什么挣钱?

7 互联网来了,qt来了,lua也来了。 java,js ajax 都来了。连php也来了。php,js ajax 还有java都是走马观花,在图书馆里,看了半年,都没看进去,继续坚定走c++和lua配合路线。

8网络游戏来了,大名鼎鼎的《传奇》《千年》《红月》等等。。看雪论坛也出现了,我们讨论的当然是怎么通过 ollydbg 来了解 网游的构造的。(别多想,纯技术学习)

9《天龙八部》来了,这个对我影响巨大,此时,圈内的技术讨论已经日益成熟,各种应用库雨后春笋般出现,只要想学技术,大约20w就能学会,就能过当时所有的驱动。很显然我没有去学(错过了几个亿)。这个游戏,有个附加程序叫《天龙扫地僧》,是用lua脚本写脚本。显然,天龙也是lua和c++,我就在这个时期学习使用lua脚本。

源文件

这是一个很好的学习宝库

10 pal5来了。不知道哪位大哥,还把它的lua源码给导出来了。又给我好好地上了一课

瞬间明白,当时的单机游戏的流程控制。

11 区块链来了 ,当时,我笑话那个,拿30万区块的人买一个汉堡。

12 人皇sky走了, 手游来了,错过了。虽然,育碧 tx wy的前员工出来办班,大肆宣扬手游时代来临,我还是当了耳旁风,继续在写pc端的程序。

13 区块链开始如日中天,各个群的人都开始讨论,一些执行力强的人,甚至找我参与改个hash算法,也发行这玩意。(现在想想,如果那个时候就切入,我可能早已经改变命运了,可惜只是改算法而已。)

14 我来到了知乎。我不想再沉沦下去,错过太多了,想要干点什么。于是开始重构sdlpal(仙剑1民间c源码),先是做了lua版本,然后又用c++(古典)重构。。重构完毕很是沮丧,因为感觉就像个没有灵魂的翻译。

15 打开cpp英文官网和b站的搬运c++ 11,14,17的视频教程。把sdlpal的c++重构版升级17.结果还是很不开心,因为还是那个老架构。新瓶装旧酒而已。

16 引入了boost coroutine2 将所有层级架构打散,通过协程的思想,来重构整个框架。最终达到完全解耦的目的。换句话就是说,不论 图形sdl,sdl2,qt,ue4,cocos 怎么换,只需修改代理接口即可,跟其他模块没有任何关联。脚本也是,不论是用js脚本,还是lua脚本,还是python脚本系统,也仅仅是更换个代理接口而已,声音引擎也是一样。

17 sdlpal将架构组件 理论化。(目前正在)

18 通过重构得来的模块化架构和调度经验,去复刻一款 怀旧游戏(github尚没有怀旧版本的源码)。(下一步)

19 做游戏的怪 自动升级,打装备,抢玩家装备。(目前所有游戏都欠缺的内容,钱途无量)(下二步)

20 躺着挣钱。。(理想)

瓶颈1: 从0开始接触dos

dos操作系统,全是命令行,我那个时候,就翻书学会了dir cd cd.. 这样,翻阅各个目录,找exe和com文件。这个阶段很快就过去了。(其实是遍地找游戏。)

瓶颈2:从0 开始编程,

小学1年级,班级老师新学期要排座,同学们都充满了各种想法,都想让自己排到心仪的座位。这个时候,就开始各种不和谐出现了,我那个时候,暗下决心等2年级排座的时候,能贡献一份力,证明自己。于是,在程序员老师的建议下,开始画流程图。当然了,都是很简单的。

然后写成basic代码,又看了更复杂的,一些,就这样,练了1百个不到那么多流程图。

既然是排序,就找了最简单的 冒泡法。看着流程图的图形,就尝试自己写代码,然后测试。用文件做缓存,每个sub函数操作完就保存到文件中,然后再用另外一个sub函数读取出来,并操作。

使用edit文件 编辑文本。把同学的学号,身高,男女,都放入进去。经过冒泡排序之后,就可以了。然后将运算结果到文件中,打开文件就看到排好的序号了。就这样,再接再厉,写了 学生课程表,学生成绩查询。等软件。就这样,学生相关的微型软件和流程图,用了1年的时间,才能够流畅先写需求,再画图,再写代码,再修改,再画流程图。。。然后完成。一直都没有图形化,很是悲伤。

理想中,排座。可当时我的basic能力不足。

那个时候想做这样的游戏,可是一直没有办法。因为只要做出这样的,同学们才会认可我。

瓶颈三 试图做第一款游戏

求程序员老师,给我画了张流程图。因为这种难度的项目自己还是很难想想的。

想从basic开始做。于是,就从最基础的画线开始学习

  1. ①LINE(10,10)-(50,50)   
  2. ②LINE(25,25)-(60,60),,B   
  3. ③LINE(100,100)-(120,120),,BF   
  4. ④LINE-STEP(20,20)   
  5. ⑤LINESTEP(30,10)-STEP(60,10)  

使用一个函数 画一种形状,这样一个一个打造函数,最后的成果类似于下图。

不是当时的成品图,在网络上找的类似的。

具体跟这个流程很像,命令行俄罗斯方块_精神与时间-CSDN博客

第四点。就这样,一直沉沦了好久,小学6年内,几乎没有什么像样的进展。大量时间,都在正常学习,玩游戏,抽卡,以及小姐姐的视听光盘度过之中。这些东西简直就是拦路虎。可能就是需要消化掉这些东西才行,或者说basic还是太简单了。能见到的关于basic的书,都太肤浅了。第一次就准备转行了,我跟程序员老师说:“我比别人提前学了6年的电脑编程,为什么,我的水平跟他们差不多?”老师语重心长地说:“小朋友,编程是需要过程的,小学6年级,没怎么让你做项目,是因为学业很重,毕竟一年52周,咱们在一起学习实践也就每年52天。你能学到多少呢?”我非常生气地说:“不行,我比他们提前6年学电脑,我要有一个态度,咱不能让他们随便就超过我啊?”。老师就说:“好吧,那就卷起来吧!!”于是给我一段话,让我把文字上升到图形。

就这张图,理解了一周时间。我问老师,什么叫抽象啊?不太懂。于是就有了下图

又过了一周,我基本搞明白了,从此以后,我不仅仅会画流程图了,还会画群组关系图了。

在这之后,我每每遇到看不懂的内容,就用群组关系图,来表达一些复杂的分支结构。然后不断进行细化,层层分级,最终落实到叶节点。

再比如,当时为了阅读一本厚书,画过类似的图

第五点,突破 ifelse难题。

程序做不大,主要是我对流程控制和数据转发的不理解。于是,我很气,气自己这么不聪明,明明就是9年义务教育出来的人,为什么,他们就行,我就不行呢。后来,走投无路了,我就用编辑器,做了一个ifelse软件

自从做了这个软件,ifelse 和switchcase,就是拖拽实现了,每当有看不懂的逻辑,就让小精灵sprite来演示。每一个方块里,都是一个数据包,这些数据包由lua来安装初始化。就这样,慢慢地我的ifelse逻辑越来越好了,写的代码逻辑bug少了很多。当然了,光是这样,也不能挨个点每个方格看啊,于是,就做出来内存表

这个就好很多了,逻辑变换,一目了然,内存数据也一目了然,随时暂停。观看数据组,反正32g内存,大到,根本用不完。

这个软件就是c++做的,可以看得出来c++操作内存的功力特别雄厚。

第六点:内存变量可视化,破解盲人摸象误区

再后来,连表格都不用了,直接在背景里画数据。这么庞大的数据量,其实就是使用指针关联的。这样的话,哪个npc动了,朝向。坐标,触发事件id,拥有的物品。。等等,都一目了然。就是因为这样,所有参与者的数据,在第一时间内,都了解到了,对整个编程环境的变化就有了直观的感知,所有的算法和数据结构,能用游戏内容来表示,就坚决使用。不仅仅自己看得懂,朋友们也看得懂,还有趣。

然后,配合命令行,找触发的内容

就这样,很快就把游戏的运行流程,和数据流通,以及触发机制,搞明白了。

为以后的,模块分离做好了坚实的基础。比如这个是sdl版的pal。将来要做成qt版的pal呢?

第七点:如何让自己脱离沉迷游戏的误区。这个学会了,绝对突飞猛进。而且是火箭发射。

这是好多年前做的了,都忘记了什么游戏了,这个就是研究路该怎么走的。你想想,astar是可以的,navmesh也是可以的。总之有了 走路,就可以节省很多时间了。然后就是 找怪,看血,看蓝,分析怪的等级,然后查表,选择打还是跑。再做的就是捡包啊。这些满满的都是数据结构和算法,指针 还有汇编的应用,走的是算法岗。当然还有另外一个途径,那就是看图找色。绿色安全,走图形学路线。

这种实战,绝对是成就感爆棚,可做多了,就是千篇一律,毫无挑战,毕竟这些游戏就是做给青少年的,他们的智力也就那样了。所以技术会了,就赶紧继续前进。停留的话,过几年,你发现,你落伍了,时代变了,你的竞争对手也变了。因为后面,还有opencl和cuda,以及各种多线程算法在等着我们去挑战。反正就是,会搞这个了,基本上,对各种游戏都是,喜欢了,做一套工具,然后就不在玩了,继续学习新技术去挑战了。

大家都知道,编程是需要可持续性的,也就是说,要不断地学习和实践。第一次突飞猛进的点就是接触了思维导图,可以一张图涵盖一门编程语言的所有的知识点,这张图该怎么画呢?很显然,最初的时候却只能看大佬们的作品,可大佬们的作品该如何落地,被我们进行拆解,然后再进行重组,变成自己的理解方式。这就是事一门学问。对于任何一个编程人士来讲,越早接触,越容易,建立起一套属于自己的知识树体系。边学习,边构思思维导图,

然后再建立起卡片式记忆法。各种抽象知识点图示化。

想要学习这套方法的同好,可以在关注夜曲编程之后,回复“免费教程”,就可以领取一份为期20天左右的交互式教程。

要知其然,更要知其所以然。这虽然是一套免费教程,可内容的构思极其精妙。把原本正常的教材里枯燥又孤立的知识点,于是初高中学英语的卡片式相结合,更加符合既有的学生思维模式。构筑技巧。以及拆解技巧。

关注我,带你学习更多编程技巧。

今日看点:WebQQ,终将逝去的实验工厂

作者:杨涛

如果你在今天访问 WebQQ,会发现已经变成一个告别页面。

相聚有时,后会无期。2009 – 2014,走过许多风雨,依然无法陪你一生。。。

WebQQ 上线的五年时间,经历了从客户端到网页,再从 PC 端到移动端的转变。它本身就是腾讯在自身战略和产品技术的一次大练兵,也为腾讯在网页端复杂交互的技术储备提供了支撑。

五年前上线的 WebQQ,被看做是腾讯作为一家技术型产品公司做的前沿尝试。在此之前基于 Web 的交互级产品都处于尝试阶段,并没有大公司主动跟进。

腾讯在 WebQQ 产品上,融入了即时通讯、QQ 音乐、网页浏览器等功能。最重要的是支持跨平台,支持 IE、Firefox、傲游、Opera、Chrome、Safari 等多种浏览器,不论在 Windows 还是在 Linux 系统下,都能满足大家随时随地上 QQ 聊天。

这在腾讯初期多平台覆盖不足的情况下,提供了一种变相的解决方案。此外由于 WebQQ 基于网页技术,也受到了大量封锁 IM 通讯的外企员工欢迎,只要能打开网页就能上 QQ。

由于使用 WebQQ 的用户可能经常使用公用电脑,他们还给用户提供了自定义表情漫游、聊天记录七天漫游的功能,这极大程度上满足了大量网吧党的聊 QQ 需求。

WebQQ 最大限度地减少了电脑性能或操作系统对用户的限制,特别是对于喜欢简洁高效的商务用户,以及那些临时在境外、酒店、机场或咖啡吧使用公用电脑的用户来说,WebQQ 在确保安全性的前提下大大提高了使用效率。

此外,在 webQQ 3.0、Q+ 的版本上,腾讯开始大规模引入第三方应用打造 Web App Store,包括音乐、小说、办公、资讯等服务。这应该是国内首款,大规模推进开放平台的 Web 产品。

这五年时间发生了很多变化,首先腾讯利用 WebQQ 测试开放平台的目的已经达成,而覆盖更多产品的「腾讯开放平台」已经成为主导。

第二是腾讯在多平台覆盖上取得进展,无论是拥有基本功能的 Linux QQ,还是持续更新的 Mac QQ,都已经对腾讯之前在多平台覆盖的不足进行了改善。

第三网页技术存在的局限性,WebQQ 是在 HTML5 尚未普及的情况下上线的,采用了大量的 JS 、Ajax 来完成复杂交互。但在 PC 产品持续演进的情况下,WebQQ 要实现同步演进需要更多的成本,而且排查维护要更困难。

体量不够大,也不能赚大钱,维护成本还高,结果也就可想而知了。

最后,也是最重要的一点。即时通讯的重心已经从 PC 转移到移动端,腾讯已经成功打造「手机 QQ」与「微信」的双雄制霸,而且移动市场无论增长潜力、收入潜力都远高于 PC,所以仅仅是作为 PC 领域补充者的 WebQQ 停摆也就不足为奇了。

总结 WebQQ 的功成身退:使命已达,把接力棒交到下一个选手。

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。