`
qiezi
  • 浏览: 498460 次
  • 性别: 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个和编程,计算机相关的英语单词,并给出了理解学单词里的,独特的英语单词快速记忆法。...

    怎样去学习一门编程语言,总结的很好!

    ### 如何高效学习一门编程语言 #### 一、选择合适的编程语言 在开始学习之前,首先需要明确自己的兴趣所在及职业发展方向。不同的编程语言适用于不同的领域: - **Web开发**:如果你对网页制作感兴趣,那么HTML、...

    c-and-cpp-language-learning, C和C++编程语言学习 - 2015级.zip

    C和C++编程语言是计算机科学中的基础且...总的来说,这份C和C++编程语言学习资源提供了全面的学习路径,结合开源社区的支持,可以帮助你快速提升编程技能,无论是为了学术研究还是职业发展,都是一个宝贵的学习工具。

    Dart编程语言.7z

    阅读这本书,无论是对于已经有一定编程经验的开发者还是想要深入学习Dart的初学者,都将是一次宝贵的学习经历。通过系统学习,你将能够熟练运用Dart开发高效、健壮的应用程序,无论是在Web、移动还是服务器端领域。...

    汇编语言编程艺术(清晰版)

    清华大学的教授温冬骅也对本书给予了高度评价,他认为只有通过长时间的学习和实践才能掌握汇编语言,但本书改变了他对汇编语言学习的看法。 本书的中文简体字翻译版由NoStarch出版社授权清华大学出版社在中国大陆...

    编程语言API与教程

    在IT领域,编程语言API(应用程序接口)与教程是学习和开发过程中不可或缺的部分。API是软件之间交互的桥梁,而教程则是引导初学者逐步掌握编程技能的重要资源。本资料包涵盖了Java、C、C++、CSS3和HTML5等常见编程...

    Java学习资料,可以帮助你学习Java编程语言

    学习Java编程语言需要有系统的学习计划和大量的实践经验,通过学习这些常用的Java学习资料,初学者可以更好地理解Java编程语言,提高自己的编程技能。但是,学习Java编程语言需要不斷实践和总结,初学者需要不断地...

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

    通过与这些编程语言创始人的对话,我们可以从他们的口中得知为什么他们认为有必要创建新的编程语言,它们的技术开发细节,以及如何教授和学习这些语言。书中也探讨了编程语言如何随着时间的推移而发展,以及如何适应...

    高手教你快速学习编程语言.pdf

    本文将基于Paul的经验,探讨如何快速学习编程语言,并提供一条切实可行的学习路径。 **主动性是快速学习编程语言的关键** 编程不仅是一门科学,也是一门实践的艺术。Paul的经验表明,真正的学习是从实践中开始的。...

    实验5-1-智能编程语言算子开发与集成实验实验5-2-智能编程语言性能优化实验

    总的来说,通过这两个实验,你将获得宝贵的实践经验,不仅能够深入理解智能编程语言的核心要素,还能够掌握提升计算性能的关键技巧,这对于在AI和高性能计算领域的发展至关重要。在实践中不断探索和学习,你将成为...

    多种编程语言考试试题

    总的来说,掌握这四种编程语言对于IT专业人士来说至关重要,无论你是初学者还是经验丰富的开发者,都能从这些试题中受益。通过深入学习和实践,你可以提升编程技能,更好地适应不断变化的软件开发环境。

    西门子PLC的几种编程语言.doc

    西门子PLC的几种编程语言 西门子PLC的编程语言是PLC技术的核心组件之一,它们之间的异同是PLC开发者需要掌握的基本知识。西门子PLC提供了多种编程语言,满足不同的应用需求和开发人员的编程习惯。 1. 顺序功能图...

    《RPG编程语言中文参考》

    RPG(Report Program Generator)编程语言,源自IBM的...通过阅读《RPG编程语言中文参考》,无论是初学者还是经验丰富的开发者,都能增强对RPG的理解,提升自己的编程能力。这本书是学习和提升RPG编程技能的宝贵资源。

    自制编程语言-基于c语言--源码vc2013编译通过

    通过这个项目,学习者可以了解到如何从零开始构建一个完整的编程语言,理解编译器内部的工作机制,这对于提升软件开发的深度和广度有着极大的帮助。此外,跨平台的实现也强调了了解不同操作系统内核和API的重要性,...

    R语言与大数据编程实战 李倩星 2017.9_Internet/网络编程_机器学习R语言_机器学习原理_

    《R语言与大数据编程实战》一书由李倩星撰写,于2017年9月出版,专注于探讨如何在互联网/网络编程环境下利用R语言进行高效的数据处理和机器学习。这本书结合了统计分析、机器学习和人工智能领域的理论与实践,为读者...

    高手教你快速学习编程语言-育儿知识.doc

    本文将由经验丰富的技术培训师Paul带领我们快速学习编程语言的同时,也分享了他的育儿经验,以期帮助家长理解如何在育儿过程中培养孩子的编程兴趣和能力。 Paul的职业生涯始于中学时期对编程的热爱。那时,他通过...

    编程语言实例大全【经典】

    《编程语言实例大全【经典】》是一份涵盖了多种编程语言的实用资源库,它包括了C/C++、Java、.NET、VC++以及VB等多个重要编程领域的实例代码。这份资料对于初学者和有一定经验的开发者来说,都是一个极好的学习和...

    三菱Q系列PLC ST语言及Q系列PLC指令视频教程 三菱ST编程高级语言 ST程序编程指令教学.zip

    ST(Structured Text)语言是IEC 61131-3标准定义的五种编程语言之一,适用于三菱Q系列PLC,是一种结构化、接近高级编程语言的编程方式,提供了更为灵活和强大的编程能力。 本教程《三菱Q系列PLC ST语言及Q系列PLC...

Global site tag (gtag.js) - Google Analytics