自学编程者和系统学习者到底差在哪里了
理论与实践的鸿沟.
至少我是这么认为的.
作为一个从头到尾都没有老师教的代码爱好者, 我也接触过不少有在培训班系统学习过编程的同学. 和他们交流, 我发现, 他们中的大部分都拿过竞赛的奖项. 而这类竞赛, 对于我来说, 甚至都没有参与的渠道. 更别提拿奖项了.
系统学习过编程的同学, 大部分是算法的强者. 后来我了解到, 他们去上课的主要教学内容也就是算法. 我称之为理论.
但像我, 自学的人, 更注重的实际的开发. 在实际开发中, 这类算法基本不会用到. 或者说, 这类算法根本没有被抽象成一个个模型. 这就是头疼的地方了, 我的算法知识很弱. 而现在我越发排斥学习算法, 寒假去研学的时候听了个讲座, 台上的老师说:
我研究三角形, 我需要知道三角形是什么吗?
这位老师想讲的是中国古代和西方古代对于知识学习的…方法吧. 中国人学知识, 基本都是靠实际经验. 而西方人学习, 是必须要给学习对象下定义的. 因而西方的知识有更清晰的框架, 但学习效率不高. 这种经验不经验的, 举个简单的例子. 中国人造火药, 那是:
一硫, 二硝, 三木炭.
西方人造火药, 那是:
在这里就可以看清楚理论与实践的鸿沟. 假设你只知道造火药的配方是上面两句话, 你会如何做? 从一方面讲, 中式造火药方法缺乏严谨性. 但另一方面, 如果我用西方造火药的方法, 我还需要搞明白什么是化学式, 化学方程式等一系列和造火药无直接关系的东西. 中式方法, 我只需要知道一句像顺口溜的配方, 就能造火药. 西式方法, 我可能还要有一定文化水平才能造火药. 同样干一件事, 达成同一个目的, 显然, 我不需要知道 “什么是三角形”.
学校里教 Python, 我本以为对于我并不是问题. 结果我发现每次课后的答题我都做不到满分. 我会用 Python, 但我不会做题, 这成了在我这里很讽刺的一件事. 即使应试教育是有诸多诟病, 但我觉得这还不是应试教育的问题, 而是在于我, 是个自以为是的自学者.