看过很多教程,却依然写不好一个程序,怎么破?

简介: 最近在和学员的沟通中,发现不少初学者面临这样一个问题:了解了一些基本的语法,看得懂书上的示例,但是面临一个新的编程问题时,依然感到无从下手。

零基础python入门教程:python666.cn

大家好,欢迎来到 Crossin的编程教室 !

近在和学员的沟通中,发现不少初学者面临这样一个问题:了解了一些基本的语法,看得懂书上的示例,但是面临一个新的编程问题时,依然感到无从下手。究其原因,主要是两个方面:


  1. 整体上,不晓得如何把问题转化为程序语言。
  2. 细节上,不知道用什么方法去实现某个功能。

比如我们码上行动的编程实例里有一道题,大意是:生成 200 个优惠码,每个优惠码由8位字母组成(包括大小写)。

当然题目本身难度不高,和我们公众号【每周一坑】栏目里的题相比,这个算是小 case 了。不过如果你是一个刚刚接触编程不久,才掌握条件判断、循环、列表的新手来说,还是有点小挑战的。

以这题来说,有人是直接对生成一串字符没有想法,不知道怎么办。更多的人可能会有些思路,但在具体的环节,比如如何产生随机字母、如何拼成字符串、如果判断重复上遇到麻烦。从学员的评论中可以看出,很多人惊呼:原来还有 xxx 这个函数、还有 yyy 这个模块,完全都不知道。

那么在开发程序的时候,怎么去解决类似的问题,并且找到合适的方法呢?我简单分享下几点经验:

1. 学会分解问题

有个关于数学家当消防员的笑话:


消防队长问:如果巷子里一个货仓着火了怎么?数学家答:把消火栓接到软管上,打开水龙头,把火浇灭。队长说:完全正确!那如果你来到巷子发现货仓没着火怎么处理?数学家答:把货仓点着,这样问题简化到一个已知问题上了。

抛开笑话本身的夸张,作为一个程序员,你也需要有类似的逻辑思维:分解和转化问题。

  • 生成 200 个优惠码 => 生成 1 个优惠码,循环 200 次
  • 生成 1 个 8 位优惠码 => 生成 1 个字符,循环 8 次
  • 生成 1 个随机字符 => 生成一个随机数,转成字符

生成一个随机数,这是个我们很早就提过的一个问题,用 random 模块即可实现。那么这个问题的思路就已经比较清楚了。剩下的就是处理好过程中的细节:如果从数字转换为字符、如何循环、如何拼接等等。

不过肯定会有同学说,我都不知道数字还能转成字符。也会有同学表示,其实根本不用绕这个弯,明明可以直接生成随机的字符。没错,就和点燃货仓的数学家一样,我们这个逻辑没问题,但实际看来还是有点二。所以另外一个重要的经验:

2. 学会使用搜索

虽然大多数程序员在大学里的专业属于计算机科学(science),但在企业中的角色却是工程师(engineer)。也就是说,编程是一项更偏向实践而非理论的工作。我们的目标是解决问题,需要掌握的是解决问题的手段和方法。对于程序员来说,搜索就是非常有效的一种寻找解法的途径。

但可能很多没有编程经验的同学会觉得,学编程时通过搜索找到一个解法是一种“作弊”的方式,自己并没有真正理解怎么解决问题。这种想法大可不必。即使经验丰富的程序员,也会在处理问题之前,通过搜索来寻找有没有更合适的解决方案。通过搜索找到解法这个行为本身会比写出这个小程序对你来说更有价值。这里我曾写过一篇,关于如何使用搜索引擎:编程初学者如何使用搜索引擎

就优惠码这个问题来说,通过一些简单的搜索,就可以发现不少类似的问题解法。当然你不能去搜“如何制作 8 位优惠码”,而是搜“Python 生成随机字符串”这样的关键字。然后你就了解到:可以用 random 的 sample、shuffle,另外还有 string 这种模块可以利用。

顺便扯远些。有同学曾经问过:你们的教程是不是包括了找工作需要的知识点。这也是一种类似的误区。我们不是去参加高考,按照考纲复习完备,然后再上考场。现在的计算机行业可以说比任何一个行业的更新都要快,你永远不可能“完全”掌握某个领域的知识之后再去开发,你需要不断去面对新的技术和新的问题。所以编程相关的知识是变化的,要掌握的是不变的解决方法。

况且对于任何一个领域来说,知识的分布就像这张图,当你越进一步,你面对的知识空白就越多。这也是为什么很多同学学完基础之后,表示找不到一本合适的教材来进阶。因为根本就不存在这样的教材。在初级阶段,你提升能力的模式是 学习技能->拿技能去练习,而到了一定程度之后,提升能力的方式则必须是 遇到问题->想办法去解决问题,是一个由被动变主动的过程。所以,想更进一步的同学,不要去找教材,而是去找问题,再用好“搜索”这个伟大工具去解决它。

我们秉持的教学方法也是一样:我们不是给你教材,全互联网的资源都应该是你的教材。我们给你问题,以及如何去找解决问题的方法。


