keep_walker :
今天晚上我看到这篇文章。
http://programmers.stackexchange.com/questions/62502/small-c-projectshtml
我也遇到了和提问的老外同样的问题。。能给像遇到这样烦恼的程序员一点建议嘛?谢谢!程序员
我相信,这多是不少朋友的问题,我之前也有这样的感受,编程编到必定的时候,发现能力到了瓶颈,既不深,也不扎实,半吊子。好比:你长期地使用Java和.NET ,这些有虚拟机的语言对于开发便利是便利,可是对于程序员来讲可能并不太好,缘由有两个:web
虚拟机屏蔽了操做系统的系统调用,以及不少底层机制。算法
大量的封装好的类库也屏蔽了不少实现细节。shell
一段时间后,你会发现你知其然,不知因此然。。我之前在CSDN上写过一篇《Java NIO类库Selector机制解析(上,下,续)》,在那篇文章中我说提到过(有讥讽的语气)Java的程序员不懂底层实现,因此很难把技术学得更扎实。此时,一部分程序员会不天然地想学学底层的技术,很天然的,C语言就被提了上来。数据库
下面是我给这位朋友的一些建议:编程
鼓励并为你叫好。我鼓励你想要去学C语言的想法和精神,不少人都以为C语言好学,其实并否则。(你能够看看《C语言的迷题》)如今的这个社会更多地去关注那些时髦的技术,而忽略了这个流行了40+年的C语言。一门技术若是可以流行40多年,这才是你须要去关注和学习的技术,而不是那些刚出来的技术(过分炒做的技术,Windows编程史)。这才是踏踏实实的精神。服务器
不要找借口。这一条路走下来并不容易,不要给本身找借口。我最不喜欢听到的就是“很忙,没有时间”这样的借口。我之前在银行作项目,早9点到晚10点,周一到周六,我同样能够天天抽1个小时来看书和专研,一年下来也能精读五、6本书。我如今的工做项目和招聘任务很紧张,刚生的小孩只有本身和老婆两人带,还须要准备讲课,可是我仍是可以找到时间看文章写文章维护酷壳。因此,我能够告诉你,“时间就像乳沟,只要你肯挤,就必定会有”。网络
学好C语言和系统编程。我认为,学好编程有四个方面:语言、算法和数据结构、系统调用和设计。数据结构
语言。我能够告诉你C语言有两大主题你要好好学,一个是内存管理,一个是指针!这个世界上90%以上的C/C++出的严重性错误全是和这两个有关。不要看谭浩强的那本书,那本是本烂书。推荐这本书给你《C程序设计语言(第2版·新版)》
算法和数据结构。我认为,用C语言实现算法和数据结构莫过于最爽的事情。推荐你看这本书——算法:C语言实现(第1~4部分)基础知识、数据结构、排序及搜索(原书第3版),还有那本经典的《算法导论》
系统编程。Windows下推荐两本书——《Windows 程序设计 》和《Windows核心编程》,Unix/Linux下推荐两本书——《Unix高级环境编程》和《Unix网络编程卷1,套接字》《Unix网络编程卷2,进程间通讯》尤为是《Unix网络编程》这本书,一通百通,不管Windows仍是Unix/Linux,都是同样的。
系统设计。关于设计方面,我全力推荐《Unix编程艺术》,看完之后,你就明白什么是真正的编程文化了。而后,当你看到Windows的Fans的某些言论时,你就知道什么叫一笑了之了。
若是你能在2-3年内精读完这些书,并所有融会贯通,那么你就明白什么是一览众山小的感受了!我足足花了5年时间才算是真正所有读完这些书的。最后,祝你好运!努力!
——-更新:2011/03/29 20:00——-
我想,这篇文章主要想告诉你们这么几件事:
编程编到必定时候,你就须要了解底层系统的机制,不然,知其然不知因此然。
我没有否认非C的程序员的逻辑,真正的逻辑是——若是你想要了解底层机制,请学习C语言和操做系统。
40多年的Unix/C影响深远。包括影响了Windows。若是你想一通百通,必定要了解Unix。那是计算机文化真正的根。
不要肤浅地去思考问题。好比,不要觉得一个DBA就不会考虑数据库引擎的内存页面的问题。也不要觉得Web程序员就不须要了解后台的服务器和脚本的运行性能以及TCP/IP的问题
写在最后:说实话,我本科是学信息与计算科学的,可能不少人都没据说过这个专业,不过不要紧。我想说,我今年已经研三了,从本科开始我就下决心走计算机这条道路,可是总感受始终没有走上正途,看了这篇文章,真的令我很是受用。