ARTS

algorithm, review, tips and share

*******************************************************
**                  ARTS                            ***
**    Algorithm:    solve one leetcode problem      ***
**    Review:       review an English tech article  ***
**    Tip:          learn one working tip           ***
**    Share:        share your daily though         ***
*******************************************************

通用学习策略 By Pumel at 2018-10-10 13:20:19

如何进行目标驱动型学习,做一个功利可被验证的学习流程。

1.你的目标是什么?

建立一个功利的学习目标是非常重要的一件事。这个目标可以:做一个游戏并发布;入职Apple成为UI设计师;加入所思成为VR开发工程师;涨粉100万,发一篇Paper到Siggraph,通过CPA考试诸如此类。

建立目标的意义是你的所有学习任务,都是以目标为驱动。并已达成目标为最终目的的构建和验证知识。注意,这个目标的达成是外部客观结果,而非主观意见。比如:一个游戏只存在做出来发布和没做出来这两个可能;你入职并成为UI设计师或没有;通过CPA考试分数……这都是对客观事实描述。

如果没有目标,很难去评估和量化你的学习成果如何。比如:我要学习好设计,我要提高审美,我要学好C#。这都无法量化,也会在学习过程中失去方向。因为你不知道最终目的到底要干什么。

2.达成目标的核心能力条件是什么?

比如你希望能成为暴雪的角色概念设计师,或者是做一款游戏,微博涨粉100万。那么就需要分析下达成目标最重要的一件事是什么?

这需要能够换位思考。

如果你是暴雪的招聘官,在面试一位角色概念设计师,如果只有一个条件你会希望对方什么能力。当然是好的角色概念设计作品,最能反应应聘人员的造型和美术功底。至于你是否自我驱动,良好沟通,1年还是10年经验,都是在你有良好美术造型能力前提下的条件。

可能你觉得一件事的核心能力是多个,比如你要做一款游戏发布,涉及到美术,工程,策划等等。但实际上这些都可以被归纳为整体制作能力。你要达成的是可完成目标的“最低水平”而不是理想水平。

在这个游戏制作目标例子里,美术你可以找素材库,策划你可以完全照着另一个游戏做一模一样的玩法,甚至程序都可以用Playmaker来写玩法。那么这里整合所有知识,变成一个:整体的游戏制作能力。因为你的目标是要把游戏做出来,而不是要做一个你心目中的游戏。

微博涨粉100万核心能力是什么?我认为是内容的持续输出和传播。实际上如果有优质内容的持续输出,传播会变成自然而然的事。

3.命中目标核心能力锻炼

3.1 模仿学习阶段

在锻炼期间的可以将仿造作为第一阶段锻炼手段。即仿造某人的画、仿造某个游戏、仿造某个国外的段子手写同类段子、仿造Youtube上科学博主做同样的内容。

仿造从简单,慢慢到复杂的。在此期间能学到大部分所需要的技法类知识。即你不知道它为什么这么写,不知道对方这么画的原因,游戏做出来了,挺好玩但不知道为什么好玩。

甚至是广告投放技巧,某个产品在facebook上的广告投放很成功,都可以观测和模仿其策略。只是很多类似此类的目标进行外部观测和模仿是一个很复杂艰辛的过程。毕竟绝大多数商业公司实际上是依靠“秘密”存活下来的。

3.2 理论学习和创作阶段

需要根据自己仿造的作品衍生创作,并且辅助书本,理解为什么这么做。我认为理解一个事物方式分成两种。一类是用书本、视频等别人总结的知识;一类是通过观测,自我总结。

比如当你画影子的时候,早期模仿画并不知道为什么阴影是这么投射。但通过Scott Robertson的How to render matte surfaces课程就会懂得背后的原理。

这些总结的知识也许是书,也许是网上的文章。但最终有足够的阅读量和总结量,将零散的知识变成体系化结构性知识。

比如摄影技术性知识:相机所有参数,什么是白平衡,色温、光圈快门iso;所有灯参数、显色指数、频闪、镜头参数等等……根据用到的技能点尽可能全面了解所有东西。否则很容易做的事情似是而非,无法达到专业。

