新装chakra

昨天决定用qt之后决定安装新版本的kde,

因为kde最新更新到了4.3.2而好像arch之下还没有跟新(理论上也不会更新)

原来一直以为kdemod是arch的一种包的命名方式而已,后来发现原来kdemod是经过arch修改过的kde。就是传说种的chakra项目,而且现在这个项目也做了个livecd,而且好像可以在u盘上保存会话。

正在犹豫要不要马上升级,我对面帮我作了决定,电源断掉了,然后启动之后我也没看清一直选y。结果...arch不能启动了。然后没办法我就只能使用这个传说中的“貌似很美”的系统。

插曲:第一次启动,kde的networkmanager竟然用dhcp连上了网络,而且还居然升级了安装程序,理论上这个功能是无可厚非的。但是在我这个无奈的网络下...只能重启然后断网安装。

安装之后可能因为没有升级安装程序的缘故,swap竟然没有uuid然后停用swap分区(其实压根就没能正常启动...)然后用mkswap -L /dev/sda6重做了swap 选用了uuid。现在已经正常

因为chakra默认用的kde的knetworkmanager来管理网络,但是我kde下的网络管理几乎就是个摆设,所以在rc.conf下禁用knetworkmanager然后启用network脚本(在rc.d/也能看见knetworkmanager)

费时最多的就是ibus+kimpanel,先是kdemod下没有,然后在aur里安装的。但是安装之后一直没有提示。导致安装之后也不能用。网络上的资料超少。最后总结一下

先配置ibus能用,然后在kde启动程序那里加入ibus-daemon --panel=/path/to/panel.py 我中间还有个问题就是我一开始把那个kimpanel的东西配置了C+Space的快捷键然后怎么也呼不出来。把那个快捷键删除就可以了。感觉这个其实并不是很好看,因为字体较小还有自动上词,而且ibus disable的图标也显示不出来。应该是可以配置的吧,或许也因此并没有进入官方源。看了一下他的PKGBUILD好像是应该读取/usr/share/ibus/icon而且这个有时候正常,能显示ibus的图标有时候不能显示。

我的fps很低,应该是默认没有开启kms,参见:http://wiki.archlinux.org/index.php/Intel%E5%9B%BE%E5%BD%A2%E5%8D%A1

Posted in note | Leave a comment

在linux下显示农历

骨头的blog提供了一个在linux显示农历的方法,

liblunar 还自带 python 的绑定。

[code=python]>>> import locale, time, liblunar

>>> locale.setlocale(locale.LC_ALL, "")

'zh_CN.UTF-8'

>>> t = time.localtime()

>>> l = liblunar.Date()

>>> l.set_solar_date(t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour)

>>> format = "\n公历:%(YEAR)年%(MONTH)月%(DAY)日\n农历:%(NIAN)年%(YUE)月%(RI)日\n干支:%(Y60)年%(M60)月%(D60)日\n生肖:%(shengxiao)\n"

>>> print l.strftime(format)

公历:二○○九年九月二十九日

农历:己丑年八月十一日

干支:己丑年癸酉月丁丑日

生肖:牛

>>>[/CODE]

详细请看链接:http://li2z.cn/2009/09/29/liblunar/

Posted in RPYC | Tagged | Leave a comment

ubuntu or windows

似乎只有这种非常困得时期我才能明白的看看自己在想什么。

弄了好几天的windows 7了(其实也就两天,只是中间什么都没干),似乎一直以来都是这样浑浑噩噩过的。

算算我到底想要什么吧。

  • 第一, 我觉得我学了这么长的时间linux了,但是如果让我用windows,无论面子上还是浪费上来说都觉得有点亏。
  • 第二, Ubuntu上的源却让我难过(或许已经算是不慢了),好吧就认为他不慢吧。
  • 第三, 总觉得再windows上做开发有点力不从心,做什么都不怎么顺手,要装mysql,还有一系列其他软件,比如epydoc之类的,不如在linux用pms顺手,到底顺手到哪?第一,不用选择安装路径。第二,不用管配置路径。第三所有东西都可以用一个terminal来管理。其实如此想来似乎我只是更喜欢CLI软件,当然这么说就想通了,为什么我不怎么喜欢linux下的qq,fetion,因为他们算是一些gui软件。
  • 第四, 由以上可知一些windows下的现象。
  • 第五, 突然觉得ubuntu的源不是慢的缘故,只是不能快速应用,不知道这算好还是算浮躁。当然想来算是我太浮躁的缘故了,理论上就算我第一次装要亮天但是以后只要不是我太浮躁我就没机会再这么装了。
  • 第六, 似乎从以上来说我的主战场仍然可以归再linux上,但是还有很多问题,可移植性。这个问题的由来就是我不能一直用我自己的电脑,比如我需要上课之类的。由此我必须用个windows的。所以说来如果不是太多问题的话一个windows可能是必须得。
  • 第七, 但事实上我还是觉得用windows做开发会累死人。所以还是ubuntu无奈时在用windows,
  • 第八, 而归根结底我的问题却在于我太过纠结这个操作系统而忘了自己真正的目的
