码迷,mamicode.com
首页 > 编程语言 > 详细

[No000028]Python的使用之禅及程序员应该明白的一些道理

时间:2015-10-22 21:25:34      阅读:288      评论:0      收藏:0      [点我收藏+]

标签:

最近疯狂的学习ruby和python着两门语言,看到书本上一些比较赞同的段子,摘抄并翻译如下:

 

Python的使用之禅

Beautiful is better than ugly. 美丽好过丑陋
Explicit is better than implicit. 明示好过暗示
Simple is better than complex. 简单好过复杂
Complex is better than complicated.复杂好过杂乱
Flat is better than nested.平坦好过嵌套
Sparse is better than dense.稀疏好过稠密
Readability counts.可读性计数
Special cases aren‘t special enough to break the rules.特殊情况下没有特殊的,则足以打破规则
Although practicality beats purity.尽管实用冲击着纯朴
Errors should never pass silently.但错误将永远不能悄然通过
Unless explicitly silenced.除非明确它要悄然地
In the face of ambiguity, refuse the temptation to guess.面对莫能两可的东西,拒绝猜测的诱惑。
There should be one-- and preferably only one --obvious way to do it.因为应该会有一个--而且最好只有一个--很明显的方法去解释它。
Although that way may not be obvious at first unless you‘re Dutch.虽然这种方式对你来说第一次可能不明显,除非你是荷兰人。
Now is better than never.现在从来没这么好过。
Although never is often better than *right* now.虽然从来没有常常比现在更好。
If the implementation is hard to explain, it‘s a bad idea.如果实施过程是很难被解释的,这就是个坏主意。
If the implementation is easy to explain, it may be a good idea.如果实施过程是很容易被解释,这可能是一个好主意。
Namespaces are one honking great idea -- let‘s do more of those!名称空间是一个伟大的理念——让我们做更多的!

 

笨方法更简单


这本小书的目的是让你起步学习程序。虽然书名说是「笨办法」,但其实并非如此。所谓的「笨办法」是指本书教授的方式。在这本书的帮助下,你将通过非常简单的练习学会一门程序语言。写练习题是每个程序设计师的必经之路
1. 做每一道习题
2. 一字不差地写出每一个程序
3. 让程序运行起来

就是这样了。刚开始这对你来说会非常难,但你需要坚持下去。如果你通读了这本书,每晚花个一两小时做做习题,你可以为自己读下一本程序书籍打下良好的基础。通过这本书你学到的可能不是真正的「写程序」,但你会学到最基本的学习方法。
这本书的目的是教会你程序新手所需的三种最重要的技能:「读和写」、「注重细节」、「发现不同」。


读和写
很显然,如果你连打字都成问题的话,那你学习写程序也会成问题。尤其如果你连程序原始码中的那些奇怪符号都打不出来的话,就根本别提写程序了。没有这样基本技能的话,你将连最基本的软体运作原理都难以学会。
为了让你记住各种符号的名字并对它们熟悉起来,你需要将程序码写下来并且运行起来。这个过程也会让你对程序语言更加熟悉。


注重细节
区分好程序设计师和差程序设计师的最重要的一个技能就是对于细节的注重程度。事实上这是任何行业区分好坏的标准。如果缺乏对于工作的每一个微小细节的注意,你的工作成果将缺乏重要的元素。以写程序来讲,这样你得到的结果只能是毛病多多难以使用的软体。
通过将本书里的每一个例子一字不差地打出来,你将通过实践训练自己,让自己集中精力到你作品的细节上面。


发现不同
程序设计师长年累月的工作会培养出一个重要技能,那就是对于不同点的区分能力。有经验的程序设计师拿着两份仅有细微不同的程序,可以立即指出里边的不同点来。程序设计师甚至造出工具来让这件事更加容易,不过我们不会用到这些工具。你要先用笨办法训练自己,等你具备一些相关能力的时候才可以使用这些工具。
在你做这些练习并且打字进去的时候,你一定会写错东西。这是不可避免的,即使有经验的程序设计师也会偶尔写错。你的任务是把自己写的东西和要求的正确答案对比,把所有的不同点都修正过来。这样的过程可以让你对于程序里的错误和 bug 更加敏感。


不要复制粘贴
你必须手动将每个习题练习「打」出来。复制粘贴会让这些练习变得毫无意义。这些习题的目的是训练你的双手和大脑思维,让你有能力读代码、写代码、观察代码。如果你复制粘贴的话,那你就是在欺骗自己,而且这些练习的效果也将大打折扣。


