潘石屹大家都知道,到今天仍然是微博大V,只是目前重心已经转移,开始热心介绍编程了。

我觉得潘石屹推广编程的姿势不对_java

仔细看潘石屹的微博,发现他真的在研究编程,谈的问题还挺像模像样。

  • 6月23日:如果整数A的全部因子(包括1,不包括A本身)之和等于B,且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。请用Python语言编程,求3000以内的全部亲密数

  • 6月22日:现在我们需要将5元人民币纸币兑换成1元、5角和1角的硬币,请用Python语言计算出共有多少种不同的兑换方法。

  • 6月21日:马克思手稿中有一道趣味数学题:有30个人,其中有男人、女人和小孩,他们在同一家饭馆吃饭,总共花了50先令。已知每个男人吃饭需要花3先令,每个女人吃饭需要花2先令,每个小孩吃饭需要花1先令,请用Python语言编程求出男人、女人和小孩各有几人?

  • 6月13日:假设某银行一年整存零取得月息为0.63%,现某人手中有一笔钱,他打算在今后的五年中,每年年底取出1000元,到第5年刚好取完,请用Python语言算出此人存钱时应该存入多少?

有一些不懂编程的朋友看了很受鼓舞,昔日房地产大佬,一把年纪了,从头学起玩编程仍然不亦乐乎。看起来,编程这回事真的不难。

没错,编程真的不难。可是我想说,编程也不是看上去那么简单,潘石屹推广编程的姿势似乎不太对。

比如他举的例子,马克思手稿中的趣味数学题。这个题目确实有趣味,也确实有挑战。但是不夸张地说,目前相当多的程序员,甚至工作多年的程序员并不会做——但是,这并不妨碍他们每天编程,开发系统,获得工资。

为什么?潘石屹的题目确实可以用编程来解决,但编程并不是解数学题那么简单。它更像是一门手艺,是一套技能的组合。不信的话,看看下面几个问题。

比如,你忙碌一周,辛苦写了几百行代码,忽然发现从周三开始的思路错了,所以希望撤销周三开始的修改,退回到周二的工作重新出发。可是,怎么从几百行代码里找出哪些是周二之后的,哪些是周二之前的呢?

又比如,你辛苦写了几百行代码,怎么看怎么没问题,可结果就是不对,百思不得其解。问题到底出在哪里?它可能在这几百行中的任何一行,甚至就是某个字符写错了。可是,该当怎么找到它,验证它呢?

还比如,一个问题由两个人协作解决,各自完成一部分,最后组合起来得到完整方案。可是,怎么保证分工不重叠、无遗漏?怎么避免两个人的代码冲突?

再比如,你辛苦写了几百行代码,实现了一个精妙的算法,为了防止以后忘记,你还专门写了文档。可是怎么把文档内容轻松输出成网页、PDF等各种格式,方便大家浏览?又怎么保证代码和文档的同步,一旦修改了代码,文档也会同步更新?

甚至再举个最简单的例子,从网络上下载一个文件保存到本地文件。如果失败了,你怎么知道定位是对应的网络资源不存在,还是网络传输不稳定,还是本地有同名文件,还是本地磁盘空间不够呢?

潘石屹虽然每天都在微博上推广编程,但似乎从来没谈过如何解决这些问题。但我觉得,他肯定逃避不了这些问题。因为按照我的经验,从写程序的第一天起,从最简单的程序起,这些问题就伴随在程序员的左右。

如果没有掌握配套的技能,只满足于写一些“核心计算步骤”,严格说其实不叫编程,充其量是过家家。除非你是顶尖科学家,否则这些代码更像温室里的花朵,并没有太强的实用价值和生命力。

在我看来,适合大多数人的编程学习方式,一定不是专注于“核心计算步骤”,而是通过不断打磨和训练,最终掌握在真实世界中解决问题的本领。

这样学完——其实更准确说是练习完,你或许没法迅速算出“将5元人民币纸币兑换成1元、5角和1角的硬币,共有多少种组合”,但是多半可以完成“把自己感兴趣的新闻找出来,定时通过微信(或邮件)推送给自己”,“把硬盘里符合某些标准的文件都列出来,自动更新到云盘”之类的任务,甚至能通过探索、学习、验证,解决比这更复杂的任务。

对普通人来说,这种看起来无甚稀奇的任务,反而可能是学习编程更可取的方式——要知道,许多人之所以开始不久就放弃编程,并不是因为不会写代码,而是因为不会配置开发环境。所以哪怕费劲写了代码也不知道如何运行,于是干脆放弃。

所以,如果你想学编程,一定不要被“解数学题”的思维所局限,从“手艺人”的角度出发,反而更容易获得成功。

下面进入广告时间。


中国Python社区的知名人物,长老级程序员“大妈”(网名Zoom.Quiet)就在做这方面的课程。与常见的“多多益善”的编程培训不同,大妈的“蟒营”每期最多安排42名学员,却安排了超过5名的教练,强调的就是实际操练,主旨是让学员在实际操作中学会编程这门手艺,锻炼编程的技能组合。

之前我已经替大妈吆喝过几次,从反馈来看一直都不错。眼下,新一期的“蟒营”又要开始了,照例在这里跟大家打个招呼。