Python是在工作期间零零碎碎学习起来的。当时正值部门申购图书,鉴于Python的动态、快速等特性,就申请买了一本《Python核心编程》,内容可谓全面,但翻译实在太差,有些概念看了几遍也没弄清楚,所以只匆匆翻阅完了解一个大概。 后来在豆瓣上看了下评分,不到8分的样子,顺便做了下简评“只能说看这本书省去了初学者看电脑的眼疲劳,可以快速浏览一窥全貌。不过相比公开课,或者网上的教材,太不适合入门;尽管我还是硬着头皮差不多看完,也差不多入门”。

对Python有所了解之后,断断续续写了一些简单的程序,按先后顺序汇总如下:

  • BBS账户批量导入工具:基于Discuz!,数据库为MySQL,直接读取Excel中的数据批量导入即可;当时正好在找代码片段分享的网站,就贴在snipplr上,这应该是我的第一个可以用的Python程序。

  • 复杂密码生成工具:关于这个还有一段趣事,见本站Complex Password Utility,源代码PasswordGen on Github

  • 邮件测试工具:碰到的Java程序员们连一个简单的SMTP测试用例都懒得写,所以整了一个Python版,参考email: Examples;用Telnet当然也可以,见本站Telnet Introduction

  • LDAP 账户查找工具:那时公司出了所谓的内网导航,提供查找员工的电话、邮件等信息,但后来残了,邮件地址不再显示(在一个靠邮件来沟通的公司,可见这种残会有多残),所以写了一个脚本自己用,见源代码LDAPSearch on Github

  • Java Service接口测试用例生成工具:在For Rails中提到过,思路见模板jUnit TestCase Gist

  • Markdown Blog程序:使用Web.py开发的Blog程序,自动渲染Markdown格式成HTML,见Blog on Github,在线demo

  • 单词排行程序:同学在邮件中提到Writing an Hadoop MapReduce Program in Python,手上正好有Oracle Database 11g的全部文档,所以动手统计了一下词频,不知道每年的高考、考研的英语高频词汇是不是这样统计出来的。

以上大概是自学Python以来写过的一些程序,大部分代码还在,从中可见Python代码写得很不成熟;分析起来无非就是Python基础不过关、对标准库第三方库不熟练、受时间精力约束程序缺少锤炼、阅读源代码太少等之类的原因;当然,也很业余。

为什么是Python

前段时间写For Rails时,稍微概括了下自己的工作,这里再提一下:我是一枚Java攻城狮,工作两年多,主要做Java Web开发,期间转去做了一年多的Oracle DBA,维护Oracle EBS,也当过Linux Administrator。似乎涉猎的东西太多太浅,有点样样稀松的嫌疑。

那么,为什么要学Python呢?我觉得可以先看看Peter的Teach Yourself Programming in Ten Years,中文翻译见十年学会编程

关于语言的选择,这里直接抄录十年学会编程

不少人问我,他们首先该学哪种编程语言。没有绝对的答案,不过请考虑以下几点:

  • 用你的朋友的。当被问起“我该用哪种操作系统,Windows,Unix, 还是Mac?”,我总是回答:“你朋友用什么,你就用什么。” 你从朋友那能学到知识,这种优势可以抵销不同操作系统或语言之间本质的差异。也考虑你将来的朋友:程序员社区 — 你将成为它的一部分如果你继续往前走的话。你选择的语言是否有一个成长中的社区,还是人数不多、即将消亡?有没有书籍、网站、在线论坛回答你的问题?你喜欢论坛里的那些人吗?

  • Keep it simple, stupid. 象C++和Java这样的语言是为经验丰富的程序员组成的团队进行专业开发而设计的,他们专注于代码运行时的效率。因此,这些语言有些部分非常复杂。而你关注的是如何编程,不需要那些复杂性。你需要的是这样的语言: 对单个的编程新手来说,它易学易记。

  • 练习。你偏爱哪种学弹钢琴的方式:通常的交互式的方式,你一按下琴键就能听到音符;还是“批量”模式,你只有弹完整首曲子才能听到音符? 显然,用交互模式学习弹钢琴更容易些,编程也一样。坚持用交互模式学习并使用一种语言。

有了上面的准则,我推荐的第一个编程语言是PythonScheme。因人而异,还有其它好的选择。如果你的年纪是10岁以下,你可能更喜欢Alice。关键是你要选择并开始实践。

正如文中提到的一样,我学习Python很大一部分原因就是朋友的介绍;经过一些练习之后,你会发现自己越来越喜欢Python的简洁。印象最深的一次,要属部门一次关于Web Service的技术交流会,主持人用Java来演示XML RPCJSON RPCSOAP,不说混杂着各种Annotation,连这些协议都未所有触及,就疯狂的演示各种语言的客户端程序了。鉴于此,我花了几天时间看了下wiki,然后用Python做了几个原型,还附加地看了REST,这时你会发现用Python来解释会更加简明,这大概就是奥卡姆剃刀所讲的简单有效原理吧。