对于坚持练习的一点提示
在你通过这本书学习写程序时,我正在学习弹吉他。我每天至少训练2 小时,至少花一个小时练习音阶、和声、和琶音,剩下的时间用来学习音乐理论和歌曲演奏以及训练听力等。有时我一天会花8 个小时来练习,因为我觉得这是一件有趣的事情。对我来说,要学好一样东西,每天的练习是必不可少的。就算这天个人状态很差,或者说学习的课题实在太难,你也不必介意,只要坚持尝试,总有一天困难会变得容易,枯燥也会变得有趣了。


在你通过这本书学习写程序的过程中要记住一点,就是所谓的「万事起头难」,对于有价值的事情尤其如此。也许你是一个害怕失败的人,一碰到困难就想放弃。也许你是一个缺乏自律的人,一碰到「无聊」的事情就不想上手。也许因为有人夸你“有天分”而让你自视甚高,不愿意做这些看上去很笨拙的事情,怕有负你「神童」的称号。也许你太过激进,把自己跟有20多年经验的程序老手相比,让自己失去了信心。
不管是什么原因,你一定要坚持下去。如果你碰到做不出来的加分习题,或者碰到一节看不懂的习题,你可以暂时跳过去,过一阵子回来再看。只要坚持下去,你总会弄懂的。
一开始你可能什么都看不懂。这会让你感觉很不舒服,就像学习人类的自然语言一样。你会发现很难记住一些单词和特殊符号的用法,而且会经常感到很迷茫,直到有一天,忽然一下子你会觉得豁然开朗,以前不明白的东西忽然就明白了。如果你坚持练习下去,坚持去上下求索,你最终会学会这些东西的。也许你不会成为一个编程大师,但你至少会明白程序是怎么工作的。
如果你放弃的话,你会失去达到这个程度的机会。你会在第一次碰到不明白的东西时(几乎是所有的东西)放弃。如果你坚持尝试,坚持写习题,坚持尝试弄懂习题的话,你最终一定会明白里边的内容的。
如果你通读了这本书,却还是不知道写程序编程是怎么回事。那也没关系,至少你尝试过了。你可以说你已经尽过力但成效不佳,但至少你尝试过了。这也是一件值得你骄傲的事情。

 

给新手的告诫

 

你已经完成了这节习题,取决于你对电脑的熟悉程度,这个练习对你而言可能会有些难。如果你觉得有难度的话,你要自己克服困难,多花点时间学习一下。因为如果你不会这些基础操作的话,写程序对你来说将会是相当艰难的一件事。

如果有程序设计师叫你去使用 vim 或者 emacs ,你应该拒绝他们。当你成为一个更好的程序设计师的时候,这些编辑器才会适合你使用。你现在需要的一个可以编辑文字的编辑器。我们使用 gedit 是因为它很简单,而且在不同的系统上面使用起来也是一样的。就连专业程序设计师也用 gedit ,所以对于初学者而言它已经够用了。

总有一天你会听到有程序设计师建议你使用 Mac OSX 或者 Linux。如果他喜欢字体美观,他会叫你弄台 Mac OSX 电脑,如果他们喜欢操作控制而且留了一把大胡子,他会叫你安装 Linux。这里再度向你说明,只要是一台手上能用的电脑就够了。你需要的只有三样东西gedit 、一个 Terminal、还有 IRB。

最后要说的是这节习题的准备工作的目的,也就是让你可以在以后的习题中顺利做到下面的这些事情:

  1. 使用 gedit 编写程序码。
  2. 执行你的代码。
  3. 修改错误。
  4. 重复上述步骤。

其他的事情只会让你更困惑,所以还是坚持照着这个计划进行吧。

 

函数的风格

 

以前我教过的怎样写好函数的方法一样是适用的,不过这里要添加几条:

  • 由于各种各样的原因,程序员将 class (类)里边的函数称作method(方法)。很大程度上这只是个市场策略(用来推销OOP),不过如果你把它们称作「函数」的话,是会有啰嗦的人跳出来纠正你的。如果你觉得他们太烦了,你可以告诉他们从数学方面示范一下「函数」和「方法」究竟有什么不同,这样他们会很快闭嘴的。
  • 在你使用class的过程中,很大一部分时间是告诉你的 class如何「做事情」。给这些函数命名的时候,与其命名成一个名词,不如命名为一个动词,作为给class的一个命令。就和数组中的 pop 函数一样,它相当于说:「嘿,数组,把这东西给我 pop出去。」它的名字不是 remove_from_end_of_list,因为即使它的功能的确是这样,这一个字符串也不是一个命令。
  • 让你的函数保持简单小巧。由于某些原因,有些人开始学习 class 后就会忘了这一条。

 

