个人编程语言经历

Alan Perlis 说过:“一种不改变你编程的思惟方式的语言,不值得去学。”,尽管写了这么多年程序,用了这么多的语言,但我自认还没悟道编程语言怎样改变个人思惟方式。javascript

几天前。我需要用python来为ledisdb写一个client,我忽然发现,对于c++,go这样的语言,我假设需要实现一个功能。首先想到的是问题是代码应该怎么写。但是当我使用python的时候,我首先考虑的问题是在哪里去找一个库用来解决个人问题。可能这就是使用不一样语言带给个人不一样思考方式吧。css

个人编程语言经历没有那么复杂。没用过很是多,但是事实上也够我受的了。尤为是在不一样语言语法糖之间切换的时候。有种让人崩溃的感受。html

没准我应该升级一下个人大脑cpu,使其可以更高速的进行中断处理。html5

c

我是从大学才開始学习编程的,相比方今的小朋友来讲,可以叫作输在了起跑线上面。java

谁叫曾经生活在山区。没机会接触电脑这玩意。node

个人第一门编程语言是c,不一样于很是多童鞋使用的谭浩强神书,我用的是周纯杰的<<c语言程序设计>>。不知道每一年有多少同窗受到过它的摧残,固然还有那哥们蹩脚的普通话。python

在大学里面。很是多同窗的c的毕业设计都是我帮其完毕,但我始终认为本身仍然是个半吊子,除了c的基础略微强一点以外。很是多方面譬如操做系统,算法等全然不会。mysql

(现在随着工做年限的添加让我愈加懊悔,当初怎么就不略微学点这些知识,尤为是编译原理。)android

我差点儿没怎么用c开发过项目,仅仅在tencent可怜的维护过别人的c项目。但至少能看懂c代码,这就够了。nginx

因为大多数时候,我用的是c++,而不是c来解决个人问题。

c++

c++是我工做使用的第一门语言,也是我使用时间最长的一门语言,都七年之痒了。只是仍是有点不离不弃的。

曾经上学的时候有一句口头禅,叫学好c++,走遍天下都不怕。但是有几我的能把它学好的?因此千万别说本身精通c++,那会被人歧视的。

我使用c++可以分为三个阶段:

类c阶段

这个阶段主要是我第一份工做的时候。那时候才毕业,c的烙印很是深,面向对象除了有个概念,真正是啥全然不知道。

因此最喜欢的方式仍是写着一堆函数来解决这个问题,当初VIA身边那帮c++的牛人竟然能忍受我这样的代码,真佩服他们。

面向对象阶段

后来去了第二家公司linekong,開始作游戏。才開始真正意义上的用c++写代码了。

记得最開始去第一家公司面试的时候。被问了啥是面向对象,当时不假思索的答了继承,多态和封装。

啥叫封装?整一个class,把该包的都包了。一个同事曾告诉我。他见过有几万行代码的class,看来我这个几千行的过小儿科了。

啥叫继承?先来一个父类,干脆叫bird,有一个fly方法,再来一个子类,叫duck吧,继承了bird,只是duck会fly吗?一个父类不够,再来一个。搞个多重继承。什么?出现了菱形继承,那干脆在来一个virtual继承得了。

啥叫多态?不就是virtual function,而后父类指针能在执行时依据实际状况调用对应的子类实现。那c++的多态是怎么实现的?看看<<深度探索c++对象模型>>不便可了。

这段时间,可以算是我写c++代码最多的时候。都快写到吐了。尤为还要忍受那龟速的编译。

咱们竟然都实现了直接经过汇编改c++的虚表,使其调用本身的函数这样的变态的东西。在那时候我就得出结论,假设不想早死,尽可能别用这个东西写代码。但是到现在我都在不停的慢性自杀。

现代C++阶段

不知道从何时開始,我忽然认为我应该来点modern c++的编写方式了,c++0x都出了,还不玩一下就晚了。固然新特性那么多,不可能全部都拿来用的,Bjarne Stroustrup貌似都说过,c++0x应该算是还有一门语言了。

因而哥就走上了伪modern c++之路,class仍是需要的,否则数据怎么封装。继承吗,比重减轻吧。最好採用面向接口的编程方式。而多态,能不用就不用吧,反而认为bing + function的方式实现的delegate模型反而更方便,没准也更酷哟。

shared_ptr,weak_ptr是需要用的了,c++没有gc,因此一套好的内存管理方式是不可缺乏的,每次new以后还要记得delete也比較烦,最严重的是可能忘记那就内存泄露了。

因而,我就自认为我进化了,最典型的样例就是我写的高性能网络库libtnet,感受很是modern了。

lua

最開始知道lua。是云风那本编程感悟的书,当时但是菊花一紧。认为这东西是啥。为何能跟c结合到一块儿使用?

后来本身开发游戏了。才发现lua真的是一门很是强大的语言,短小精悍。嵌入简单,性能超强。全然是做为游戏脚本语言开发的不二人选。

