本文作者:qiaoqingyi

编程匠艺(python编程入门自学)

qiaoqingyi 04-09 143

  【黑客联盟2016年09月01日讯】台湾行政院对外宣布 35 岁的唐凤将在 10 月 1 日起担任「数字政务委员」,负责通过网络与公众互动以帮助解决实际公众问题。唐凤本人也在 Facebook 个人主页发言,表示自己是「公仆的公仆」,要「强化政府与公民科技、公共社群的对话与合作」,此番动作更是吸引台湾大陆以及海外媒体的广泛关注。

  

  其本人 Twitter 头像

  破纪录的 35 岁低龄直接拉低台湾政委平均年龄,他是台湾历史上第一个变性政委。不仅如此,他甚至初中学历都没有,14 岁念国中时放弃正统教育回家自学,自称写过 Perl 6 解释器,被媒体称为「黑客怪才」。

  唐凤到底有多牛还要从他小时候说起。唐凤原名唐宗汉,父母在台湾《中国时报》担任编辑及记者,耳濡目染之下 5 岁起开始阅读各国经典书籍,要知道普通小孩 5 岁时只会写自己名字,6 岁时才开始上幼儿园学认字和数手指头。

  但唐宗汉毕竟是天才少年,媒体在 2004 年称其智商超过 180。8 岁那年,唐宗汉意外看到一本《Apple Basic》,之后便入了迷,甚至自己画电脑屏幕,手绘键盘,按一个键就在屏幕上画一个单词,按下 Delete 就自己用橡皮擦掉。

  母亲看到后大为动容,给他买了台电脑。还在上小学二年级,年仅 8 岁的唐宗汉在计算机上尤有天赋,台湾版《商业周刊》报道,有一次唐宗汉的母亲李雅卿给他买了一套教授小学数学的软件,没想到唐宗汉第二天就开发出一样功能的软件。

  唐宗汉天资聪颖,学习表现明显超越同龄学生,小学二年级时已被允许课堂时间去图书馆自学,但与同学关系恶劣,甚至因为其他同学的妒忌和冲突而患上厌学症,不得已回家自学,期间曾在德国学习一年之后回到台湾读初中,三年后,唐宗汉觉得现行教育体制不适合自己,14 岁时退学。

  没多久,唐宗汉便转身为创业者。台大商研所的贺元和政大企研所的薛晓岚与唐宗汉三人集资一千万新台币,共同成立资讯人文化事业公司,初期以出版电子书籍为主,次年也就是 1996 年,开发出新闻资讯检索软件,销售一万多套。

