`
qiezi
  • 浏览: 491423 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

我的编程语言学习经历

阅读更多
越来越发现自己是个语言控。回想一下,上学期间除了课本里的ASM/C/SQL以外,自己业余时间学习过Basic/C++/AS,当然这些都是实际写过代码的:

  • Visual Basic是在Corel Draw矢量绘图软件里面编写了一个名片系统,为的是帮助一家大企业快速生成几千人的名片,后来又简单改为一个工牌系统。
  • 写C++代码之前看过几本书,包括一本讲C++基础的,名字忘了;一本讲C++编写字符窗口界面的;还有讲VC++的。这几本书看完后都不得要领,会写C++代码但做不好windows界面编程,包括Borland C++、Visual C++等,后来终于勉强搞出一个俄罗斯方块游戏。
  • Flash编程曾经有段时间特别喜欢,还用它做了一个象棋对战程序,界面动画很酷。但不知道怎么做网络编程,只好把它嵌在MFC编写的界面上,网络部分在VC里面解决。曾经还想把它写成一本书,大概写了4个多月后来觉得没劲,加上使用的WPS Office不稳定,放弃了。

后来陆续看完侯捷老师著(译)的《深入浅出MFC》、《深度探索C++对象模型》,潘爱民老师译的《COM本质论》,觉得兴趣还是在C++上,又看过《Exceptional C++ Style》、《Essential C++》、《产生式编程》、《Modern C++ Design》之类的,整个过程长达一年多,特别是《深度探索C++对象模型一书》折磨我小半年,前3章迈不过去,多次想放弃,坚持看完后倒觉得不再有看不过去的。

04年到了一家小创业公司,写过几千行Java封装Web Service,Oracle存储过程也写过几千行。然后转到编写游戏服务器,写了几万行C++。又转到视频游戏客户端项目,之前练手的MFC和Flash居然派上用场,结合VLC完成了这个项目,当然也没管什么License。后来有一个后端管理客户端程序,询问项目经理有没有快速开发的工具,他推荐了Python,于是花了3天看完语言规范和Python Cookbook,然后1星期把之前C++版的重写了,那个版本是另一个同事做了3个月的,确实感觉到动态语言的强大。在此期间也被D语言所吸引,持续关注到今天。

06年被Ruby on Rails影响,很是心动,做了很多练手小项目,然后被人拉去创业,虽然没成功,但也是一段有趣的经历。这期间js也写了一些,算是入门级。然后对动态类型语言好感降低。

07年开始做网站的后端优化、分布式存储系统、缓存系统等,写了大量C++代码,其中部分代码是使用Ruby作DSL来生成代码。同时接触了erlang,但因人员、风险等,并没有在项目中使用,却把一些思想带入到C++项目中,编写了新的C++框架,使用轻量级线程和消息机制。期间被Io吸引过一阵子,并从中学习到了Future方式,觉得这语言实现很精巧,虽然效率很低。如果我那时候看过lisp,可能不会有太多感觉。

09年在思考服务的并行优化、隋性计算、提早计算等需求时,对过程式语言逐渐失去兴趣,开始研究一些函数式语言,但并没有深入,仅限于研究这些需求的解决方案。

10年对go、nodejs等产生过一点兴趣,这两个语言都没有让我太激动,只是因为我对C++越来越厌恶,觉得go在一般情况下能够替代它。我不太喜欢要占用独立栈空间的coroutine,觉得这完全是浪费,即便是有栈增长机制也依然很丑陋。并发执行体只是一个拥有状态的对象,完全没有必要使用这样的栈。

11年倒是完整看完了Common Lisp、Scala、OCaml等语言的语法和特性,最让人激动的还是Lisp,如果不是我对静态类型有太深的感情,肯定会用它的,当初Ruby也是这个原因而没有继续使用,这就像是信仰一样,一旦有了选择,会影响终身,很难改变。OCaml号称是C++程序员最应该学习的函数式语言,本来是很不错的,不过我不断拿它和Haskell比较,越比越觉得丑陋。Scala如果是早两年学习,应该还是不少小激动,现在看来除了叹服它的语言实现以外,并没有太大动力想写点代码。

目前有兴趣的是Haskell,语法很早就看过,一直被它的一些库所吸引,比如Parsec、QuickCheck等,然后就会不务正业一段时间。专心学习是近一个月的事,越来越喜欢。也很难说它完美,对于IO,我觉得实现很美,但很讨厌把IO写成命令式风格并顺序执行,后来我想通了,不是还有Template嘛,虽然也有些丑。

在这么多语言中游离并不是我多么喜新厌旧,每种语言几乎都可以完成项目。

我总结下来我追求的是这些东西:
  • 语言表达能力,比如简洁性、异步编程的简单性
  • 执行效率
  • 是否方便重构,这使我倾向于静态类型
  • 语言扩展能力和DSL能力
  • 跨平台,甚至是动态物理迁移能力
  • 编译出较小的原生代码
  • 代码是否美观

很难找到一个完美的语言解决了所有问题,有时候也就是自己折磨自己,很多语言都不能在项目中使用,只能作为兴趣。

选择Haskell来学习,也经过了较长时间,最终决定要认真学习,还是被Haskell的各个库和代码所吸引,感觉这代码实在是太漂亮,很多库很有想象力。

虽说语言只是工具,但语言的思想和表达能力相差实在太多了,可能会影响项目开发,从生产力上说,我感觉lisp可能会最高(没写过lisp项目只是猜测),原因是它的宏太强大,其它语言要么太麻烦(比如Ruby拼字符串再eval、Haskell的Template),要么功能太差(比如C、D),这可能得益于它的语法形式简单、单一。

分享到:
评论
4 楼 qiezi 2013-02-05  
qiezi 写道
yangyang_08 写道
1、现在如果做并发服务器,楼主选用什么样的语言架构?
2、lua这门语言楼主怎么看?
3、lisp的不能用于实践是不是因为能力太强,而从头搭建太麻烦,所以比如做dsl还是用ruby?
现在如果再做dsl楼主还是用ruby吗?


1、并发语言选择
选择是痛苦的,因为没有完美。以下是选择思路,使用python缩进语法:

如果是我一个人做的项目:
  如果业务复杂度一般:haskell(复杂时不选它是因为我搞不定它)
  否则:clojure
如果是多人项目:
  如果业务复杂度一般:erlang
  否则:golang

这几种语言对并发的支持都比较好,如果是个人做,选择有很多,我肯定选有趣并且有很大发挥空间的。如果是多人项目,会找更成熟的。clojure是我原本抵触的,后来在各个lisp实现中选择之后,发现语言的基础支撑太重要了,除非我们自己从最小的核心开始构建,然后就越看越觉得clojure也挺好,算是妥协吧。如果纯兴趣探索,可能从sbcl之类lisp实现开始,能更接近native。

2、lua我仅写过数百行,在一个服务器内嵌入动态逻辑,只为了解决业务复杂度。所以没什么看法,也没有喜欢的感觉。如果是为了嵌入,扫了一遍好像没有比它更适合的,很轻量。

3、lisp的实现和库是个问题,所以我转向clojure。dsl要看怎么用,如果是用来生成代码,我可能倾向lisp,不会再考虑ruby。如果dsl本身要能够直接执行,必须考虑环境,会考虑更轻量、对环境侵入更小的。

感谢交流。

补充一点,用Haskell要谨慎,GHC的变化太大,cabal的包管理也不好,每一个小版本升级都导致大量库不兼容,对于语言追新者来说很痛苦。
3 楼 qiezi 2013-02-05  
yangyang_08 写道
1、现在如果做并发服务器,楼主选用什么样的语言架构?
2、lua这门语言楼主怎么看?
3、lisp的不能用于实践是不是因为能力太强,而从头搭建太麻烦,所以比如做dsl还是用ruby?
现在如果再做dsl楼主还是用ruby吗?


1、并发语言选择
选择是痛苦的,因为没有完美。以下是选择思路,使用python缩进语法:

如果是我一个人做的项目:
  如果业务复杂度一般:haskell(复杂时不选它是因为我搞不定它)
  否则:clojure
如果是多人项目:
  如果业务复杂度一般:erlang
  否则:golang

这几种语言对并发的支持都比较好,如果是个人做,选择有很多,我肯定选有趣并且有很大发挥空间的。如果是多人项目,会找更成熟的。clojure是我原本抵触的,后来在各个lisp实现中选择之后,发现语言的基础支撑太重要了,除非我们自己从最小的核心开始构建,然后就越看越觉得clojure也挺好,算是妥协吧。如果纯兴趣探索,可能从sbcl之类lisp实现开始,能更接近native。

2、lua我仅写过数百行,在一个服务器内嵌入动态逻辑,只为了解决业务复杂度。所以没什么看法,也没有喜欢的感觉。如果是为了嵌入,扫了一遍好像没有比它更适合的,很轻量。

3、lisp的实现和库是个问题,所以我转向clojure。dsl要看怎么用,如果是用来生成代码,我可能倾向lisp,不会再考虑ruby。如果dsl本身要能够直接执行,必须考虑环境,会考虑更轻量、对环境侵入更小的。

感谢交流。
2 楼 yangyang_08 2013-01-31  
1、现在如果做并发服务器,楼主选用什么样的语言架构?
2、lua这门语言楼主怎么看?
3、lisp的不能用于实践是不是因为能力太强,而从头搭建太麻烦,所以比如做dsl还是用ruby?
现在如果再做dsl楼主还是用ruby吗?
1 楼 dearplain 2012-05-01  
我也是语言爱好者,不过我一直坚持使用c。

相关推荐

    编程语言快速记忆手册

    四年专业英语单词快速记忆经验,一年时间精心打造“编程语言快速记忆手册”,第一版的编程语言快速记忆手册,里面共收录了4345个和编程,计算机相关的英语单词,并给出了理解学单词里的,独特的英语单词快速记忆法。...

    编程之魂:与27位编程语言创始人对话

    《编程之魂:与27位编程语言创始人对话》是27位杰出的设计师与你分享他们的智慧和经验。书中以问答方式告诉为什么要创建某种编程语言、它在技术上如何开发、如何教授和学习,以及它如何顺应时代发展等。你会发现构建...

    编程语言实现模式 带书签高清版

    《编程语言实现模式》旨在传授开发语言应用(工具)的经验和理念,帮助读者构建自己的语言应用。这里的语言应用并非特指用编译器或解释器实现编程语言,而是泛指任何处理、分析、翻译输入文件的程序,比如配置文件...

    go语言编程入门学习资料

    参与本书写作的几位作者都是实际用Go语言开发的项目的开发人员,有较强的实战经验。 这本书面向的读者是所有打算用Go语言的开发者,主要包括目前使用C、C++、Java、C#的开发人员,甚至一些Python、PHP开发人员也...

    基于java编程语言开发的java语言考试学习信息系统的毕业设计实现.zip

    该系统将基于Java编程语言开发,旨在为学生和教师提供便利的学习和管理工具,以提高学生的编程技能和教师的教学效率。 该系统将为学生提供全面的学习资源,包括考试练习、课程资料、视频教程、实例代码等。这些资源...

    编程语言快速记忆手册(视频+pdf) v2.0

    四年专业英语单词快速记忆经验,一年时间精心打造“编程语言快速记忆手册”,第一版的编程语言快速记忆手册,里面共收录了4345个和编程,计算机相关的英语单词,并给出了理解学单词里的,独特的英语单词快速记忆法。...

    是全中文的一个编程语言

    通过以上,东西方文化的差异造成对编程学习上的很大区别,中文文化背景决定了中国人还是学自己的编程语言好。 [1] 市场推广 2004年易语言获得《科技查新报告》,《科技项目鉴定测试报告》 培训推广图册 培训推广...

    CV算法岗知识点汇总+面试常见问答(计算机视觉、机器学习、图像处理、编程语言、数据结构).zip

    CV算法岗知识点汇总+面试常见问答(计算机视觉、机器学习、图像处理、编程语言、数据结构).zipCV算法岗知识点汇总+面试常见问答(计算机视觉、机器学习、图像处理、编程语言、数据结构).zipCV算法岗知识点汇总+面试...

    Go语言学习笔记

    作为时下流行的一种系统编程语言,Go 简单易学,性能很好,且支持各类主流平台。已有大量项目采用 Go 编写,这其中就包括 Docker 等明星作品,其开发和执行效率早已被证明。本书经四年多逐步完善,内容覆盖了语言、...

    OpenPLC所有软件硬件资料全开,支持5种PLC编程语言

    【工控老马出品,必属精品,质量保证,亲测...源码说明: OpenPLC---一款开源的全功能PLC项目,所有软件硬件资料全开,支持5种PLC编程语言,资料比较丰富,学习爱好者的必备品。 适合人群:新手及有一定经验的开发人员

    汇编语言编程艺术

    对于有意学习X86汇编语言编程的程序员来说,这是一本难得的好书。\r\n 本书的作者Randall Hyde拥有十多年的汇编语言教学经验,并且开发了多个商用软件,具有实际的汇编语言开发经验。该书的英文网络版受到全球...

    编程知识+GO语言开发+GO语言基础课程+系列课程

    本系列课程专为具有2-3年编程经验的开发者设计,旨在提供一个系统的Go语言学习路径。课程内容从Go语言基础到高级应用,再到实战项目开发,全面覆盖Go语言的核心概念、关键技术和最佳实践。 课程概览 基础入门:介绍...

    曹文斌:编程语言的应用及发展趋势

    在CSDN高校俱乐部2013年秋季北京地区巡讲第一站“编程语言的应用和发展”活动上,百度移动云事业部架构师曹文斌为现场同学们介绍了自己编程语言学习的经历,以及常见编程语言的应用场景与如何选择编程语言。

    go语言学习笔记

    作为时下流行的一种系统编程语言,Go 简单易学,性能很好,且支持各类主流平台。已有大量项目采用 Go 编写,这其中就包括 Docker 等明星作品,其开发和执行效率早已被证明。本书经四年多逐步完善,内容覆盖了语言、...

    一站式学习C编程

    本书分为两部分:第一部分讲解编程语言和程序设计的基本思想方法,让读者从概念上认识c语言;第二部分结合操作系统和体系结构的知识讲解程序的工作原理,让读者从本质上认识c语言。, 《一站式学习c编程》适合做零...

    c++语言学习经验集合

    c++语言学习经验集合,讲述多人的编程经验!

    汇编语言编程艺术_Randall Hyde

    对于有意学习X86汇编语言编程的程序员来说,这是一本难得的好书。 本书的作者Randall Hyde在大学中教授汇编语言十多年,并且开发了好几个商用软件,具有丰富的汇编语言开发经验。该书的英文电子版受到了成千上万的...

    一站式编程学习网站,包括Java、Python、HTML、JavaScript 内含学习路线,文档,个人总结,面试经验.zip

    内含学习路线,官方文档,个人总结,面试经验,旨在编程学习从0到1一站式学习 一站式编程学习网站,涵盖前后端、运维,包括但不限于Java、Python、Go、HTML、JavaScript、TypeScript、Git、Docker、k8s。内含学习...

    《C++编程习题与解答(全美经典学习指导系列)》[PDF]

    本书由浅入深地介绍了C++语言的各个方面,并在所涉及的各个知识点给出了详细的例子,使读者...无论读者是从未接触过 C++语言的新手,还是对C++语言有一定经验的开发人员,本书都能使你对这门编程语言有全面系统的了解。

Global site tag (gtag.js) - Google Analytics