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

想学 C++,求老司机分享自学线路(推介书目或者视频)

  •  
  •   Liwendian · 2016-11-22 22:50:47 +08:00 · 3265 次点击
    这是一个创建于 2929 天前的主题,其中的信息可能已经有所发展或是发生改变。

    感觉 C++好强大,好像学

    30 条回复    2016-11-24 07:17:24 +08:00
    feiyunfirst
        1
    feiyunfirst  
       2016-11-22 22:52:15 +08:00 via iPhone
    坐看回复
    lrigi
        2
    lrigi  
       2016-11-22 22:55:51 +08:00
    C++ Prime 怎么样
    HuangLibo
        3
    HuangLibo  
       2016-11-22 22:57:19 +08:00
    学好 C++ 可能需要十年光阴。十年之前,我们是朋友还可以问候……😓😭☠️
    Mistwave
        4
    Mistwave  
       2016-11-22 23:01:37 +08:00 via iPhone
    《 C++ Primer 》
    刷完再谈接下来的
    shijingshijing
        5
    shijingshijing  
       2016-11-22 23:02:48 +08:00
    我就说一句, Essential C++虽然是大牛写的,而且看着不厚,但是错误真心多,我是被虐的死去活来了,真心不建议看。
    myway
        6
    myway  
       2016-11-22 23:03:51 +08:00 via Android
    网上资源那么多,天冷懒得搜吗。。。
    miki6180
        7
    miki6180  
       2016-11-22 23:11:03 +08:00
    珍惜生命, 不要学 C++.......除非真是工作需要
    Liwendian
        8
    Liwendian  
    OP
       2016-11-22 23:13:08 +08:00
    @miki6180 额,,,哥,何出此言
    veelog
        9
    veelog  
       2016-11-22 23:18:53 +08:00 via Android
    学 c++感觉好多工作都是修 bug
    Tianqi
        10
    Tianqi  
       2016-11-22 23:21:59 +08:00
    C++ Primer ,之后进阶看 Effective C++。
    taozhijiangscu
        11
    taozhijiangscu  
       2016-11-22 23:23:22 +08:00
    C++ Primer 把书翻烂
    同时动手写一些小项目,学习和实践并进
    Gcourage
        12
    Gcourage  
       2016-11-22 23:32:05 +08:00 via iPhone
    @miki6180 为什么这么说,很多底层都是 c++呀
    w99wen
        13
    w99wen  
       2016-11-22 23:47:48 +08:00
    不推荐。除非读硕。
    需要 c++的公司太少了,实用性比较低。
    除非搞研究,或者嵌入式之类的,不然没必要。
    我见过的公司,互联网的,没见过用 c++的。
    Betsy
        14
    Betsy  
       2016-11-22 23:54:36 +08:00 via Android
    跟个贴,刚刚看完 C++ Primere ,求问想进一步垒实基础的话,能做哪些小项目?
    feelapi
        15
    feelapi  
       2016-11-22 23:54:36 +08:00
    珍惜生命,远离 C++.
    建议把 C 语言好好学学就够了。
    Kilerd
        16
    Kilerd  
       2016-11-23 00:10:44 +08:00
    学 Rust 啊,学什么 C++ :doge:
    jeeyong
        17
    jeeyong  
       2016-11-23 00:35:38 +08:00
    @Gcourage 你可以会用 PhotoShop,但是未必需要知道哪些图像滤镜或者效果是如何通过逻辑算法实现的...
    你可以选择一个高级编程语言去创造价值,但是未必需要知道最底层的东西.
    选择合适自己的...生存下去,再选择自己喜欢的..当做兴趣
    C/C++是一个漫长枯燥的过程. 据说, 成为一个初级的 C/C++开发人员,需要有效编程时间 3700 个小时左右.
    或者利用起来你的业余时间吧,少年.
    hzwjz
        18
    hzwjz  
       2016-11-23 00:43:37 +08:00 via Android
    跟楼主有一样的想法,我是过了一遍的 c++ primer ,暂时先放在一边了,为了先应对找工作的事情。
    AutoRip
        19
    AutoRip  
       2016-11-23 01:11:20 +08:00 via Android
    是学 C++还是学面向对象?😶
    miaotaizi
        20
    miaotaizi  
       2016-11-23 08:20:50 +08:00 via iPhone
    别听他们的,想学就学,先看书就是.要有耐心
    000wangxinyu000
        21
    000wangxinyu000  
       2016-11-23 08:59:29 +08:00
    其实先接受面向对象的思想比较重要吧~
    com2c
        22
    com2c  
       2016-11-23 09:23:01 +08:00
    visionsmile
        23
    visionsmile  
       2016-11-23 09:27:26 +08:00
    楼上说的很多了,有 C 基础之后可以直接去看 C++ Primer ,但 C++ Primer 并不是一本零基础的书。最好看之前有 C 的知识,而且章节顺序排列有些古怪,有些前面提到的内容你只有看到后面才能明白。但只有 C++ Primer 并不够,其实 C++ Primer 也只是列出了一些 C++工程中比较常用的部分,但 C++还有很多特性在 C++ Primer 中没写的(去读读代码就会发现别人的用法都看不懂...),这个可以看 TC++PL(The C++ Programming Language),其实 TC++PL 主要还是当手册来用,不过可以先大概过一遍有个基本的了解。后续就是 Effective 系列了,尤其是 Effective C++这个是必看的。建议阅读顺序为 C++ Primer->Effective C++->TC++PL ,会让你对 C++有更深的了解。我写过一份书单你可以参考一下: [学习 C/C++的一些书籍和工具]( https://imzlp.me/2016/06/12/some-of-the-c-and-cpp-books-and-learning-tools/)
    starcraft
        24
    starcraft  
       2016-11-23 09:49:16 +08:00 via iPhone
    primer 这破书,少看为妙。
    coderluan
        25
    coderluan  
       2016-11-23 10:13:13 +08:00
    NB 的东西多了,不要为了学习而学习。

    C++主要分应用和算法两个方向:
    应用方向基本没啥市场潜力和性价比可言,建议选择更合适的语言。
    算法方向 C++只是工具,核心是各种算法和专业知识,这样的话推荐方向是:
    C 语言(看一本经典书就行《 C 和指针》《 C 程序设计语言》) -》 C++(语法随便看看,重点是面向对象, Primer ))-》数据结构 /操作系统 /算法 /编译原理(弄本简单的大学教材就行)-》你想做的领域的知识和算法。

    学完了,你就可以做你想做的或者找工作了。东西做完了或者找到工作了,之后再按上面顺序深入学习即可,这时候才到上面 Effective C++之类书登场。

    PS :如果就是感受下 C/C++与 Java 之类的不同,找一本《 Learning C the hard way 》当故事书看就行了。
    hitmanx
        26
    hitmanx  
       2016-11-23 11:20:58 +08:00
    @veelog Sad but true.
    q397064399
        27
    q397064399  
       2016-11-23 12:54:00 +08:00   ❤️ 2
    第一,从择业的角度来讲,选择一门语言其实就选择了其背后整个生态环境与利益链,
    业界这 10 年来 C++市场在下滑是有道理的,做应用开发 C++暴露了太多底层细节,开发速度太慢,
    而且招个新手写出来的代码还容易出错,
    做底层开发,追求极致性能, C 语言几乎是不二之选,而 C++带来的那些所谓的 函数式 泛型 等等
    在这些底层场景显得有点鸡肋了,话说这么多年了, Linux 还是 C 在主导
    所以这些年, C# Java PHP 等语言在应用领域大行其道,不是没有原因的。

    第二, C++标准库很难用,以 GP 为范式弄出来的 STL ,代码出问题很难定位,
    C++11 之后 boost 与 stl 有很多重叠的地方,而且 C++命名空间是个历史遗留的坑,像 shared_make boost 跟 stl 都有实现,如果偷懒的话 很容易出现混淆的问题

    第三,编程本来就很难了,学一门操蛋的语言让编程变得更难是没有意义的,
    高效的算法并不取决于语言,而是取决于算法本身是否是当前应用场景的最优解,实在不行的话,你可以把 Java 全部译成机器码,再不行的话,还可以加钱买机器,毕竟有的时候 加钱上机器比程序员的优化靠谱多了

    第四,所有的编程其实都可以用 if else 就能完成,如果将编码工作从编程活动中剥离开来,编码的本身就是人与机器对话的过程,从 Java 这个 10 多年的发展来看,业界达成了一个共识就是 开发应该分项目来选择语言,对于绝大部分面向用户的应用开发 应该牺牲一部分性能来 降低程序员犯错的可能性, 例如 Java 取消了 指针 虚函数( Java 的所有类方法都是 虚的,直接覆盖即可,无需声明)加入了垃圾回收 等等高级的特性,这些设计 无一不是为了降低程序员与机器对话所需要学习的难度

    第五,很多初学者觉得学习一门很难的语言是有必要的,很多业界高手也是这样鼓吹地,你不要去学 Java ,先学 C/C++ 在学习 C/C++的路途上,会学习到很多计算原理的知识,这其实是本末倒置。
    编程首要的问题 是学会如何解决问题,而解决问题的方式 并不需要计算机,在早些年的时候,美国还人工算过导弹轨迹,难道这些算法就不能移植到计算机上面了?
    我认为一个程序员需要了解计算机的底层原理运作,例如函数调用时栈的展开 程序申请的堆内存是如何分配的,但是并不需要从 C/C++这条路上走过去,你随便找几本 例如 CSAPP 之类 讲底层原理的书就好了, C++能远离就远离吧。

    第六,编程 最重要的是思想,而不是语言,好的语言 应该在 程序员的学习成本与机器运行时性能 做出妥协,而不是处处让人踩进坑,很显然 C++处处让人踩进坑,否则 C++不会沦落到今日的地步

    最后一句话,珍爱生命,远离 C++
    xuyuheng0905
        28
    xuyuheng0905  
       2016-11-23 13:12:00 +08:00
    黑的漂亮
    Liwendian
        29
    Liwendian  
    OP
       2016-11-23 18:47:45 +08:00
    被老司机们赶下了车。。。。。
    q397064399
        30
    q397064399  
       2016-11-24 07:17:24 +08:00
    @Liwendian 要学也是可以的,但是要把 C++的学习限制在一定的范围,不要 GP 函数式 一堆全都装进学习计划,绝大部分人,把 C++都是当做 C with Class ,你去问他们模板函数 模板类 以及很多高级用法都是不怎么会用的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2610 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:42 · PVG 18:42 · LAX 02:42 · JFK 05:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.