

在过去的几年中,我一直致力于游戏开发。 目标始终是在游戏设计或该技术的创造性应用中发布有趣的小实验。 这真是一个艰难的旅程(包括大量的数学运算),我在个人和职业发展的所有一点点上都感到很开心。
我有这样的理论,即我在一生中选择的这种愚蠢的追求中如何找到快乐。 我称它为“丁”。 除了学习之外,没有什么比我对我感兴趣的学科的理解能力的增长有趣。 我涉猎音乐制作。 我之所以这样做是因为我渴望在其中有所建树? 不,我喜欢。 学习3d编程,着色器或一些新的当月JavaScript库也是如此。 吉他? 相同。 写作? 陪审团出来了,但看起来更像是一种爱好。
绝大多数时候,我的时间都花在学习如何构建我们都构建的相同种类的事物上,但是是以新语言-用golang,C ++,python或JavaScript构建的新系统。 但是大多数归结为:我真的很想编写您认为“游戏”的软件。 这意味着我必须学习很多几何,代数和设计。 它还意味着在特定引擎中的任何特定实现细节上的学习技术 。
通过在Game Developers Conference上观看游戏开发人员的技术演讲来学习如何在网络上进行3D工作的方式,该会议的YouTube频道包含了不断增长的开发人员需要满足的一切,以及像Udemy这样提供庞大支持的地方80一小时的课程,详细介绍了诸如Unreal或Unity之类的特定游戏引擎的每一个复杂细节。 所有的工作方式都与我描述的方式相同:技术胜于具体。
我的学习方式就像我的教学方式:建立基础。 站起来矢车菊蓝屏所需的技术和概念。 教程可能会向您展示如何使用地球上的任何语言和渲染系统执行此操作; 糟糕的教程将向您展示特定引擎的工作方式,好的教程将提供有关相机主题及其工作原理的一些见识和理解,出色的教程将使您考虑如何在无限大环境中使用该通用工具。在任何情况下都可以使用各种工具。
就是这样。 对于那些选择学习新事物的人,我最想要的是:专注于地毯包¹。
随着时间的流逝,医生携带了一袋“东西”。 我们这个地毯式的医疗版本并非所有解决方案; 比这更务实。 1800年代的医生包里装着什么? 那1940年呢? 那2018年呢?
在1800年代,您可能会看到很多基本工具。 刺针,绷带只是您家的床单,您必须考虑到阿司匹林直到很晚才可用的事实,所以可以代替它吗? 鸦片。 (或海洛因,但现在不要进入……)
向前迈进10年。 袋子可以换吗? 医生从10年的家庭通话中学到了什么? 20吗 100?
让我们将其应用到当今我们在网络上学习技术的方法,特别是编程和JavaScript。 我知道,深入我的骨子里,我们所有人都在Google搜索基本问题的答案。 Google本身只是毯子的另一种形式,其中包含各种级别的腐烂和有用的垃圾,它们是手动解析的,旨在重新唤起您在回忆时(例如,如何在网页动画中使用曲线)使用的叮叮声。
您环顾了一下,意识到曲线是基于两件事的; 缓和方程和三次贝塞尔曲线。 校验。 将其放入您的地毯袋中。 如何使用缓动功能? 好吧,进行一些谷歌搜索,然后将其弹出。
这与我成长为技术专家的过去几年非常接近。 我可以用来解决问题的工具的范围在不断扩大。 大多数问题。 作为一名会说多种语言的工程师,能够涉足视觉编程,系统编程或网络编程是我从事该领域工作的能力的重要组成部分。 我认为这是绝对的。 必需品。 没有工具,没有人会记得这么多细节,其中主要是我的毯子包。
我也一直在做这件事,感觉就像是永恒。在我需要做的事情上,我一直感到荣幸和幸运。 那学到了什么呢?
发现通用事物比特定事物更有用。
要小心! 尽量不要相信教程或对系统或现象的解释是最具体的 。 阅读有关如何在Web应用程序中管理状态的教程吗? 太棒了! 阅读有关Redux 1.2.3如何处理递归操作的教程吗? 我们走了。 我并不是说这些文章对他们的听众没有用,但观点很重要。 一种是尝试讲授概念 ,另一种是讲授主题 。
对于那些想被认为是该行业的老师的人来说,也是一样,对于任何认为自己是导师的人来说,它都是双重的。 如果学生自己不能学习至少50%的材料,对他们来说就没有什么价值。
如果我要编写有关3D编程的系列²,我绝对可以肯定,从头开始,就有非常重要的基础来代替为什么以及如何工作。 我会逐步进入每个系统。 向量,矩阵, 然后是相机。 这将使我能够涵盖模型空间,视图空间和世界空间, 作为其他三个的详细信息 。 我认为这种“点点滴滴”的教学风格对学生如何理解教材产生了深远的影响。
请记住,正在阅读您要教的内容的人不知道自己在做什么。 即使您带着两个鼻孔带领他们,也要在光线充足的房间里使用视觉辅助工具。 您可以提供清晰,简单的示例和工作进度镜头的内容越多,则资料越容易提交到内存中。
对于一个要教其他JavaScript程序员的JavaScript程序员,我恳请您使用现实世界中要解决的问题的示例 。 如果您要撰写有关Redux的系列文章,请确保包含一个示例系统,您希望通过一些可量化的度量来改进这些特定的东西 。 我不是在谈论加载时间或诸如JavaScript分析之类的东西(尽管嘿,这对正确的听众来说可能很有用),但更笼统地说是一种理解的方式。 教一个例子。 针对特定问题。 提出解决方案并充分实施 ,包括任何风险,副作用或潜在问题。 完成后,让他们练习刚刚学到的东西。
没有人会从“ Vue.js简介”中学到任何东西,但是已经对Vue.js感兴趣的人,因为它在精神上等同于Xerox或Kleenex。 这些只是品牌名称。 我们需要开始考虑如何培训他人并与图书馆并行发展最新技术。
如果我们只是在网络上教授图书馆和抽象技术,那么所有人都会迷失方向。 我们需要对这些品牌名称进行透视,并记住我刚刚发明的JavaScript LibraryAdoption³法则。
没有人关心,其他人已经忘记了。
所有这些现代JavaScript库和框架(例如React,Ember.js,Vue等)都有一个局部的价值最大化 。
您需要将宝贵的有限时间集中在学习技术上,而不是专注于特定的框架,库或SDK。 以后在您的职业生涯中专精很棒,如果您的工作已经专精于我,我将完全理解。 这就是行业运作的方式。 这并不意味着您应该花所有醒来的时间来学习特定的框架或库。
用react填充一层(您的视图)是可以的; 将Redux插入状态管理One和JSON API到数据层本身? 至少现在,您可能不需要它。 仅仅利用这些工具,您当然不是一个更好的程序员。
不过,其中的很大一部分是一种新的“设计模式”,它实际上比当今的大多数Web程序员都要老。
数据减少,动作增加。 这项技术的基本原理是,在其他选择的情况下,您的数据应驱动您在屏幕上显示的内容以及其行为,动画或处理更改的方式,尤其是严格根据您呈现时所处理的数据类型,将其呈现为经常根据需要。
您可能已经听说过这是“反应式编程模型”,我想这很适合我们的讨论,但这实际上意味着您停止以您认为最合乎逻辑的高效模式工作—我的大脑做出了一些决定,系统应该首先工作,然后再渲染,然后将其反转。 您原来的模式(命令模式)所拥有的控件被转换为新的控件:立即模式。
在这种情况下,新合同(即即时模式)要求您以一种可能有点不对劲的方式进行思考。
感觉效率低下,不是吗? 如果您在React出现之前就大量编写了JavaScript,那么您可以随意重新渲染的想法就是网页的巨大变化。 如果JavaScript是您的主要语言,则这会大大放大。 一直运行代码意味着浏览器将缓慢爬行。 您将滞后页面滚动。 您可能会因为泄漏而耗尽内存,或者只是让工作看起来“ 不对劲 ”。 而大部分工作呢? 我们这样做时并没有我们今天已经理所当然的任何精美的分析工具,热图等。 双向! 上山!
由于浏览器和一般的计算机已经变得更加强大,设计更好,效率更高,React最终成功地改变了JavaScript可以完成的工作量的观念。 这样做吧! 渲染,但是经常需要! 让坐在桌上的超高速计算机弄清楚它是如何变化的,然后呈现差异。
由于某种原因,那不一定是卖给我的方式。 根据我的经验,React被认为是编写大型复杂应用程序的一种更优雅的方式 。 在关于一群人如何看待自己的创作的讨论中,这种颜色总是让人感到有些肚脐 ,并且错过了Web开发人员发现的标记。 所有框架对此都有点内,但是这里的潜在技术成就是将Control⁵模式巧妙地转换为泡腾的,简单的,可用的程序包。
Data Down,Actions Up使我们有了一个快速的洞察力,以了解在编写大型,复杂的JavaScript应用程序时如何解决严重问题。 你如何组织该死的东西? 您如何确保从屏幕左侧移动到屏幕右侧的内容仍在屏幕右侧 ,而不是返回到应该位于的位置?
这正在进入切线领域,但是上述问题(如何确保描述UI外观的信息与UI的实际外观相匹配)是当今学习如何编写大型Web应用程序的潜在挑战。 Data Down,Actions Up,描述了一种工作方式-立即模式-以便在任何时候,UI 应该做的某些信息都与它正在做的事情完全匹配; 因为您通过强制它在数据更改时进行渲染来确保确实如此。
这种洞察力为大多数“下一代” Web应用程序框架提供了动力,因为它消除了新程序员面临的大量问题。
对于经验丰富的开发人员来说,在Backbone或诸如Prototype或Dojo之类的早期产品中解决这些问题时,都感到非常费力 。 这绝不是不可能的-它只是一个大而复杂的问题,至少有1,000种解决方法。 它做到了! 反应击中了一个真正的悍马⁶。
当鼠标悬停在上面时,您不必编写自己对向下和向左移动的事物的协调,以及构成该系统的所有信息。 只是平底锅! *(po)*永远消失了! 任何不适合操作或数据本身的事件都可能被删除。
在Data Down之前,Actions Up是Web开发人员可以指向的最接近“标准”的东西。 通常,我们采用相反的方法。 我们将编写一个状态,将其应用于UI所做的概念复制,然后进行修改。 这种方法有效,不会出错。 大型,复杂,庞然大物的网站,例如亚马逊,推特,甚至Facebook,都以这种方式使用JavaScript; 是盐,不是牛排 。 React拿了我们用JavaScript构建的牛排,然后将其变成了盐。
人们每天都在编写软件,不需要我们使用一些新的思维方法来具备基本的读写能力。我在具有自己风格的JavaScript与具有自己风格的Golang,Python,Elixir等之间切换。 C#,最后是C ++,这意味着我的代码主要是三个Michelin Star垃圾桶。 即时模式/数据减少,动作增加技术是否可以使用这些语言? 当然。 这是服务器的正确技术吗? 可能不是,但是在某些情况下? 就像在长生不老药语言Phoenix框架中一样? 它像手套一样合身。
那是因为我已经学会了这项技术。 我想煮一块很棒的牛排,如果牛排需要一点盐,那么-现在我知道了。
此外,盐分过多对您不利。
在使用该新工具之前,请进行更多的前期设计,以查看它是否真的有意义,或者只是追逐他们在会议上教授的时髦新时尚。 学习技术,而不仅仅是图书馆。 在大多数情况下,您将搜索它们的工作原理。
我会在这里和现在向您保证,您将成为更好的开发者。
[1] https://www.youtube.com/watch?v=AivZSC9J3Rs
[2]实际上,我正在这样做! 它刚刚开始,我希望在完成每一章时都分享它。 有兴趣吗 在Twitter上关注我的胖头,然后在发布之前将其张贴在此处。 批判我的热门垃圾写作!
[3] JavaScript的采用法则规定:不使用JavaScript的任何人都将立即失去对JavaScript编写和部署的任何充分改进,并且除维护人员以外的所有人都已经忘记了它的大部分工作方式。 除了库工作外,我们的工作重点仅在于库的设计技能,而不是如何在需要时通过Google搜索这些库为您提供的服务。
[4] 价值最大化是什么意思? 这些工具应该对您所构建的内容产生很大的影响。 想想木匠。 木工的做法已经存在了很长时间,对吗? 您是否真的认为每次发明新的接头时,他们都会专门改造车间,使他们的所有工作都包括燕尾榫接头? 否。每个关节都有目的。 有些比其他的更美观,而有些则更困难或更精确,需要某种权衡或要求。 React中的价值最大值是; 它只是一个视图层-因此,剩下的两层交给了您。
[5]如果您已经阅读了有关设计模式的任何内容,那么“控制反转”可能会立即使您想到依赖注入-您认为它是模式的专门版本,这没错,我将更广泛地应用它手动协调的想法,而不是DDAU的版本。 即时模式/反应模式假定协调发生在动作级别,并且数据本身一旦在算法的渲染循环内就不可变。
[6]请参阅:https://www.html5rocks.com/zh-cn/tutorials/internals/howbrowserswork/#Rendering_engines,也请理解即时模式渲染的想法已经很老了。 React的创新是将该技术应用于DOM并引起了JS世界的关注。