第一周讲稿
时间:2006-03-27 来源:nicki0923
不过首先, 我先给大家消消毒。
大家好, 公司里很多牛人, 让我来做这个培训, 实在是看得起小弟, 在这里感谢大家。
说是上课, 其实这个比较假。再怎么说, 大家都是技术员, 搞技术出生的, 说起来 ASP、Delphi、NotYet 这些技术我都已经忘得差不多了。所以这里我叫做技术推广, 来推广一下 Python 这套好玩的技术。
本来今天准备由我来讲, 不料周末中了感冒病毒, 被黑了。所以今天我请了同事魏中华来给大家讲一下 Python 的基本语法。
不过首先, 我先给大家消消毒。
首先, 学习编程大概真的没这么难。编程是一件很好玩的事情, 现在许多人喜欢把事情搞得很复杂, 以为事情就应该是这个样子, 这完全是找抽。现在各大学里面计算机、软件专业搞得空前绝后, 结果最后计算机技术还是照样普及, 我们还不是都玩得很 Happy? 所以没必要搞得很严肃, 那只是欺骗别人安慰自己而已。编程是一件乐事, 我们要还他本来面目。
这个很大程度上和人为的技术壁垒有关。一周前我和公司里的大牛林伟在庐山上聊技术聊了 3 个通宵, 林老为此破口大骂, 那些家伙成天故弄玄虚, 把技术搞得很神秘, 给人一种很拽感觉。我们千万不要吃这套。技术不是哪位人物哪个学校的技术, 国内的技术条件这么差, 所以, 辛苦大家了。
那么我们现在学习编程是不是起步太晚了呢, 比如说比起技术部的程序员。从某种意义上说确实是这样。
在技术上存在外功和内功两种流派。有人会觉得内功是一种经验或者原理上的东西, 需要花时间去沉淀。可以这么说, 但是我觉得内功更重要的是学习能力, 还有遇到新问题举一反三的能力也就是应用能力。除了学习和应用的能力, 还有更重要的, 就是开阔的思想以及创造能力。如果说花了很长时间去苦练内力, 却变得闭塞那么这是走火入魔, 这种功力不要也罢。所以我们所追求的, 是深厚的功底和开明的思想。做到这一点要花好几年、甚至十几年的时间, 所以说我们的起步并不早。但是现在有很多程序员虽然写了几年程序, 但是只能说是某种工具的熟练工人, 要么缺乏学习能力, 要么就是脑袋被框死毫无思想, 说难听点叫不成大器。我们不要学他们。
从原理上讲, 学习计算机组成原理和汇编, 当然也包括 C 是修炼内力的好方法。早期内力深厚的程序员多数是这样练成的。比如上面说的林老我们都写了十年的程序, 以前就流行这个。他用 DOS 下面的 DEBUG 甚至用二进制就可以写出非常漂亮的横版飞行射击游戏。这种人表面上用 C/C++ 或者 Python、Basic, 但是脑子里出现的还是机器码, 写出来的程序往往效率很高。当然只要你学过计算机组成原理和 C, 很容易感受到这一点, 如果纯粹为了好玩而想感受一下的话不妨去看看这方面的书。
从经验上讲, 任何语言和工具, 只要认真学习使用都能受益。所以说以前和老尚和聂国政聊天的时候, 我并没有说因为我喜欢 Python 而让大家抛弃现在擅长的工具不用 (当然今天是推广 Python 所以还是要介绍的)。我最早使用的是 Basic, 带行号那种, 现在如果说侥幸有点内力的话, 拜其所赐。我在小学和到初中一年级的时候就用 Basic 写过名片管理、工资管理程序, 还开发过图像格式和绘图工具。现在写程序许多东西仍然大同小异。经验放着总是不坏。
从锻炼学习能力上讲 C++ 是最好的, C++ 特性最复杂并且比较完美 (当然最完美的是 Java), C++ 既能兼顾底层又能兼顾到应用, 大小通吃所以特性繁多相当复杂。学起来不方便自然就最锻炼学习能力啦~。然而学习 C++ 是最容易走火入魔的, 很容易觉得老子天下第一, 闭目塞听, 重复去造轮子还以为自己挺有创造力。如果看到了这个危险, 我建议大家不妨去学一下 C++; 如果你发现了 C++ 的缺点而不想再用它的时候 -- 我说, 这时候你就可以把 C++ 用在你的工作和项目中了。
下面这句话很有用, 就是知道一种技术的优点并不等于熟悉它, 而应该是明白它缺点的时候。
另外一种就是外功了, 掌握一种很好的工具或者思想站在巨人的肩膀上, 很快就可以练成决世神功。技术发展到现在, 这点变得尤为明显。
举个例子, 一个月前, 我们组组长和一位同事在讨论编写一套相当庞大的信息系统, 计划是一个月的工期。当时我刚好经过, 我分析了下认为一天就够了。大家以为我是在开玩笑, 我说试试吧。最后这个系统我写了半天, 魏中华学习了半天相关的技术花了半天把剩下的部分也写完了。加起来真的是一天时间 (当然后来进行了一次升级, 进行重构连学习新技术花了一天半)。大家可以算算, 这个工作效率是 1 比 30。那么这种技术难不难呢? 我刚才说了, 魏中华他仅学了半天时间就能应用了。后来我看到项目报告, 整个项目项目组花了半年, 但是最后程序仅用了一天。
这个就是外功, 我们是有优势的。为什么呢? 因为老程序员常常有思维定势, 他的经验、他的技术体系告诉他程序就只能这样写而不能那样, 生产力就应该这么低、项目就应该这么漫长, 以换来毫无疑义的安全感。而我们有后发优势, 没有旧的技术体系来制约我们。我们能接受新东西, 我们能花很短的学习时间来超过那些老人, 最后我们能 1 比 30, 或者更多。这个就是后发优势。
顺便说一下, 我和魏中华用的那套技术叫 Archetypes, Plone 下面的一套编程框架。Python 的, 在以后会推广给大家, 所以先别急。
也许我们会担心自己内功不够, 到时候怕是会被高手暴扁是吧。这里我来举个例子, 是说学吉他的。
我看过一篇文章, 作者在初学吉他的时候偏重内功, 注重音色, 他很鄙视那些学外功的人, 弹得很快很花哨, 但是压铉不准音色一踏糊涂。所以他很努力的练基础, 忽视了把位变化、曲子的练习。结果最后他发现别人进步得很快, 不仅能弹出很好的曲子而且音色也越来越好甚至比他要漂亮。然后作者得出结论, 学琴, 不能死脑筋只看重基础和内功, 练习外功也有助于内功的成长。所以大家在学习 Python 的时候别以为这是花里胡哨的招式, 其实这是内外兼修。
那么我们现在不是专职写程序的, 学习技术岂不很吃亏? 哼哼, 我说呢, 其实一点也不吃亏。学好一样东西最重要的是兴趣, 是好玩。现在我们这里写程序的许多人成天重复性劳动, 其中许多人都向我抱怨这个, 说是毫无乐趣可言。为了工作凑活着编程, 你说会有进步吗? 其实他们现在已经停下来等我们来超越了。现在我们不是专职的, 大家今天过来了, 证明大家还是挺有兴趣的, 这个就是我们的优势。
当然以后大家转为专职程序了也别担心, 因为写程序本身是件很好玩的事情, 大家可以看我, 我从来都不觉得些程序烦人。即使工作中无可避免要重复体力劳动, 但是其中可以发挥的东西还是很多, 即使工作不能发挥, 课外我们还可以自己做些研究的。抛开这些东西不说, 在一个要求相当严格的场合下, 不仅要求程序有很高的执行效率, 而且还要求有很复杂的功能, 同时还需要稳定性不能有 Bug 更不能 Crash —— 在这种情况下, 越是变态的需求、越是要求严谨的地方就越是我们发挥的场合。使用简洁、美的方法, 仿佛像开玩笑一样就把这些问题解决了, 你说编程好不好玩?
我喜欢表面上搞笑, 而下面严谨的作风; 而不是表面上严谨, 底下搞笑。
我见过许多用 C++ 编写的程序, 表面上设计模式, 效率与应用的完美结合, 其实天天 Core Dump, Deathloop/Deathlock, CPU 100%, 僵尸进程...。何必呢? 换用 Python 行不行? 开发得轻松, 维护得轻松, 跑得也快, 为什么不这么做呢? 当然以后我会专门讲如何让 Python 跑得比 C++ 更快。
最后我们会说 Python 虽好, 但是它不出名啊? 这个就搞笑了, Python 是世界上最流行的编程工具。BT 是 Python 写的、MailMan (邮件列表) 是 Python 写的。Google 和微软过招用的是 Python。国内那些大公司私底下用的也是 Python。Python 无处不在只是国内不流行而以。这里再开个玩笑, 如果连国内都流行了, 那个玩艺估计也好不到哪里去。
所以说我在这里建议大家, 真的开始学习编程, 就要和国内的技术氛围相脱离。首先是和国内的论坛说再见, 特别是 CSDN, 垃圾中的垃圾。我们要开始注意邮件列表, 通常邮件列表要专业得多, 但是国内的邮件列表也不怎么样, 好像是论坛的翻版。这里我很遗憾地说中文的 Python 列表实在不怎么样, 但是中文的 Python 社区确实做得有够世界水平。
然后学会用 Google 查资料, 对程序员而言很难理解为什么百度会有人用, 我就从来没有用百度搜出过我要的资料。Google 上面有我们所需要的所有东西, 函数说明、文档、实现我们所需功能的模块。有了 Google 你已经订阅了世界上所有的邮件列表。
用 Google 就像是玩侦探游戏, 即使我不知道现在应该去使用哪个关键字, 但是我可以旁敲侧击用相关的关键字先搜出这个关键字, 再用这个关键字找出我们需要的资料。我经常要推理许多次才能找到我要的东西。不用 Google 的程序员不是真的程序员。
有些高手推荐浏览英文站点用英文关键字来 Google, 这是有道理的, 而且我们将来也必然会走这一步。但是我不推荐只上英文站点, 毕竟国内许多程序员、黑客已经为我们做了很多工作, 我们可以得到许多有用的中文资料。但是同样不要指望用百度能够找到, 因为 Google 比百度更懂中文。已有的东西我们要尽最大可能去使用它, 这个就是粒度, 这个就是黑客的做法。粒度是以后我们必然会涉及到的东西, 以后我会给大家做解释。而成为优秀的程序员我们必然要以黑客的标准来要求自己 —— 当然我以前已经有说过, 这里的黑客不是那些入侵系统的白痴, 要不然黑客也太容易做了。
最后澄清一下, 这里一直有谣言说我只用写字板来写程序, 虽然我在这里调试程序用的都是写字板, 但是私底下我通常用的是 Vi, Python 下面也很喜欢用 IDLE 这个软件。不过用写字板来编程也值得一试, 不使用 IDE 来编程, 能让我们更接近程序本身, 它本来应有的面貌。
下面请魏中华同学来为我们讲一下 Python 的基本语法。不过今天讲的 Python 还是和 C++ 没有什么区别, 下次我会讲一下 Python 的真正面貌, 不过是以今天的内容为基础的。