精华内容
下载资源
问答
  • 技能系统设计

    千次阅读 2017-04-09 00:32:55
    先放现在思维导图。 实际在项目中遇到不少的坑,也学到...这个其实和目前设计的项目中的技能系统有点不太一样,这个当然更完善。毕竟这个项目是刚接手的时候连续加了1个月的班把战斗系统基本重构完全之后的版本。这

    先放现在思维导图。 实际在项目中遇到不少的坑,也学到不少的东西,但毕竟没那么多时间来整理,等以后有空,再好好的来写点东西。
    先放现在思维导图。 实际在项目中遇到不少的坑,也学到不少的东西,但毕竟没那么多时间来整理,等以后有空,再好好的来写点东西。
    这里写图片描述

    这个其实和我目前设计的项目中的技能系统有点不太一样,这个当然更完善。毕竟这个项目是我刚接手的时候连续加了1个月的班把战斗系统基本重构完全之后的版本。

    这里有一个地方需要特别注明一下,以免自己下次看的时候忘记。
    今天在回家的路上,和室友(大帅)讨论了下技能系统的设计, 因为我总觉得自己的技能系统设计有一点问题。
    和大帅的讨论也讨论出了一点不错的成果。

    在我之前的版本中, 我的效果中内置了一个范围检测, 意思是 范围检测被当做了效果的一个成员变量来做。
    大帅提出说, 范围检测应该是和效果同级,而不是作为效果的成员变量来用。刚开始我没太理解他的意思,因为我想的是, 效果总要有个地方来获取目标,然后对目标产生效果。
    类似于这样的,把范围当做自身变量,当自身触发的时候,根据范围获取对象,并产生效果。

    public void OnAct(){
     List<Target> aList =  m_oArea.GetTargets();
     for oTarget in alist
        //产生作用
    }
    

    那假如按照大帅的说法,范围检测与效果同级, 那么TargetList从何而来, 其实一直以来我都陷于了一个思维误区, 就是 我还是把效果当成技能来看待, 技能带范围那不是最基础的么, 但事实证明,这是错的。
    我们把范围单独独立出来, 做成一个效果叫做范围检测。
    假如现在策划来一个需求,要我们做一个飞行的子弹 边飞行, 边爆炸,爆炸对周围以自身为半径5秒的敌人造成伤害:

    这种需求对于两种设计来说都是很简单的:
    对于以前的设计:
    我们可以让子弹每隔1秒生成一个效果, 因为效果自带范围 , 那么我们只需要一个效果,就能够搞定。
    效果带有一个伤害组件,并配置好范围信息。那么就可以了。

    对于第二种设计:
    我们也可以让子弹每隔1秒生成一个效果: 这个效果就是范围检测效果, 然后范围检测效果,范围检测对得到的目标列表,再把配置在自身身上的效果在目标上面执行一遍。 获取说把自己得到的列表 拿给之后的效果去进行一遍加工。(范围检测的效果,可以组合各种验证器, 比如血量低于多少剔除,等级大于多少剔除等)

    对比两种设计,明显感觉第二种更加合理, 更能体现出组合的魅力。

    组合比继承,或者拥有都要好。 这是我的切身体会,这套系统是我重构的第四版了, 之前的实现方式过多的继承,非常不方便扩展,假如策划有新的需求,那么我代码就需要大改。
    现在这套系统跑下来,应对于策划的所有需求,基本可以通过组合的方式去实现。(毕竟我们是个手游)
    NOTE: 记得使用对象池, 不然你会哭的!
    感谢大帅的帮助.Thank You。

    这个其实和我目前设计的项目中的技能系统有点不太一样,这个当然更完善。毕竟这个项目是我刚接手的时候连续加了1个月的班把战斗系统基本重构完全之后的版本。

    这里有一个地方需要特别注明一下,以免自己下次看的时候忘记。
    今天在回家的路上,和室友(大帅)讨论了下技能系统的设计, 因为我总觉得自己的技能系统设计有一点问题。
    和大帅的讨论也讨论出了一点不错的成果。

    在我之前的版本中, 我的效果中内置了一个范围检测, 意思是 范围检测被当做了效果的一个成员变量来做。
    大帅提出说, 范围检测应该是和效果同级,而不是作为效果的成员变量来用。刚开始我没太理解他的意思,因为我想的是, 效果总要有个地方来获取目标,然后对目标产生效果。
    类似于这样的,把范围当做自身变量,当自身触发的时候,根据范围获取对象,并产生效果。

    public void OnAct(){
     List<Target> aList =  m_oArea.GetTargets();
     for oTarget in alist
        //产生作用
    }
    

    那假如按照大帅的说法,范围检测与效果同级, 那么TargetList从何而来, 其实一直以来我都陷于了一个思维误区, 就是 我还是把效果当成技能来看待, 技能带范围那不是最基础的么, 但事实证明,这是错的。
    我们把范围单独独立出来, 做成一个效果叫做范围检测。
    假如现在策划来一个需求,要我们做一个飞行的子弹 边飞行, 边爆炸,爆炸对周围以自身为半径5秒的敌人造成伤害:

    这种需求对于两种设计来说都是很简单的:
    对于以前的设计:
    我们可以让子弹每隔1秒生成一个效果, 因为效果自带范围 , 那么我们只需要一个效果,就能够搞定。
    效果带有一个伤害组件,并配置好范围信息。那么就可以了。

    对于第二种设计:
    我们也可以让子弹每隔1秒生成一个效果: 这个效果就是范围检测效果, 然后范围检测效果,范围检测对得到的目标列表,再把配置在自身身上的效果在目标上面执行一遍。 获取说把自己得到的列表 拿给之后的效果去进行一遍加工。(范围检测的效果,可以组合各种验证器, 比如血量低于多少剔除,等级大于多少剔除等)

    对比两种设计,明显感觉第二种更加合理, 更能体现出组合的魅力。

    组合比继承,或者拥有都要好。 这是我的切身体会,这套系统是我重构的第四版了, 之前的实现方式过多的继承,非常不方便扩展,假如策划有新的需求,那么我代码就需要大改。
    现在这套系统跑下来,应对于策划的所有需求,基本可以通过组合的方式去实现。(毕竟我们是个手游)
    NOTE: 记得使用对象池, 不然你会哭的!
    感谢大帅的帮助.Thank You。

    =======================一段时间之后=====================
    今天策划突然提了一个需求 object的效果是否能穿墙需要可配置。
    之前问策划的时候, 他们也没有说出个所以然出来, 所以我默认所有的所有的Object和技能都是不可以穿墙的。 虽然我提出了变量, 但是并没有什么卵用, 期望的效果的是 当策划提出这种需求的时候, 我只需要修改某个文件的某个效果就能完成, 但是 现实是 我至少要修改 10处代码, 还要处理好他们之间的关系。 这就是设计不合理造成。

    如果在设计之初我就使用 范围独立出来成为单独的obj,做一个范围选择器,那么现在就没有这么多毛病了, 直接对范围选择的Obj做扩展就可以。 因为所有的Obj的效果, 触发的前提都是范围选择器。 这样的设计能够让我得以用很小的修改实现很大的效果。

    而我现在的设计是 Object拥有一个范围, 他根据这个范围,获取范围的对象,然后对这些对象产生效果。这样假如我要修改,那么我要对所有类型的Obj 的初始化可能都会有一点改动, 虽然改动不是很大, 但这毕竟造成了逻辑不清晰。

    所以要吸取教训。 有空可以自己先整一个技能的基础框架出来, 以后的项目就能直接用了。

    都是泪啊, 现在基本已经没有办法改动了。 策划已经熟悉之前的技能的逻辑结构, 我也没有给他们出技能编辑器, 所以改动的代价太大,不能承受了。

    有机会可以做一个技能编辑器来玩玩, 等我把我自己的客户端框架写完再说把。


    后续, 虽然没到现在也没有抽出时间来实现技能编辑器, 但是我现在的项目有需求说给我们两个月的时间, 实现一个完善的技能编辑器,而且会有几个人一起做。 所以之前做一个技能编辑器的想法可以在这边实现。 顺便验证一下自己以前的一些写法与想法。


    运行时大致会会保持与之前的一致, 基本思想就是以组合代替继承, 然后技能其实是一个容器。 而且效果才是实现。可以简单的理解为 技能就是GameObject, 而效果就是各种Unity功能脚本, 当技能组合了一个效果, 那么就会成为组合该效果的技能, 譬如 Gameobject挂了Button脚本, 就变成了一个Button。
    有点类似于EC框架。。 但是没有S的存在

    展开全文
  • 开发人员的必备技能

    千次阅读 多人点赞 2017-05-10 10:06:29
    本文尝试列举出最重要的几个技能,也期望通过此列表能给新人一个比较明确的学习重点和路径。

    对于刚开始学习软件开发的新人来说,“必备技能”往往意味着一个长长的、标有重要度的学习列表,但是过长的列表通常会导致新人不知如何开始学习,压力倍增。

    本文尝试列举出最重要的几个技能,也期望通过此列表能给新人一个比较明确的学习重点和路径。

    深入学习一门编程语言

    没有掌握任何一门编程语言,就不可能成为一名编程人员。

    许多程序员试图在学习之初一次学习几种编程语言,以便应对他们第一份软件开发工作的需要。虽然我认为开发人员最终会学习多种编程语言,  但建议不要在开始时这样做。  因为同时学习多种语言只会导致混乱,也会分散学习其它技能的精力。相反,我建议深入的学习一种编程语言,这样也会对使用这种语言编写代码感到非常有自信。

    如何组织代码

    新手程序员在完成编程语言的学习之后,或者最好在学习编程语言的同时,需要掌握的是如何正确的组织代码。

    通过Steven McConnell所著的《Code Complete》,可以帮助学习这个宝贵的技能。

    组织代码意味着编写良好的、清晰可理解的、不需要大量注释的代码,因为代码本身是可自注释的。许多软件开发人员究其整个职业生涯都不曾具备这样的技巧,但是这个技能却是判断一个软件开发人员的技术和能力的首要标准。良好的代码结构代表的不仅仅是完成了编码工作,而是对编码事业的热衷奉献。

    对于新手程序员来说,简洁清晰且含义明确的代码,能让你轻松地通过面试。

    提升代码结构已经成为了软件开发的重要部分,但是提升的过程却是十分严格的。在这个过程中,虽然不需要编写新的代码,但是却需要和团队成员一起花费大量时间来维护现有的代码。

    面向对象设计

    为了应对软件开发中的面向对象设计思想,开发人员也需要学习一种面向对象的语言。

    面向对象设计是一种设计复杂程序的方法,它将代码分成了单独的类和对象(类的实例),这些类和对象封装了一些特定的功能。

    我们一直试图在软件开发中管理复杂性,用对象的方式思考就能帮助我们做到这点。面向对象允许我们跳出一堆关系繁杂的组件,来清晰的定义和设计一个复杂的系统。

    现在已经有大量的功能性编程语言,但是在软件开发过程中,你会发现那些最受欢迎的语言和模型都深受面向对象设计的影响。所以就需要深入的理解类、继承以及如何使用,还有多态和封装。

    数据结构和算法

    软件开发人员应该熟悉以下的数据结构:

    • 数组或向量
    • 链表
    • 堆栈
    • 队列
    • 树结构
    • 哈希
    • 集合

    掌握并熟练运用以上的数据结构,能帮助开发人员清晰的定义、存取、管理数据。通过合理的数据结构和算法,许多困难的编程问题就能迎刃而解。

    常见的算法有以下几种:

    • 排序算法
    • 查找算法
    • 图搜索算法
    • 动态规划算法
    • 模式匹配算法

    善于利用好的算法,能起到事半功倍的效果。如果你对算法不够熟悉的话,就很难提出一个好的解决方案,这也就是需要我们掌握算法的原因。

    事实上,  数据结构和算法也是软件开发中最有趣的领域之一。利用数据结构和算法来开发一个干净、简洁的解决方案,效果会非常好。

    Gayle Laakmann McDowell的“Cracking the Coding Interview”书中介绍了有关算法和数据结构的所有知识。

    学习这些知识是一个挑战,但却是非常值得的。掌握其中的任何一个技能,都能让你远远超过其他人。这些知识也正是其它软件开发人员所不具备的。

    开发平台及相关技术

    应该至少对一个开发平台以及与之相关的技术或框架有一定的经验。

    平台通常意味着操作系统(OS),但它也适用于与操作系统类似的其他抽象系统。例如,你可能是专注于Mac或Windows操作系统的Mac开发人员或Windows开发人员,同时你也可以是专注于特定Web平台的Web开发人员。

    具备某个特定平台的专业知识,不仅仅意味着需要熟悉平台本身,还需要掌握开发平台常用的开发工具、模式和通用框架。

    框架与技术栈

    除了学习特定的编程语言和平台外,学习并掌握一个框架和技术栈也是非常重要的。

    框架是一组用于在特定平台或多个平台上开发代码的库,它通常会使该平台上的常见编程任务更加容易。例如,大多数C#开发人员使用.NET Framework编写C#应用程序。.NET Framework由许多库和类组成,允许C#开发人员在更高层次的抽象中工作。

    技术栈则与框架有点不同,技术栈是一组通常包括框架的技术,通常一起用于创建完整的应用程序。技术栈使得创建应用程序变得更加容易,  因为它们提供了许多开发人员用于开发应用程序的常见范例,因此可以轻松共享知识。学习技术栈是非常有价值的,因为这意味着你拥有开发完整应用程序所需的所有技能。许多使用特定技术栈开发应用程序的公司,也在寻找熟悉该技术栈的软件开发人员。

    数据库基础知识

    目前, 主要有两种数据库技术:关系数据库和文档数据库。

    现在的开发人员应该很熟悉关系数据库,但同时也应该对文档数据库有所了解。

    在软件开发中,数据库通常用于存储应用程序的数据。

    对于数据库,开发人员至少应该了解以下方面:

    • 数据库的工作原理
    • 如何执行基本查询来获取数据
    • 如何插入、更新和删除数据
    • 如何添加数据集

    源代码管理

    管理源代码是任何软件开发项目不可或缺的组成部分。在使用源代码之前,应该有一个网络来共享项目的所有文件。

    源代码管理工具最基本的功能,是保留软件项目中对文件所做更改的历史记录。它还允许多个开发人员同时处理相同的代码,  并将这些处理代码融合在一起。

    所有的开发人员都应该知道如何使用源代码管理工具,以便能够检查代码并从多个来源融合代码。

    构建和部署

    目前,大多数软件开发项目都有一些自动化的构建和部署系统。同时也有许多不同的软件应用程序,来帮助团队自动化构建和部署任务。

    构建

    当你编写代码并将其合入到源代码管理系统中后,你想通过一些方法了解你合入的代码是否运行的很好,这就需要进行构建。构建会编译系统中的所有代码,并确保没有编译错误。一个复杂的构建系统还可以运行单元测试和用户测试,或者代码质量检查,并提供一些有关代码库当前状态的报告。

    部署

    部署系统负责将代码部署到产品机器上,或者将其部署到某种测试环境中。

    虽然开发人员不一定要成为部署方面的专家,但是了解系统的基础知识以及构建和部署代码的过程也是非常的重要。

    测试

    现在,很多的软件项目都采用了所谓的敏捷流程,软件开发人员和测试人员合作的更加密切。代码质量成为了整个开发团队的责任,所以开发人员也需要对测试知识有一定了解。

    对于开发人员来说,至少应该熟悉以下的基本术语:

    • 白盒测试
    • 黑盒测试
    • 单元测试
    • 边界条件
    • 测试自动化
    • 验收测试

    调试

    对于软件开发人员来说,经常会花费90%左右的时间,来弄清楚自己的代码为什么不起作用了。不论你从事任何语言的代码开发,代码调试都是开发过程中不可缺少的一部分。

    所以开发人员应该下定决心,认真的学习如何做到高效的调试代码。

    方法论

    一些软件开发团队在编写代码并完成他们的项目时,都遵循着一些方法论。所以开发人员至少应该熟悉诸多最常见的软件开发方法论中的基本几种,这里要说的就是瀑布开发和敏捷开发。

    总结

    尽管本文中列举的软件开发人员应该了解的知识很多,其中很多知识也许正是你所不了解,但是请不要沮丧。我们要做的就是认真的补充这些知识,不断的提高自己。

    开发技能能够保证我们开发任务的顺利进行,开发工具则能很好的提高开发效率。葡萄城控件一直致力于为广大.NET平台开发人员提供高品质的开发工具产品。

    原文链接:https://dzone.com/articles/the-technical-skills-you-need-to-have-as-a-softwar

    转载请注明出自:葡萄城控件

    展开全文
  • @程序员,请掌握这些核心生存技能

    万次阅读 多人点赞 2019-12-10 08:30:48
    大咖你好,作为一个编程初学者,有什么需要注意的?...这个问题其实也不太好回答,因为要注意的问题蛮的,得就像雾霾中的颗粒。不过,有趣的是,流年似水这两次的提问中,对的称呼大有不同...

    大咖你好,作为一个编程初学者,有什么需要注意的?

    以上是一个读者流年似水的提问。我把他的问题置顶了,但一直没想好怎么回答,因为问题太过笼统了。后来,他也可能意识到了这一点,就又给我发了一条微信:

    在吗?老师。我们作为新人应该在编写代码的过程中注意哪些问题呢?

    这个问题其实也不太好回答,因为要注意的问题蛮多的,多得就像雾霾中的颗粒。不过,有趣的是,流年似水这两次的提问中,对我的称呼大有不同。

    “大咖”中略带一些调皮,而“老师”就显得过于庄重了。凭良心说,我喜欢“老师”这个称谓。但我知道这顶皇冠戴我头上,会把我 185 的身高压扁到 173。再说,我也不是什么“大咖”,无非比较接地气一点,喜欢和读者交流的感觉而已。

    那么接下来,我就针对流年似水的提问,做一些回答。希望对有类似问题的同学起到一个参考的作用。

    01、把编程吃透

    父亲总是喜欢教育我说,你要懂得人情世故,要学会与人打交道。诚然,父亲说得没有错,人情世故、与人沟通非常的重要,重要到缺少这些会碰很多壁。

    但我更希望父亲教育我说:你作为一名程序员,要把编程吃透!人总要先把本职工作干好,才能去完善其他的软技能嘛。当然了,我的希望是注定要落空的,因为父亲压根就不知道“程序员”是一个什么样的名词。

    我是知道的,程序员(英文 Programmer)是从事程序开发、程序维护的专业人员。 那么作为一名拥有 10 年开发经验的老鸟,我认为程序员最核心的生存技能当然是熟练地掌握一门编程语言。这也是编程初学者最应该注意的,但往往会被忽视。

    别的编程语言我不太懂,Java 我是懂的。假如你想把 Java 这门编程语言吃透,我建议你这么做。

    • 轻松驾驭 IDE,比如 Eclipse 和 IDEA。

    • 快速查阅 Javadoc。

    • 掌握流程控制语句。

    • 理解类和对象。

    • 掌握三大特性:封装、继承和多态。

    • 会用接口

    • 懂得泛型。

    • 掌握异常处理。

    • 熟悉 java.util 和 java.lang 包下的类。

    • 略懂 lambda 表达式和 Stream API。

    • 掌握 IO 流。

    • 会用 Socket 编程。

    • 掌握并发编程

    • 懂得性能优化。

    • 会用 Junit 等单元测试工具。

    • 会用 Log4J 等日志工具。

    • 熟悉 Mybatis、MySql 和 Spring。

    • 入门 SpringBoot。

    • 熟悉设计模式。

    熟练地掌握一门编程语言,就是程序员的立命之本。知道了自己是靠什么吃饭的,就应该在这方面狠下功夫。

    02、巧用数据结构和算法

    说起数据结构和算法,我就觉得不好意思,脸上泛起难为情的红晕。但为什么我还要说呢?

    因为我深受其苦。

    我是一个农村走出来的娃,体会过其中的酸甜苦辣,所以我会奉劝各位,以后碰上什么知识分子上山下乡的活动,千万不要去。那不叫体验生活,那叫体验“艰苦”生活。

    在敲代码的过程中,我就经常遇到一些实际的问题,由于无法充分利用数据结构,将数据之间的关系通过合适的算法策略进行有效地存储转换,就导致程序的性能很低

    所以我劝各位新人,趁有大把的时间和精力,多投入一点到数据结构和算法上面去。基础知识就像是一座大楼的地基,它决定了我们的技术高度。数据结构和算法就是最重要的基础知识,学习它们的过程就像是在打地基。

    上面这张思维导图提到的数据结构在工作当中太经常使用了,频率高得就像隔三差五会看到隔壁老王这个词一样。

    对于算法,如果觉得《算法导论》这本鸿篇巨制太过枯燥的话,可以选择《趣学算法》、《啊哈算法》等一些非译作的,相对趣味化的入门书。

    可能很多人会存在这样一个误区:算法在工作当中很少会用到,需要的时候面向搜索引擎解决一下就行了。

    但我想说的是,跳槽的时候很有用,因为一些大厂就喜欢考算法。除此之外,算法对阅读源码也很有帮助;况且,谁不想做一名编程的艺术家呢?长期来看,大脑思考能力是一个人最重要的核心竞争力,而算法是为数不多的能够有效训练大脑思考能力的途径之一。

    03、学会测试

    为什么开发还需要了解测试?

    天真了吧!自古以来(其实也没多久了),程序员就身兼两职,既是开发工程师,又是测试工程师。

    说到这,不由得想起一段伤心的往事。在我刚做 Team Leader 的时候,手下有一名新人叫小董,他竟然使用“=”号操作符而不是“==”操作符作为 if 语句的条件判断。

    可能很多读者不相信:“怎么可能啊???IDE 会检测出来的!”交代一下背景,当时用的语言叫 ActionScript,和 Flex 配套开发富客户端页面——八年前了,估计没几个读者知道这门技术了。

    领导在日本出差,代码 Review 的时候被日方负责人查了出来,领导当场被骂得狗血喷头,没脸见人。我的遭遇可想而知,被领导骂得在厕所里面委屈地默默落泪,毕竟我是代码负责人。

    差点乌纱帽就丢了。这让我对那些写完代码不做测试的程序员恨得牙痒痒

    从那以后,我就养成了一个好习惯(甚至说是强迫症),所有我负责的代码(包括我自己写的),在提交之前,代码 review、集成测试一个都不能少,提交代码的时候仍然要再次比对,确认无误后再提交。

    建议大家了解一下测试驱动开发,英文缩写为 TDD,之前蛮流行的一种开发方式。测试与开发应该是相辅相成的关系。

    04、编码规范

    规范化的代码看起来赏心悦目,让人仿佛置身于中世纪的哥特建筑中。

    这里必须提一提 Bob 大叔的《代码整洁之道》,这是一本每个程序员都要读的好书。里面提到的 KISS(Keep It Simple Stupid)原则,非常值得推崇。比如说:

    • 整洁代码力求专注,每个函数、每个类和每个模块都应该全神贯注于一件事。

    • 整洁代码简单直接,从不隐藏设计者的意图。

    • 整洁代码使用有意义的命名,代码通过其字面表达含义。

    • 整洁代码力求消除重复代码,提高代码表达力。

    来看这样一段非常糟糕的代码。

    private boolean isEligible(int age){
      boolean result;
      if(age > 18){
        result = true;
      }else{
        result = false;
      }
      return result;
    }
    

    你能从中挑出几个问题呢?

    1)){ 之间没有空格。

    2)return 语句太多了。

    3)代码过于臃肿。

    优化后的代码是这样子的。

    private boolean isEligible(int age) {
      return age > 18;
    }
    

    那怎么写出规范化的代码呢?

    1)找一份规范的代码模板,导入到 IDE 中,保存代码之前进行格式化。

    2)使用 CheckStyle 或者 FindBugs 对代码进行检查,规避一些新手爱犯的低级错误。

    3)多看看阿里巴巴的开发手册,里面的一些建议还是非常值得参照的。

    记住这句话:任何一个傻瓜都能写出计算机可以理解的代码,唯有写出人类容易理解的代码,才是优秀的程序员。编码规范可以改善代码的可读性,让协作的同行拥有一个美丽的心情。

    05、源码管理

    在我最初参加工作的时候,源码管理工具用的还是 CVS,后来迁移到 SVN。近些年来,选择 Git 的程序员渐渐多了起来。

    记得我刚开始用 CVS 的时候,经常弄丢版本,被领导批评过很多次,因为用的不熟(忍不住伤感)。幸好当时负责的代码都不怎么重要,丢了还可以重写。

    那为什么要使用源码管理工具呢?答案如下。

    • 多人并行开发
    • 多人协作同一份代码
    • 历史版本管理

    除此之外,还有一个重要的作用,防止甩锅!大家都懂吧。

    06、鸣谢

    好了各位读者朋友们,以上就是本文的全部内容了。能看到这里的都是人才,二哥必须要为你点个赞👍。如果觉得不过瘾,还想看到更多,可以查看我的个人博客。另外呢,给大家一个承诺,我每周都会更新一篇《程序人生》和一篇 Java 技术栈相关的文章,敬请期待。如果你有什么问题需要我的帮助,或者想喷我了,欢迎留言哟

    养成好习惯!如果觉得这篇文章有点用的话,求点赞、求关注、求分享、求留言,这将是我写下去的最强动力!如果大家想要第一时间看到二哥更新的文章,可以扫描下方的二维码,关注我的公众号。我们下篇文章见!

    展开全文
  • 总是劝身边的人去体验一下新鲜事物,也一直想写这篇文章,但是总是找不到科学依据,所以拖了很久。 直到偶然被人推荐了一个Ted视频《The First 20 Hours -How to Learn Anything》,简直就是的福音!强烈...

    在这里插入图片描述
    LZ作为一个很喜欢体验的人来说,总想什么都尝试一下(这个世界这么慷慨,不多体验下多亏!),体验了这么多东西,发现,其实很多东西入门其实都不难的。我总是劝我身边的人多去体验一下新鲜事物,也一直想写这篇文章,但是总是找不到科学依据,所以拖了很久。

    直到我偶然被人推荐了一个Ted视频《The First 20 Hours -How to Learn Anything》,简直就是我的福音!强烈建议大家去看看,如果没时间看的朋友,也没事,我下面会把视频内容结合我自己的经历给大家说说。

    首先,我们先看下下面几个场景:

    我: 胖子走,去滑雪!
    胖子:我不去,不会
    我: 不会学啊,很快就能学会的,我第一次去也不会。
    胖子: 不要了,我手脚笨,学不会,怕摔跤,听说摔跤可疼了。
    我: 摔几跤不怕的啦,摔着摔着就学会了。乐趣无穷呢!
    胖子: 我也知道很有意思,但是,我还是算了…
    在百般劝说无果后,我只能放弃和胖子去滑雪的念头
    ……

    我: 萝卜,我最近在学Ukulele,好好玩,你也来学学吧!
    萝卜: 我哪有那个闲功夫,作业都写不完
    我: Ukulele被誉为最简单的乐器。真不难,很容易的,来你看只要学会这几个合弦……
    (话还没说完,萝卜就关上门学习去了)

    我: 娜姐,我发现一个神器叫AHK(真是神器,如果需要我考虑以后写一下),学习一下,能很大的提升工作效率,你要不要看看,教程超简单!
    娜姐: 好像挺神奇的也!这是什么呢?我能直接上手能用吗?
    我:也算一个新编程语言,但是很简单,上手很快的!
    娜姐: 啊!新语言啊,不要了。
    我: 真的很容易学的,只要花几个小时就能入门。
    娜姐: 好吧,等我有时间就看看。
    (然后就没有然后了)

    是不是觉得这个画面似曾相似呢?我相信很多人都是这样,虽然很想尝试很多新鲜事物,但是都因为各种各样的原因把计划搁浅了。甚至还没有机会了解一下,就说了“不”。

    原因有很多种,而其中最重要的一项就是:没有时间,继而产生了畏难心理。
    在这里插入图片描述
    似乎我们从小就被灌输了一个思想,“学会一项新技能需要很长的时间“。我们一直被告知“世上没有免费的午餐”,“台上一分钟,台下十年功”。

    加上最近大家都大肆宣传的《10000小时定律》,让我们开始觉得学会一个新的东西看上去挺难的。10000定律本身没问题,这是一个很棒的定律。但是(一般这个时候都有一个但是),很多人有个思维误区就是把“学会”和“精通”给弄混了。

    为此我特意去查了字典,字典里是这么解释的:

    学会: 靠实践、训练或反复体验而获得才学
    精通: 对一种学问、技术或业务有深刻的研究和透彻的了解

    很多时候,我们学习一项新技能,并不需要很精通,我们只要会用就好了。最简单的例子就是学车,你只用学会开就好了(哪怕开的很慢也不要紧啊,大不了被滴几下嘛),不需要成为一个老司机才能上路。

    还有一个例子就是滑雪,很多不会滑雪的人觉得滑雪很难,只要想想就觉得不可能学会。但其实你要是真的去体验了,就会发现,其实并没有想象中的难,我很多同学都是在半天就学会了滑雪,能体验到滑雪的基本乐趣了(其实会刹车就好了)。

    好了,说了几个例子,顽固的你肯定不屑一顾,因为都是我的一家之言,下面放点干货!

    学会一项新技能到底要多长时间?

    Josh Kaufman在视频中举了一个图(下面这张)这是一张学习效果和练习时间的图,红线左边表示20小时。
    在这里插入图片描述
    Josh说:如果你花了20小时专注你想学习的技能,你自己都会被你惊艳的表现所震惊的。

    if you put 20 hours of focused deliberate practice into whatever you want to learn. you would be shocked how good you are.

    其实这个理论可以用来解释我们生活中的很多事情。比如大学的体育课,一般一节课就是1.5个小时,一般上14周(除去考试和介绍),时间就刚好是1.5*14 = 19.5个小时。很多吉他课程一般是10节课,2小时一节,刚好20小时。

    好了,看到这里,你可能有点兴奋了,可是,就算告诉你了只用20小时就能学会一个新技能,你还是不知道如何去利用这20小时呀。

    其实你只要做到4步就好:

    步骤1: 把新技能分解,学习最重要的部分

    在这里插入图片描述
    花点时间去了解你要学习的新技能,然后把它尽可能的分解一个个很小的小技能,然后看其中什么技能是你最需要的。然后去 学习 实践那些能在短时间内迅速提升表现的技能。

    有人问,对于一个完全不了解的事物怎么知道其中最重要的部分?我这里推荐一些参考方法:

    • 可以去知乎了解这个技能能干嘛,怎么学
    • 或者看相关书籍目录,相关视频课程目录,了解大概内容
    • 可以去相关课程专题网站看知识框架
      再从中找自己应该重点学习的点,这个随着你的积累,会越来越容易的

    比如突然哪天你想学开车(我说的是在家学开车,不是驾校),我打赌你肯定不会上网或买书来看汽车是什么组成的,然后研究每个部分什么功能,然后看上两周新手指南。而是直接去车里学如何挂挡,油门,刹车,然后就直接在父母的照看下,试着让车动起来。

    我一直认为,学一个新技能,你最好能尽快看到效果,否则你想想,要是学了半天,一天都看不到什么效果,估计你就会立马失去兴趣了。这一步很关键,所以一定要问自己,自己为什么想学这个技能,要学到什么程度?

    比如:想学画画,是想成为一个画家?还是想学会了能打发闲暇时间,还是会画一些简单的图案,能用来记录生活,做笔记什么的。
    在这里插入图片描述
    介于很多人问思维导图。LZ争取在学习的过程中给大家出一个思维导图的专题。

    (这个是LZ用思维导图软件自己捣鼓画的,准备过段时间学一下,所以大家将就看看…里面的内容也只是我自己想的,专业人士请轻拍。)

    步骤2: 不用学太多,你学的知识足够自我纠错就够了

    在这里插入图片描述
    试想一下,如果你突然想学python,你会怎么做?你可能会立马去图书馆借一堆有关python的书,感觉自己突然就要变的很牛B了!但是(但是又来了),你借来这么多书,反而会让你觉得无从下手。然后每个翻下,觉得东西太多了,就放弃了。

    其实,这个时候,你只要选择一本书(最好找有例子的),或者选择一个网上教程(其实现在网上资源很丰富)学一些基本的知识,然后在实践过程中不断自我纠正,去网上或书里找相关解决方案。

    这里,LZ有几个经验分享:

    • 先看看知乎有没有“学的好网站",“如何学"的高分回复。
    • 如果能用谷歌搜的别用百度(结果差别真的挺大)
    • 关键词一定要具体(比如你想学抠图,就别搜PS入门)
    • 别迷信搜索结果排在前面的(伤的还不够嘛?)。一次打开多个页面,进行比较,找适合自己的(一般动画演示>图>文字的)
    • 尽量去相关领域的爱好者论坛逛逛

    步骤3: 着手去做,并排除一切干扰

    在这里插入图片描述
    当你决定了自己要做的事情后,尽可能排除干扰(比如手机),然后尽快着手去做,着手去做很重要,很多人花了很多时间在看,查资料上,做准备上。其实,很多人都是在这种等待中,让自己的热情慢慢消失了。
    其实只有尽快开始动手,你才知道这件事是不是可以做,到底难不难。

    步骤4: 练习20小时

    在这里插入图片描述
    其实20小时说长不长,说短不短,每天坚持2小时,也就10天。中途可能会遇到一个沮丧期,挺过去,你会发现,不知不觉,就学会一个新的技能。

    举例

    如果你还觉得上面说的太抽象,我再举几个我自己的实际例子:
    在这里插入图片描述

    学习PS抠图

    如果你想学PS,你要怎么做,我们现在是学了20小时定律的人了,所以我会马上动手安装PS软件,然后打开。
    在这里插入图片描述
    然后就方了…这么多工具,怎么学?是找本几百页的《PS从入门到精通》,然后从头开始把每个工具都学一遍吗?还是学图层,蒙板,路径这些的使用技巧?还是学调色?别忘了步骤1:学重点。

    一般人来说,学习PS主要目的,就是抠图!!好,我确定我要学抠图了。

    确定了要学什么,就开始第二步:找资源。一般来说,网络资源已经足够丰富了,大家可以优先查找网络资源。所以,我会去网上找一下抠图教程,随便一搜,就很多哈!
    在这里插入图片描述
    我们来看2个教程的区别:

    • 教程1:
      在这里插入图片描述
    • 教程2:
      在这里插入图片描述
      请问如果看见这两个教程,你会选择哪一个??毫无疑问,你会选教程2吧。

    然后就是步骤三:开始动手实现自己的第一个PS成果。(不要诧异,就是这么快开始动手!)你只有尽快能看到你学习的效果,你才有兴趣继续学习。比如我想做一个动物城主题的文化衫(也是小V临时想的),我下了一张图,想抠出主角,这里背景比较复杂,用磁性套索很简单。(跟着教程做)
    在这里插入图片描述
    在这里插入图片描述
    步骤四:当你完成了第一幅作品后,其实你就已经入门了,并且克服了恐惧。
    在这里插入图片描述
    剩下的时间,你会自己找更多的教程,进行更多的创作,相信20小时后,你应该能熟练的使用PS了。

    学新技能有什么用?

    这是使用主意者最常问的问题。我想说,学新技能,的目的很多,可能是兴趣(比如学运动,学画画),可能是因为工作需要(比如学编程,学作图),可能是为了自己生活更加美好(比如学厨艺,插花,茶艺)。但是不管目的是什么,你学会了一个新的技能,总会在未来某天能用的上。

    • 比如我之前花一点时间自学的PS抠图(我还是觉得每个人都应该会抠图),现在在我自己做项目、PPT、美化的时候,就派上用场了。
    • 比如大学自学的Vim(神器不解释,啥都能干),现在基本成为我编程第一选择。
    • 自学的python,现在做爬虫,处理数据都太方便了!
    • 比如学做菜,当去别人家开party的时候,就能派上用场啦。
    • 比如学滑雪,现在再也不用担心以后冬天没地方去啦。
    • 还有之前学的latex用来写论文,学的markdown,现在编辑笔记,博客基本都靠它,我也是因为学了markdown后才爱上写笔记,更新博客的。gitbook还能用markdown写书,我又阴差阳错还写了自己的开源书(可以看我之前写的文章)。
    • 然后学的git,现在工作必不可少了。然后github又能建博客,于是我有了自己的主页(简书个人主页的小房子)
    • ……

    还有很多例子,各种球类运动,各种棋牌桌游娱乐活动,就不说了。

    学习一些新技能,新体验,不仅能让你的生活更加丰富多彩,你也有机会接触更多你未知的领域,认识一些不一样的人,做一些平时想都不敢想的事情。

    总结

    20小时定律是一个很有魔力的定律。关键就是做好下面几点:

    • 化整为零,找准重点。
    • 克服恐惧,尽快上手。
    • 排除干扰,反复练习。
      其实20小时定律并不是让你做个面面俱到的多面手(当然你也可以尝试),也不是让你什么事情都沾一点。你应该有自己的一个专长,然后有时间多去尝试一些新鲜的事物。

    20小时定律告诉你,学习一项新的技能,其实并没有想象中的那么难,不要自己吓自己。如果你对一个新鲜事物有兴趣,那么只管去做。

    列一个表,每天抽出1小时,学习一些常用工具的技巧,学习一些新技能,学一些新的运动。它也许不能成为你找工作的饭碗(也不一定)但是,它会给你很多新的灵感,新的体验。你永远不知道,什么时候会用上它,也不会知道它将会给你的生活带来怎么样的变化。
    在这里插入图片描述
    最后引用猫老师的一句话:
    在这里插入图片描述
    如果你想听LZ聊更多生活心得,it学习小经验,可以关注我哦。

    展开全文
  • 游戏开发笔记-技能系统

    千次阅读 2016-12-21 00:42:43
    ...技能系统是一个对于游戏来说,非常重要,实现起来又... 在这个模块的设计上,很程序都有不同见解,以及可以想到的是,在这个模块的制作上早期的许多团队都或多或少的走过一段弯路。 这里也不是说下面
  • 优秀程序员必备技能大全

    千次阅读 2016-10-09 20:41:33
    转载地址:优秀程序员必备技能大全特别支持软件开发者在他们掌握技术技能的同时去学习“软技能”——事实上,写了一本关于这方面的书——但是不可否认的是:技术技能很重要。的意思是,如果你不能编写代码和...
  • 视力恢复技能

    千次阅读 2014-08-11 18:42:35
    视力恢复技能 修订8 两年前刚配了375度的眼镜,那时觉得度数不能再任其发展下去了。现在不戴眼镜也能看清日常的物体,正常时戴100度的眼镜。视力恢复这个目前对一些家长来讲是个笑话的过程,虽然对来说还...
  • 一个合格的程序员,需要哪些必备技能

    万次阅读 多人点赞 2018-05-24 09:51:56
    对于一个Java开发来说,编程技能毋庸置疑是很重要的。但是,除了基本的编程开发能力,其他方面的能力也是体现一个...​类开发技能第一类,并不是纯coding技能,但是也和开发相关,称之为类开发技能。Linux系统很...
  • 为什么程序员不需要MATLAB技能

    千次阅读 热门讨论 2020-11-06 14:03:42
    1、为什么招程序员不考虑MATLAB技能? 软件老王认为: (1)首先是定位问题,matlab是个软件产品,解决是模拟问题,程序员是造软件产品的人,程序员用的是java、python、c语言、h5等来造软件产品,程序员本质工作中...
  • 大家好,是『芯知识学堂』的SingleYork,今天在一个技术交流群里,看到了有位兄弟提出了这么一个问题,大概就是说“同一个原理图文件里面元件太了,原理图文件如果用A4大小的话放不下,只能用A0,但是这样的话,...
  • 程序员如何培养第二技能

    千次阅读 2018-01-03 00:00:00
    之前的中兴跳楼事件,就告诫大家一定要培养第二技能,尤其是程序员,第二技能异常重要,有了第二技能才能避免中年危机,很读者留言,想让写一篇如何培养第二技能的文章,这篇文章其实是分享在的知识星球...
  • 谈谈程序员如何快速提升职业技能

    千次阅读 2018-09-15 10:45:40
    IT行业有很分支:AI,大数据,区块链,游戏等等,其中游戏开发由于Unity引擎的普及入门门槛很低,收入相对来说比较高,导致了大量的应届毕业生或者说其他IT行业的人转到游戏开发中,游戏开发涉及到的技术也是很...
  • Unity技能CD的冷却效果实现

    千次阅读 2018-09-05 22:38:36
    Unity 技能CD的第一次尝试 第一次写博客感觉棒棒哒~: 为了让冷却时间能够根据技能的不同而产生不同的冷却时间效果,想到的是在技能图片上添加Button组件,通过Button组件往对应的方法中传入不同的参数来...
  • 能影响你一生的几个技能
  • 如何快速入门一项新技能

    千次阅读 2020-01-13 21:59:00
    如何迅速入门一项技能 这篇文章的启发在于对于python的学习。 前因 对于没有计算机背景的人来说,学习一种新的语言时,起步还是有点困难的。不过好在,开始接触数据科学这个领域时,是从R语言开始的。也许是由于...
  • 知道创宇研发技能表v3.1

    千次阅读 2017-06-19 14:39:16
    2016/5/18 发布 ...后续动态请关注微信公众号:Lazy-Thought说明关于知道...本技能表为知道创宇研发工程师的技能树集合,是的,很庞大 聪明的人,会根据每个tip自驱动扩展 不聪明的人,坐等别人手把手,不仅不适合知道创
  • linux运维必备技能

    千次阅读 2016-04-28 10:59:15
    服务有很种,每个公司都会用到不同的,但基础的服务肯定要掌握,如FTP, DNS,SAMBA, 邮件, 这几个大概学一下就行,LAMP和LNMP是必须要熟练,所指的不是光光会搭建,而是要很熟悉里面的相当配置才行,因为公司最...
  • Bootstrap 粘页脚(你必须得学会的简单技能),说得具体一点就是“将固定高度的页脚紧贴页面底部”。
  • 月薪30K的硬件工程师需要哪些技能

    万次阅读 多人点赞 2021-06-14 14:20:13
    大家好,是记得诚。 最近一直游荡在各个招聘网站,找简历,部门全员招聘。 简历的重要性也不用说,不论是网站的在线简历,还是附件的PDF简历,都建议认真填写,一个错误的标点符号,可能就错失了一个好机会。 ...
  • 凤凰天驱的攻击方式有点特别,先是地上一道类似冲击波的东西将敌人打浮空,然后向后跃起俯冲,好好利用向后跃起这个特性可以回避不少攻击,攻击力也还过的去,算是个比较实用的技能;至于LV50的终极技能,需要满血被...
  • 知道创宇研发技能列表v3.0

    千次阅读 2015-09-07 16:38:51
    知道创宇研发技能表v3.0 2015/8/21 发布 by @知道创宇(www.knownsec.com) @余弦 & 404团队 后续动态请关注微信公众号:Lazy-Thought 说明 关于知道创宇 知行合一 | 守正出奇 知道创宇是一家...
  • 数字IC工程师的技能树(转载)

    千次阅读 2015-01-30 09:25:26
    数字IC工程师的技能树 今天与同事聊起了IC工程师的修养等问题,结合不久前的一个想法,总结成文,抛砖引玉,欢迎讨论和补充,转载请注明。 RTL语言仅仅就是Diablo里面女巫的火球。。。是首个技能,但你升到20...
  • AI PM所需要具备的职业技能

    千次阅读 2018-01-06 13:37:14
    在了解相关AIPM的职业技能时,首先查询现有招聘网站对AI PM的技能要求,并且搜索了相关职业技能培训机构所提供的课程。 2.1 汇总网络招聘需求与培训课程对AIPM技能需求 从各大招聘网站浏览了一遍之后,发现目前...
  • 卡尔一键放技能--dota

    千次阅读 2012-01-20 01:19:47
    源地址: http://linger.devhub.com/blog/754274--dota/ ... ...卡尔一键放技能 ... 突然间想试试用卡尔这个英雄,毕竟这个英雄技能多比较爽,但不好的是技能转换起来好麻烦好难记,所以有个一键放技能的工
  • 近期找了一份新的工作,用到的技术栈很简单,难的是日语和逻辑,难的我有点怀疑人生,此时,在思考,思考工作将近4年的Java程序员,到底应该具备什么样的技能,才能不被这个社会淘汰。 语言?比如日语? 语言...
  • IT职场,技能比情商重要N倍

    千次阅读 热门讨论 2016-09-30 09:05:06
    但ANYWAY,还是强调IT职场上技能的重要性,一方面你要用实力去让企业与上司觉得选择你是一个正确的决定,让你有更的机会与发展空间,也愿意想方设法留住你这样的人才;另一方面,你的技能让你与其他竞争者拉开...
  • 对程序员非常重要的24个软技能

    千次阅读 2015-07-14 09:10:17
    下面将介绍24个对程序员非常重要的软技能,以及对这些技能的看法和感受。 1、学会如何学习 学无止境。 2、制定阅读规划 的生活常常没有规划。也不知道这次是否能够真正地执行的阅读规划...
  • CTFhub平台题解(技能树 彩蛋部分)

    千次阅读 2020-03-04 08:35:12
    CTFhub平台题解(技能树 彩蛋部分) 最近ctfhub平台上线了,平台挺好,让一顿好肝。作为一个菜鸡想写web的writeup,但做不出来。 只能拿彩蛋部分过过瘾,彩蛋部分脑洞有的真是挺大的,也有几个题相似,闲话不...
  • 手游开发笔记:技能编辑器(一)

    千次阅读 2014-03-07 17:55:28
    这是的第一篇博客,以前没这个习惯,第一个自己语言组织能力不行,还一个也是最重要是自己技术...进入正题,刚到新公司老大给的一个任务就是做一个通用的技能编辑器出来,说实话自己以前并没有玩过大型网络游戏,对

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,912
精华内容 23,164
关键字:

我的技能有点多