查看原文
其他

Python中文社区创始成员ZoomQuiet:究竟什么是编程?

2015-09-17 开智学堂
导读
为什么千万不能打扰程序员?如何画马和编程有咩关系?学习编程能走上人生巅峰吗?
究竟什么是编程?‘大妈’来告诉你!

谁是大妈?

大妈, 人称大妈的大妈.

网络常用ID:ZoomQuiet

有超过15年的编程经验.

第一个发现 Gmail 账户最多可以订阅/管理 200 个邮件列表.

入行多年, 大妈 参与/组织 了以下等等社区:

  • 2003年, CZUG. 通过 Zope 接触了 Python, 开启不归路

  • 2004年, 啄木鸟 Python 技术社区.透过社区获得上京工作机会

  • 2005年, 和伙伴们创立 CPyUG

  • 2006年, 发起 O.B.P (开放技术图书)计划

  • 2006年, 哲思(ZEUUX)自由软件社区,设计出 苦短衫

  • 2007年, 南下珠海, 加入 ECUG 从 Erlang 开始逐步演变成关注 分布式云服务 的社区

  • 2008年, Social Learn Lab, 教育大发现. (因为有了孩子.)

  • 2010年, 主持 开源卫士

  • 2011年, 参与 OpenResty 社区服务

  • 2013年, 成立 珠海GDG

  • 今年, 乱入了 R 语言社区,人生首次在 北大 做了次演讲 ;-)

  • 入行以来, 是编程让 大妈 进入这么多社区.

什么是编程?

程序员的行为很相似, 只是坐着,面对电脑,

其实一直在思考.

有个漫画 “为什么不能打扰程序员” 非常到位的描述了真实情景:

开始只是面对两行代码.
程序员在脑海中加载, 运行这两行程序.
然后推衍成流程图/模块关系图/数据结构图…,
正准备写下第三行代码.
如果有人意外干扰了思路.
一切立即从脑海中消散,程序员就必须要重新来过.


其实,
这种模式的深度思考就是”心流”.
然而,即便是高手,
也需要 10 分钟以上的时间才能再次进入心流状态.

所以,
不能打挠程序员!
编程是种极其专注的状态,
类似于艺术创作的深度沉迷.

编程与元学科

  • 数学

虽然不需要研究数学, 但其实编程中一直在用. 例如, 手机应用的加密传输需要使用加密矩阵.
只是被模块完善的封装了.

  • 网络

对网络 (数据/人际/计算机 等网络) 的正确理解,
才能无缝令 编程活动 嵌入当代互联网.

  • 认知科学

如果没有这方面的积累, 所做出的作品就无法迎合大众的认知规律,
注定只能影响到小众.

  • 文学

程序也是种文本, 和文学类似, 都需要影响他人的心智,
所以,协同式开发时, 代码必须第一时间,为他人理解.
这就要求, 代码若小说. 通过 易读, 好记, 好认的变量名形成流畅的阅读.
进一步的, 还有 文学化编程 思想和工具,能直接行为文学式编程 ;-)

开智编程入门课

编程,其实,是种表述,

对当今被数字深层控制的世界.
而表述的直接对象, 则是计算机.

--- 是也乎,( ̄▽ ̄)

时至今日, 网络与计算机, 已经与人类世界密不可分, 无处躲避.

比如: 如何用 Python 越个狱?

在 MR.Robot 里, 越狱者就是使用 树莓Pi 接入电气网络,
通过远程上传 Python 文件, 排行后接管整个监狱的电气系统,
释放囚犯.

这一切都是真实的.

地球上, 任意地点, 每天都有数棵卫星通过, 反复被扫描/监察.
那么, 面对这种深度数字化的世界, 如何与它沟通?
倘若没有任何直接的表述能力, 你, 将只能被无形控制着.

总是学不会编程? 不是你的错!

  • 传统的教科书, MOOC 等等的惨淡成功率, 源于何处?

编程活动,虽然内聚了如此多的“元学科能力”,
但是, 其实早已镶嵌在 DNA 之中,任何人都有编程的潜力!

