编程作为一项技能,需要长期的训练以达到熟练的地步。每天写一点代码,保持对代码、语法和逻辑的敏感度,有利于初学者巩固新接触的知识和概念。
初学者如何保持每天的代码编写呢?刷题是一个很好的方法。目前网络上有大量的刷题网站,供编程人员进行练习,比如著名的LeetCode。
不用费劲心思为每天写什么而发愁,也不用纠结于写的用途,在各类刷题平台上,利用公开的编程问题进行练习,保持大脑对编程的兴奋度和活跃度。
借助每天的编程练习,使得大脑一直处在一个预备热身的准运动状态,能够让自己快速进入实际的编程状态中。
很多初学者会照着一个书或是一个视频,一股脑地跟着它一章一章一节一节按部就班地学习和练习,看似是主动在学习,实际上是在被动地接受书本和视频的填鸭。
别看示例代码敲得溜,实际上代码过手不过脑,稍微改变一点,就异常报错满天飞。这就是缺乏思考导致的。
不像语文的诗词背诵,背下来了,默写的时候就能想起来、写出来。编程是思考和实践的结合,是思想逻辑的语言代码实现。
州的先生之前玩过一段时间颗粒积木。
上图是拼接好之后的形状,在它没拼接的时候,是一堆一个、两个、三个颗粒组成的最小颗粒块。产品包装里面会附带一个拼接的说明步骤图,我们按照步骤图一层一层地堆叠积木,就可以收获最后的成品。
但是如果不看图纸,自己来。八成是拼不出来的。因为我们的大脑中没有一个成型的逻辑拼接步骤,只能按照图纸才能勉强把积木拼接好。
看书或者看视频亦是如此,它们都是一个类似积木图纸的东西,能够按部就班带你了解一些东西、实现一些东西,但是如果自己不去思考,那也就仅限于了解了一些东西,实现了一些东西了。
所以,得留足给自己思考的时间,理清了关系和逻辑,瞬间豁然开朗。
学习最忌闭门造车、闷头苦干。无论是菜鸟还是大佬,都会有知识的盲区。如果不与外界进行交流,盲区难于被发现,被解决掉,自己就陷入了自己的知识陷阱里。
另一方面,与人交流和分享,需要自己梳理自己的逻辑,组织已有的概念。有句话说“输出是最好的输入”,就是这个道理。在分享输出中,我们需要把需要输出的东西摸清摸透,进而促使我们对一些不清不楚、模棱两可的地方的进行补强,对已掌握的地方加深理解。
交流和分享的渠道包括但不限于:在社交群里面进行分享、写文章、录视频等等。这些行为会反刍式地让自己收获和理解。
编程过程中遇到问题是很正常的事情,没有踩过几个坑,都不好意思说自己在某方面有过学习和研究。
有了问题,自然需要解答和解决。如何提出一个好的问题,又是一个很重要的事情。
能够准确陈述出问题的前因后果,说明自己对代码的逻辑有一定的理解,只是由于对某些模块、组件、特性的不熟悉,而导致了问题的产生。
有经验的编程者在异常问题产生之后,会进行问题的溯源,找到问题产生的初始位置,对比其行为和自己预期的结果。
但是对于初学者来说,对问题进行溯源过于吹毛求疵,正确地提出问题更为有效。
学车考驾照的目的当然是为了在广阔道路上开车,学琴的目的当然是为了能够弹出完整的曲子。编程的目的,自然是能够写出实际可用,能够解决实际问题的程序。
如果老是沉浸在基础语法、加减乘除和猜数字游戏中,无异于天天在驾校场内练习靠边停车。
Python在爬虫、Web开发、GUI图形界面开发、数据分析、游戏开发、办公自动化等众多领域都有很好的应用。在熟悉了基础的语法之后,你大可根据自己的实际需求,或身边的痛点,进行定制化的编程。用编程解决实际的问题,既提高了工作和学习的效率,又加深了对编程语言的理解,一举两得。
如果你觉得仅仅写一些处理身边事务的功能性脚本缺乏系统性,那么试着维护或参与一个开源项目或许是一个更好的选择。
参与一个开源项目,意味着自己需要对那个开源项目的某个模块、功能的代码能够有效地进行理解,理解其现实逻辑、理解其代码逻辑、理解其功能所涉及模块的使用,这无疑需要自己主动地去学习和了解。
而自己维护一个开源项目的话,则从项目立项开始,让自己有一个全局的设计和思考。自己作为一个顶层设计者,要设计项目的各个功能、考虑各个功能的技术和方案选型、方案选型的具体实现方式等等。
除了顶层的思考设计能力,开源项目代码公之于网络,也有如第三点所言的分享交流的效果。
除此之外,开源项目获取网友的认可,还能收获编程的正向反馈,成为自己更新、优化、提升自己编程功力的动力。
像州的先生开源的 Markdown 文档系统——觅道文档,本身是基于自己需求进行开发的一个项目,在项目不断完善、不断受到用户认可的过程,促使自己自己不断优化功能、不断补充欠缺的知识点、不断了解更优的方案。