编程匠艺(python编程入门自学)

  但在资讯人公司没呆多久,擅长 Perl 编程的唐宗汉转任明基电通等公司的顾问,同时利用时间阅读哲学等书籍,并为 Perl 社区开发第三方应用包,其中包括 2002 年起开发维护的知名包 PAR,可以将 Perl 打包为 exe 可执行文件。在 2000 年,他还受邀参加 Perl 官方 CPAN 论坛。

  作为一种古老的编程语言,Perl 在网络编程领域越来越显得力不从心。而唐宗汉由于没有经历过正统教育,没有系统学习过计算机知识,没有现代化软件工程的历练,在科技领域的活跃度逐步降低。在他的 Github上可以看到,其代码仓多数都 fork 自其他人代码,原创代码只有几个 HTML 网站以及数个基于 nodejs 的网站。

  不走寻常路的唐宗汉在 24 岁的时候,也就是 2005 年,把性别改成了女性,护照等文件名也改成了「唐凤」。创见记者向她本人核实是否真的有过变性,唐凤回复「这是私人事务,身体有调整,但具体调整范围没有公共属性,无法详答。」

  2008 年,27 岁的唐凤继续投身于编程事业,在他的 Linkedin主页上可以看到,当时在 Socialtext 公司负责「Untitled Page」页面的制作,据页面描述,其用到的技术包括基于 Mobile jQuery 和 HTML5 技术制作移动页面,基于 PhoneGap 制作公司在 iOS 和 Android 平台的 App。

  再后来与技术相关的工作是在苹果公司任职咨询顾问,职责是帮助苹果云服务产品的本地化。据称其为苹果每工作一小时,就可以得到 1 枚比特币的报酬。

  

  Yahoo! Open Hack Day

  转机发生在 2012 年,在当年的「Yahoo! Open Hack Day」上,毕业于台大资工系的数名校友,因为不满当局宣传经济升级方案的推广效果,在大赛上花了三天时间,对政府经济预算数据做了可视化的表达,获得「佳作奖」,之后他们成立 g0v 组织,亦称「零时政府」,关注公众议题,每隔一两个月都会举办「黑客马拉松」,运用技术手段把政府的公开数据可视化呈献给公众。

  出生于传媒家庭的唐凤对此兴趣浓厚,积极参与,并承担了相当大部分内容传播和协调性工作。2014 年,在政务委员蔡玉玲的提一下,g0v 组织开发上线 vTaiwan 开放政府平台,整个流程主要由唐凤主导。

  借助「零时政府」的契机,唐凤开始步入政界,成为公众人物。担任过教育委员会顾问,也曾协助推动台湾「亚洲硅谷计划」的开展。

  

  唐凤在演讲

  2016 年初,唐凤在自己的 Linkedin 职业中新增了一项职位叫「International Speaker」,大概就是国际演讲家的意思。其游历的国家地区包括新西兰、法国、西班牙、蒙古国等。同时在网络上开设个人主页,回答所有力所能及公众所关心的热点问题。

  

  新闻发布会

  今年 8 月 25 日,唐凤成功从政治边缘角色晋级政委,成为最年轻的行政委员,没有任何学历背书,Perl 自由程序员华丽转身政治家,被认为是个「奇迹」。

  8 岁开始学编程,16 岁时联合创办公司并使用 Perl 成功开发商业软件「搜寻快手」声名鹊起,之后在技术领域建树寥寥,只是长期活跃于 Perl 社区。直到 2012 年积极参与「零时政府」组织的黑客马拉松编程比赛,顶着「电脑天才」,「国际黑客」,「网络神童」的光荣称号,周游演讲,再而成功步入台湾高层政坛,真牛。

  身高 180,智商也达到 180,并且是「经多次检验测定」的,智商与身高刚好齐平,或许这才是唐凤最牛的地方。

  唐宗汉 - 个人简历

  姓名:唐宗汉

  曾用名:唐宗汉

  现用名:唐凤(变为女性后改名为此)

  性别:男(现已做过变性手术,变为“女”)

  出生年月:1981

  籍贯:台湾。

  唐的外表:长发,面白,十指修长。

  唐的行为:说话有力,吐字清晰,语速很快,随时携带自己的笔记本电脑,包括上厕所,目的是纪录下自己的随时会有的想法。

  唐的称号:据称目前是台湾十大电脑高手

  唐的工作态度:

  每天一直努力干活直到累倒为止(唐意指:累倒,是说感觉到十分的疲劳,沾床就睡的感觉)。

  唐的教育经历:

  14 岁辍学,一直凭兴趣自学计算机知识(自称拥有自 8086 以来每个类型的计算机,现在在用一台华硕讯驰1。8G,计划很快去买台 Mini-mac),是个绝对自学成材的自由软件者。曾去大学蹭课听,主听中文系与哲学系的课程。自我感受听中文系的老教授所讲的知识很有受益。

  英语的学习:

  曾一段时间迷恋万智牌,为了打好牌而常上 irc 与老外交流,切磋牌技,经过一段时间,在 irc 里熟练了英语。而且还曾打到台湾万智牌的积分排名第一。

  生活习惯:

  平时当遇到某些困难问题的时候就需要大量的咖啡因(咖啡,后来换成可乐,之后想要换成茶)。

  现工作状态:

  从 2005-02-01 开始领导一个开发团队夜以继日的编写 Pugs。这个团队大约有十五六人,其中有三分之一来自于台北 perl 推广组。

  唐宗汉 - 生活故事

  上小学时自编软件

  唐宗汉的父母是台湾新闻界的名人。父亲唐光华是《中国时报》前副总编辑,母亲李雅卿曾任《中国时报》采访部的副主任。唐宗汉四五岁时,下五子棋就能让硕士叔叔、阿姨们俯首称臣。

  小学二年级时,他把一本厚厚的《APPLE BASIC 入门》一页页地翻完。有人问他:“看得懂吗?”他惊讶地反问:“非常懂,为什么不懂?”看完书后,他央求妈妈买一台电脑。李雅卿当时认为电脑只是用来玩电子游戏的,没有把儿子的要求放在心上。没想到唐宗汉却在纸上反复画电脑,在纸的下方画键盘,上面画屏幕。每天一起床,他便敲敲纸上的“Enter”,写上反应字后,再敲敲纸上的“Delete”,然后用橡皮擦去字迹。他就这样玩着“纸上电脑”。最后李雅卿心软了,给他买了一台电脑。从此,唐宗汉无师自通地开始了电脑之旅。

  有一次,李雅卿带儿子去买电脑软件,售货员好心地“演示”电脑里教授小学数学的最新软件,唐宗汉一旁静静地看了一会儿后问妈妈:“你要买这套软件吗?”语气中流露出不情愿。第二天,唐宗汉写了一个与昨天所见的具有相同功能的软件。

  6 年换 6 所学校唐宗汉强烈的求知欲,使原来照顾他的爷爷奶奶感到力不从心。经过一番痛苦的权衡,李雅卿毅然决定辞职回家,专心照顾宗汉。

  入学之前,唐宗汉在父母的保护下,基本上过着正常孩子的生活。进入小学后,麻烦接踵而至。由于先天聪颖,他无论在学习上还是在思想上,均明显超过同龄的孩子。他在课堂上总有提不完的问题。于是有一天,校长告诉李雅卿:“我们学校实在没有能力教他。”他建议将唐宗汉转到另一所学校的尖子班就读。

  在竞争激烈的尖子班,唐宗汉的成绩仍然名列前茅,但这却使他成为同学们排挤的对象。有一次,一名同学一边打他一边喊:“世界上如果没有你,我就是最好的啦……”唐宗汉的日子越来越难过,渐渐对生活失去了信心和勇气,曾一度想自杀。担惊受怕的母亲只好每晚亲自搂着他睡觉,好让宗汉获得安全感。

  在小学三四年级时,唐宗汉曾几度休学,光小学 6 年他就换了 6 所学校。

  终于放弃正规教育

  上完初三课程,唐宗汉放弃了继续升学的机会。他一边继续在电脑世界中纵横驰骋,一边阅读罗素、尼采、柏拉图和莎士比亚的书,并钻研易经。

  唐宗汉自从小学二年级无师自通地写出第一个数学软件以后,写程序和玩电脑成了他生活中的重要内容。他常常是开上几个视窗,写一写程序,玩一玩电脑游戏,通一通电子邮件。有时甚至三天三夜不休不眠,乐在其中。这时他还没有意识到自己的电脑知识和技能就是财富。

  稚气未脱地步入商界

  终于有一天,在台湾大学商研所就读的贺元找到唐宗汉,与他联手出了一本名为《我的电脑探索》的书,使唐宗汉迈出了创业的第一步。在贺元的召集下,唐宗汉和另两人联手集资 1000 万元新台币,于 1995 年 1 月成立了信息人文化事业公司,初期以出版电脑书籍为主。

  1996 年 Internet 风靡世界,唐宗汉用大约一周的时间,开发了一套专门用来在 Internet 上寻找信息的应用软件,安装后只要键入几个简单的汉字或英文字母,便可找到所需的信息。同时他还迷上了模仿星际探索、垦殖的“魔龙帝国 SC2 ”。这是一套高难度的电子游戏。唐宗汉将网络的检索程序进行了改进,因此他拥有全世界所有的 SC2 秘笈,成了玩“魔龙帝国 SC2 ”的高手。在贺元的合作下,“搜寻快手”诞生了。这套简便的应用软件在首次推出后不到一个月的时间里,销售了 1 万余套,唐宗汉因此被誉为台湾十大电脑高手之一。

  没有受过正规教育的唐宗汉取得的惊人成就,引起了许多教育专家的注意。他们发现其平均智商高于 180 。这个早慧的男孩现在虽然身高已达 180 厘米,但仍然稚气未脱。有一天,他对母亲说:“我现在步入商界了,以后也许会变得脏一点!”

  唐宗汉 - 对于 perl 的经历

  唐宗汉学习 perl 当时只是由于正值互联网的兴起,有公司要他过去开发 cgi,这才开始了 perl 的生涯。后来编写了大量的 perl 模块,有 100 多个,可以在 cpan 上找到。

  原来最初觉得写 perl 很孤独,但是经过长时间的与各种朋友的交流才发现,原来很多的软件都是用 perl 写,原来有很多的大公司都在使用 perl,例如:微软的员工在用 perl,微软赞助了 windows 下面的 perl 版本 activeperl 的开发;摩根士坦利整个公司都在使用 perl,他们在 2003 年赞助了 perl 基金会大约一半的费用;众多华尔街的金融机构都在使用 perl 来做金融数据的处理;生物工程科学也都在很大程度上使用 perl,据称现在的基因工程还十分得益于 perl 的快速开发。

  唐宗汉由于在 cpan 上的贡献,曾在 2003 年 2 次获得 perl 基金会的奖励,每次 2000 美金。

  与台北的 perl 爱好者成立了台北 perl 推广组,每个月组织一次聚会,大约有 30 多人,大家见见面,并找个新的 perl 课题让某个人上台给大家讲演一下。这个活动已经成为了例行活动。(在台湾写 perl 的人大家互相都很熟悉,从唐口中了解到了董仲恺,openwebmail 的开发者,一个上了 8 年的博士生,将自己的精力都放在了 openwebmail 的开发上,一个 perl 写的 web mail)。

  在 2001 年唐第 2 次参加开放源代码大会的时候,需要在会上做一个 5 分钟的演讲,那时唐刚接管 cpan 的相关管理工作,所以他把自己在 cpan 上最喜欢用的模块拿出来用中文创作了一段数来宝(cpan 数来宝,有点中文 rap 的味道),最后还有一段一用英文唱的总结歌曲,这引起了与会者的满堂喝彩。所以以后唐到西雅图,德国,英国,都会应要求表演一段。

  唐宗汉 - 最初开发 perl6 的原因与历史

  在 2000 年,由 larry wall 在每年一次的开放源代码大会(oscon2000)上提出了 perl6 的开发计划。

  那时 perl5.6 刚发布,但是当时的 perl 开发社群却感觉卡住了,很难再往前了。Perl 这门语言已经有很多年的历史,由于一直保持向后兼容,而且 perl5 的代核心码已经很成熟,可以说是浑然一体,所以很大程度的阻碍了添加新的功能,因为每次添加新的功能都有可能打破旧的代码的运行。

  Perl5 是用c写的核心,它跑得很快,功能也很强,但是它的核心代码是那么的庞大,充满了各种很难以理解的宏调用。修改核心来添加新功能对任何一个人来说都是一件极为复杂和困难的工作。特别是在开发 perl5.6 的时候,添加了 unicode 与多线程的支持,但是在添加的过程中,开发者发现这种添加是件很痛苦的事情,因为每次添加新的功能都要抽取旧的功能来补。perl5 的开发者就把这种现象比作一种积木游戏:叠叠乐(一堆小木头叠成一座高塔,每层有三块,每个游戏者轮流把底下的一块抽出来放到上面去,这样这个塔的底部就越来越脆弱,而这个塔就越来越高,谁抽出最后一块让塔倒下的人就是输家),大家认为 perl5 的核心越来越像叠叠乐,已经越来越脆弱,无法再进一步的改进,perl5 已经到了其生命的极限。

  所以 larry wall 就提出了开发 perl6 的计划。

  当时的目的就是要从新设计一个 perl,线程、unicode、可靠信号控制在一开始设计的时候就要被加进去,新的内核要更小,速度更快,外部扩展 api 要更加清晰,在过去的二进制兼容问题也要被彻底解决掉。

  然而,在 larry 计划新的 perl6 开发的同时,像 python 等其他语言也遇到了同样的问题:它们最初设计的时候想要解决的问题现在都已经基本解决了,可当现在要添加新功能上去的时候会发现,由于最初的设计并没有想象到现在的这种需求,所以再添加新功能也是件很困难的事情。

  既然大家都遇到相同的问题,所以这时两个开放源代码社区就提议合作共同设计一个新的底层平台,使用这个底层从根本上来解决这些大家都遇到的问题,这个底层平台就是 perl6 的 parrot。

  在 2001-04-01 larry wall(perl 的设计者)与 Guido van Rossum(python 的设计者)一起宣布了 parrot 的开发计划。

  这个消息令整个的开放源代码社区都十分的兴奋,大家十分期待着新项目的成功。

  这样 perl6 项目的整个计划就从原来的独立的 perl6 设计,变成了一个多层次的设计项目。

  唐宗汉 - Perl6 整个项目的设想

  Perl6 的整个项目是建立在底层 parrot 之上的。

  过去用 perl5 写的程序或模块与其他语言例如 python、ruby 都不能共容,如果想要共容的话必须用一些很糟糕的方法,所以他们就先设计了一个底层平台叫做 parrot(鹦鹉,就像 .net 的运行期或 java 的虚拟机)。

  写 perl6 的代码,然后通过一个编译器将 perl6 的代码编译成字节码(byte code),这个字节码才可以直接在 parrot 上面运行,而 parrot 再负责把这些字节码具体的翻译成 intel 或 sparc 等平台上的机器码来执行。

  也就是说可以用任意的语言来编写程序,然后通过一个编译器来翻译成统一规则的字节码,在统一的一个虚拟 cpu 平台 parrot 上运行。这样就可以使用任意的语言来编写程序,最后大家都编译成统一规则的字节码,由于大家的字节码都遵循相同的规则,所以在字节码之间的相互调用就可以十分平滑的实现,这样不论用何种语言编写的程序,就可以很容易的互相使用(这种技术就是 JIT 技术,Just In Time)。用 perl 写的模块,就可以用 python 来调用,各种语言实现了共通。而且计划 perl5 写的程序也可以移植到 parrot 上面使用,这就意味着在 cpan 上的几千个 perl 模块就依然可以使用,而且其他语言也可以调用这些 perl 模块。而其他过去遇到的问题,如很难扩展,没有线程支持等,在 parrot 上面就解决掉了。在 perl6 架构下的整个程序的执行过程,如下图(执行自上而下):

  Source Code+------------+| The Parser |+------------+Syntax Tree+--------------+| The Compiler |+--------------+Byte Code+--------------------+| Bytecode Optimizer |+--------------------+Better Byte Code+---------+| Runtime |+---------+

  Source Code 源代码,可以是各种语言的源代码。 The Parser 是各种语言的解析器(例如 python 就有 python 的解析器,c就有c的解析器),负责将源代码转换成语法树。 Syntax Tree 语法树。 The Compiler 编译器,按照 calling conviention 规则,将各种语法树编译成字节码。 Byte Code 字节码,就像虚拟 cpu 上面的汇编语言,而这个虚拟 cpu 就是 parrot。 Bytecode Optimizer 字节码优化器。 Better Byte Code 优化后的字节码。 Runtime 在这里就是 parrot。

  因此最终成型的整个 perl6 项目实际上就是由两个部分组成:一个是底层的 parrot,一个是上层的 perl6 语言。而 Perl6 的语言又可以分为:语言的设计(perl6 的语法,规则,也就是 Source Code),语言的实现(通过一个解析器与编译器将 perl6 的语言转换成字节码)。

  Perl6 整个项目的想法与 .net 基本是同时想到的,整个概念其实与 java 和 .net 十分相似。

  唐宗汉 - Parrot 的特点

  Paroot 的设计就像一个软件 cpu,并且它的设计与硬件 cpu 的设计很相近,例如:它也有一个寄存器结构,它也支持底层的操作。它的设计还参考了硬件 cpu 的设计。

  Parrot 在设计上要满足各种动态语言的需求,而且特别注意可扩充性,像 unicode,多线程等都是直接内建支持。

  Parrot 的抽象层比 .net 与 java 更高,可以写更少的代码来运行更复杂的运算。象各种面向对象相关的调用都在 parrot 内部有相应的机械码。

  Parrot 的现在大小在 250K 至 700K 之间,它会有足够快的速度,并有足够的灵活性。

  Parrot 支持多种平台,包括手持设备,如 palm。

  唐宗汉 - Perl6 语言设计的特点

  Perl6 语言的设计思想:easy things should stay easy, hard things should get easier, and impossible things should get hard。

  例如:在 perl6 的语言设计上 larry 采用了霍夫曼编码的思想:常用的功能使用较短的单词来表示,不常用的功能用较长的单词来表示,这样就可以显著的提高输入程序的速度。比如说:过去 perl5 中的 print”…”,现在在 perl6 中就可以用 say”…”来直接代替,因为打印是程序中最常用的功能,所以就用较少的代码来表示,这样可以显著的帮助减少代码的输入。

  Perl 语言还有一个特性就是把当时最流行大家最推崇的其他语言好的功能集合起来,统一融合到自己的语言中来。在 perl 中这叫做多重典范。

  larry wall 喜欢把这种情况比作英文,英文就是吸收了很多其他语言而组合而成的语言。Larry 的想法就是 perl 最好象英文那样:每个当地人在学习英文的时候都会带一些当地的方言,带一些当地的讲话习惯,但是大家也都能听懂,兼收并蓄其他语言的长处,来形成自己的特点。

  总之,把所有各种最流行的元素都集合起来,就组成了 perl6 语言。

  Perl6 还有很强的灵活性(perl 的一句格言就是:条条大路通罗马):如果特别喜欢 oo,那么 perl6 感觉上就像 java 一样,就可以特别 oo。

  如果不喜欢强制类型声明,那 perl6 就可以不用声明。

  如果特别喜欢逻辑语言例如:prolog,那么 perl6 就可以按照逻辑语言的方式来编写程序。

  Perl6 吸收了很多其他语言的特点,因此可以用自己喜欢的编程方式在 perl6 中编程,但是通过 perl6 中的语境相关的能力,不同的编程方式写出的 perl6 程序仍然可以很好的搭配在一起。这样设计的意图就是让程序员针对不同的问题,用不同的解决方式,从而对所有遇到的各种问题达到最优的解决方法。

  Perl6 语言的两个特点就是:语境相关(context)与多重典范。

  Perl6 与 perl5 的比较:语言本身的感觉其实还是跟 perl5 语言是一样的,只是在运行时的过程与 perl5 截然不同。对于过去 perl5 语言的很多语法 perl6 也继续使用,对于 perl5 语法的不合理部分 perl6 做了改进。

  正在开发的 Perl6 及其相关软件:Parrot,perl6 的执行引擎。已经开发到了 0.1.2 版,现在实际可以运行 python、basic。

  在 Parrot 方面现在已经有了很多的半成品:比如 ponie 是一个能将 perl5 编译到 parrot 上面来的软件。

  有人正在将 Php、Ruby 移植到 parrot 上面来。有人声称要将 gcc(gnu 的开源c/c++编译器)移植到 parrot 上面,这样以后所有的可以用 gcc 编译的程序可以直接编译到 parrot 上面的字节码来运行。

  甚至还有人决定要移植 .net 到 parrot 上来。

  这当然是一个疯狂的决定,然而成事是都要靠疯子,疯子与天才是靠最后的成败来决定的,他未必会成功,但是如果成功是很了不起的(唐的原话)。

  Pugs,不管其他 perl6 的开发,只是先对 perl6 做一个真实的实现,以此检验 perl6 语言的特性,帮助 perl6 语言的进一步设计,最后计划转变为 perl6 的编译器到 parrot。

阅读
分享