最近在和学员的沟通中,发现很多初学者面临这样一个问题:了解了一些基本的语法,看得懂书上的示例,可是面临一个新的编程问题时,依然感到无从下手。究其缘由,主要是两个方面:程序员
好比咱们码上行动的编程实例里有一道题,大意是:编程
生成 200 个优惠码,每一个优惠码由8位字母组成(包括大小写)。
固然题目自己难度不高,和咱们公众号【每周一坑】栏目里的题相比,这个算是小 case 了。不过若是你是一个刚刚接触编程不久,才掌握条件判断、循环、列表的新手来讲,仍是有点小挑战的。小程序
以这题来讲,有人是直接对生成一串字符没有想法,不知道怎么办。更多的人可能会有些思路,但在具体的环节,好比如何产生随机字母、如何拼成字符串、若是判断重复上遇到麻烦。从学员的评论中能够看出,不少人惊呼:原来还有 xxx 这个函数、还有 yyy 这个模块,彻底都不知道。微信
那么在开发程序的时候,怎么去解决相似的问题,而且找到合适的方法呢?我简单分享下几点经验:dom
有个关于数学家当消防员的笑话:函数
消防队长问:若是巷子里一个货仓着火了怎么?数学家答:把软管接到消火栓上,打开水龙头,把火浇灭。队长说:彻底正确!那若是你来到巷子发现货仓没着火怎么处理?数学家答:把货仓点着,这样问题简化到一个已知问题上了。
抛开笑话自己的夸张,做为一个程序员,你也须要有相似的逻辑思惟:分解和转化问题。工具
生成一个随机数,这是个咱们很早就提过的一个问题,用 random 模块便可实现。那么这个问题的思路就已经比较清楚了。剩下的就是处理好过程当中的细节:若是从数字转换为字符、如何循环、如何拼接等等。学习
不过确定会有同窗说,我都不知道数字还能转成字符。也会有同窗表示,其实根本不用绕这个弯,明明能够直接生成随机的字符。没错,就和点燃货仓的数学家同样,咱们这个逻辑没问题,但实际看来仍是有点二。网站
因此另一个重要的经验:搜索引擎
虽然大多数程序员在大学里的专业属于计算机科学(science),但在企业中的角色倒是工程师(engineer)。也就是说,编程是一项更偏向实践而非理论的工做。咱们的目标是解决问题,须要掌握的是解决问题的手段和方法。对于程序员来讲,搜索就是很是有效的一种寻找解法的途径。
但可能不少没有编程经验的同窗会以为,学编程时经过搜索找到一个解法是一种“做弊”的方式,本身并无真正理解怎么解决问题。这种想法大可没必要。即便经验丰富的程序员,也会在处理问题以前,经过搜索来寻找有没有更合适的解决方案。经过搜索找到解法这个行为自己会比写出这个小程序对你来讲更有价值。这里我曾写过一篇,关于如何使用搜索引擎:编程初学者如何使用搜索引擎。
就优惠码这个问题来讲,经过一些简单的搜索,就能够发现很多相似的问题解法。固然你不能去搜“如何制做 8 位优惠码”,而是搜“Python 生成随机字符串”这样的关键字。而后你就了解到:能够用 random 的 sample、shuffle,另外还有 string 这种模块能够利用。
顺便扯远些。有同窗曾经问过:大家的教程是否是包括了找工做须要的知识点。这也是一种相似的误区。咱们不是去参加高考,按照考纲复习完备,而后再上考场。如今的计算机行业能够说比任何一个行业的更新都要快,你永远不可能“彻底”掌握某个领域的知识以后再去开发,你须要不断去面对新的技术和新的问题。因此编程相关的知识是变化的,要掌握的是不变的解决方法。
何况对于任何一个领域来讲,知识的分布就像这张图,当你越进一步,你面对的知识空白就越多。这也是为何不少同窗学完基础以后,表示找不到一本合适的教材来进阶。由于根本就不存在这样的教材。在初级阶段,你提高能力的模式是 学习技能->拿技能去练习,而到了必定程度以后,提高能力的方式则必须是 遇到问题->想办法去解决问题,是一个由被动变主动的过程。因此,想更进一步的同窗,不要去找教材,而是去找问题,再用好“搜索”这个伟大工具去解决它。
我对待编程学习者也是这样:我不是给你教材,全互联网的资源都应该是你的教材。我只给你问题,以及如何去找解决问题的方法。
在程序员届有这样一个词:RTFM(Read The Fuxxing Manual,去读TMD文档手册)
相似还有一个 STFW(Search The Fuxxing Web),就是对应我前面说的第 2 点。
我曾经一位老师指着一本厚厚的编程教材跟咱们说:大家根本不用去记这些函数,只要用的时候知道去哪里查就足够了。
搜索能够告诉你有哪些解决方法,而官方的文档则是更明确的告诉你该怎样使用,参数有什么限制,须要注意的地方等等。惟一遗憾的是,大多数 Fuxxing Manual 都是英文写的。因此你说,英语很差到底能不能学编程。我只能说,能够,但强烈建议你好好补一下英语。(预告一下:咱们已经整理了一份适合 Python 学习的英语词汇表,并作成了单词本,即将放出。)
仍是回到这道题目,经过 Python 官方文档,你就会知道 random 模块还能作哪些随机操做,以及 string 模块能够生成哪些字符串。
我没有找到特别好的 Python 官方文档中文版,一译中文文档 这个算是相对新且完整的。若是各位有知道更好的,欢迎留言指出。
最后,还有提一点老生常谈:
我已说过无数遍:编程如乐器,学会语法只是开始,还须要不断练习来掌握。每一个程序员都是一行行代码堆出来的。若是你刚学编程不久,以为本身缺乏编程思惟,常常感叹原来还有这种操做,写长一点代码就老出 bug 的话,相信我,你只是写得太少,看得太少。不用妄自菲薄,也不用急于求成,踏踏实实地先多练一练。等你把一本教程的示例代码都本身在电脑上输入运行一遍以后,咱们再来谈谈什么是编程思惟。这不是什么我首创的奇葩教学法,大多数程序员和计算机教师应该都认同这点。
扯了很多,但愿对须要的人有所帮助。
════
其余文章及回答:
如何用100行Python代码作出魔性声控游戏“八分音符酱”
微信公众号ID:crossincode
网站:crossincode.com
QQ群:660296565
微信加群:crossin123