计算机系本科生编程进阶指南

我是一名普通本科计算机系在读生,热爱编程,沉迷于coding的“创造力”。
编程的世界很美妙,然而信息繁杂,方向甚多,想要全部掌握肯定很难,所以,我个人认为有一篇指南性的文章帮助大家筛选出好的书籍、资料,给出有价值的指导性意见是非常有必要的。
由于本人也是本科生在读,所以难免视野狭窄,于是借(zhuan)鉴(zai)编程入门指南-萧井陌,Badger,结合自己的实际情况,整理如下。


第一阶段:启蒙


目标 : 建立起对计算机体系的整体概念,简单掌握编程语言。

  1. 精巧的C语言:原文推荐的入门语言是python,相较C语言,python对初学者更优好,然而我还是推荐C语言作为第一门语言。我的第一门编程语言是Pascal,面向过程的Pascal给我感觉更像加了特殊符号的数学公式一样,简单易学,不过现在来讲用得比较少。C语言虽然有很多未定义行为(这对初学者来说可能并不是什么好消息),但是计算机系的学生都会有老师讲解,这对初学者来说也算是一件好事,而且C语言也可以帮助初学者很好的理解类型、变量、函数、结构体、指针(地址)等等概念。C语言现阶段只需要浅尝辄止,深入研究可能只会让你头大。

    推荐书籍: << The C Programimng Language>>

  2. 炫酷自由的python:python是一门充满了“黑魔法”的脚本语言,它可以做很多事情,比起C语言,她给你的反馈更及时,不用多久你就可以做点小玩意出来。及时的反馈对初学者来讲是极大的奖励,如果你不喜欢C,可以将python作为第一门语言(相信我,你以后还是不得不学习C的)。

    推荐书籍: << Learn Python the hard way >> (不要被这个名字吓怕了,虽然是“笨办法”学,但是它效果很棒。如果对python很感兴趣,可以学习一下 << Python核心编程 >>
    建议配合:公开课:计算机科学及编程导论,可以帮助你更好的建立对计算机的整体概念。

  3. 了解巩固计算机的基本概念:哈佛大学公开课:计算机科学cs50,相信我,这门公开课会拓展你的视野。

第二阶段:入门


目标:让自己的思考更“程序员”,打好坚实的计算机基础。

万丈高楼平地起,坚实的计算机基础有助于以后更好更快的学习新的知识。有些朋友可能觉得这些并不重要,没有多学几门语言,一行行的代码来的实在。
当然,完成了第一阶段之后有能力接触其他相关应用的开发,不过我的思考是,代码或者说某项特定的技术不过是自己的思想的外在表现形式,熟悉一门语言仅仅是熟悉了一种工具而已,如果自己的“内力”不够,写出的代码也很suck,本科生阶段话费这些时间学习计算机基础知识,是很值得的。

  1. 计算机实际上就是对现实世界的抽象,强大的抽象能力,良好的逻辑思维模式是一个好的程序员的内在体现。 << 计算机程序的构造及解释 >>这本书可以在本质上改变你思考问题以及用代码解决问题的方式,而且通过这本书你可以初步接触函数式编程

    推荐课程: SICP公开课 : 中英字幕
    学好这本书的关键在于,尽力完成书的习题,绝对受益匪浅。
    如果觉得自己是在搞不定这本书,可以试着看看<< 计算机系统要素 >>。

  2. 程序在计算机中是怎么表示的,她的运行流程是怎么样的?计算机是如何看待程序的?想要了解这些,一本<< 深入理解计算机系统 >>就够了。不要被这个名字唬住了,这是一本入门书(如果学过C语言那么理解起来更为容易)实际上当你看过它原名(Computer System : A programmer’s perspective)时你就会发现中文译名时多么的不恰当。
    推荐课程:软硬件接口,这是CSAPP的一个子集,这门课程的精华是它的几个实验,相信你会爱上。

本阶段的两本书,值得反复研读。


第三阶段:扩展


目标 : 接触更多的计算机技术和方向,之后再从中挑选自己感兴趣的几个点在下一阶段继续学习研究。

  1. 数据结构及算法 : 数据结构和算法研究如何设计出更好更快的解决问题的方法,可谓程序设计的灵魂部分,这部分参考书很多,但是我觉得讲太多反而适得其反,先看下<< 数据结构与算法分析 >>在看<< 算法导论 >>应该足够了。当然,这部分知识就像数学题一样,你需要做大量习题,可以考虑ACM比赛的题目,也可以做一做 leetcode上的题目。
  2. 编程语言 : 如果你很好的完成了第一第二阶段,那么你熟悉了面向过程的语言、脚本语言(实际上python也是面向对象的),函数式编程语言,是时候学习一下其他语言了!有了前边的基础,你学起来会很快。
    C++和java,初学者总是会着学哪一个。我觉得学哪个都无所谓,不需要纠结这些东西,每种语言各有优劣,关键在于你要去学。如果想在安卓系统下做些app或者致力于web开发,建议学习java,入门只需要 << java核心技术 : 卷1 >> 。如果你很喜欢C语言的指针,追求效率,建议学习C++,不过可要做好心理准备,她很傲娇,学习曲线比较陡峭,建议<< C++ Primer>> ,这一本书入门足够了。
    PS:编程语言想要深入学习,那可不仅仅是多看几本书的问题,需要大量的练习,遇到什么问题多思考,多google或者来这里搜寻你的问题。

  3. web设计与开发:你更喜欢做出酷炫的网站?那么你一定会学钟情于html5+css3+javascript的超值大礼包。在这里和这里你都能找到满意的资源。

  4. 接触Unix和Linux:什么?你厌倦了windows,又觉得mac太贵?没事,咱们还有另外的操作系统供你蹂躏。读<< Unix编程环境 >>和<< Unix编程艺术 >>体会Unix“哲学”的魅力。
    看<< 鸟哥的Linux私房菜 >>简单了解Linux系统,装一个玩玩,推荐使用Ubuntu。接下来,调教你的Linux和Unix系统的吧!。
    PS : 如果你学习了C++并且对Linux情有独钟,建议阅读<< Linux多线程服务端编程 >>。

  5. 数据库:web开发不只有前端(html+css+javascript),后台相关知识也很重要,特别是数据库。无论你是否开发网页,数据库的理论及概念都会对你有很大帮助,建议阅读<< 数据库系统概念 >>,如果想开发一个数据库,那么<< 数据库系统实现 >>会很合你的胃口。

  6. 计算机网络 : 你想了解计算机网络是如何搭建的?网络通信如何实现?<< TCP/IP详解 卷1:协议 >>是不二选择。

  7. 编译原理:学了很多语言,你想不想开发一个你的编程语言?那该是多么炫酷!这也是我将要努力的方向(然而我还没看完CSAPP),经典数目有虎书、龙书、鲸书等,不过我粗略的翻了一下,感觉不像是很入门的样子,可以考虑先看一下<< 编程原理及实践 >>。

  8. 操作系统 : 什么,你想写操作系统内核!哇哦,那可是一项大工程!如果你想轻松一点,写写试试,推荐 <<30天自制操作系统>>,这可不同于什么<<21天精通XXXXX>>,是一本非常有趣的数目。如果你想更“严谨”一些,可以先看看系里发的操作系统的教材,然后看<< 操作系统设计与实现 >>。

后记


第一第二阶段是必做的,第三阶段大家精力有限,可以都大体了解一下,最后再慢慢选择自己感兴趣的方向。
如果本科期间能够完成以上三个阶段,我觉得应该算是不错的毕业生了。
在这之后,相信你已经可以自己寻找适合自己的学习资料,一切也都将顺利成章。
当然,你必须脚踏实地的去做。当你开始干这些事情的时候,那么恭喜你,你打败了大部分浑天聊日的大学生了233333。

虽然说努力未必有回报,然而不努力就一定没有回报给你看。

计算机技术更新换代很快,这就要求我们程序员不断的练习,多“折腾”自己。
我们不愁没有新的技术可学,可是一昧的追求“最好的技术”,“最有前途的技术”实在是得不偿失,本科生应该打好基础,这样以后学习什么都能更快更好的掌握。

还是那句话,万丈高楼平地起。
如有任何意见建议,畅所欲言,你我共勉!
再次感谢原作者的授权,也请大家尊重他的知识劳动成果,去原地址看看,相信你可能会有不一样的理解。

你可能感兴趣的:(Others)