一点Python编程资料

因为Python学习得很业余,所以想加强理解,提高编程技能;在工作之余顺手收藏了一些Python相关的资料,有一些看了一部分就搁置了,但时常还是会想起来是不是该抽点时间继续看看。基于以上原因,就动手整理一份Python编程的资料作为索引,以后会陆续更新。

入门和基础

Python有Python 2.x 和Python 3.x 之分,争论很多,见Python2orPython3。初学者不用考虑这个问题,可以从Python 2.x入门,之后再讨论会多一些理性。

Python与数据库

在项目开发中,数据库应用必不可少。这里汇总下目前接触过的数据库和使用教程。

SQL,计算机出身的人应该都学过,若有疑问可以参考Wikipedia SQL,并使用SQLite做下练习。

数据库理论除了SQL,还有另一派NoSQL。

关于NoSQL,先上一段笑话:“Big data is like teenage sex: everyone talks about it, nobody really knows how to do it, everyone thinks everyone else is doing it, so everyone claims they are doing it.” Big DataNoSQL紧密相连,Big Data为甚?目前我没有多少理解和认识,所以先来看看NoSQL,在NoSQL Database上的定义和介绍:

NoSQL DEFINITION: Next Generation Databases mostly addressing some of the points: being non-relational, distributed, open-source and horizontally scalable.

The original intention has been modern web-scale databases. The movement began early 2009 and is growing rapidly. Often more characteristics apply such as: schema-free, easy replication support, simple API, eventually consistent / BASE (not ACID), a huge amount of data and more. So the misleading term “nosql” (the community now translates it mostly with “not only sql”) should be seen as an alias to something like the definition above.

关于常见NoSQL产品的比较见Main NoSQL Database Comparison;若果需要一些NoSQL的理论知识和基本概念,见The NoSQL EcosystemBig Data与NoSQL。目前仅用过MongoDBRedis

Python与Web开发

Python的Web框架众多,见Web Frameworks for Python,总有一款适合你或你的项目,实在不行,请动手打造自己的框架;为什么会有这么多框架呢,见Why so many Python wen frameworks?

  • Web.py:已故Aaron Swartz的框架。一句话介绍”web.py is a web framework for Python that is as simple as it is powerful. web.py is in the public domain; you can use it for whatever purpose with absolutely no restrictions.”。接触的第一个Web框架,后来模仿MovableType,写了一个简单的博客,见Blog on Github,在线demo http://ec2-54-251-227-120.ap-southeast-1.compute.amazonaws.com;碰到的坑点是模板中嵌套Python代码一直有缩进问题。

  • Flask:一句话介绍”Flask is a lightweight web application framework written in Python and based on the Werkzeug WSGI toolkit and Jinja2 template engine. It is BSD licensed. Flask is called a microframework because it keeps the core simple but extensible”。因为工作变动,练习过一段时间的Flask,以便熟悉开发的工具链;如果没有Rails,我想这才是自己首选的Web开发框架: simple but extensible and for fun。实战教程The Flask Mega-Tutorial

  • Tornado:来自FriendFeed的异步框架,FriendFeed被Facebook收购后开放了源代码,见Tornado on Github。一句话介绍”Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed”。Tornado主要特点是non-blocking,如果你想开发real-time的Web应用,Tornado是一个不错的选择。

  • Django:一句话介绍”Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.”,接触不多,作为全栈式框架,听说它的组件都是Made in Django。更多资料见Django资料

IDE

社区

周刊

Python 3

前面提到,『Python有Python 2.x 和Python 3.x 之分,争论很多,见Python2orPython3。初学者不用考虑这个问题,可以从Python 2.x入门,之后再讨论会多一些理性。』目前来看,已然不妥:对于新手,推荐直接学习 Python 3.x;对于还停留在 Python 2.x 的,则应尽快拥抱变化,与时俱进。

对于项目的开发维护来说,在新旧版本中来回穿梭/切换是一件痛苦的事儿,也会增加很多不必要的负担,因此尽快推进将手头的项目升级到 Python 3.x(当前最新版本为 3.5)。但升级绝不是拍拍脑袋就能决定的,具体参考 Porting Python 2 Code to Python 3。在 2015 年年底,便将一个开发维护近半年的 Web 项目顺利从 2.7 升级到 3.5,这与单元测试覆盖足够、第三方依赖库都支持 Python 3、团队成员愿意持续学习是分不开的。

Reference



blog comments powered by Disqus

Published

23 November 2013

Categories

Tags

Github