只是我最開始使用lua的经历不怎么happy。最開始就是接手了一个c++与lua的粘合层库,关于这个库的传说,见这里Lua 不是 C++。后来,在踩了无数个坑,填了无数个坑以后,我最终弄得相对稳定了。

貌似现在我曾经的同事还在使用,只是正如我在lua c函数注冊器中说明的那样。对于语言的交互,简单一点才好。现在曾经作的游戏已经开源,见这里。那个传说中的蛋疼粘合层也见了世面。固然,我可不会告诉大家好多搓代码是我写的。

后来,在现在的公司。因为项目的需要,咱们急需解决python的很是多性能大坑问题,因而我開始推广使用openresty,一个用lua包裹的nginx,用了以后。腰不痛了,腿不痛了。性能妥妥的。

因为lua,我第一次尝到了在代码里面直接写配置的便捷,用一个table搞定,相比起来,c++处理ini。json这些的弱爆了。另外,动态语言的热更新机制使其代码升级异常方便,只是你得很是当心lua的闭包,没准你又一次载入了代码执行仍是老样子。

lua是一个动态语言,因此不用咱们管内存释放问题。但是仍然可能会有引用泄露。在开发游戏的时候,为了解决咱们程序lua内存泄露的问题。我曾经干过直接从_G递归遍历,扫描整个lua数据的事情。相比在c++使用valgrind这些程序的工具。lua配套的东西仍是过小儿科了。

lua的调试也是一个大头问题,我曾今写过几个lua的调试器,好比这个,甚至都支持了类似gdb那样ctrl+c以后动态的设置断点。但是仍然没认为比gdb方便。因此多数时候。我都是写log为主。

python

尽管小时候吃过很是多蛇,但是蟒蛇但是历来没吃过的,现在看来python味道还不错。

我是来了kingsoft以后才開始正式使用python的。

对于为啥使用python。我曾跟拉我进来的技术老大讨论过,他直接就说,开发高速,上手easy。

python开发的高速很是大程度是创建在丰富的第三方库上面的,咱们也使用了很是多库,譬如tornado,gevent,django等,但是正如我最開始说的,因为咱们有太多的选择。面对一个问题的时候。每每考虑的是怎样选择一个库,而不是本身怎样实现,这事实上在某种程度上面使得很是多童鞋知其然而不知其因此然。这点,lua多是还有一个极端,lua的定位在于嵌入式和高性能,因此天然地,你得本身动手造轮子(固然,现在也有很是多好的第三方库了),尽管有时候写起来很是不方便,但是至少本身很是清楚程序怎么跑的。

固然。我绝对没有贬低python的意思。我很是喜欢这门语言,用它来开发了很是多东西。同一时候也知道很是多公司使用python构建了很是多大型稳定的系统(咱们的产品应该也算吧)。

仅仅是现在我愈加认为,看起来简单的语言,假设没有扎实的基本功底,写出来的东西也很是烂。而python,偏偏给人放了一个很是大的烟雾弹,你觉得它有多easy,事实上它是在玩你。

go

好了,最终開始说go了,let's go!

。!

我使用go的历史不长,可能也就一年多,但是它现在全然成了我最爱的语言。go具备了python开发的迅速。同一时候也有着c执行的性能。

(固然。仍是有差距的!)

网上有太多的语言之争。包含go,有人恨,有人爱。

但萝卜白菜,各有所爱,对于我来讲,能帮我解决这个问题。让我用着舒服的语言就是好语言。

go很是适用于服务端程序开发。比起用c++开发,我陡然认为有一种很是幸福的感受,譬如对于网络编程,在c++里面,我需要本身写epoll的事件处理,而且这样的异步的机制全然切分了整个逻辑。使得代码不怎么好写。我在开发libtnet的时候感触尤为深入。但是在go里面。因为天生coroutine的支持,使得异步代码同步化了,很是利于代码的编写。

现在个人主要在项目中推进go的使用,咱们已经用go搭建了一个高性能的推送server,兴许还有几个系统会上线,而且开发的进度并不比使用python差,另外也很是稳定,这让我对go的将来充满了期待。

我也用go写了很是多的开源程序,也算是拿的出手了。譬如:

  • ledisdb:一个基于leveldb的提供类似redis高级数据结果的高性能NoSQL。真挺绕口的。简单点就是一个高性能NoSQL。
  • Mixer:一个mysql-proxy,现在支持通用的mysql命令代理,读写分离。以及本身主动主备切换。兴许将要參考vitess支持分区,为此一直在恶补编译原理的知识。

  • go-log:一个类似python log模块的东西,支持多种handler,以及不一样的log级别。

还有一些,可以參考个人github,譬如moonmq(一个高性能push模型的消息server),polaris(一个类似tornado的restful web框架)。因为go,我開始热衷于开源了,而且认识了很是多的好基友。这算得上一个很是大的收获吧。

其余

好了,说完了上面个人长时间使用语言(至少一年以上),我也用了很是多其余的语言。现在尽管使用时间比較短,但不排除兴许会长久使用。

Objective-C