Classh (类) 的风格

 

你的 class 应该使用「camel case(驼峰式大小写)」,例如你应该使用SuperGoldFactory 而不是 super_gold_factory 你的 initialize 不应该做太多的事情,这会让 class 变得难以使用。

你的其它函数应该使用「underscore format(下划线隔词)」,所以你可以写my_awesome_hair,而不是 myawesomehair 或者 MyAwesomeHair。

用一致的方式组织函数的参数。如果你的 class 需要处理 users、dogs、和cats,就保持这个次序(特别情况除外)。如果一个函数的参数是(dog, cat, user),另一个的是(user, cat, dog) ,这会让函数使用起来很困难。

不要对全局变量或者来自模组的变量进行复位义或者赋值,让这些东西自顾自就行了。

不要一根筋式地维持风格一致性,这是思维力底下的妖怪喽萝做的事情。一致性是好事情,不过愚蠢地跟着别人遵从一些白痴口号是错误的行为——这本身就是一种坏的风格。好好为自己着想吧。

 

代码风格

 

  • 为了以方便他人阅读,在自己的代码之间留下一些空白。你将会看到一些很差的程序设计师,他们写的代码还算通顺,但代码之间没有任何空间。这种风格在任何程序语言中都是坏习惯,人的眼睛和大脑会通过空白和垂直对齐的位置来扫描和区隔视觉元素,如果你的代码里没有任何空白,这相当于为你的代码上了迷彩装。
  • 如果一段代码你无法朗读出来,那么这段代码的可读性可能就有问题。如你找不到让某个东西易用的方法,试着也朗读出来。这样不仅会逼迫你慢速而且真正仔细阅读过去,还会帮你找到难读的段落,从而知道那些代码的易读性需要作出改进。
  • 学着模仿别人的风格写程序,直到哪天你找到你自己的风格为止。
  • 一旦你有了自己的风格,也别把它太当回事。程序设计师工作的一部分就是和别人的代码打交道,有的人审美观就是很差。相信我,你的审美观某一方面一定也很差,只是你从未意识到而已。
  • 如果你发现有人写的代码风格你很喜欢,那就模仿他们的风格。

 

好的注释

 

  • 有程序员会告诉你,说你的代码需要有足够的可读性,这样你就无需写注释了。他们会以自己接近官腔的声音说「所以你永远都不应该写代码注释。」这些人要嘛是一些顾问型的人物,如果别人无法使用他们的代码,就会付更多钱给他们让他们解决问题。要嘛他们能力不足,从来没有跟别人合作过。别理会这些人,好好写你的注解。
  • 写注解的时候,描述清楚为什么你要这样做。代码只会告诉你「这样实现」,而不会告诉你「为什么要这样实现」,而后者比前者更重要
  • 当你为函数写文件注解的时候,记得为别的代码使用者也写些东西。你不需要狂写一大堆,但一两句话谢谢这个函数的用法还是很有用的。
  • 最后要说的是,虽然注解是好东西,太多的注解就不见得是了。而且注解也是需要维护的,你要尽量让注解短小精悍一语中的,如果你对代码做了更改,记得检查并更新相关的注解,确认它们还是正确的。
 

不要只是手动下载并且安装这些软体套件,你应该看一下别人的建议,尤其看看针对你的操作系统别人是怎样建议你安装和使用的。同样的软体套件在不一样的操作系统上面的安装方式是不一样的,不一样版本的 Linux 和 OSX 会有不同,而 Windows 更是不同。

我要预先警告你,这个过程会是相当无趣。在业内我们将这种事情叫做「yak shaving(剃犛牛)」它指的是在你做一件有意义的事情之前的一些准备工作,而这些准备工作又是及其无聊冗繁的。你要做一个很酷的 Ruby 专案,但是创建骨架目录需要你安装一些软体到件,而安装软体套件之前你还要安装package installer (软件套件安装工具),而要安装这个工具你还得先学会如何在你的操作系统下安装软体,真是烦不胜烦呀。

    