3. 学会查文档

在程序员届有这样一个词:RTFM(Read The Fuxxing Manual,去读TMD文档手册)

类似还有一个 STFW(Search The Fuxxing Web),就是对应我前面说的第 2 点。

我曾经一位老师指着一本厚厚的编程教材跟我们说:你们根本不用去记这些函数,只要用的时候知道去哪里查就足够了。

搜索可以告诉你有哪些解决方法,而官方的文档则是更明确的告诉你该怎样使用,参数有什么限制,需要注意的地方等等。唯一遗憾的是,大多数 Fuxxing Manual 都是英文写的。所以你说,英语不好到底能不能学编程。我只能说,可以,但强烈建议你好好补一下英语。(好消息是现在越来越多的文档都提供了中文版本

还是回到这道题目,通过 Python 官方文档,你就会知道 random 模块还能做哪些随机操作,以及 string 模块可以生成哪些字符串。

最后,还有提一点老生常谈:

4. 不断练习,积累经验

我已说过无数遍:编程如乐器,学会语法只是开始,还需要不断练习来掌握。每个程序员都是一行行代码堆出来的。如果你刚学编程不久,觉得自己缺少编程思维,经常感叹原来还有这种操作,写长一点代码就老出 bug 的话,相信我,你只是写得太少,看得太少。不用妄自菲薄,也不用急于求成,踏踏实实地先多练一练。等你把一本教程的示例代码都自己在电脑上输入运行一遍之后,我们再来谈谈什么是编程思维。这不是什么我独创的奇葩教学法,大多数程序员和计算机教师应该都认同这点。

以上是作为过来人的一点经验,希望对需要的人有所帮助。

感谢转发点赞的各位~


_往期文章推荐_


和想要通过学习Python转行的同学聊一聊

相关文章
|
Java 程序员
IT学不好没什么,大不了躺平
IT学不好没什么,大不了躺平
|
3月前
|
算法 安全
关于我用半个月过了软件设计师这件事
这篇文章分享了作者在半个月内通过软件设计师考试的经验,包括快速刷视频了解知识体系、针对性地刷历年真题并根据错题加强知识点巩固、进行模拟考试和总结,以及使用笔记软件记录重要知识点的方法。
关于我用半个月过了软件设计师这件事
|
3月前
|
缓存 前端开发 JavaScript
快如闪电!揭秘网页秒开秘籍,网友:再也不怕网速拖后腿!
【8月更文挑战第6天】随着互联网的发展,快速的网页加载成为关键。本文介绍前端性能优化策略,涵盖资源压缩与合并、图片优化、缓存利用、CDN部署、CSS及JavaScript的加载顺序优化、异步加载及DOM和CSS渲染减少等方面,旨在全面提升页面加载速度与用户体验。通过实施这些技术,可有效改善网站性能,满足用户需求并提升搜索引擎排名。
54 2
|
存储 编解码 数据处理
还在为搞不懂笔记本电脑参数而苦恼么?一篇文章就够啦
还在为搞不懂笔记本电脑参数而苦恼么?一篇文章就够啦
293 4
|
小程序 Windows
电脑可以刷微信朋友圈,这下能更好地摸鱼了?
电脑可以刷微信朋友圈,这下能更好地摸鱼了?
|
算法 NoSQL API
到底该不该看源码(懂这三点儿就够了)
1、不要为了看源码而看源码 2、代码积累到一定程度,遇到问题自然就去查源码了,然后你就看懂了 3、两年内不要刻意去看源码,可以点开简单了解一下就行,前两年疯狂做项目就行了,后期项目做的多了,你自己就会有疑问,每次写代码就会问自己为什么要这样写?底层的原理是什么?很自觉的带着问题就去看源码了,如果你没有这样的疑问,那说明你也不适合去看源码了,写写业务代码,了了一生
188 0
|
编译器 C++
【C/C++教程】关于C/C++那些坑爹的破事儿,你被坑了吗?
今天,就带大家看看C/C++里面究竟有多少不为人知的秘(keng)密(die)吧。可以测试一下,不看答案,自己能get到多少。
135 0
【C/C++教程】关于C/C++那些坑爹的破事儿,你被坑了吗?
致老友-有时候我词不达意 但我真的很开心生活有你
前段时间,可能是因为长期久坐的原因,屁股上长了坐板疮,加上每天上下班都是骑共享单车的原因,也没有好好地注意,身体终于垮了,伤口也有了感染,一个礼拜都...
148 0
测试点杂记,总有一点是你忘记的
在测试领域中,测试点,测试方法,比比皆是,工作刚入门的时候,总会去了解学习这些内容,工作时间长了,有些就忽略了,不知道有些测试点或者测试细则规范等,你是否需要重新温习一下,而知新呢?
|
存储 Windows
明明很努力的写博客,为啥没人看?试试这些方法和工具(建议收藏)
明明很努力的写博客,为啥没人看?试试这些方法和工具(建议收藏)
266 0
明明很努力的写博客,为啥没人看?试试这些方法和工具(建议收藏)