如同掌握母语, 也需要长期/辛苦的实践, 然后忽然融会贯通, 同社会自在交流.
但是, 为何表述的对象, 变成了计算机, 换成了代码界面.
一切, 就变得如此艰难?

  • 编程等于画马?

原先, 传统教编程, 是跟教画马是一样的.
这是马头, 这是马腿, 这是马的身子. 好了, 你会画马了. 好了, 砰! 你应该可以把谷歌, 雅虎写出来了.


而真正的编程学习, 并不是这样的.
初级知识只要对高级知识深入了解, 才能真正了解初级知识. —- 李笑来


一开始, 你的程序能运行, 也按照设想完成了功能.

可很快, 用户变化, 运行环境变化, 各种变化后,
就会发现, 原有代码已不适用,
必须自主持续改进,
然而, 普通编程教程, 就好象 围棋棋谱一样, 只是要求你背下来相关代码,
根本没有引导如何面向问题的解决来主动编程.

开智编程班, 要这么做

而你真正需要的, 不过是踏上这一看似不合理的台阶, 开始爬, 逐日寸进.

  • 曾益其所不能


“开智编程入门班” 的目标是: 让大家获得编程的自信.

“曾益其所不能”—- 让每一个学员提升自我, 而不是仅仅提升为了所谓单薄的”工作能力”或是”岗位机会”.

和实质上已掌管了人类的计算机网络世界沟通,
在自己擅长的领域持续创新成长.

开智, 则将会为你后期的发展, 提供合伙人, 提供资金, 等等等等.


QA:大妈为你真诚填坑

Q1: 请问大妈, 看完 笨方法学Python之后, 开始学习哪本书或做哪些习题?

嗯哼?! 如果你看完了 笨办法学Python ,其实已经用不着再看其他书或者做什么习题了.


实际上笨办法学 Python, 前二十课真的全部理解了你就已经入门了, 可以去开始开发几个软件了.那么, 之后再开始学习什么书, 根据你想解决的领域问题. 自己查自己查,自己钻就完全自在啦!还有找什么习题做.


因为你只是看了这本书, 并没有逐一完成里面的代码, 说明你并没有打算真的入手开始学习 Python 或者说进入编程世界.


over.

Q2:对于一两年经验的大白程序员来说, 如何才能超越笨办法, 学习更复杂的新技术?

学习复杂的新技术, 如果这是你的学习目标, 那么我劝你重新再找一个目标.


因为新技术从来都是为了新应用而发明出来的.如果你只是为了学习新技术本身, 而没有关注这些新技术诞生时, 所服务的全新的网络应用/用户习惯 或者说 新的 网络交互体验, 那么你永远投入不到, 真正我所倡导的这个异世界.


希望大家通过 编程 真正自主的同这个真实世界来交互/去折腾, 而不是就是为了技术而技术.over.

Q3: 想问大妈刚学 Python 时做了哪些有趣的项目.初学者有哪些项目可以推荐.

好吧, 当初学 Ptyhon 只是通过拍脑袋想出来的一个项目来完成的,就是自动的天气预报, 那是零二年.

通过抓取国外一个天气预报网站页面,自动分析出 上海区 的天气预报信息, 然后每天定期执行, 针对特殊天气自动提醒.


就是这样的小软件, 大概前前后后一共才不到 200 行代码,但我改了将近有一个月.前后有十多个版本, 但正是在这个过程中衍生出来的各种各样的尝试,让我把 Python 的基础特性和常见功能给真正掌握住了,


最后, 初学者有哪些项目可以推荐?从我主持翻译的周刊中找吧.


|蠎周刊 |汇集全球蠎事儿

weekly.pychina.org

!-)


over.

Q4: 关于学习习惯的养成, 怎样形成可持续的正反馈?

就我来说, 给大家最强烈最强烈最强烈最强烈. 我恨不能说九十多个最强烈的建议啊!这个正反馈就是: 坚持写自己的私人技术博客.


把你在学习或者说使用 Python 的过程当中, 无论是成功还是失败经验, 清清楚楚明明白白的记下来.而且以非常友好, 至少是易读性足够的形式持续发布出来.