Posted in life | Tagged | Leave a comment

关于ipython的使用安装

关于ipython的使用安装

Windows安装需要一个pyreadline并需要设置Path系统变量。

在命令提示符下输入命令magic就会显示所有magic关键字列表以及它们的简短的用法说明。

%bg function
    把function放到后台执行,例如: %bg myfunc(x, y, z=1),之后可以用jobs将其结果取回。myvar = jobs.result(5) 或 myvar = jobs[5].result。另外,jobs.status() 可以查看现有任务的状态。
%ed 或 %edit
    编辑一个文件并执行,如果只编辑不执行,用 ed -x filename 即可。
%env
    显示环境变量
%hist 或 %history
    显示历史记录
%macro name n1-n2 n3-n4 ... n5 .. n6 ...
    创建一个名称为 name 的宏,执行 name 就是执行 n1-n2 n3-n4 ... n5 .. n6 ... 这些代码。
%pwd
    显示当前目录
%pycat filename
    用语法高亮显示一个 Python 文件(不用加.py后缀名)
%save filename n1-n2 n3-n4 ... n5 .. n6 ...
    将执行过多代码保存为文件
%time statement
    计算一段代码的执行时间
%timeit statement
自动选择重复和循环次数计算一段代码的执行时间,太方便了。

iPython中用!表示执行shell命令,用$将Python 的变量转化成 Shell 变量。

不过写法上还是有一些限制,$ 后面只能跟变量名,不能直接写复杂表达式,$"dir%s"%i 就是错误的写法了,所以要先完全产生 Python 的变量以后再用。

for i in !ls:

print i

这样的写法也是错的,可以这样:

a = !ls

for i in a:

print i

还有一点需要说明,就是执行普通的 Shell 命令中如果有 $ 的话需要用两个 $。比如原来的echo $PATH现在得写成!echo $$PATH。

不同于"普通"自动补全的显示当前命令所有匹配列表,菜单补全会随着每按一次Tab键而循环显示匹配列表中的项目。(默认是普通补全)菜单补全模式下查看所有匹配列表的快捷键是Ctrl-L。

因为dir()是一个内置函式,在 iPython中也能很好的使用它们。但是iPython的操作符?和??功能还要强大(自省)

?操作符会截断长的字符串。相反,??不会截断长字符串,如果有源代码的话还会以语法高亮形式显示它们。

历史:

要去掉历史记录中的序号(这里是1至7),使用命令"hist -n":

要在历史记录中搜索,可以先输入一个匹配模型,然后按Ctrl-P。找到一个匹配后,继续按Ctrl-P会向后搜索再上一个匹配,Ctrl-N则是向前搜索最近的匹配。

编辑:

在iPython下输入edit就会根据环境变量$ EDITOR调用相应的编辑器。如果$EDITOR为空,则会调用vi(Unix)或记事本(Windows)。要回到iPython提示符,直接退出编 辑器即可。如果是保存并退出编辑器,输入编辑器的代码会在当前名字空间下被自动执行。如果不想这样,使用edit -x。如果要再次编辑上次最后编辑的代码,使用edit -p。在上一个特性里,提到使用hist -n可以很容易的将代码拷贝到编辑器。一个更简单的方法是edit加Python列表的切片(slice)语法。假定hist输出如下:

In [29]: hist

1 : a = 1

2 : b = 2

3 : c = 3

4 : d = {}

5 : e = []

6 :

for i in range(20):

e.append(i)

d[i] = b

7 : %hist

现在要将第4,5,6句代码导出到编辑器,只要输入:

edit 4:7

