您的位置:首页 > 其它

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

2011-03-01 10:46 239 查看
每半年接触并学习一门语言

有许多人通常觉得只要把一门语言学会学精就行, 这个想法我觉得对了一半。一个程序员应该有一门精通的语言, 但是还要不断学习新的语言(当然不能太频繁), 倒不是为了以防哪天万一用到这门语言, 而是接触学习不同的语言会拓展程序员的视野。

如果你一直用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语言类似, 它也提供了大量的类库, 包括:文件、图形、网络、数据库等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: