学语言推荐C(转)
作为宅男电脑师,对于计算机系统以及程序运行有了足够的了解之后就可以开始学习程序设计语言了。一般来说我认为程序员分3类,玩语言的,玩构架的,玩思想的。语言是最基础的存在,当然也是最低阶的存在。当然我不是认为语言无用,只是到了一定的阶段之后,程序员必须有一个质的提升,成天说语言层上七七八八的东西就如同在简历里面写会Office处理文字一样幼稚,因为现在的程序设计语言都是图灵完备的(这句话过于偏激,应为现代主流编程语言基本上都是图灵完备的),换句话说你用Java能写出来的东西我用C#也能写出来,顶多就是开发环境,编译环境,代码书写效率的高低罢了。那么,想学习程序开发的话,选择什么样的语言比较好呢?目前存在的语言成千上万,有名气的如C C++ JAVA C# Python Ruby等等,其中不同的语言都有着自己不同的优势,那么如何选择是好呢?
对于初入计算机界的童鞋来说,我个人推荐的是学习C语言 ,没有用到OOP的思想,没有Pascal的类型局限性(所以说Pascal作为教学语言是灰常强大滴),简单的C语言构建出了这个世界上最牛逼的几个系统——Linux Unix Windows。有了解过各种系统API的童鞋就会知道,到了21世纪很多的API依然是C的接口,虽然说大部分是历史原因,但也不得不承认C语言在这其中起到的作用。Simple is powerful,这是我对于编程的心得之一。C语言就是一门Simple but powerful的语言!C不能OO,C不能处理异常,但C和系统结合紧密,C有着很高的效率,一来可以复习我在上一本推荐里面写的Csapp中的内容,一来也可以加深对计算机程序运行的了解。
也有人提议学C++,我们当年是学的C++,一开始扯什么OO个人觉得很扯淡,一些小型化的东西还是简单的结构化编程来得实在。比如Google的Js处理全是一个个的function,丑陋吧,但是比起很多把一个Js写成各种OO样子的网站,Google的前端处理性能要高到不知道哪里去了。学习C语言咱要推荐的书就是这本Brian W. Kernighan & Dennis M. Ritchie一起写的《The C
Programming Language》(以下简称tcpl)国内有机械工业出版社的黑皮翻译版《C程序设计语言》。尤其是配合CSAPP和我下一次推荐Mark Allen Weiss所写的《Data Structures and Algorithm Analysis in C》那是个舒服,那是个高潮呐。对于这本tcpl的作者我稍微介绍下,D.M.R是C语言的设计者之一,B.W.K是贝尔实验室高级计算机专家,参与过Unix开发。K&R写的tcpl,any more question?
当然,国内也不乏C语言的好教材,比如谭浩强的C语言程序设计,但说实话,国内的C语言教程要不就是快餐,食之无味弃之可惜,学完了还不一定能写出个阶乘的程序。要不就是过于繁杂和啰嗦,总之就是一点,缺乏人性,让人觉得你是被教,而不是一种交流。Tcpl不同,简单明了,200多页将一个C语言剖析到了极致,我看这本书的时候压根就不觉得是在教我什么,而是被K&R带着在他们设计的世界里面转了一遭,一边转还一边和你平等的交流着他们是如何设计这个世界的, 然后你突然大悟,哦神秘的C语言原来也就这样,接着就灰常渴望去实践它,去coding,想着Bill Gates是如何用C构建出整个Windows内核的。
我自己读这本书的时候是在大四,当时找工作想加强下自己基础,但一看这书我就沉迷了,太舒服了,第一次觉得看语言层的东西能看得如此舒服的。即便是大学四年期间我看过很多经典的语言类书籍如《C# 3.0 核心技术》但都没有让我感到如此舒服过。我花了3个晚上看了3道,然后就拿到一坨offers=。=至于怎么看,我个人觉得这本书就200来页,全看是必须的,重点在于第一章到第七章,这是C语言的语法核心,在这其中你可以感受到K&R写的文字的那种亲和力以及Simple is powerful的真谛。第八章主要是介绍UNIX系统接口,这个我只是稍微看了一下。接着,还要看的就是2个附录。附录A主要用于C语言开发的时候进行查询,附录B很重要,C语言自带了一个标准库,附录B就是介绍这个标准库的,最好是能详细的看一下,并且亲字写几段代码来测试一下。
最后,作为一个好的程序员,基础一定要扎实,如同我所说的,一开始就去扯OO是毫无意义的,即便是OO风靡了这么久的今天也有统计表明OO设计的程序仅仅只占所有程序的一半多一点点,余下的基本上都是结构化设计出来的程序,还有0.x%的函数式编程程序。Simple is powerful 牢记!