吹拉弹唱


  • Home
  • Archive
  • Categories
  • Tags
  • Books
  •  

© 2022 Kleon

Theme Typography by Makito

Proudly published with Hexo

如何快速入门新领域

Posted at 2020-03-02Updated at 2020-03-02 学习  学习 

从零开始学前端(移动端)的过程记录,以及走神想到的关于学习新领域的思考。

# 缘起

互联网上的垃圾越来越多,各个大厂的生态也趋于闭合。即使仍然还有人在免费提供优质的内容,Google的爬虫也无能为力。
现在大行其道的推荐算法,它或许可以通过我的注意力停留时长判断出我的兴趣所在,但在一人一票的制度下,很难为我们挖掘真正沉淀了价值的东西。
信息就像一次性纸巾,在被人擦过鼻涕后便只能扔掉,而在一些激励的鼓励下,有不少人在全天无休的制造着这些白色垃圾。

这是我最初开始设想阡陌时的一个初衷:发掘高质量、长生命期的内容。

具体的设想暂且不展开,打造一片理想的数字世界需要技术的支持,而作为数字世界大门的就是前端。

我之前对于前端的了解很少,大概觉得网页就是前端。不过,在各行各业,“前端”都有所知,我之前做硬件开发时的前端便是Verilog HDL。
虽然对前端不太了解,但是我觉得计算机软件开发技术可能是所有应用技术里最适合自学入门的,不仅网上现成免费的书籍、课程多,而且得益于开源的兴起,实战项目也不少。

不过这些资源散落在互联网的汪洋大海中,并且其中有一大部分处于公海之外的私人水域中。除此之外,资源的质量如何,难度是否合适,应该何时使用,却少有说明。
为数不多的路线地图(Roadmap)也只是笼统而论,还没入门的小白用户看起来自然也就一头雾水,等到七拼八凑,走过了不少弯路,才懵懵懂懂有了些印象。
这些是我个人在学习过程中的体会,姑且先推广开来,假设和我有相似遭遇的大有人在吧。

据此至少可以提出三个需求:

  • 第一,我希望有一份详细的路线地图,可以让我对需要学习的领域形成大致的“方向感”;
  • 第二,我希望路线地图拆分成里程碑(Milestone),把一个大目标拆分成小目标,逐个击破,在及时反馈之中增强信心;
  • 第三,我希望学习之路上,有人通行,亦师亦友,汇总常见问题,甚至可以做成专家系统,节约入门者和指导者的时间。

# 评估

首先,分析我的位置:

  • 掌握Python、C++等编程语言。
  • 了解计算机网络基本常识。
  • 熟悉搜索引擎的使用方法🤣。

其次,权衡我的目标:

网页端、移动端还是桌面端?

这其实是在考虑这三种平台优势是什么。

  • 网页端适合电脑使用,对实时性要求不高,合适生产力模式下使用。
  • 移动端便携性好,普及程度广,合适随身模式使用,但可能被娱乐模式干扰,优先级较高。
  • 桌面端适合电脑使用,有更强的性能与定制性。

现有主流框架有哪些?是否有跨平台框架?

网页端有React、Angular、Vue,移动端有Android/iOS原生,桌面端各个系统各式各样。跨平台的方案有React Native、Electron、Flutter。

各个框架的优势是什么?

对比主要从代码复用性和社区成熟度上考虑。代码复用性包括跨平台代码复用,可用第三方库。社区成熟度包括文档、教程的完善程度,项目活跃度,是否仍在积极维护。
框架的选择也是见仁见智,JS框架在性能上可能不如意,移动原生开发需要的学习量和工作量太过巨大,跨平台方案不太成熟。评估之后还是选择移动端切入,日后可以补充JS框架做网页端。

这里的问题是,我从网上获得的评论都具有主观性,对前端几乎为0的了解也导致我没办法做出合理判断。再者,技术只是实现目标的手段。总之,先淌一淌这浑水再做决定。

# 路线

学习因目标不同,知识类型不同,有许多不同的方法,从大的方向上可以分为三个阶段。

直接上手:

这适合早期入门。在老师的指导下或参考有效的资料,形成对知识的感性认识。常见的学习模式是:你不要问那么多为什么,照做就是。很多时候,通过这种方法,就能大致看懂别人的成果并简单应用了。并且,通过上手-反馈循环,可以积累信心。虽然大多数知识的入门都可以使用这个方法,但通过这个方法学到的知识不系统,存在逻辑缺失,在学习的时候可能会在心里存下不少疑问。比如在出现复杂问题时,可能无法解释,只能诉诸玄学。这就是缺乏系统化、整体化的认知的结果。

系统学习:

这适合中期进阶。之所以能系统学习,是因为知识体系相对稳定,有大量前人总结的体系模型可以参考。系统化学习通常来说要明确学习领域和起点,预先给出公理或者假设,在大家都明确了以下所有内容均基于以上公理或者假设——也就是明确了知识体系的适用范围之后,开始引出推论和模型,并且通过严格的逻辑证明推论成立,或者通过模型解释实际案例表示模型有效。经过系统学习,基本上能对大部分问题套用模型分析解释,解决问题,达成目标,有了更强的定制能力。在系统学习的过程中,可以解释之前遇到的不少疑惑,但系统学习需要警惕绝对知识论,需要明确知识是在一定假设上的理想模型,并不是绝对真理。如果批判性地思考学习,心中的疑问可能只增不减,但这并不是一件完全的坏事,这说明对知识有了更全面深刻的认识。所谓知道的越多,才发现不知道得更多。在系统学习过程中,有人不能接受完全接受模型,而是会对为什么提出模型产生疑问,因为知识体系是经过无数人试错后的总结,而了解知识诞生的历史会让我们学习知识的逻辑更加顺畅,因为建立知识体系的历史是探索与偶然的历史。系统学习并不是学习的终点,已知的模型在面对新的问题的时候很可能会失效,这时候就需要科学探究。