因为我家最终有了苹果三件套。因此决定开发app了,首要的任务就是得学会使用Objective-C。我认可这真是一门奇葩的语言,假设没有xcode的本身主动补齐,我真不知道写起来是神马样的感受。

而且第一次见到了一门推荐写函数名,变量名就像写文章的语言。至少我写c++,go这些的一个函数名字不会写成一个句子。

我现在在自学iOS的开发。慢慢在整出点东西,毕竟答应给老婆的iphone作点啥的。兴许干脆就写一个《小白学iOS》系列blog吧(假设我有精力!),反正对于iOS,我真是一个小白。

java

好吧。我也在android上面写过程序。build到个人S3上面去过,对于java,个人兴趣真不大,貌似本身还买过两本《java编程思想》,那时候脑壳铁定秀逗了。

但是不得不认可。java在server领域具备很是强的优点,很是多很是多的大企业採用java做为其server的编程语言。典型的就是淘宝,据传杭州的很是多软件公司都不用java的。你用java就等于给淘宝培养人才了。(只是我发现他们很是多基础组件譬如TFS这些的但是c++的哟!

java是门好语言,仅仅是我我的不怎么喜欢,可能我就是过小众了。仅仅对c语言体系的感兴趣。因此很是多公司我去不了,哈哈。

erlang

受《计算机程序的构造与解释》影像,我一直想学一门函数式编程语言。最開始玩的是elisp。谁叫曾经我是个深度的emacser(后来竟然变成了一个vimer,再后来就是sublimer,这世界真奇妙)。

后来仍是决定好好学习一下erlang,也第一次领略到了函数式编程的魅力。本身惟一用erlang开发过的东西就是bt下载的client,只是后来发现用处不大就没继续进行下去了。

(好吧,我认可当时想下岛国的东西)

学习erlang以后最大的优点在于现在能看懂很是多优秀的erlang项目。譬如我在作moonmq以及公司的推送服务的时候。研究了rabbitmq,这玩意但是用erlang写的,而我竟然还能看懂,太佩服我了。

还有么?

想一想本身还学了哪些语言?貌似没了。不知道awk算不算一门。

看来我会得语言真很少。

兴许可能会学的

逆水行舟。不进则退。计算机发展这么迅速,我也需要不断提高本身,当中学习一门新的语言多是一个很是好的提高途径。至少能为我打开一扇门。譬如,假设掌握了日文。就能更好的理解岛国片的精髓。

我不会日文,因此仍是个门外汉。

ruby

ruby是一门很是优雅的语言,很是多大神级别的人物推荐,github貌似也是ruby的幕后推手。

因为ROR的兴起,使得ruby更加流行。看来。一个好的框架库对于语言的推广帮助真挺大的。

相比而言。python有django,tornado等,光选择适合本身的就得费点时间。

ruby可以算是一门全然面向对象的语言,连number这样的的都是对象,而且看了几本Matz的书。认为这哥们挺不错的。对技术的感悟很是深。因此更让我有兴趣去了解ruby了。

javascript

做为一个技术人员。没一个本身的我的网站怎么行。个人阿里云都是包年买的(明年仍是买国外的vps吧),本身的我的网站还无影无踪。

好吧。我全然不会javscript,看着css就头疼,没准我从一開始想本身写代码搭建我的网站这个步子就迈的太大。扯着蛋了。假设先用一个开源的框架搭建起来,再本身调整无缺,可能会更好。

但无论怎样,javascript这门语言仍是要学习了解的,尤为是之后随着html5的流行。加之node.js疯狂流行,这门语言也会愈发的发光发热。

C#

事实上原本不许备跟ms的东西扯上关系的,尽管vs是一个很是强大的开发工具,但是我自从换成mac以后就不许备再迁回windows。

仅仅是c#我多是必需要学会的,因为那个坑爹的unity3d,尽管unity3d也提供了其余语言的支持(譬如伪javascript),但是大量的开发人员仍是选用了c#,至少在中国我问过很是多朋友,都妥妥的用c#,既然这样。我也仅仅能考虑学习使用了。

至于我为啥蛋疼的想玩unity3d,毕竟干了很是多年游戏开发,一直有本身弄一个简单小游戏的梦想,仍是妥妥的unity3d吧。

本身造一个?

语言千千万,我不可能全部学会的,而且之后没准因为业务的需要,没准都会本身造一门语言,也就是DSL。

只是这个貌似还离我比較遥远。编译原理的东西太差了(说多了都是泪呀)。本身写词法分析还成,后面就菜了。这也是Mixer一直没啥进展的缘由。只是已经买了龙书,在学习屠龙秘籍,但愿成为顶尖高手吧。

后记

写了这么多,看来随着年岁的添加。愈来愈啰嗦了。

不是有一句古话:吾生也有涯,而知也无涯 。以有涯随无涯,殆已。只是不停地追逐不也是乐趣一件?

仅仅是,现在我首先要作的就是向我老婆申请资金升级电脑了吧!

相关文章
相关标签/搜索