V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
itsuibi
V2EX  ›  程序员

正在自学 Linux c/c++ ,列了一个计划,麻烦您指点下,看看是否有需要补充的修改的。

  •  
  •   itsuibi · 2014-07-14 20:42:40 +08:00 via Android · 9057 次点击
    这是一个创建于 3786 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我是奔着linux c/c++ 程序员的方向努力的,下面是我自己通过google 及亦师亦友的三哥帮助写得一个计划。(我想知道如果我通过掌握这些书是否能通过面试,看一些公司的招聘条件:本人没有学历硬伤啊。)。
    如题是否有需要补充的,恳请从事IT的朋友指点计划是否可行,如果可以希望能耽误您一杯咖啡的时间写下您宝贵的意见。我将感激不尽,或许因为您的指点未来将多一个从事自己喜欢职业的人。


    我也想在看的途中自己试着做个小项目什么的,希望自己以后进入这个行业可以最快的上手适应。但是这方面太空白了,如果可以希望您能多说一些。
    List:
    已看过的书:

    鸟哥的私房菜
    c primer plus
    c++ primer plus
    windows核心编程(看了一般多吧,不打算从事win下开发就搁浅了)

    视频类教程看过:

    郝斌老师的c,sql,数据结构。c语言也能干大事等,有些乱有点不知道先从哪下手了…

    接下来打算看的书:

    打算按着这个顺序看,不清楚这个顺序是否正确
    Linux编程一站式学习   (正在看)
    linux系统编程
    C++标准程序库
    深度探索C++对象模型
    EffectiveC++
    STL源码剖析
    数据结构(C语言版) 严蔚敏
    大话数据结构
    数学之美
    TCP/IP协议详解-卷一
    算法导论(这个我的数学功底太差,不知道能否看的明白搁到最后)
    Unix环境高级编程
    Unix网络编程
    深入python
    高性能MYSQL(第三版)

    因为没有学历所以想多提高些自己,以后面试通过的概率大一些。
    47 条回复    2018-11-17 08:50:40 +08:00
    jjx
        1
    jjx  
       2014-07-14 20:47:43 +08:00
    将里面的c++换成go 就好了
    ispinfx
        2
    ispinfx  
       2014-07-14 20:48:19 +08:00
    数据结构和算法是不是可以放前一点?
    xcc7624
        3
    xcc7624  
       2014-07-14 20:49:09 +08:00   ❤️ 1
    这种计划对于90%的人来说,都是不靠谱的。
    itsuibi
        4
    itsuibi  
    OP
       2014-07-14 20:56:00 +08:00 via Android
    @xcc7624 谢谢您的意见,请问您认为哪里比较不靠谱呢?如果是怕坚持不下来的话这块的话,这方面我对自己有信心,我现在每天坚持着自己一天要看多少页,当日的事情当日完,如果是其它方面还请您指正。
    missdeer
        5
    missdeer  
       2014-07-14 20:57:20 +08:00   ❤️ 1
    linux那几本不需要,有unix那几本就够了。shell没提及,数据结构一本够了,mysql暂时没必要吧。
    加一本《代码大全》吧,如果你看这书经常有种惺惺相惜的感觉,那至少是中段以上水平了。
    TankyWoo
        6
    TankyWoo  
       2014-07-14 20:57:54 +08:00
    《windows核心编程》如果想看,看下上册就行了,其实我想说不是很有必要去看。

    视频就免了,浪费时间,尤其“c语言也能干大事”,这都是些神马玩意。。。

    至于其他的书,没有一个绝对的顺序,都是经典的书,都值得看,但是:

    学习路线这玩意不是一个靠谱的东西,尤其在你还没有接触这个技术或这本书时。你只管学就行了,后面的路线自然会清晰,你会知道自己接下来应该去选择哪本书来学习。

    话说你上面列过的书,在大学时我大部分都看过了

    有些属于基础书,可以看个2遍,有些是经验书,不必强制去看,把目录翻下,隔段时间翻下自己感兴趣的章节就行。
    itsuibi
        7
    itsuibi  
    OP
       2014-07-14 20:58:26 +08:00 via Android
    @jjx 谢谢您的回复,不过我比较喜欢这个,暂时只想学习这方面的东西。
    itsuibi
        8
    itsuibi  
    OP
       2014-07-14 21:00:19 +08:00 via Android
    @missdeer 嗯嗯,谢谢您的宝贵意见。
    jianzong
        9
    jianzong  
       2014-07-14 21:04:23 +08:00
    前几天提过一个类似的问题:/t/122273,可参考。
    WildCat
        10
    WildCat  
       2014-07-14 21:11:12 +08:00   ❤️ 2
    一页一页看完你可以去BAT当CTO了
    itsuibi
        11
    itsuibi  
    OP
       2014-07-14 21:14:56 +08:00 via Android
    @jianzong 谢谢,认真的读了一遍很有帮助。
    allenforrest
        12
    allenforrest  
       2014-07-14 21:19:22 +08:00   ❤️ 1
    书单有点多。
    你需要先明确一下,学 Linux 是为了学习在 Linux 平台上开发应用?还是 Linux 内核和驱动开发?是服务器还是嵌入式?明确了这部分后,书单会精简很多。

    不过看你既然很痴迷 C++,应该多半是 Linux 服务器的应用开发?
    C++的书,你书单里的 C++ Prime 和 Effective C++ 看完就差不多了,重点是吃透,然后大量的操练。

    总得来说,希望精简掉至少一半的书,增加大量的实际项目操练。
    lequiet
        13
    lequiet  
       2014-07-14 21:25:22 +08:00
    其中的书和类似的书都有看过,曾经还在读书时也这么列出自己想看的书但是不了了之了,现在证明,用到什么看什么才是王道,补基础的话可以看看《深入理解计算机系统》。多用Python。 学linuxC/C++的话,要明白你自己学了想做什么。C/C++的书一开始不要看太多,应该边用边学。
    lequiet
        14
    lequiet  
       2014-07-14 21:27:38 +08:00   ❤️ 1
    列出的书的顺序完全没有什么逻辑和意义。非要从这堆书里挑的话,<UNIX网络编程>,<TCP-IP>, <数据结构>, 其它的先不用看。
    xuwenmang
        15
    xuwenmang  
       2014-07-14 21:41:39 +08:00   ❤️ 2
    单纯看书就一个作用:浪费时间。不动手一个月后忘光。。。反正我是这样。
    Kabie
        16
    Kabie  
       2014-07-14 21:59:41 +08:00   ❤️ 1
    ...脱离实践怎么看都没啥长进的。。。
    bengol
        17
    bengol  
       2014-07-14 22:01:07 +08:00   ❤️ 1
    把Unix环境高级编程和Unix网络编程看完看懂就够猛的了
    tjmao
        18
    tjmao  
       2014-07-14 22:07:19 +08:00 via iPhone
    准备应聘什么开发职位?举几个例子:数据库?网络?图形界面?内核驱动?嵌入式?编写图形界面,C艹是用得着的。

    读这么多书,你自己准备了足够的时间吗?全日制高等学校计算机专业工学士学制为肆年,以你的情况,大概两年就能学完。既然自学,去考个文凭吧。不亏。

    计算机专业设有一些通识性质的课程,主要介绍计算机的发展史、计算机和科学与工业的关系、计算机的构造及其设计理念、数据通信与计算机网络、信息安全、最近10年的研究方向和进展等,我觉得你更需要补补这个。

    另:多学数学,多学英语。
    assassinpig
        19
    assassinpig  
       2014-07-14 22:15:06 +08:00   ❤️ 1
    书太多了,cpp书多易学难用, 建议还是有点针对性的拿一个方面来搞点项目,不然只有cpp的话,学习周期长不说万一到最后还没核心竞争东西的话就不值得了
    tonyluj
        20
    tonyluj  
       2014-07-14 22:18:17 +08:00   ❤️ 7
    正巧也在朝这个方向努力(后端工程师),不过我不太打算深入学习C++,并且我也掌握一些其他可以赚钱的技能,譬如Python和Go(一半大公司才有,或者游戏后端开发)

    基础(没基础,下面的书就不要看了):
    操作系统 Minix作者写的,刚退休,泛泛的讲了操作系统,务必熟悉
    深入理解计算机系统,不错
    数据结构,找一本靠谱的即可,大话也可以
    算法,看 Sedgewick的算法即可,算法导论也不是很难,跟数学关系不大,主要还是逻辑思维能力


    Linux:
    APUE,不看这本书都出门都不好意思和别人打招呼,缺点是面面俱到,针对Unix,没有特别倾向于Linux
    Linux Kernel Development by Robert Love 介绍内核,比深入理解Linux内核简单通俗点
    Linux System Programming by Robert Love 比较喜欢看Love的书
    深入理解Linux内核 内容稍多
    UNP,内容稍旧,也就看看Socket,了解一下过时的poll/select,最新的epoll/kqueue直接看源码吧
    LDD,看看驱动也无妨

    TCP/IP V1 必须要看,TCP/IP三四次握手,流控,滑动窗口,RTT,状态图,必须信手拈来

    C:
    TCPC 经典啊,不能不看
    C专家编程,讲了讲C语言的事情,务必掌握C各种数据类型占用内存,const使用,C程序在内存的结构BSS等等
    C指针与陷阱
    C标准库

    Python:
    官方Doc
    从项目中获取经验比看书印象深刻

    C++:
    我一直当带class的C用,C++目的就是一个多范式的语言,怎么用,怎么选择是自己的事情
    STL/EffectiveCPP不错
    C++对象模型也不错

    source code:
    推荐memcached 少,libevent
    redis
    Nginx 必看
    python的有tornado\gevent(libev)\twisted(不看也可以)

    其他技能:
    VIM/emacs 选一个,推荐vim
    GDB必备
    makefile要会
    git要会

    要完整的做下来,大概需要1-2年左右,并且做Linux C开发稍微枯燥一点,别人写个Android小游戏正在向像别人炫耀的时候,别放弃别懊恼~~~北大青鸟培训Android的老多了,为啥很少有培训Linux开发的~~~

    葵花宝典给了LZ,如果楼主能完整的做下来,大概能满足腾讯/阿里的后端/系统工程师的要求~~~
    tonyluj
        21
    tonyluj  
       2014-07-14 22:22:45 +08:00
    打的稍快有基础错误,
    TCPL the c programming language K&R 写的

    python也可以开发后端:
    一般是python + gevent / python(pypy) + twisted

    go最适合开发后端了,不少MMOG游戏后端已经用Go,七牛也是Go

    nodejs个人看不好,它能做到的别人都能做到,它做不好的,别人依然做的很好
    GPU
        22
    GPU  
       2014-07-14 22:29:55 +08:00
    @tonyluj 我也刚刚开始接触学习C 也是在看K&R的那个 .

    我是打算把C 理解一下 , 然后用学习 go 去写我自己的需要的东西 ,因为貌似用C 做后端有点什么那个说不出来.

    还有层主是否 可以说一下啊 有哪些方便的知识学习有助于学编程呢 ?

    很多人都零零碎碎的说 什么 数据结构 微机原理这些 . 能否谈一谈呢?
    itsuibi
        23
    itsuibi  
    OP
       2014-07-14 22:30:37 +08:00 via Android
    @allenforrest 嗯嗯,谢谢您的指点,正如您说的我想做服务器方面的开发,还有您提到的大量的练习,我也想做实际的项目,我仅仅是把书上的习题和例子敲了出来,关于项目实在是太空白了无从下手。
    luoqeng
        24
    luoqeng  
       2014-07-14 22:31:02 +08:00
    书随便翻翻就可以了,直接上代码来的直接些,比如弄个编译器前端,OS内核,TCP/IP协议栈的源码。 你看这样基本都全面覆盖了。
    iptux
        25
    iptux  
       2014-07-14 22:36:03 +08:00
    把日常用的操作系统换成 Linux
    tonyluj
        26
    tonyluj  
       2014-07-14 22:40:33 +08:00
    @GPU “有哪些方便的知识学习有助于学编程呢 ? ”
    操作系统 —》 C -》数据结构(里面多少有点算法) —》 Let's Go
    当Go熟练的时候,开发过几个项目之后,你就会不知不觉的需要了解底层,这些以后再说也不晚
    itsuibi
        27
    itsuibi  
    OP
       2014-07-14 22:56:56 +08:00 via Android
    @tonyluj 谢谢您解惑,关于项目实践多练习,你能否说的详细些,我也想边看书边做项目,可是这个项目却无从下手。
    allenforrest
        28
    allenforrest  
       2014-07-14 23:12:38 +08:00
    @itsuibi
    可以尝试用 C++ 在 Linux 上写一个简单的 HTTP Server,这样能用到你学习到的 C++ 语言、网络编程、多进程/线程、并发处理、STL、数据结构等等,麻雀虽小,五脏俱全。
    总代码量不会很大,但是能学到和巩固的知识太多了。
    tonyluj
        29
    tonyluj  
       2014-07-14 23:14:03 +08:00
    @itsuibi
    首先从APUE上,把每个重要的例题都敲一遍,重点是文件IO进程线程这些

    然后看UNP吧,看TCP/IP、socket、select/poll这些就差不多,SCTP这些都没人用,不用看了,然后从网上搜搜epoll,学习一下。在看这些的时候 一定要动手看看源代码,推荐FreeBSD+Linux一块看,比如netinet/in.h这个头文件中sockaddr_in结构体,Linux 下的就和FreeBSD下就不一样,顺遍谷歌一下,印象肯定很深。

    这时候,可以写一些Demo项目:比如单进程TCP服务器(从最简单的echo开始),多进程、多线程、select、一直到epoll。
    然后对Linux 网络编程有初步了解

    之后可以看看memcached的源代码,从网上找份别人整理的文档,调重要的部分看一下。
    然后自己实现一个简单的。期间可以学学libevent或者libev这两个库(推荐libev)。

    然后可以找份文档,看看Niginx源代码,这个可是好东西。Tengine(阿里fork的nginx)的文档不少
    然后自己实现一个,简单的就可以

    期间你可能需要温习TCP/IP的知识,了解HTTP的知识。

    到这里,基本能满足校招或者初级后端工程师或系统工程师的能力需求了
    当然必不可少的要刷题~~~leetcode 剑指offer 编程之美 微软100题 等等~~~
    bnpysse
        30
    bnpysse  
       2014-07-14 23:23:15 +08:00
    建议还是不要看太多的书,找一本中级左右的,从头做一遍程序就差不太多了。如果中间遇到什么问题,可以尽量多Google一下嘛。

    类似编程这类需要动手的,光看书效果并不好
    YouXia
        31
    YouXia  
       2014-07-15 01:23:27 +08:00
    Linux C/C++ 学习曲线太长,如果只是想找个不错的工作的话,不建议跳此坑。
    hualuogeng
        32
    hualuogeng  
       2014-07-15 07:14:47 +08:00 via Android
    csapp打个基础。
    xixi10111011
        33
    xixi10111011  
       2014-07-15 08:56:03 +08:00
    @tonyluj
    要是当年找工作能意识到第一份工作的重要性,抑或是能按照这个方法走下来,现在的职业发展可能就会是另外一番景象。
    建议即将找工作的/有意向从事偏底层开发的硕士生按照这个过程走一遍。
    dingyaguang117
        34
    dingyaguang117  
       2014-07-15 09:40:50 +08:00
    @tonyluj leetcode 什么时候火的
    xgdyhaiyang
        35
    xgdyhaiyang  
       2014-07-15 10:49:21 +08:00
    给LZ再推荐一本:《深入理解计算机系统》
    C++不是必要的,Python 可以看一下。
    不需要两年,我2010年大三开始走你现在打算走的路,只花了半年,就拿到了腾讯暑期实习offer.
    itsuibi
        36
    itsuibi  
    OP
       2014-07-15 10:59:57 +08:00
    @xgdyhaiyang 可是我没有学历哎...估计没戏
    duzhe0
        37
    duzhe0  
       2014-07-15 12:19:36 +08:00   ❤️ 1
    书不在多, 在精。 同类型的书看一本就够了, 太过深究细节的书也不要花太多时间。
    帮你做些减法
    ----
    C++标准程序库
    深度探索C++对象模型
    EffectiveC++
    STL源码剖析
    ----
    这几本只看第一本就可以,而且最好放在算法导论后面



    -----
    Linux编程一站式学习 (正在看)
    linux系统编程
    Unix环境高级编程
    Unix网络编程
    --------
    前两本估计内容相似,都是linux编程入门书籍,内容泛而不精, 选一本快速过一遍即可。 后两本太过经典,只涉及标准UNIX系统接口和核心C库接口,需要精读。

    -------------
    数据结构(C语言版) 严蔚敏
    大话数据结构
    算法导论(这个我的数学功底太差,不知道能否看的明白搁到最后)
    ----------------
    只看最后一本即可



    --------------
    数学之美
    TCP/IP协议详解-卷一
    深入python
    高性能MYSQL(第三版)
    -----------------
    数学之美没看过,不评价
    TCP/IP协议详解 我感觉有点老,可以考虑换成国内的教材《计算机网络》
    python的话真不知道有什么书值得推荐,但我觉得你更应该先学Shell
    高性能MySQL并不是一本mysql入门书
    duzhe0
        38
    duzhe0  
       2014-07-15 12:26:30 +08:00
    我建议的书单:

    算法导论
    深入理解计算机系统
    linux系统编程
    Shell脚本学习指南(非常重要)
    UNIX环境高级编程
    计算机网络
    UNIX网络编程

    边读书边实践是非常重要的,装一个linux的虚拟机, 多折腾折腾
    itsuibi
        39
    itsuibi  
    OP
       2014-07-15 13:06:00 +08:00
    @duzhe0 谢谢您给我一个清晰的思路,忘记说了,我已经装了centos 看的时候也都在机器上敲了,也认真的看了每个人的热心解答,关于建议我不要只看书,我应该怎么实践呢,只是书上的例子我自己也感觉有点少,不知道如何选择适合自己的项目。
    duzhe0
        40
    duzhe0  
       2014-07-15 13:36:42 +08:00
    实践就是说看书的同时把代码敲一下,编译运行一下看看效果,加深印象和理解。看完以后, 也可以选择写一个简单的ftp服务器, http服务器之类的东西练手。能找到一份相关的工作是最好的,就不愁不知道干嘛了
    MarioLuisGarcia
        41
    MarioLuisGarcia  
       2014-07-15 18:28:36 +08:00
    @xcc7624 个位数的9没有了,还有小数部分的9
    GPU
        42
    GPU  
       2014-07-15 19:48:57 +08:00
    @tonyluj 关于操作系统有什么书推介一下呢, 貌似是理解了系统的原理这些的, 对编程或多或少有点帮助. 新手不是很懂 .
    hellogmh
        43
    hellogmh  
       2015-07-21 21:39:19 +08:00
    @xixi10111011 我跟你有一样的想法,但是任何时候都可以华丽转身,就看舍不舍得放弃!
    HowToMakeLove
        44
    HowToMakeLove  
       2017-05-05 13:44:19 +08:00
    3 年了,楼主我问你,你现在学的怎么样了?
    itsuibi
        45
    itsuibi  
    OP
       2017-05-08 14:50:41 +08:00
    @HowToMakeLove 3 年了,还有人关注谢谢,生活仍在继续,理想还未达到;有些事不是想就可以达到,我败给了生活。
    KaGa
        46
    KaGa  
       2018-11-16 09:26:51 +08:00
    四年了,楼主学的怎么样了?
    我也是刚开始自学编程,发现书单跟楼主差不多,只是我学完 C 语言就学了数据结构与算法( C 语言描述),还有 C++ primer plus,Python Cook Cook,STL 源码剖析,鸟哥的 Linux 私房菜和一点点 Java,l 明年就毕业要去找工作了,嗨呀,好焦虑啊。
    最近在练标准指法打字,因为发现编码盲打总是出错.....
    itsuibi
        47
    itsuibi  
    OP
       2018-11-17 08:50:40 +08:00
    @KaGa 我没学出来,希望你能坚持下去。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5563 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 08:19 · PVG 16:19 · LAX 00:19 · JFK 03:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.