越来越发现自己是个语言控。回想一下,上学期间除了课本里的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),这可能得益于它的语法形式简单、单一。
分享到:
相关推荐
四年专业英语单词快速记忆经验,一年时间精心打造“编程语言快速记忆手册”,第一版的编程语言快速记忆手册,里面共收录了4345个和编程,计算机相关的英语单词,并给出了理解学单词里的,独特的英语单词快速记忆法。...
### 如何高效学习一门编程语言 #### 一、选择合适的编程语言 在开始学习之前,首先需要明确自己的兴趣所在及职业发展方向。不同的编程语言适用于不同的领域: - **Web开发**:如果你对网页制作感兴趣,那么HTML、...
C和C++编程语言是计算机科学中的基础且...总的来说,这份C和C++编程语言学习资源提供了全面的学习路径,结合开源社区的支持,可以帮助你快速提升编程技能,无论是为了学术研究还是职业发展,都是一个宝贵的学习工具。
阅读这本书,无论是对于已经有一定编程经验的开发者还是想要深入学习Dart的初学者,都将是一次宝贵的学习经历。通过系统学习,你将能够熟练运用Dart开发高效、健壮的应用程序,无论是在Web、移动还是服务器端领域。...
清华大学的教授温冬骅也对本书给予了高度评价,他认为只有通过长时间的学习和实践才能掌握汇编语言,但本书改变了他对汇编语言学习的看法。 本书的中文简体字翻译版由NoStarch出版社授权清华大学出版社在中国大陆...
在IT领域,编程语言API(应用程序接口)与教程是学习和开发过程中不可或缺的部分。API是软件之间交互的桥梁,而教程则是引导初学者逐步掌握编程技能的重要资源。本资料包涵盖了Java、C、C++、CSS3和HTML5等常见编程...
学习Java编程语言需要有系统的学习计划和大量的实践经验,通过学习这些常用的Java学习资料,初学者可以更好地理解Java编程语言,提高自己的编程技能。但是,学习Java编程语言需要不斷实践和总结,初学者需要不断地...
通过与这些编程语言创始人的对话,我们可以从他们的口中得知为什么他们认为有必要创建新的编程语言,它们的技术开发细节,以及如何教授和学习这些语言。书中也探讨了编程语言如何随着时间的推移而发展,以及如何适应...
本文将基于Paul的经验,探讨如何快速学习编程语言,并提供一条切实可行的学习路径。 **主动性是快速学习编程语言的关键** 编程不仅是一门科学,也是一门实践的艺术。Paul的经验表明,真正的学习是从实践中开始的。...
总的来说,通过这两个实验,你将获得宝贵的实践经验,不仅能够深入理解智能编程语言的核心要素,还能够掌握提升计算性能的关键技巧,这对于在AI和高性能计算领域的发展至关重要。在实践中不断探索和学习,你将成为...
总的来说,掌握这四种编程语言对于IT专业人士来说至关重要,无论你是初学者还是经验丰富的开发者,都能从这些试题中受益。通过深入学习和实践,你可以提升编程技能,更好地适应不断变化的软件开发环境。
西门子PLC的几种编程语言 西门子PLC的编程语言是PLC技术的核心组件之一,它们之间的异同是PLC开发者需要掌握的基本知识。西门子PLC提供了多种编程语言,满足不同的应用需求和开发人员的编程习惯。 1. 顺序功能图...
RPG(Report Program Generator)编程语言,源自IBM的...通过阅读《RPG编程语言中文参考》,无论是初学者还是经验丰富的开发者,都能增强对RPG的理解,提升自己的编程能力。这本书是学习和提升RPG编程技能的宝贵资源。
通过这个项目,学习者可以了解到如何从零开始构建一个完整的编程语言,理解编译器内部的工作机制,这对于提升软件开发的深度和广度有着极大的帮助。此外,跨平台的实现也强调了了解不同操作系统内核和API的重要性,...
《R语言与大数据编程实战》一书由李倩星撰写,于2017年9月出版,专注于探讨如何在互联网/网络编程环境下利用R语言进行高效的数据处理和机器学习。这本书结合了统计分析、机器学习和人工智能领域的理论与实践,为读者...
本文将由经验丰富的技术培训师Paul带领我们快速学习编程语言的同时,也分享了他的育儿经验,以期帮助家长理解如何在育儿过程中培养孩子的编程兴趣和能力。 Paul的职业生涯始于中学时期对编程的热爱。那时,他通过...
《编程语言实例大全【经典】》是一份涵盖了多种编程语言的实用资源库,它包括了C/C++、Java、.NET、VC++以及VB等多个重要编程领域的实例代码。这份资料对于初学者和有一定经验的开发者来说,都是一个极好的学习和...
ST(Structured Text)语言是IEC 61131-3标准定义的五种编程语言之一,适用于三菱Q系列PLC,是一种结构化、接近高级编程语言的编程方式,提供了更为灵活和强大的编程能力。 本教程《三菱Q系列PLC ST语言及Q系列PLC...