关于学习路线的讨论

Chris_D 发布于 2015年12月13日
无人欣赏。

我眼中的程序员学习线路

一门语言/一个IDE/一个编辑器

首先,我觉得应该学习一门语言来作为入门的基础。

我一开始的选择是C语言,因为需要做一些嵌入式相关。我选用的是《C Primer Plus》,这本书现在看来,不推荐看中文版的,我买了中文版纸质版的,云巅工作室翻译的版本。小错误比较多,有错字、排版之类的问题,内容还是比较易懂的,有同学说《C与指针》讲得更好,大家可以试试。

在编程语言的选择上,见仁见智,我觉得选个能用得上的最好。

学习编程,必然要手敲代码。这个时候IDE肯定是要学会的。如果在微软体系下,那VS一定是最好的选择,每个版本都有免费的Community版本,足够自用了。我用过Eclipse、Dev C++,还是觉得VS功能比较强大。

IDE会封装一些程序编译和调试的过程,如果你想要更深入的理解程序编译、调试的过程,你可以试着自己手动编译,写一些makefile。当然,这目前限于Linux,微软平台上的,是另一套编译工具,MSBuild,以及nmake(貌似是这个),这些我还没有深入了解,尝试过一次用Eclipse配置VC编译器,没有成功,如果有大神成功了,欢迎探讨一下。

关于编辑器,我试过NotePad ++,Sublime Text,还有Vim。最后决定深入研究一下Vim,我在Ubuntu下用Vim与Shell的时候,发现效率还是不错的。我也学会了在linux下写简单的makefile,后期的目标是实现类似IDE的自动编译。

数据结构与算法/框架

一开始做嵌入式,我只知道要读懂代码,能够做简单的修改,根本不知道数据结构、算法、框架。然而经过一次面试,我发现,我所知道的嵌入式,连程序员的边还没沾到,简直是农民工。于是我开始了解一些CS方面的必备知识以及技术路线。

我觉得,到了第二阶段,已经脱离了hello world,能够写一些多文档的console程序,还不能形成一个比较大型的程序。当程序的量到达一定程度的时候,需要打交道的数据量逐渐增加。这个时候开始学习数据结构与算法,是十分必要的,能够理解数据结构,选择正确的数据结构,能够理解算法,并正确运用,已经一只脚跨入码农界了吧(这是我猜的)。

我选择的是清华的《数据结构(C语言版)》,之前看了一点同学的《算法导论》,觉得太厚了,有些部分比较难理解,所以选了一本薄的,最近打算系统地再学习一遍,欢迎交流。

目前我对算法的理解就是,计算受到性能的局限,用时间换空间,是无奈的,计算机能力逐渐增强,用空间换时间,或许是自然的需求。如果一个算法,能够在时间和空间上同时节约资源,对比现有的算法有所提升,那这就是非常好的算法。

关于框架,我最开始觉得自己做一个能看的到窗口的程序,是一件很有成就感的事情。我尝试过Win API,改写了一个贪吃蛇,用的C++,MFC也看了一点,不过还没怎么理解,这些框架,好像有点老了,现在流行什么WPF,MVC,MVVM,我还没有来得及去搞懂,这些也在我的学习计划之中。

看了一些关于框架的文章之后,我觉得还是先使用,理解思想,慢慢摸索,好坏不论,只要存在过有人用,一定有比单纯堆砌代码更可取的地方吧。多学点也没事。

关于C语言的框架,在Liunx平台上,可以试试GNU的GTK+,如果你只会纯C,这或许是你为数不多的选择。至于Windows平台,貌似选择不是太多,Win API好像C语言也可以。不用太纠结于哪个框架好,学习一个能用的,应该就可以了,框架只是一扇窗,让你看到了大型程序是如何组织的。

数据库/设计模式

学会了框架和数据结构,我觉得这个时候可能已经能写一个简单的小应用了。这个时候,代码量还在逐渐增加。管理数据的量还在逐渐增加。

我认为这个时候可以开始学习管理数据库。学一点SQL,然后学会用所学的语言,操作一个轻量级的数据库,比如SQLite,或者学学MySQL,当然,最近流行的NoSQL,我还没研究过,也不知道是什么鬼,欢迎大家普及一下。

要想提高代码的效率,复用是一个十分有学问的事情,所以我觉得需要学习设计模式的内容。我大概看了一点。觉得应该很有用,规划进入学习路线。大家推荐推荐什么书比较好。

操作系统/软件工程/计算机网络

进入了下一阶段,我觉得应该学习一些软件工程和操作系统的知识。我最近翻了之前买的软件工程,觉得还没到开始学习的时候,有的东西还不能理解。所以决定过一段时间再看。

操作系统贯穿编程的始终,学习C语言,不得不提UNIX。所以我在考虑买一台mac,等我工作了自己攒钱买。或许能赶上明年6代Intel平台的rmbp。Linux作为Unix的开源替代,我最近在旧的笔记本上安装了Ubuntu,买了《Unix环境高级编程》,已经规划进入学习路线。另外做嵌入式,还在看RT-Thread,不知道有没有研究过的朋友。

计算机网络技术在面试华为等企业的时候,面试官都有问到。进入互联网时代,我觉得这是必须了解的,据说《TCP/IP详解(卷一)》就足够了。

快速开发/跳出工具的局限

作为一个合格的程序员,不能只掌握一门开发工具。应该用一个合理的方式完成。

有两种方式,一种是为了达到预定的目的,选择一个合适的工具,或者一批工具的组合。

第二种是,没有合适的工具,对现有的工具做出扩展,这个相对而言要求对于工具有比较深入的理解。

不要为了使用一个工具限制自己,一切应该以解决问题为最终目标。

大家的学习路线都是啥?欢迎大家讨论。

共3条回复
brambles 回复于 2015年12月13日

其实我想说的是……绝大多数计算机专业的学生自己课本都折腾不透。

如果是一个计算机专业的学生的话,把自己学的那几本书都折腾透了,按照书上的要求代码都写了,基本就是秒天秒地的大神了……

唉,曾经的时间都被狗吃了

Chris_D 回复于 2015年12月13日

1楼 @brambles 我是学机械的。。。只能靠自学了

ruandao 回复于 2015年12月14日

可以试试 sicp

登录 或者 注册