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

如何比较愉快地从 JavaScript 转到 C++ 开发?

  •  
  •   jakwings · 2014-10-03 00:57:46 +08:00 · 5180 次点击
    这是一个创建于 3706 天前的主题,其中的信息可能已经有所发展或是发生改变。
    之前一直不愿学 C++ 是因为用不着,现在头痛了。

    我比较关心的是 Unicode 文字处理,因为我要弄一个带代码高亮的文本编辑工具(然后进行各种改造)。
    第 1 条附言  ·  2014-10-03 02:03:30 +08:00
    我对 IDE 没有大的要求,希望能够得到「思维方式」和「实际应用」上的指引。例如:
    1. 使用数组和字符串时是否有必要了解所有细节?
    2. 如何慢慢培养出适合 C++ 编程的思维?
    3. 怎样合理地使用回调函数?
    4. 在使用 C++ 标准库时容易写出死循环代码的场合有哪些?
    5. 有哪些比较推荐的对应 JavaScript 常见操作的库?
    6. 如何快速理解 C++ 的类型系统?
    第 2 条附言  ·  2014-10-04 08:00:15 +08:00
    感谢大家的支持。已经准备好要开啃了,都学过 JavaScript 了还像个零基础那样怕 C++ 真是太不像样了。=_=
    31 条回复    2014-10-07 17:19:24 +08:00
    DearMark
        1
    DearMark  
       2014-10-03 01:10:40 +08:00 via Android
    开源的notepad++
    XadillaX
        2
    XadillaX  
       2014-10-03 01:11:24 +08:00
    -. - 我刚好是反一下的怎么办?

    已经成功从 C++ 入 Javascript 的坑。
    jakwings
        3
    jakwings  
    OP
       2014-10-03 01:19:49 +08:00
    @DearMark 意思是叫我直接研究 Notepad++ 的代码来学习 C++ 么?……

    @XadillaX 呃,怎么反客为主了……C++ 程序员怎么学 JavaScript 的文章一搜一大堆了,假如你喜欢强调类型的话,可以用 TypeScript 再转换出等效的 JavaScript 代码。
    jybox
        4
    jybox  
       2014-10-03 01:19:57 +08:00   ❤️ 1
    试试 JetBrains 的 IDE
    snowonion
        5
    snowonion  
       2014-10-03 02:04:37 +08:00
    啊呀.. po 是要「学 C++ 然后搞个带代码高亮的编辑器」呢, 还是「找个带代码高亮的编辑器来写 C++」 呢... ( 目测前者
    jakwings
        6
    jakwings  
    OP
       2014-10-03 02:07:51 +08:00
    @XadillaX 看大大你写的实用 JS 代码好像比我还多,求补充附言的提问。
    jakwings
        7
    jakwings  
    OP
       2014-10-03 02:08:49 +08:00
    @snowonion 嗯,前者。刚刚补充了附言。
    XadillaX
        8
    XadillaX  
       2014-10-03 02:51:02 +08:00
    @jakwings -. - 你怎么看的。实际上 c++ 搞会指针就差不多了。
    XadillaX
        9
    XadillaX  
       2014-10-03 02:55:34 +08:00
    @jakwings -. - 你怎么看的。实际上 c++ 搞会指针就差不多入门了。
    typcn
        10
    typcn  
       2014-10-03 04:55:22 +08:00 via iPad
    会用指针就入门了的话 估计20分钟全入门了
    Monad
        11
    Monad  
       2014-10-03 09:09:14 +08:00 via iPhone   ❤️ 1
    至少先用上支持cxx11的编译器
    不要陷入太多语言的细节 STL会用知道什么什么时候用什么内部是什么数据结构实现的就行了
    文件IO记得用c style的或者自己在上面封装一层 别去碰那堆stream
    fox000002
        12
    fox000002  
       2014-10-03 09:09:21 +08:00
    @typcn 会用指针不仅仅是语法,20分钟那是天才啊
    billlee
        13
    billlee  
       2014-10-03 09:39:47 +08:00   ❤️ 1
    1. 一定要检查数组边界。资源谁申请谁释放。不要信任外部输入的数据。用 C++11.
    3. C++ 还是少用回调函数吧,考虑用多态或泛型代替。
    4. 用 STL 还想写出死循环有点困难吧
    anubiskong
        14
    anubiskong  
       2014-10-03 09:55:20 +08:00
    讨厌C类语言
    光是一个头文件就感觉反人类
    还是js好
    jsonline
        15
    jsonline  
       2014-10-03 10:02:46 +08:00
    你为何不用Python
    sneezry
        16
    sneezry  
       2014-10-03 10:12:23 +08:00 via iPhone
    @anubiskong Node也有require不是~
    hjc4869
        17
    hjc4869  
       2014-10-03 10:23:39 +08:00   ❤️ 1
    C++用Visual Studio。
    jakwings
        19
    jakwings  
    OP
       2014-10-03 17:57:03 +08:00
    @XadillaX 看你 GitHub 一大堆 JS 项目……
    @jsonline Python 换代比 C++ 还快,有种要经常关注浏览器新特性的感觉,心累……
    onemoo
        20
    onemoo  
       2014-10-03 18:17:57 +08:00   ❤️ 2
    对于你的问题:
    1. 很有必要。这种语言离底层很近,那么就需要你也得了解底层。
    2. 见仁见智,主要靠时间。
    3456. 入门以后自然就知道了。
    至于IDE,找自己顺眼的就行,也没必要用vim、emace之类的折磨自己。

    如果你既没有C的基础,也没有其他编译型强类型语言的基础的话,还是从头开始学吧。
    =这个坑很大=
    具体用什么书入门,网上有不少推荐。我也来说几个:
    《C++程序设计语言》很多人会提到它。但它很厚。
    《C++ primer》会有很多人推荐。我觉得不太适合入门,它更像是一本手册。
    《Essential C++》是一本短小精悍的入门书。讲得并不全面详细,但是重点都讲到了。
    ...还有很多用于入门的书,一般网上有人推荐时都会说他们的推荐理由的,LZ自己权衡吧。

    深入的话:
    《Effective C++ 》《More Effective C++》也是肯定要看的。

    如果你一直走在C/C++的路上,肯定需要深入了解更深一层的东西:
    《深入理解计算机系统》 这本书其实并没有多“深入”,它广泛地讲解了计算机系统的知识。适合你了解代码之下的种种。
    《程序员的自我修养—链接、装载与库》 难得的国人写的好书!

    当然不必把上面的都看了才动手,重要的是入门之后就动手编码,实践中你会学到更多的东西。你就能知道要如何走C++之路了。

    P.S. 我看了上面这些都觉得头大,这个坑真大!LZ想好要不要入坑吧...
    ryanking8215
        21
    ryanking8215  
       2014-10-03 20:41:10 +08:00   ❤️ 1
    从c++到js还是比较愉快的,反过来,很难!
    vinceguo
        22
    vinceguo  
       2014-10-03 21:45:06 +08:00   ❤️ 1
    有点C++基础之后,看Thinking in C++不错。
    jsq2627
        23
    jsq2627  
       2014-10-04 01:03:08 +08:00   ❤️ 1
    C++是个大坑,慎入。
    除了C++语言本身,CS基础课也要学好。数据结构、算法、计算机体系结构、编译原理,如果想做C++程序员这些东西逃不掉。

    其实我是个C++初学者,以前没用C++做过作业之外的东西。最近在做一个 Online Judge 系统,在用C++写网站以外的部分。之前一个月时间都在学习 CMake 和搭建合适的 Emacs 环境。最近刚开始写实际的代码,有些小众的库(我这次用到的是 librabbitmq-c,早些月在一个 iOS 项目里还用过 libpjsip)是C语言写的,还得自己加一层OOP封装才好用。今天刚刚解决了子进程 stdin\out\err 的重定向问题,要理解几个 POSIX API,也是蛋疼。现在还在考虑怎么实现一个沙箱机制让不信任的程序安全运行……

    以上都是JS(不是NodeJS)不太可能遇到的问题。

    不过如果你只是想要实现一个带高亮的编辑器,就不用考虑这么多了。赶紧装 Qt,带语法高亮的编辑器可是 Qt 的 Sample project 呢!为什么我强烈推荐 Qt 呢?因为我就真的用 Qt 撸了个 Markdown 编辑器,不仅能高亮,还能编译,当C++大作业交给老师了。老师没听说过 Markdown,最后也给了个不高的分数,都不如那些用 cocos2d 撸保卫萝卜的同学 T_T

    顺带想问问 Unix/C++ 程序员在国内外的薪资水平如何?
    SoloCompany
        24
    SoloCompany  
       2014-10-04 04:36:49 +08:00 via iPad
    @jsq2627 最后一句我差点以为是问学习挖掘机技术哪家强了
    jakwings
        25
    jakwings  
    OP
       2014-10-04 07:54:26 +08:00
    @jsq2627 GUI 就是打算用 Qt,跨平台啥的好解决。以后还有更多的改造要用到 C++,所以是要入一下了。
    薪水不是单看语言来算的吧,而且 Unix/C++ 本来就难精通。总之我是不清楚啦。
    anubiskong
        26
    anubiskong  
       2014-10-04 10:59:53 +08:00
    @sneezry 完全不是一回事
    jarcher
        27
    jarcher  
       2014-10-05 23:09:38 +08:00
    为什么要转 c++,做服务端编程么???如果是的话,路有点长,至少1年。。。
    jakwings
        28
    jakwings  
    OP
       2014-10-06 00:36:00 +08:00
    @jarcher 做带 GUI 的工具,还有小游戏。服务端实在不敢想……
    Narcissu5
        29
    Narcissu5  
       2014-10-07 11:24:33 +08:00
    带GUI的工具为什么一定要C++呢?MFC万年不更新,从win32自己封装?QT总有种跑偏了的感觉,而且被诺基亚卖掉之后也是前途未卜。
    spacewander
        30
    spacewander  
       2014-10-07 13:43:12 +08:00
    如果你只是想写个GUI程序的话……为什么不看看[node-webkit](https://github.com/rogerwang/node-webkit)?
    这是个很火的项目啊,上过Github Trending的。
    jakwings
        31
    jakwings  
    OP
       2014-10-07 17:19:24 +08:00
    @Narcissu5 Qt 还好吧,至少能用,已经给了我继续学习 C++ 的动力了(已经弃坑至少两次)。C++ 目前还是一种用途很广的语言。
    @spacewander 或许会用到 node-webkit 吧,web 界面要好看的话实在是很耗资源,单单是一个拖动窗框的操作都做不到延迟小。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5865 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 06:27 · PVG 14:27 · LAX 22:27 · JFK 01:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.