Debugger接口。iPython 的另一特性是它与Python debugger的接口。在iPython Shell下输入magic关键字pdb就会在产生一个异常时开关自动debugging功能。在自动pdb呼叫启用的情况下,当Python遇到一个未 处理的异常时Python debugger就会自动启动。在debugger中的当前行就是异常发生的那一行。iPython的作者说有时候当他需要在某行代码处debug时,他 会在开始debug的地方放一个表达式1/0。启用pdb,在iPython中运行代码。当解释器处理到1/0那一行时,就会产生一个 ZeroDivisionError异常,然后他就在指定的代码处被带到一个debugging session中了。

运行。有时候在一个交互式Shell中时,如果可以运行某个源文件中的内容将会很有用。运行magic关键字 run带一个源文件名就可以在iPython解释器中运行一个文件了(例如run <源文件> <运行源文件所需参数>)。参数主要有以下这些:

  • -n 阻止运行源文件代码时__name__变量被设为"__main__"。这会防止if __name__ == "__main__":块中的代码被执行;
  • -i 源文件在就当前iPython的名字空间下运行而不是在一个新的名字空间中。如果你需要源代码可以使用在交互式session中定义的变量就会很有用。
  • -p 使用Python的profiler模块运行并分析源代码。使用该选项代码不会运行在当前名字空间。

。宏允许用户为一段代码定义一个名字,这样可在以后使用这个名字来运行这段代码。列表切片法也适用于宏定义。

1: l = []

2:

for i in l:

print i

可以这样来定义一个宏:

In [4]: macro print_l 2

Macro 'print_l' created. To execute, type its name (without quotes).

Macro contents:

for i in l:

print i

环境(Profiles)。就象早前提到的那样,iPython安装了多个配置文件用于不同的环境。配置文件的命名规则是ipythonrc-。要使用特定的配置启动iPython,需要这样:

ipython -p

一 个创建自己环境的方法是在$HOME/.ipython目录下创建一个iPython配置文件,名字就叫做ipythonrc-,这里是你想要的环境的名 字。如果同时进行好几个项目,而这些项目又用到互不相同的特殊的库,这时候每个项目都有自己的环境就很有用了。也可以为每个项目建立一个配置文件,然后在 每个配置文件中import该项目中经常用到的模块。

使用操作系统的Shell。使用默认的iPython配置文件,有几个 Unix Shell命令(当然,是在Unix系统上),cd,pwd和ls都能象在bash下一样工作。运行其它的shell命令需要在命令前加!或!!。使用 magic关键字%sc和%sx可以捕捉shell命令的输出。pysh环境可以被用来替换掉shell。使用-p pysh参数启动的iPython,可以接受并执行用户$PATH中的所有命令,同时还可以使用所有的Python模块,Python关键字和内置函式。 例如,想要创建500个目录,命名规则是从d_0_d到d_499_d,可以使用-p pysh启动iPython,然后就象这样:

[~/ttt]|1> for i in range(500):

|.>     mkdir d_${i}_d

|.>

这就会创建500个目录:

[~/ttt]|2> ls -d d* | wc -l

500

注 意这里混合了Python的range函式和Unix的mkdir命令。注意,虽然ipython -p pysh提供了一个强大的shell替代品,但它缺少正确的job控制。在运行某个很耗时的任务时按下Ctrl-z将会停止iPython session而不是那个子进程。

最后,退出iPython。输入Ctrl-D(会要求你确认),也可以输入Exit或Quit(注意大小写)退出而不需要确认。(这个功能可以用来代替bash吧。)

本文来源:http://wiki.woodpecker.org.cn/moin/ObpLovelyPython/PCS2

感谢社区

Posted in note | Tagged , | Leave a comment

a text covert

看Python教程的时候,不知道书怎么写的,每一行都自动加个回车看起来很难看。

Python语言: Codee#4798

