文章转载自丨悟空问答:EmacserVimer
本文的回答完全基于笔者大学时候的学习经历作出的自己的一些看法,本文适合那些真正想成为一个软件工程师或者说成为一个真正的程序员的同学,因为本文并不会推荐谭浩强老师那本销量超千万的异常惊人的《C程序设计》,因为笔者认为那更适合那些只是想考一个计算机等级证书的童鞋,而不适合想成为一名真正程序员同学的需求。
当然这并不是说有抹黑谭浩强老师的意思,作为中国计算机科学界老一辈的计算机教育学家,老教授依然是值得我们尊重的德高望重的行业布道师,只是笔者觉得有更好的选择。所以,如果你只是想要学习C语言来考个计算机等级证书,仅此而已,出门左转,谭浩强老师那本《C程序设计》对于考级来说绝对是本好书。但是这本书的问题在于太纠结于语法细节,也就是说过于关注纠结于类似于文字游戏的东西,但是对于编程思想的培养做得不够,而且很多地方讲得不够深入,总感觉点到为止,没到精髓这种,而且代码风格也非常不好。
首先推荐如题所说C语言入门需要看什么新书,这里笔者拓展一下,推荐一本书和一个视频,当然书笔者是看完了,但是视频确实只是看了一点,因为视频是因为毕业工作以后当时觉得网易云课堂是个不错的平台看到的,随便看了一下,觉得老师讲课风格不错所以推荐了。这本书就是《C Primer Plus》,注意名字不要搞错了,因为还有两本名字跟这本书比较像的,不过都是C++的书哟。
这本书英文版中文翻译版都有,大家可以去买,当然如果你的英语不太差的话我建议去买英文版的来看,因为译本没办法原汁原味,有的地方翻译有一点费解。我相信普通的大学生还是有这个水平的,如果遇到少数不懂的,借助网络的力量,Google翻译、百度翻译,金山词霸、有道词典什么的都能很好的解决。这本书不纠结于抠字眼等语法细节上的问题,代码规范也较好,注重思想培养,但是书洋洋洒洒近700页,所以需要一些耐心来阅读这本书籍,但是就好想说学习就是攀登高峰,过程一定是艰难的,但是结果是美好的,等你攀上高峰以后,再回头,风景这边独好。
再一个推荐的入门的视频时网易云课堂上,浙江大学翁凯老师的C语言课程,当然笔者工作忙,再加上入门课程来说对我已经没有太大的作用,所以没听完,但是听了几个小节觉得老师的风格还是讲得很好的。虽然跟国外很多教授的课程比起来还有差距,但是在国内来说还是算不错的课程了,因为能看到思想上的东西。有了这两个课程,我相信你一定可以有一个较好的基础了,那么接下来应该做什么来提高自己呢?
笔者认为,既然讲到C语言,有一本书是不得不讲的,虽然随着时间的推移,C语言标准也在不断前进,但是这本书依然是一本非常好的书籍,她背后所蕴含的哲学,两位伟大的计算机科学家的伟大哲学思想,都是值得肯定的,并且这些学家还一手打造了unix操作系统,并用C语言重写了unix操作系统。这本书就是Dennis Ritchie和Brian W. Kernighan的《c programming language》(the second edition)。这两位科学家一位是参与了贝尔实验室的诸多关于unix和C语言的相关工作,另一位丹尼斯里奇则是和肯汤普森齐名的unix和C语言之父。
如果你能坚持的把这两本书看完,你在C语言一定会有很好的收获,如果你还想学习到更多有关C语言的知识,你还可以看诸如《C陷阱与缺陷》、《C专家编程》、《C和指针》等等这些书籍来提升自己的理解力,更加全方位和深入的理解C语言这门编程语言,毕竟C语言是很多编程语言的原始模板,学好C语言对于以后学习其他编程语言也是非常有帮助的。
除此之外,要学好编程,良好的数学基础、数据结构、算法基础等等也是很重要的,你可能需要学习一些数学(尤其是离散数学)方面的知识,再就是学好算法等知识。这里笔者在推荐两门经典的课程,一门是MIT的《算法导论》这门课,在一个就是Stanford的《编程方法学》这两门课程,在网易公开课上都能找到。这两门课程笔者陪伴了几乎一个学年的大学时代,虽然到现在为止笔者都还没能全部消化掉,但是至今仍然觉得这是两门非常经典的课程,这些世界上最顶尖计算机院校的经典课程,老教授都是德高望重的顶尖教授、科学家,绝对值得你学习。
最后,笔者要再次强调的是,写代码这件事情,最重要的是实践,一定要多学习多实践,没事多逛逛GitHub、stack overflow等等站点,国内例如开源中国,segmentfault、CSDN等等站点,有时间也关注一下开源论坛,以及类似于Google的开源AI学习框架TensorFlow等等众多新技术趋向,如果你愿意跟我一样熬夜看三巨头Google I/O、Microsoft build以及apple WWDC等等开发者大会,增长自己的见识。坚持就是胜利,养成独立解决问题的习惯,还能随时关注技术动向,我相信你一定能成为一个优秀的程序员的。
另外想要成为一个优秀的、有能力程序员,做软件开发的话,就来学习C/C++吧,而且学习编程的话有一个学习的氛围跟交流圈子特别重要!这里我推荐一个C语言C++交流扣裙,--先7841;后43133,不管你是大牛还是小白,大家都一起成长进步。