我认为系统性看书学习并用以实践,和模仿经验轮同样甚至更为重要。

至于看什么书或者看什么资料?如何判断什么资料是好的还是坏的?这个非常简单:都看。看多了你就知道什么是好的什么是差的。你不可能没时间阅读,iOS 12有个APP使用时间统计功能,你看下每天你在微博和微信和各种社交应用里多长时间?

现在市面上学习材料林林总总,只要不是个傻子,我相信一切人类非科研类知识都能通过自学学会。

无论是模仿学习,还是理论学习,都需要进行输出(创作)进行阶段性验证。

4.阶段性验证

如果你的目标是去暴雪从事概念设计师,核心能力是绘画造型能力,并且开始进行锻炼这个能力了。那么下一步是用小的迭代周期来验证这个能力在每个阶段的成果。

这个验证方法最好是可以被数据客观表现的。比如你将自己的创作放到Artstation,dribbble上、每个半个月或者一个月一次,观测每次数据变化。

通常上来说,数据不会一直上涨,比如点赞不会每次都越来越多。你微博粉丝上涨数量也不会一直成一个曲线上涨。但是放在一个更大的时间维度上,比如年,或者两年来看。这个数据整体会随着能力提高整体趋势性上涨。

所以同学们,并不是要憋两年,画十张画,立即入职暴雪;憋着想几个月的创意,指望立即阅读10万+。

你应该想的是:这次的画,要5个人点赞,下次10个,下次20个,下次40个。微信阅读10个、100个、500个。每次目标都是一个看起来有点难度,但可以达成的目标。慢慢的到入职暴雪、阅读10万+就是个概率问题

大家知道谈恋爱都知道要从递纸条,牵个手开始。没听说两人刚见面,就你好咱们领证吧。

既然如此什么学习这件事不能也以阶段性目标来完成呢。从递纸条这种简单的事开始。

以上是我学习的一些经验之谈。


C10K问题之IO复用

java 1.8 的 nio 在windows、linux、macosx、solaris上的实现分别用的是select、epoll、kqueue、poll。 ​​​​

为什么netty又整了两个跟epoll、kqueue相关的子模块? netty觉得java标准库里的nio对linux epoll api的应用与封装做得不够好,然后自己重新整了一个。

懂了nio的这些实现原理,再从设计层面看懂netty如何整出一套事件驱动的架构,最后再找个你感兴趣的协议(比如http)看看netty是怎么在它那套框架里把这个协议实现的。把这三样看懂了,网络框架应用与实现这一大块也就一通百通了。再想往下走,就只能去玩os层面的代码了,绝大多数人都不需要再往下走。

11月15日 09:07 

技术要学到什么程度?我对自己的要求是这样的:os层面的要懂原理但是不用深入去看os的代码(os相对比较稳定问题少);jvm/javac/标准库,这种跟程序语言实现相关的基础知识,要懂原理并且在需要时能立刻深入到代码层面;其他的开源数据库和各类开源框架都是要既懂原理又懂代码实现的。

11月15日 19:55 

我判断一门新的语言能不能火依据3点:

1. 语言的定位是啥?越偏应用学起来越容易的语言受众群更大,像rust这种不但难学定位又是底层开发的语言,就注定是小众语言;

2. 语言有什么独到之处,并且使用这个优点做出的常见框架是否能在某个小方向引领潮流?比如当年用ruby搞元编程很魔幻,使用ruby做出的rails框架在web框架这个领域独领风骚了几年,只不过因为ruby的runtime性能一直被诟病,加上前后端分离和微服务出现后把传统后端web框架的重要性降低了,ruby也冷清了不少。

3. 去看看这个语言对应的技术社区是否活跃,发明的轮子是否多,精品率是否高。比如现在微服务大火,你去比较java、php、go这三个技术社区造的一切与微服务相关的框架,就会明显发现java的更丰富更活跃大厂参与的也多。

 
comments powered by Disqus