def txtc2(source, target):
    alllines = 0
    fobj1 = open(source, 'r')
    fobj2 = open(target, 'w')
    for each_line in fobj1:
        if each_line == '\n':
            fobj2.write('\n\n')
        if each_line[
        fobj2.write(each_line.rstrip().lstrip())
        alllines +=1
    print 'corver %d lines' % alllines
Posted in MPYC | Tagged | Leave a comment

The Elements of Programming Style

原文来自:http://tom.preston-werner.com/2009/08/08/The-Elements-of-Programming-Style

本来只是收藏的,但作者的blog似乎被东篱把酒黄昏后墙了。在此做个记号,作者莫怪。

把代码写清楚,别耍小聪明。
想干什么,讲的简单点、直接点。
只要有可能,使用库函数。
避免使用太多的临时变量。
”效率“不是牺牲清晰性的理由。
让机器去干那些脏活。
重复的表达式应该换成函数调用。
加上括号、避免歧义。
不要使用含糊不清的变量名。
把不必要的分支去掉。
使用语言的好特性,不要使用那些糟糕的特性。
该用逻辑表达式的时候,不要使用过多的条件分支。
如果逻辑表达式不好理解,就试着做下变形。
选择让程序更简洁的数据表达形式。
先用伪代码写,再翻译成你使用的语言。
模块化。使用过程和函数。
只要你能保证程序的可读性,能不用 goto 就别用 。
不要给糟糕的代码打补丁 - 重写就是了。
把大的程序分成一小片一小片来写,分块测试。
使用递归程序来处理递归定义的数据结构。
正确和错误的输入数据都要测试。
确保输入不会超出程序的限制。
依靠文件结束来终止输入,而不是依赖一个记数。
把文件结束作为一个输入状态来处理。
识别出错误的输入;如果有可能就修复它。
让输入数据很容易构造出来,让输出数据不言自明。
使用统一的输入格式。
让输入容易校对。
如有可能,提供更自由的输入格式。
使用输入提示,允许使用默认值。并把它们显示出来。
把输入输出放到子程序里。
确保所有的变量在使用前都有初始化。
不要因为一个 bug 而停止不前。
打开编译程序的调试选项。
常量结构用数据声明初始化,变量结构用执行代码初始化。
小心 off-by-one 错误。
当循环中有多个跳出点时要小心。
如果什么都不做,那么也要优雅的表现出这个意思。
用边界值测试程序。
手工检查一些答案。
防御式编程 - 为不可能的情况写几句代码。
10.0 乘 0.1 很难保证永远是 1.0 。
7/8 等于 0 ,而 7.0/8.0 不等于 0 。
不要直接判断两个浮点数相等。
先做对,再弄快。
先使其可靠,再让其更快。
先把代码弄干净,再让它变快。
别为了获得一丁点“性能”就牺牲掉整洁。
让编译器做些简单的优化。
不要过分追求重用代码;下次用的时候重新组织一下即可。
确保特殊的情况是真的特殊。
保持简洁以获得速度。
不要死磕代码来加快速度 - 找个更好的算法。
用工具分析你的程序。在做“性能”改进前先评测一下。
确保注释和代码一致。
不要在注释里仅仅重复代码 - 让每处注释都有价值。
不要给糟糕的代码做注释 - 应该重写它。
给变量都起个有意义的名字。
把程序重新整理一下,让阅读代码的人更容易理解。
为你的数据布局写一个文档。
不要过分注释。

doubanclaimae46320757133755

Posted in code | Tagged | Leave a comment

我的三流大学的垃圾感想-学习篇

本文可能含有过激内容,不喜欢请直接走开,在心里默默的骂就好了,别污了你的口。

学习:

大学里的学业是最无趣的,特别是我们这种三流学校,但是你又需要学到足够的东西来找到工作...

大学的课程相当无趣,枯燥到我们老师讲着讲着有时候都讲不下去了,1个班级里40人平时有一半来上课就相当不错了,一半来上课的还有一半再睡觉。很多人都认为:大学的课程没有任何意义,想学习到东西完全靠自学。我自以为聪明的总结了两点:大学的课程不是没有任何意义,只是有用的东西相对来说很少。大学里自学是必须的,前提是你知道怎么自学,知道学什么。

对于第一点我的建议是:用最少的时间学到最多的东西。其实不光大学,很多事都遵从伟大的2/8定理,你需要用百分之20的时间学到百分之八十的东西。很多时候,我帮朋友弄好计算机的时候他们最多的一句话是,"哦,这个老师好像讲过"。而且事实上很多人在招聘的时候你的那些学校里的分还是有一些作用的。所以千万不能挂科,挂一科你所有的成绩都是60分了....而且,就算你不喜欢这些学科,能否过了也是一种能力的考验,就像周思博在给计算机系学生的建议里说的“我为什么要关心你在大学里学的欧洲历史课程分数的高低呢?毕竟,历史很枯燥。那么要是你要编程的部分也是很枯燥的,你是不是要放弃了?事实上,有时候编程是枯燥的,如果你不能忍受编程中的枯燥部分的话,你就不能完成整个工作,雇主不愿意雇佣你这样的员工。”,事实上有些地方我也想不通,为什么很多人平时都大喊的无聊,在头考试却急得呼天抢地,最后还没过...

对于第二点我的建议是:如果你真的不知道该学习什么就听听大多数人(比较正规的,不要问搞房地产的计算机学什么)意见,毕竟有一条“存在即合理”的定理。一般很多行业在经历了这么长时间的成长,都已经有了很多大家都认同的,容易的入门方式。然后立即去学,毕竟最后看的是你已经学到了多少,而不是掌握了多少入门的方法。

大学只是比较大的学校,而不是游乐场,虽然我把学习放到最前面的位置,只能说后面的事更重要,而不是说她不重要。

Posted in code | Tagged | Leave a comment

近日ubuntu频繁死机

近日十分无奈...看Python核心编程时候,按f9显示书页--死机!!

刚刚连更个新都死机。

2.8-13和2.8-14都死。台式机-32位....难道我的命就这么苦?用个Linux都这么多问题....

Posted in note | Leave a comment

a little tool to clear '.svn' directories from codes that extracted from SVN

作者:july <julyzergcn1@gmail.com


Python语言: Codee#2928
#clear .svn directorys, on Windows, witten by julyzergcn

import os
from os.path import isdir, isfile, join, dirname, realpath

def clear_svn(dir):
ds = [join(dir, i) for i in os.listdir(dir) if isdir(join(dir, i))]
fs = [join(dir, i) for i in os.listdir(dir) if isfile(join(dir, i))]
for d in ds:
print d
clear_svn(d)
if '\.svn' in d:
os.rmdir(d)
for f in fs:
print f
if '\.svn' in f:
print f
os.chmod(f, 33206)
os.remove(f)

if __name__ == '__main__':
rdir = dirname(realpath(__file__))
clear_svn(rdir)

Posted in note | Tagged | Leave a comment

十年学会程序设计

原文地址:http://blog.youxu.info/fyi/21-days/

翻译:徐宥

为何大家如此匆忙?

走进任何一家书店,你会看到书架上一排不见尽头的放着如 <7天自学Java语言> 以及几天或者几小时学会Windows, 因特网或者Visual Basic 这类书。我在Amazon 网上书店用一下的方式进行高级搜索:

出版年份: 1992以后 书名包括:“天” 和 “学习” 或 “自学”

得到了268条搜索结果,其中前78条都是计算机书(第79条是 30天学会孟加拉语)。 我用 “小时” 代替“天” 作为关键字,得到了神奇般类似的结果:这次有253本书,前77本是计算机书, 第78本是 24小时自学语法和写作风格。排名前200的书中有96%是计算机书。

由此可见,人们要不就是急着想学会计算机,要不就是计算机相比于其他事情太容易学会了。比如说把,没有书是写在几天弹奏贝多芬或几天学会量子物理,甚至也没有几天学会帮小狗打扮这样的书。

让我们分析一下 三天学会Pascal语言 [英文网页] 这样的标题表达了什么意思:

  • 学会:

在 三天内,你没有时间去写几个有意义的程序,或者从成功和失败中学到东西。你也没时间跟有经验的程序员一起工作,所以也无法了解在真正编程是什么样子。简短 的说,就学会而言,时间显然不够。所以这些书只是浮于表面的熟悉,而不是深刻的理解。如同Alexander Pope 所说,一知半解是危险的。

  • Pascal 语言:

三 天内你可能学会Pasacl语言的语法(如果你已经掌握一个类似的编程语言),但你无法学会如何合理运用这些语法。简言之,如果你是个Basic 程序员,你可以用Pascal 语言写出类似Basic 风格的程序,但你学不到Pascal语言的优点(还有缺点)到底在哪。重点是什么呢? Alan Perlis 曾说: “如果编程语言不能影响你的编程思维,那就不值得去学.” 另一个可能是,你必须学会一点点Pascal语言(或是像VB语言、Javascript等),因为你需要跟现成的工具组合完成特定的工作。不过这个时 候,你实际上学的不是怎么写程序,而是要学着如何完成工作。

  • 三天

不幸的是三天根本不够;下面的章节会告诉你为什么

十年学会程序设计

研究者 Hayes, Bloom 的研究表明,在几乎所有的各种领域,大约要十年才能培养出专业技能。这些领域包括下西洋棋、音乐作曲、绘画、钢琴、游泳、网球,及神经心理学和数学拓扑学。似乎没有真正的捷径--即便是莫扎特在四岁就展露出音乐天才,在他写出世界级的音乐之前仍然用了超过十三年的时间。

再看另一种类型的领域。披头士乐团似乎是在1964年的Ed Sullivan 剧场表演突然地火起来并成为第一乐队的。但其实他们从 1957 年开始,就在利物浦、汉堡等地的小型俱乐部表演。虽然他们很早就显现强大的吸引力,但他们决定性的成功作品 Sgt Pepper 也到1967年才发行。Samuel Johnson 则认为或许还不止十年才行,他说:任何领域的卓越成就都必须用一生的努力才能取得; 稍微低一点的代价都是换不到的。Chaucer 则感叹道: “生命如此短促,学习技艺却要这么地长”

以下是我在编程上成功的秘诀:

  • 对编程产生感兴趣并因为乐趣而写程序。确信你自始至终都能乐在其中,这样你才愿意将十年光阴投入编程事业.
  • 与其他程序员交流;阅读别人的代码。这比任何书任何培训都重要。
  • 不断地编写。 最好的学习方法是在实践中学习 。从技术角度说,”在特定领域的个人最高效率并不因为经验够多就会自动获得;但若有意识的通过努力去提升经验,个人效率会变高”(第336页)而 “高效的学习一般需要明确的任务和因人而异的适当难度,以及及时的反馈和重复或者修正错误的机会”(20~21页)Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life实践中认知:心智、数学与日常文化) 是这个观点的一本有趣参考书籍。
  • 如 果你愿意,你可以去读四年大学(或再读研究生)。这可以让你满足一些工作的学历要求,同时也可让你对这个领域有更深的认识。但如你不喜欢上学,你也能(得 有牺牲)通过工作获得类似的经验。无论如何,只读书是不够的。《New Hacker’s Dictionary》的作者Eric Raymond 曾经说过: “计算机的教育无法让人成为编程的专家,正如研究画笔与颜料不能让人成为专业画家一样.” 一个在我所有招聘过的人中属于最优秀之一的程序员只有高中毕业,但他写出很多很棒程序,他甚至有自己的新闻组。他获得的股票期权使得他可以拥有自己的午夜酒吧.
  • 跟其他程序员一起完成项目。在一些项目中成为最好的程序员;在一些中则充当最差的一个。当你是最佳的,你要测试自己领佳节又重阳导项目的能力,并以你的能力鼓励他人。当你是最差的,要看看高手做些什么,他们不喜欢做什么 (因为他们会叫你去帮他们做).
  • 接手别的程序员完成项目。全心投入并理解别人的程序。当原作者不在的时候,看看在理解与修改时有什么要注意的。想想如何设计你的程序使得后来维护的人容易上手。
  • 至 少学会六门编程语言。一种要支持类/对象(class abstractions)的语言, 如Java或C++; 一种函数式(functional abstraction)语言, 如 LISP 或 ML; 一种支持语法抽象(syntactic abstraction) 的语言 如 LISP; 一种声明式语言, 如Prolog或 C++模版; 一种支持协同式(coroutines)编程, 如 Icon 或 Scheme; 还有一种支持并行(parallelism)的语言, 如 Sisal.
  • 记住在 “计算机科学” 中包括”计算机” 这个词。要知道你的计算机执行一条指令需要多久,到内存中取一个字需要多久(缓存是否击中), 到磁盘读取连续的字需要多久,而磁盘的定位又需要多久. (解答见文末)
  • 进行语言标准化的工作。可以像是由ANSI C++ 委员会,或由你自己的团队,来决定你们的编码风格,譬如说缩排是2或4个空格。不管怎样,你都能学到别人到底喜欢什么,对语言的感受有多深,甚至能了解到一点他们为什么有这样的感觉。
  • 并具备良好的判断力,也别老纠缠在语言标准化上.

