亮独观其大略
《魏略》记载,诸葛亮在荆州,与石广元、徐元直、孟公威俱游学,“三人务于精熟,而亮独观其大略。”简简单单的一句话,其实正是在学习方法上,诸葛亮比其他人的高明所在。那回到编程语言,什么又是编程语言的“大略”呢?我个人觉得,其核心就是:
了解清楚这个语言“当前”的应用生态
一门语言能不能用在很多不同的领域?除了极少数专有化语言外,很多语言都可堪此任。
但“能不能用在”,和“是不是已经用在”,却是两个截然不同的问题。比如说,能不能用C++来写机器学习中所需要用的各种程序(脚本)?答案当然是可以的,但业界是不是在大面积的用?情况并不乐观,Python仍然是这个领域的“第一语言”。为什么?这其实就是一个生态的问题。在Python下,机器学习所需要的各种类库,成熟而完整,因此,无论是学习者,还是应用者,可以快速的进入到状态,并完成手头的工作。甚至于,因为Python2所构建的这个生态太成熟了,从而导致了整个业界,从Python2切换到Python3的过程,痛苦而又漫长。所以,作为一个初学者,在学习的一开始,就去“打听”一下(事实上,我觉得老师的作用,也应该在这里),你所要学习的这门语言,现在一般都拿来干什么,并且是不是和你想学习的方向(哪怕只有一个模糊的概念),在目标上高度契合,我觉得是最紧要和事半功倍的事情了,能为你的后期学习,节约太多的时间,从而少走很多的弯路。工欲善其事,必先利其器
人类似乎总是很欣赏那些在公众中,表演用记事本,在没有任何代码提示情况下,“手写”代码的大神。
其实要实现这些并不难,万事无他,唯手熟尔!哪怕你要用的那个函数,参变量再多,你这天天写,总有熟到可以信手拈来的地步。但向观众,尤其是初学者表演,甚至是传达这样的理念,我觉得就是一种“罪恶”。恰恰相反,我觉得,作为一个经验丰富的老手,我们最应该向初学者推荐的,应该是一款经过精心调教的“工具”。还是以Python和数据分析的学习为例,怎样开始学习最好?上手就开始来学怎样撸代码?如果你问我,那我一定会告诉你:> 先去装个Anaconda再说为什么?
省时省心啊
从此,近千个数据科学相关的开源包,你再也不用担心你应该去哪里找到他们,并且是不是和你现在用的版本会有冲突,等等等等这样一些听上去很琐碎,但绝对会浪费你大量时间的事情了,而是能专注于学习。
因为一切都已经在那里了!
实际上,在真正的软件生产过程中,可以说绝大多数的开发,都是严重依赖于工具的,你想想,为什么类似Docker这样的工具会盛行?抛开在虚拟化等方面的具体技术不谈,这东西对于开发和运维人员而言,一个巨大的好处,其实不就在于它的:几乎零配置么?
我要搭一个LAMP的Web的开发环境,我不需要自己劳心费力的去一个个的装Apache + MySQL + PHP,还不能保证能不能装上,一个image即可。编程学习也一样,尤其是针对初学者而言,不要因为看到“大神”们,都是手写代码,就觉得:把时间分配在掌握一个好的IDE工具上,是在浪费时间!
实际上,这反而是能够让你学的更快的利器!
这里有一个小小的推荐,就是Visual Studio Code,微软的这款产品,经过这几年的大力发展,其扩展的丰富程度,真心足堪大任了,如果不是很特别的语言需求,基本上都可以在其应用商店中,找到对应的开发扩展。最后才是语言学习本身,但只40%
在充分了解了所需要学习的语言本身,现在主要拿来干什么,并且也用上了“高大上”的工具以后,整个学习的旅程,就算可以正式开始了。
这里,有一个小小的建议,叫“只40%”。我觉得,这是所有高效学习的关键所在!
什么意思?
举一个例子,比如在很多语言中,提供了各种各样的处理字符串的方法(或函数),以Python为例,哪怕比如就是一个简简单单的,从“Hello World!”中,截取相应的子字符串,也有很多的技巧,比如:林林总总,好吧,作为初学者,面对这些东西怎么办?我就看到有很多的“大部头”的号称面向初学者的书,会洋洋洒洒的为此大书特书一番,好像,不把所有的可能性穷尽,初学者不算学完一样。
但在我看来,这恰恰是最“糟糕”的一种写法和学法了。两个字:
没用!因为有习惯和遗忘曲线的存在。
所以,即便是你当时花了大把的时间,去学习了这种种的技巧,今后,随着你自己编程风格的形成,你还是会逐步趋向于用一种固定的方式,去处理问题,当然,我不是说这个例子,毕竟它太简单了,简单到这么多风格,完全可以让人接受 :),但我也不是没有看到过,就是有人愿意在他/她的代码的某个地方,先声明一个类似这样的函数:
为什么他/她要这么做?这不等于是为开发增加了一种“方言”么?其实无他,就是因为这可能是他/她在另外的语言环境(比如JavaScript)下,已经用熟了的一种方式而已,这是人的天性使然。
这也就提醒初学者,当你在学习一门计算机语言的过程中,下面的两个“经验”,可能能帮助到你,更为高效的进行学习,那就是:
1. 克制自己,不要试图去了解这门语言的全部,只学自己当前需要和能明白的
比如说,你就是准备用Ren'Py做一个可视小说的游戏出来,里面只是需要一点点的Python知识,那你也捧一本大部头,然后费劲吧啦的去看那些你根本用不上的函数的用法,并试图去“深入”的理解OOP和函数式,这两种不同的范式,在Python下的实现(这可能是很多教程非常引以为傲的“高级”货),何苦来哉?
等你这一切都完成,人家可能早就做出来了好几个游戏了,并且竟然发现:语法要求从来可能就没超过大部分Python教程顶多第三章的要求(一般的教程,到第三章,从最基本的变量定义,到函数应用等等,一般都会写完了)。
当然,我这样讲,不是在鼓吹说,深入系统的学习不重要,但我能保证,那绝不高效!
2. 在一开始,就要培养形成在线查阅文档的能力
我们已经处在了网络高度发达的时代,这是一个没有办法改变的事实!这个时代,最鲜明的特点之一是什么?我觉得就是:
知识开始也一定会经常以索引的形式存在!
当然,你也可以说成是人类的整体记忆能力在退化,但我个人不这样认为,实际上,索引式的好处,反而是人类可以记住更多东西了。
回到编程的学习,最高效的方式也应该是这样,学习的目标,应该从“完全记住”,转变为在脑子里大概留个印象,然后可以在遇到问题时,能快速的根据这个印象,通过在线的文档查找,迅速定位到问题的清晰的解决方案。
40%,足矣~
最后借此风水宝地,插播一个小广告,本人正在准备着进行编程教育自媒体方面的创业中,当前主要的想法,是针对K12年龄阶段,并主要和初等数学和物理,以及主流的一些算法等结合在一起,提供难易程度不同的,各种或好玩、或实用的编程教程和培训,同时,也会逐步的开讲一些整个计算机和软件发展历程中的故事,以及我自己的一些小小的思考,欢迎大家多多关注哈。Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有