学习编程的几点体会

学新不学旧

网上很多编程的初级教程里面为了照顾到初学者能够快速上手会讲一些原生函数的使用如os.system,因为这些函数是预置的相对来说方便学员上手。但学员们不清楚的是其实这些函数是存在一些安全漏洞与风险的,如果从一开始的学习中就没有意识到这些可能会对后续进阶的编程埋下隐患。当然并非这些函数完全不能使用,只是说这经有严格的使用范围限制,如果需要执行的命令是固化的,那么相应地命令注入的风险就低一些仍然是可以使用的,但是我们更为推荐的是使用一些比较新的函数来取代这些旧的函数(如使用subprocess来代替)。因此在编程语言学习的过程中,我们要掌握一个基础的原则就是:学新不学旧。
这里的“旧”指的一些过时的语法(如有些书或教程还在讲 python2或python3.6之前的版本),我提供的学新并不是盲目追新的意思,相反一些底层的东东(如算法、数据结构)这些经典的内容虽然过去了几十年但并不等同于旧,典型的就是我大学时学的osi七层结构、网络基础原理当时各种名词听起来云里雾里、不明所以,如今为什么华为和苹果在多屏协同的体验上超越了一众厂商,其实底层就是这两家在网络底层协议上进行了深度优化(甚至研发了自己的私有协议),如果现在再回过头去看OSI七层结构那与当前的感受可就大不一样了。

不光要眼到更要手到

编程是一项技能,和其他大多数技能对我们的要求一样,其不光要“眼到”,更为重要的是要“手到”,下面是我在学习编程过程中的一个真实经历,在学到Python字典这一节中看到了如下文字:

假设要从字典中随便获取(或删除)一个键-值对,可使用方法popitem,它随机获取一个键-值对并以元组的方式返回。接下来,可直接将返回的元组解包到两个变量中。

当我看到这句话的时候并没有想太多,可是当自己手工敲击代码的时候却发现结果和作者讲的并不一致(因为它总是返回最后一个键值对),我进一步查询找到了出处:

The popitem() method removes the item that was last inserted into the dictionary. In versions before 3.7, the popitem() method removes a random item.

这时我才找到了原因所在,在低版本中确实是随机的,但某一个特定版本之后(3.7)这个方法发生了变化,从这个案例中可以得出,如果我只是眼到而没有手到,是不可能获得后续更多的背景知识的,很多看似“理所应当”的内容如果不经过自己的亲身实践很有可能学到的是错误的内容,正所谓“纸上得来终觉浅,觉知此事要躬行”,在编程之路上显得尤为重要。

Comments
Write a Comment