谈 了上面所有的想法后,我不禁要问究竟能从书上学到多少。在第一个孩子出生前,我读完了所有的 “怎样…” 的书,仍觉得自己是个一无所知的(照顾孩子的)菜鸟。30个月后,第二个孩子出世,我要重回这些书好好复习么? 不! 取而代之的是,我开始相信自己的个人经验。这些难得的经验,比专家写的几千页手册还要有用,而且让我重新找到了自信.

Fred Brooks (译注: <人月神话>作者) 在他的文章 没有银弹 中指出,发掘卓越软体设计者的三部曲:

1.尽早尽可能地以系统化的方式发掘最佳设计人员。
2.给有潜力者指派生涯规划师,并谨慎地规划他们的职业生涯。
3.提供机会给正在成长的程序员,让他们能相互影响,彼此激励。

这里假定了某些人已具备成为卓越设计师的必要潜能;工作只是诱导他们前进。Alan Perlis 说得更简洁了,你可以教任何人学雕塑,但对米开朗基罗而言,要教他的
反倒是有哪些事不要做, 卓越的程序员也一样。

所以,尽管买那些 Java 书吧!你或许能从中找到点有用的,但是在24小时,几天或者几个月中,这些都不会改变你的人生,你也不能掌握一个真正的程序员应该具备的真正的综合的技能。