无论如何,还是克服困难吧。你就把它当做进入程序俱乐部的一个考验。每个程序设计师都会经历这条道路,在每一段「酷」的背后总会有一段「烦」的。

 

或许,你现在已经可以开始鼓捣一些程序出来了。如果你手上有需要解决的问题,试着写个程序解决一下。你一开始写的东西可能很挫,不过这没有关系。以我为例,我在学每一种语言的初期都是很挫的。没有哪个初学者能写出完美的代码来,如果有人告诉你他有这本事,那他只是在厚着脸皮撒谎而已。

最后,记住学习写程序是要投入时间的,你可能需要至少每天晚上练习几个小时。顺便告诉你,当你每晚学习 Ruby 的时候,我在努力学习弹吉他。我每天练习2 到4 小时,而且还在学习基本的音阶。

每个人都是某一方面的菜鸟。

 

一个老程序设计师的建议

 

你已经完成了这本书而且打算继续写程序。也许这会成为你的一门职业,也许你只是作为业余爱好玩玩。无论如何,你都需要一些建议以保证你在正确的道路上继续前行,并且让这项新的爱好为你带来最大程度的享受。

 

我从事写程序这行已经太长时间,长到对我来说写程序已经是非常乏味的事情了。我写这本书的时候,已经懂得大约20 种程序语言,而且可以在大约一天或者一个星期内学会一门程序语言(取决于这门语言有多古怪)。现在对我来说写程序这件事情已经很无聊,已经谈不上什么兴趣了。当然这不是说写程序本身是一件无聊的事情,也不是说你以后也一定会这样觉得,这只是我个人在当前的感觉而已。

 

在这么久的旅程下来我的体会是:程序语言这东西并不重要,重要的是你用这些语言做的事情。事实上我一直知道这一点,不过以前我会周期性地被各种程序语言分神而忘记了这一点。现在我是永远不会忘记这一点了,你也不应该忘记这一点。

 

你学到和用到的程序语言并不重要。不要被围绕某一种语言的宗教把你扯进去,这只会让你忘掉了语言的真正目的,也就是作为你的工具来实现有趣的事情。

 

写程序作为一项智力活动,是唯一一种能让你创建交互式艺术的艺术形式。你可以建立专案让别人使用,而且你可以间接地和使用者沟通。没有其他的艺术形式能做到如此程度的交互性。电影领着观众走向一个方向,绘画是不会动的。而程序码却是双向互动的。

 

写程序作为一项职业只是一般般有趣而已。写程序可能是一份好工作,但如果你想赚更多的钱而且过得更快乐,你其实开一间快餐分店就可以了。你最好的选择是将你的程序技术作为你其他职业的秘密武器。

 

技术公司里边会写程序的人多到一毛钱一打,根本得不到什么尊敬。而在生物学、医药学、政府部门、社会学、物理学、数学等行业领域从事写程序的人就能得到足够的尊敬,而且你可以使用这项技能在这些领域做出令人惊异的成就。

 

当然,所有的这些建议都是没啥意义的。如果你跟着这本书学习写软体而且觉得很喜欢这件事情的话,那你完全可以将其当作一门职业去追求。你应该继续深入拓展这个近五十年来极少有人探索过的奇异而美妙的智力工作领域。若能从中得到乐趣当然就更好了。

 

最后我要说的是学习创造软件的过程会改变你而让你与众不同。不是说更好或更坏,只是不同了。你也许会发现因为你会写软件而人们对你的态度有些怪异,也许会用「怪人「这样的词来形容你。也许你会发现因为你会戳穿他们的逻辑漏洞而他们开始讨厌和你争辩。甚至你可能会发现有人因为你懂得电脑怎么运作而觉得你是个讨厌的怪人。

 

对于这些我只有一个建议:让他们去死吧。这个世界需要更多的怪人,他们知道东西是怎么工作的而且喜欢找到答案。当他们那样对你时,只要记住这是你的旅程,不是他们的。「与众不同」不是谁的错,告诉你「与众不同是一种错」的人只是嫉妒你掌握了他们做梦都不能想到的技能而已。

 

你会写程序。他们不会。这真他妈的酷。

 

 

 

 

 

[No000028]Python的使用之禅及程序员应该明白的一些道理

标签:

原文地址:http://www.cnblogs.com/Chary/p/No000028.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!