科学探究:

这适合后期探索。之所以带上科学二字,是因为需要使用科学研究方法,并且得出的知识模型可证伪。不可证伪的知识通常是万能解释的,比如很多伪心理学总能用一套看似有道理的解释套用到所有情况上,并且没法提出切实可行、可重复的解决方案。使用这种方法需要具备丰富的想象力和严谨的逻辑。丰富的想象力要求有能力补足未知的细节,建立知识模型,并设计证明方法,对结果有预期。严谨的逻辑需要知识模型具有可解释性,以前人已有的知识或者可理解的假设作为起点,构建一条完整的逻辑链路。科学探究能构建理论解释之前的一部分疑问,但却有可能调入疑问的黑洞之中,不能说科学的尽头是神学,但是面对自然,仍然要抱有敬畏之心。虽然我们有了一些用来抵御未知的知识,但也要意识到我们这片知识空间的狭小和脆弱,在它之外的是漫无边际、比黑更黑的未知。

希望以上这些可能对处于不同学习阶段的人有点启发,当然这并不是说所有的学习过程都要以第科学探究为最终目标,需要根据自己的实际的目标和所处的位置选择合适的方法。比如纯粹建立在逻辑上的知识可能就不能直接上手,只能系统学习了。又比如应用性强的知识适合直接上手,即所谓自学成才,可能身经百战,但不知其然,但也可以系统学习,即所谓科班出身,可能头头是道,但纸上谈兵。

值得警惕的是那些打着科学旗号兜售自己的“万灵药”的人。

回到前端入门上来,因为是应用性很强的知识,所以我选择直接上手,需要深度定制或者遇到难解的问题,再回头补习。

# 上手

搜了些路线图,有些前人的路可以参考,但完全照搬可能有些拘束,根据自身情况借鉴即可。

第一步:环境准备。这是几乎学习新编程语言必备的,不同教程大同小异,如果社区成熟,按照文档做一遍就行。一些特殊的网络问题,需要想办法解决,同样成熟的社区也会有相应的解决方案。

第二步:玩具教程,这通常也是出现在社区文档中的。玩具,又称小玩意儿,通过这些简单的小玩意儿,能大概有个端到端的成果可以展示了。可不要到此就说自己精通了哦。
关于语法什么的,如果有相关的编程基础(概念都是相通的,语法存在差异),大概也能猜个大差不差,如果只知道面向对象,而学习函数式可能理解起来就有点费劲,不妨从基础概念开始理解。

第三步:了解常用组件,通过但不限于高质量的知识沉淀网站,风靡全球的代码托管网站获得基本了解,如果能找到好的起步教程就很好。一个理想的教程符合直接上手的原则,在上手过程中,介绍了常用的组件、使用方式,也就是“套路”。如果这一步有概念缺失,需要自行回溯学习前置知识,只需要回溯到连蒙带猜理解个大差不差的程度就可以回来继续教程了。

第四步:好了,你已经知道了1+1=2,下面我们来算个不定积分。这是不少人可能遇到的情况,教程也能看了七七八八,却发现离自己想实现的目标还有不小的差距。
这个差距通常是几方面方面引起的:不知道某项功能怎么实现,需要定制第三方库,需要自己完全实现。

我们需要逐个击破:

  • 不知道用什么轮子:搜索学习更复杂的教程,最好包含自己想实现的功能,或者其中一部分。
  • 有轮子但需要调整:回溯学习第三方库相关知识,尝试修改并观察结果,理解基本原理直到可以上手修改。
  • 找不到轮子:回溯学习所需的知识,自底向上,逐步搭建。

其实到这一步,也算淌了些水,我们可以先停一停,需要回到评估这一步。如果轮子缺失严重——这通常意味着社区还不够成熟以及巨大的工作量,可能需要考虑使用别的方案,这很有可能意味着评估阶段的工作不足,或者领域太新。如果重新评估后发现其他方案更完善,那么应该切换方案。可能有人会抱怨以上四步白白浪费了时间,其实可以从两方面来考虑。其一,这四步消耗的时间是沉没成本,没办法收回,最合理的做法是忽视它,评估继续这个方案所需要的投入以及其他方案从0开始的投入哪个更多。其二,面对一个问题的多种解决方案,通常在回溯之后的知识上是相通的、可重用的,时间也不是完全浪费的。

我学到这里,基本上达到了可以使用轮子搭建自己想要的功能的地步。向后就需要根据设计的功能反复使用第四步的三个方法,直到满足我们的设计,或者修改设计降低实现复杂度。

# 后续

我在这篇文章里,没有重点讲具体的知识点,而是想通过这次的学习实践归纳一般的方法。当然,抽象得足够高的规律都可能变成“万灵药”的危险。

前端先学了一点皮毛,先暂且用着,还要补些网页前端、后端、设计、认知科学方面的知识。

Share 

 Previous post: 如何掌握复杂事物

© 2022 Kleon

Theme Typography by Makito

Proudly published with Hexo