参考文献:

Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.

Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.

Hayes, John R., Complete Problem Solver Lawrence Erlbaum, 1989.

Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.

________________________________

解答:

各种操作的时间,以2001年夏季,典型配置的 1GHz 个人计算机为标准:

执行单一指令 1 纳秒
从L1 高速缓存取一个字 2 纳秒
从内存取一个字 10 纳秒
从磁盘取连续存放的一个字 200 纳秒
磁盘寻址并取字 8 毫秒

________________________________

附录 I: 语言的选择

好几个人问过我一开始应该先学哪个计算机编程语言,这个问题没有唯一的答案,不过选择的时候可以从以下的几个方面考虑:

  • 朋友在用的. 当 人们问我:”我该用什么操作系统的时候”, 我通常的回答是:“用你朋友用的”. 这样的好处是从朋友那儿学习可以弥补复杂的操作系统差异或者编程语言差异(给你造成的困惑)。这里也要考虑你未来的朋友:如果你一直使用的话,开发社区会 是你的朋友。你选择了一个具有有巨大的增长的开发社区还是一个小的快消失的开发社区的语言? 它有相关的书,网站和论坛可以获取解答么? 你喜欢那些论坛上的人么?
  • 保持简单. 诸如C++和Java 是为那些关心代码执行效率的有经验的大型团队的开发人员设计的。因此这些语言中有些为这些特殊场合设计的部件。你只是关心编程而不需要关心复杂情况。你需要一个为新学编程的人设计的容易学习和理解的语言。
  • 实践. 什么是学习钢琴的好方法呢? 是一边听音一边弹奏的“交互式” 的方法呢,还是全听完整首歌然后再弹奏的那种“批处理”方式呢? 很显然, 交互学习的方式能够让学钢琴变得简单–这也适用于编程. 选取一种交互式的编程语言并且坚持使用.