坚持下去, 那么你就会发现那种期待的, 正反馈会汹涌而来.甚至是你写的是失败的经验都会有汹涌的正反馈回来. 成功案例可以参考:我们 阳志平老师 坚持了十年的 Blog.over.

Q5: 怎样阅读 Django 的源代码?

哇哦! 这个任务我自己都不会做, 为什么呢?


阅读 Django 的源代码的目的是什么?! 如果目的是参与 Django 的开发共建: 那么很简单, 顺着系统的启动顺序, 一个类一个类往下钻就行了.


如果是为了解决当前 Django 的问题: Ok, 那么应该向官方去反映.


如果真是为了想理解一个 WEB 框架, 它的设计原理啊或者说实现方法和技巧: 那么应该从简单的开始, Django 现在发展的太快太复杂,包含了太多特殊业务的支持;应该看 Bottle 等简单的框架来理解 web.


如果真心就想读 Django 源代码, 建议找出 Django 最早一个版本开始看.over.

Q6:Python 是不是最容易在短时间学出效果产生成就感的语言?

最短时间做出效果让人产生成就感的语言?


如果是以这个标准的话, 任意一种计算机编程语言, 都有这种让人非常轻易的获得成就感的作用.为什么呢?


因为计算机语言它无论这个语言怎么设计, 只要是正确的写出, 都能够执行, 操作你想操作的, 无论对象也好, 数据也好, 系统也好.那么, 这种像上帝般的操控感, 是任何计算机语言天然就有的.


只不过有的形式上好一点儿, 有的库多一点儿, 但是 这一种, 和世界对话的操纵感, 是所以计算机语言共通.over.

Q7:一开始学习的话要不要注意项目架构和可扩展性方面? 如何提升自己面向对象和函数的思维模式?

一开始学习语言时候, 架构方面要不要注意, 可扩展方面要不要注意?当然要注意! 为什么呢, 这个就是编程的文学性.而后面的一半问题, 如何提升对象和面向函数的等等思维模式.


OK, 思维模式这个东西怎么说呢?跟我们英语的语感一样, 写得多了就有了.你如果硬是要把一些模型,像背棋谱一样把它们背下来, 硬给套到的某一种情景当中去用, 那就本末倒置了.


以本人而言, 从来不用面向对象的编程方法, 函数呢也没有着意去用. 只要自个儿觉得爽, 能够表述得清楚自己的整个架构意图, 就去用,

over.

Q8: 请问大妈:您在学习Python过程中, 通过什么方式突破 “入门到熟悉” 和 “熟悉到精通” 这 2 个阶段从而进阶, 让自己可以不走弯路的学python?

写 Python 的也超过了有11年了, 至今都没敢说自己精通了 Python.所以我觉得呢, 无论学 Python 还是学其他编程语言, 唯一的一个门槛, 或者说没有门的这个槛, 就是享受编程.


让编程变成自己的一种思维的模式: 用编程来解决具体问题. 而不是为了炫技或者说考级, 或者说写书等等, 一些很无聊的命题而去学.


这个心理门槛一定要过去, 而且不是强迫过去, 自然而然过去的,然后, 深入 Python 或是其它任意语言,都不是问题了over.

Q9:怎么避免自己的工作学习的复杂度像耳机线和意大利面条那样纠结.

这个和 编程思想 非常有关联.其实就我来说, 直觉的建议就是说:承认复杂性, 然后尝试以当前自己的理解 列出问题的分解路线, 再逐级去尝试解决.


一般来说,感觉到问题的复杂, 恰恰, 可能并不是问题本身复杂, 而是我们对问题本身.了解不够充沛, 不够充分, 那么这会儿用解决方法的路径去刺探它!


当我们对问题真真正正能够定义清楚了之后,这个问题就不复杂了, 就已经有解决方法啦,over.




扫码加入「开智Python预备班微信群」

Python中文社区创始成员@ZoomQuiet

为你真诚挖坑




—开智微播第058篇原创作品—

特别申明:本文知识产权为 @开智微播 及/或 相关权利人专属所有或持有。欢迎在朋友圈分享,如需转载,请微信获得授权。同样欢迎提问或合作。

点击下方“阅读原文”看一期学员「如何像程序一般升级自己」

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存