`
喜马拉雅上的小草
  • 浏览: 50872 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

选择学习"下一个"程序语言

 
阅读更多

每半年接触并学习一门语言

有许多人通常觉得只要把一门语言学会学精就行, 这个想法我觉得对了一半。一个程序员应该有一门精通的语言, 但是还要不断学习新的语言(当然不能太频繁), 倒不是为了以防哪天万一用到这门语言, 而是接触学习不同的语言会拓展程序员的视野。
如果你一直用C#, 试试Lisp, 你会惊叹于还有这样写程序的方式, 嗯?看来我得去学学Lamda演算;试试Python, 你会惊讶于还有如此小巧优美的东西;试试Lua, 你会发现原来语言还能嵌入其它语言, 要不要为WOW写个外挂试试?试试Eiffel, 你会发现还有契约式编程这种方法, 嗯?什么?Java上有iContract, 那我要不要为.NET实现一个?随着这种学习过程, 你的思维自然就被拓展开了, 而不是满脑子的Class、 Object、MVC、OO……
其实学习语言不一定是学习没听说过的, 许多您听到耳朵长茧却从来没有深入学习的“老朋友”, 如C、PHP, 如果您细心学下来, 也会得到许多意外的收获。
例如在学C的过程中, 你会发现不可能脱离Unix环境而把C学好, 你会接触POSIX和System V, 你会主动深入学习进程、线程、信号、I/O、IPC, 你会接触TCP/IP协议。你会发现要学好C还要理解计算机组成原理, 你还会发现原来还有大小端这个东西。
深入学习PHP, 你会发现PHP远不仅仅是一个做Web的脚本语言那么简单, 你会了解到它SAPI、PHP Compiler和Zend Engine的优美结构, 你会发现有opcode, 你会发现PHP浑身都是扩展点, 你可以扩展功能, 扩展Compiler和Zend Engine, 甚至可以完全实现自己的编译和运行逻辑。你会了解APC是如何缓存opcode, APD是如何跟踪PHP的运行。
每次学习一门语言, 你会发现这不是一门语言, 而是一个崭新的新大陆, 里面有太多让人兴奋和新奇的东西, 而如果你执意禁锢在“.NET盒子”里, 你就永远不会知道这些。

主动突破自己 接受更多挑战

如果什么东西都是用到才学, 代码都是有用才写, 那我只能非常抱歉的说你还不是个程序员, 而只是个代码工人。程序员应该有主动出击的意识, 应该对自己未接触的领域有无限向往。幸运的是, 互联网上的财富实在太多了, 你应该尽其所能去接触学习未知的东西, 而不要总想我学习这个东西能不能换来钱给孩子买尿布和奶粉。你可以有很多借口, 但是我想说, 借口想找总是有的, 时间想找也总是有的, 还是看自己到底要什么。不要一边躺在盒子里一边又抱怨自己没有进步。
例如Google Publication, 这里有世界最优秀的Google工程师们理论和实践的总结, 来读读这些伟大的论文吧, 看看这个伟大的公司和一群伟大的人都干了些什么, 了解一下Map Reduce是怎么回事, 如果了解了你自然想去试试Hadoop, 还有Bigtable和GFS, 哦!太震撼了, 原来存储数据也有这么多讲究, 不是放硬盘里或通过Insert插入数据库就行了。也许这些英文论文读起来很困难, 但是我想一周一篇的要求并不高(我现在仍然保持着一周读两篇论文的习惯)。要知道, 最新、最严谨的东西都在论文里, 如果你只是通过书本或社区学习, 那么你永远不会知道今天在计算机科学与技术的领域又发生了哪些令人震撼的事情, 出现了哪些新奇的东西。
不要太懒惰, 你写增删改查写累了吗?Come on!有没有想过自己写一个小型的httpd?当然你需要先去学习HTTP协议(rfc2612), 试试能不能写一个PHP的SAPI扩展令你的httpd处理PHP脚本。有没有想过自己用lex和yacc实现一个自己的小语言, 也不是完全没用, 也许你已经对你的领域业务逻辑烂熟于胸, 那么去实现一个自己的领域语言吧。啊!我要去学习编译原理、形式语言与自动机……咦, 这东西还挺有意思的, 去看看计算理论去……如果到了这里, 你已经开始接触计算机的数学本质了, 而你的层次将会得到升华。
学习就是这样, 主动突破自己, 给自己一些挑战性的任务, 生活才有趣。成天困在.NET的盒子里, 我们还有脸称自己为程序员吗?

脱离IDE 玩玩纯文本与SHELL

从没用过IDE的程序员可能是悲剧, 但从没脱离过IDE的程序员绝对是悲剧!
你有没有觉得自己越来越不像个“编程序”的而越来越像“堆程序”的。好的, 即使在工作时你离不开IDE, 那么业余时间让你的IDE滚蛋, 等等, 你改用Notepad?气死我了你!试试vim或Emacs, 体验一下用纯文本写程序, 用gcc编译连接的乐趣。你会发现“yyp”比“选中一行, Ctrl+C, 点击下一行起始位置, Ctrl+V”简单的多, 你会发现按一下“0”比按20次“左箭头”省事的多。等源程序多了, 也许你会想去学习Makefile的写法。你会莫名其妙地发现自己更懂编译和连接过程了。
相信我, 用纯文本和shell写程序比用IDE酷多了, 想吸引女孩子吗?你去问问你们班或你们公司最漂亮的女生, 她也会这么想。重要的是, 这种酷不是“装B”的酷, 而是有效率的酷。什么?你已经受不了IDE了……

接受更多的编程哲学与学习方式

注意我是用的“接受”而不是用“改变”, 你不需要改变什么, 写.NET程序很好, 不过你可以适当吸取一下其它领域的编程哲学与学习方式。可以说Windows(特别是.NET)程序员和Unix程序员思考问题的方式大不相同, 如果现在需要一辆汽车, Windows程序员会建立一个从冶铁到装配的“All in one”汽车制造基地;而Unix程序员会去分别建立采矿场、冶铁厂、设计公司、材料制造厂、机械制造厂和装配厂。我不想讨论他们各自的优缺点(因为很容易陷入无谓的宗教纷争), 但是对于你来说, 了解一些其它的编程哲学对你没有坏处。
另外就是学习方式, 例如你要学习PHP, 请千万不要去书店购买各种《21天精通PHP》或《PHP编程宝典》, 你应该首先打开Google, 找到 PHP官网, 然后去官方文档哪里寻找学习资源。网上还有各种wiki, mailing lists和社区, 请不要放弃这些资源。然后同时你可以去Amazon看书评, 然后小心而谨慎地选择一本相关的书籍(影印版最优, 翻译版其次)。
一个人想突破自己不容易, 关键在于自己有没有突破的意愿。衷心希望有一天, 您的脑中不再被ASP.NET, ASP.NET MVC, WCF, WPF, ADO.NET, Silverlight, EF……而占满, 如果到了那一天, 你会发现, 咦?!我.NET的水平也大幅提升了!


Erlang最有可能成为下一代的主流语言,开源,跨平台的面向并发编程语言(COP=Concurrency Oriented Programging), 由于其并发和分布式特性, 完全迎合了多核时代。其特性如下:

1, 变量单一赋值 - 防止状态共享带来死锁
2, 面向函数编程 - 函数可以作为参数, 也可以作为返回值
3, 并发 - 基于消息通信机制的轻量级进程, 不是Java/C/C++的状态共享机制
4, 分布式 - 并发的进程可以部署在多个机器上即可实现分布和远程调用
5, 容错 - 进程通过相互链接进行监控/异常捕捉
6, 热代码升级 - 函数可以作为参数, 动态判断函数版本进行替换升级
7, 多核 - 可以创建适量的进程来利用CPU的多核, 但要注意创建进程的粒度, 对于小计算避免创建过多进程
与Java/C/C++/PHP语言类似, 它也提供了大量的类库, 包括:文件、图形、网络、数据库等。

分享到:
评论

相关推荐

    单片机编程语言中学习哪种编程语言好?

    在选择学习单片机编程语言时,汇编语言和C语言各有优势。对于初学者来说,学习汇编语言可以帮助更好地理解单片机的硬件结构和指令集。在进行一些需要与硬件紧密交互、需要执行效率极高的场景下,汇编语言仍然是不可...

    Rust编程语言入门教程的学习代码

    Rust编程语言入门教程的学习代码Rust编程语言入门教程的学习代码Rust编程语言入门教程的学习代码Rust编程语言入门教程的学习代码Rust编程语言入门教程的学习代码Rust编程语言入门教程的学习代码Rust编程语言入门教程...

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

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

    仓颉编程语言语言规约.pdf

    仓颉编程语言语言规约.pdf

    zemax编程语言.pdf

    书中分为四个章节,第一章介绍了Zemax光学设计软件及其编程语言ZPL的背景知识;第二章详细讲解了ZPL的基本结构和使用方法;第三章对ZPL的常用指令进行了分类和详细解析;第四章则通过大量实例展示了ZPL的具体应用。 ...

    Go语言学习笔记.pdf

    Go语言是一种开源编程语言,具有简单易学、高性能、跨平台等特性,目前已经成为构建高效、可靠的应用程序的重要选择。Go语言在计算机编程领域的重要性不断提升,特别是在云平台、分布式系统和并发处理等领域。为了...

    编程语言原理(第10版

    根据提供的标题“编程语言原理(第10版)”及描述“编程语言原理(第10版 编程语言原理)”,我们可以推断出这本书主要讲述了编程语言的基础理论与实践应用,是学习和理解编程语言设计与实现的重要参考资料。...

    编程语言Python算法集大全 .zip

    编程语言Python算法集大全 ,学习进步阶梯必备。编程语言Python算法集大全 ,学习进步阶梯必备。编程语言Python算法集大全 ,学习进步阶梯必备。编程语言Python算法集大全 ,学习进步阶梯必备。编程语言Python算法集...

    自己买的单片机学习板带的汇编语言程序例程(有注释)

    汇编语言是一种低级编程语言,它将机器指令与人类可读的符号相对应,每个汇编指令通常对应单个机器周期。尽管学习曲线较陡,但汇编语言对于理解计算机底层工作原理和优化性能至关重要。在单片机编程中,汇编语言常...

    程序语言学习(一位过来人的总结)

    总的来说,学习程序语言是一个循序渐进的过程,从选择适合自己的语言开始,通过实践、阅读、调试和不断学习,逐渐成长为一名熟练的程序员。记住,耐心和毅力是这个过程中的关键,不要怕犯错,因为每一次挫折都是向...

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

    这本书对于初学者来说是一个非常好的学习资源,可以帮助他们更好地理解Java编程语言。 Java核心技术卷Ⅰ 《Java核心技术卷Ⅰ》是一本非常流行的Java编程书籍,它详细介绍了Java核心技术,包括Java基础、对象、集合...

    阿里云大学编程语言学习内容集锦

    总的来说,阿里云大学编程语言学习内容集锦提供了一个全面且丰富的编程学习平台,不仅覆盖了当前流行的编程语言,还包括了相关的数据库技术、前端技术以及多种服务端语言。通过这些资源,开发者可以按照自己的需求和...

    java学习课件,网络编程语言

    绝好的Java学习资料。。。 内容简介: 第一章 java 简介; 第二章 java 语言基础(1); 第二章java语言基础(2); 第三章 面向对象编程的基本概念; 第四章 java 中的对象、类、包和接口; 第五章 异常处理; 第六...

    一步一步学习linux汇编语言程序设计

    3. **多线程编程**:教授如何在 Linux 下使用汇编语言实现并发编程,提高应用程序的性能。 总之,《一步一步学习 Linux 汇编语言程序设计》是一本适合初学者入门并逐渐深入的优秀教程。它不仅覆盖了汇编语言的基础...

    ST语言规则编程手册全面讲解ST语言

    ST语言,全称为Structured Text,是IEC 61131-3标准下的编程语言之一,常用于工业控制领域的PLC(可编程逻辑控制器)编程。ST语言以其丰富的表达能力和接近高级编程语言的语法特性,深受工程师们的青睐。本手册全面...

    如何学习一门编程语言.docx

    总之,学习一门编程语言需要耐心与恒心,这是一个不断实践、不断学习的过程。选择合适的编程语言,理解核心概念,配置开发环境,实践编程项目,并有效利用网络资源,是系统学习编程语言的必经之路。只要坚持不懈,...

    小霸王学习机G-BASIC语言

    它是一种设计简洁、易读易写的编程语言,适合初学者入门。小霸王学习机上的G-BASIC是BASIC语言的一个变种,保留了基本的语法结构和命令,同时针对硬件特性进行了优化。 2. **G-BASIC语法**: - **变量声明**:在G-...

    windows环境下32位汇编语言程序设计典藏版

    罗云彬的"Windows环境下32位汇编语言程序设计典藏版"是一本深入探讨这个主题的专业书籍,而随书源码则为读者提供了实际操作和学习的宝贵资源。 首先,我们需要了解汇编语言的基本概念。汇编语言是一种低级编程语言...

Global site tag (gtag.js) - Google Analytics