基于以上的这些标准,我对于第一次接触编程的人推荐 Python 或 Scheme. 但是情况各有不同,或许也有其他的选择. 如果你不满10岁,你可能会喜欢Alice 或者Squeak(年龄大的人或许也喜欢这些). 重要的是在选择后, 立即开始学习和使用.

附录II: 书和其他资源:

很多人问我该从什么书或者什么网页开始看起。我重申一句:“仅仅看书是不够的”,不过我也推荐一下的一些:

  • Oz: 计算机编程的概念,技术和模型(Van Roy & Haridi) 可以视为第一本书的现代版. 他是关于编程的一些总揽,包含了比第一本书更加广泛也更加容易阅读和理解的领域。这本书使用了一个不太为人所知的编程语言叫 Oz, 不过这个可以作为学习其他编程语言的一个基础。

________________________________

注: T. Capey 指出,在Amazon 的 问题彻底解决者 的页面上购买了这本书的人还买了: “21天学孟加拉语” 和 “自学语法和写作风格” 这两本书,我估计大部分是我这个页面带过去的用户.

Peter Norvig (Copyright 2001)

Eric You XU 翻译,2007年4月


译者附记:

这是一篇经典的揭示计算机学习和计算机编程领域浮躁苗头的文章。原有的中文翻译链接已经失效,因此特此重新翻译一次。在翻译的过程中,我参考了台湾网友的部分遣词造句以及个别我不能理解的句子的含义,特此向他表示感谢.

如果有什么地方因为个人水平疏漏翻译不到或者打字错误的地方,恳请网友不吝指出。 我的邮件地址是 youxu A@T wustl.edu, 把 A@T 换成 @, 我叫Eric You XU, 你可以直接叫我Eric.

Posted in note | Tagged | Leave a comment