V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jamesarch
V2EX  ›  问与答

一意孤行做 C/Linux 系统底层是否有前途?

  •  
  •   jamesarch · 2016-06-01 17:36:51 +08:00 · 10421 次点击
    这是一个创建于 3131 天前的主题,其中的信息可能已经有所发展或是发生改变。

    额 不算是专业程序员,只是对操作系统底层特别感兴趣,自从几年前开始折腾 Linux 之后就开始研究 C 语言和 Linux 之类的系统底层了,以前一直想做一个程序员,做啥都可以,什么 Web 开发啦,服务器维护之类的都可以,只是为了想成为程序员,后来慢慢的开始发现学会 C ,就像是自己一直没有达成的愿望一样,一直在断断续续的学习这门语言,比如想学一门其它的语言,但是转来转去还是会回到 C,而且买了很多比较经典的书籍,比如代码大全C语言三剑客(专家编程,指针,缺陷陷阱)APUE、UNIX编程艺术之类的。很是喜欢开源文化和黑客精神。虽然不知道自己能不能学会,但是还是一直在坚持,不知道这样是否正确,求大神解答

    PS :自己经常作死比如说买 HHKB Type-S 机械键盘之类的,不知道是不是为了接近和程序员的差距,是不是有点虚荣?或者说程序员的信仰,虽然实际体验确实不怎样

    55 条回复    2016-06-03 11:28:04 +08:00
    notgod
        1
    notgod  
       2016-06-01 17:47:47 +08:00
    有前途
    无论任何时候 底层始终是刚需
    哪怕有天 PHP JS 没了 不流行了
    但是系统还在
    ipconfiger
        2
    ipconfiger  
       2016-06-01 17:48:17 +08:00
    你应该找到自己要去做个什么的东西出来, 哪怕不能改变世界但是起码是对人有用的, 而不是去考虑自己用什么语言来做东西, 确做什么东西自己都不知道, 没有目标跟无头苍蝇有什么区别?
    jamesarch
        3
    jamesarch  
    OP
       2016-06-01 17:52:42 +08:00
    @ipconfiger 现在已经摆脱选择语言这一阶段了,至于做什么东西,打算先把语法基础什么的打好,在参加一些开源项目吧,毕竟开源项目成千上万
    @notgod 恩 感谢 :)
    ChiangDi
        4
    ChiangDi  
       2016-06-01 17:56:27 +08:00
    做底层做得多好基本要看智商
    zackkson1991
        5
    zackkson1991  
       2016-06-01 18:00:27 +08:00
    倒不如找出自己想做一些什么东西出来。然后去学习去做不是更好吗?比如你想做一个个人博客。你可以学点前端知识做页面,然后学习点 Python 做个后台。或者你在学习前端的时候发现前端其实自己更好玩。。。。。。总之,还是把自己定位好目标吧。做个东西出来。过程一定比之前更加精彩,因为你落到实处了,实践了。
    cheng007
        6
    cheng007  
       2016-06-01 18:16:06 +08:00
    不要自己限制自己的发展,思路广一点, JAVA, python, Erlang, Golang 都是很有趣的编程语言,多见识一点吧,不要局限于 C 语言。
    jamesarch
        7
    jamesarch  
    OP
       2016-06-01 18:33:43 +08:00 via Android
    @ChiangDi
    感觉自己智商不怎样 233😂
    @zackkson1991
    嗯,也学过点 Python 但是没做出来啥,一提到 js 前端之类的就头大 HTML CSS 还好
    @cheng007
    其他语言也有接触过,但是底层都离不开 C,所以更加确定要学 C 的决心了




    也许是自己有些顽固了
    xiaozhaoz
        8
    xiaozhaoz  
       2016-06-01 18:50:39 +08:00   ❤️ 11
    过来人给点建议, 做这个已经快 15 年了, 内核也提交过一些 patch ,底层东西玩了不少, 包括 cpu 设计,内核,编译器,系统库。

    做底层有兴趣就坚持去做,但要做好准备, 门槛高, 收入低。
    如果不坚持,等不到回报的那天。
    为了让自己坚持的更久,也要懂一些应用层的东西, 到后面你可能会发现, 懂底层是你的优势,但养活自己还要靠应用。

    而在系统底层之上, 还有不少好玩的,有前途的东西。
    比如大数据的中间件, 深度学习的算法和模型。 这些都是极有前途,又有难度的东西。
    jamesarch
        9
    jamesarch  
    OP
       2016-06-01 18:54:48 +08:00 via Android
    @xiaozhaoz 嗯 感谢前辈,比较喜欢这一块,应该会坚持下去的吧
    powerfj
        10
    powerfj  
       2016-06-01 19:29:04 +08:00
    你意思是你纸上谈兵好多年了?
    but0n
        11
    but0n  
       2016-06-01 19:32:44 +08:00 via iPhone
    曾经有同样的困惑

    我前端、后端、嵌入式都有学,其中大部分精力放在嵌入式硬件软件上,但是硬件太复杂了,要学的东西太多,目前的水平只能写一些简单的驱动。

    我在 web 方面相对底层而言付出的很少,但是获得的却很多。。
    auser
        12
    auser  
       2016-06-01 20:09:39 +08:00 via iPhone
    @xiaozhaoz

    写的很赞同
    Smirnoff
        13
    Smirnoff  
       2016-06-01 20:18:15 +08:00   ❤️ 6
    珍惜生命,已改善生活条件,和快速入职为理念,去学 java 或 Swift ,把时间花费在产品理念实现自己的思路,让国外那些大牛去研究底层吧!注意还有时间找女朋友,相信我楼上说学底层的人,打开摇一摇都是工地的工友。。。
    Ge4Los
        14
    Ge4Los  
       2016-06-01 20:45:04 +08:00
    虽然你对嵌入式持怀疑态度,却又固执的想继续走这个方向。
    看楼上回复就知道。无论大家怎么说,你都在大谈嵌入式和 C 以及底层的好。还是要继续走这条路。
    你都有答案了。发这贴真是希望我们给建议?
    仅仅是为了坚定自己的选择吧?
    fewspider
        15
    fewspider  
       2016-06-01 21:19:23 +08:00 via iPhone
    跟楼主相反,一直想学便底层的东西,工作后,自己的时间感觉很少,就没再深入
    tutuge
        16
    tutuge  
       2016-06-01 21:34:58 +08:00 via iPhone
    你自己已经有答案了吧…
    alexapollo
        17
    alexapollo  
       2016-06-01 21:36:24 +08:00   ❤️ 2
    工作一年多的时候,有幸给一些顶级开源社区(云计算、内核、 SDN 等)做过一些特性,提过一些 patch 。
    现在在 github 上还有自己的一些工程: https://github.com/geekan

    先说工作:国内需求的量比较小,基本都在大公司里(阿里、华为、 INTEL 、红帽等)
    再说发展:是刚需,但很难创业(除了少数几个点),职业道路比较窄

    最后给你一点建议:
    * 想做内核是真的入了一个大坑。。
    * 如果你不够努力,想提一个 patch 至少也得读内核代码一年以上。
    * 壁垒很高,但代码太多了,建议订阅下内核某个分支(如网络)邮件,看看你是否能读懂他们在讲些什么,如果你能看懂,基本上就入门了
    jamesarch
        18
    jamesarch  
    OP
       2016-06-01 22:26:24 +08:00 via Android
    @alexapollo 嗯 感谢,现在我英语能力还很差,基本上只认识常用单词……
    @tutuge 哈 有答案就不问啦
    @Smirnoff
    😂我会告诉你我已经结婚都有孩子了嘛,其实这样压力更大,比单身大
    @fewspider 嗯 也好 有得有失嘛
    @Ge4Los 自己目光比较窄,所以就把自己知道的都说出来了



    额 应该都回复了吧 手机看着比较乱,大概总结下吧,其实我也没什么想法和主见,因为各位大牛都是过来人,经验比我多,前车之鉴应该是这个意思。所以算是请教你们了,至于说我冥顽不灵,坚持自己观点的,我想……每个人都有自己的观点吧,倒不是说我在这里是为了坚定自己想法什么的,毕竟还只是个没入门的菜鸟,瞎折腾,更多的还是要听从你们过来人的经验
    jamesarch
        19
    jamesarch  
    OP
       2016-06-01 22:28:17 +08:00 via Android
    @powerfj 嗯,算是吧 一部分的不自信 一部分的懒散,毕竟不是这个专业,自学比想象中难很多
    fewspider
        20
    fewspider  
       2016-06-01 22:32:19 +08:00
    感觉还是先有自己的产品,有自己的用户了,才算比较 ok ,哈,个人想法,也是目前在做的事
    jamesarch
        21
    jamesarch  
    OP
       2016-06-01 22:40:56 +08:00 via Android
    @fewspider 嗯,先做出来东西再继续发展……可惜自己连东西都做不出来😁,最近在看美剧 硅谷 才感受到一个好的产品不止是一个程序那么简单,原来里面还有那么多道道
    mogging
        22
    mogging  
       2016-06-01 22:43:23 +08:00 via iPhone
    有人说要看智商,我觉得不敢苟同,能走多远看的是天赋,有些人再努力也走不远
    cankoor
        23
    cankoor  
       2016-06-01 22:45:36 +08:00
    @mogging 我看过一段话,很多人远没有到拼天赋的时候。
    fewspider
        24
    fewspider  
       2016-06-01 22:46:11 +08:00 via iPhone
    做东西也算是练手啦,没做都不知道会遇到什么坑,填坑也是锻炼自己解决问题的能力,不一定要做一个很 nb 的东西,至少自己觉得好用就可以了
    JamesRuan
        25
    JamesRuan  
       2016-06-01 23:03:09 +08:00
    来我们公司吧, Golang 开发,需要懂 Linux 和 C 底子好的人。
    incompatible
        26
    incompatible  
       2016-06-01 23:13:53 +08:00
    @notgod 你的观点没有任何说服力。不信你把“底层”二字换成“厨师”看看,一样说得通。
    notgod
        27
    notgod  
       2016-06-01 23:17:36 +08:00
    @incompatible
    一个生态里的刚需 类似于人的吃 /喝
    Reficul
        28
    Reficul  
       2016-06-01 23:23:36 +08:00
    无责任安利一波 Go ,语法简练如 C 一样,一致性好,非侵入性接口,自动异步的协程。
    lechain
        29
    lechain  
       2016-06-01 23:31:07 +08:00 via Android
    跟楼主非常像…不过我还在读书…蛤蛤…最近在刷 cs:app 一周把汇编学完了…感觉自己萌萌哒
    ilotuo
        30
    ilotuo  
       2016-06-01 23:53:12 +08:00   ❤️ 1
    写在这里吧。
    大二时 我也和你差不多 撇了一眼 linux 和 android 底层的一些设计 哇 好牛逼 好有意思
    然后大三时找不到相关实习 找了个做图像相关的小公司 做视觉跟踪和三维重建相关 我了个艹 这个更牛逼更好玩!
    瞬间激情被点燃 以一个三流本科生的基础苦学半年企图踏入这行学术领域
    现在过了半年 又跳槽换方向了 也算见识了见识了大大小小的不少工程 其实每个领域都有让人叹为观止的设计 至少能让你老老实实学个一年也未必精通

    还有关于兴趣和工作 其实大多数时候不是兴趣在驱动你干活 想想工作需求能有多少契合你的爱好?程序员那么忙 公司并没有太多时间让你去深入研究某个子系统的实现或者某篇论文的原理 (也可能是我还没当上核心开发吧。。)
    总之工作了 大部分驱动力来自己写的代码 为公司创造的价值
    说到创造 问题又来了。在我刚才说的领域 国内各大视觉实验室能出原创性革命性研究成果的也就几个大牛 剩下的无非把国外的研究成功搬回来小修小改 耗尽学涯也未必弄懂人家的原理 你又对自己智商水平有多自信 相信自己能在这些高深的领域有所成就?
    如果没有 不如听劝一句 咱们老老实实搬砖 养活自己再说吧
    --来自一位学渣的感悟
    fcicq
        31
    fcicq  
       2016-06-02 00:12:52 +08:00   ❤️ 1
    底层这条路看起来不错但并不适合推荐. 长期看基础不合格的人一定留不下是确定的, 仅仅凭这一点点资料判断不了楼主有没有这方面的天分, 不能直接给建议.

    不过从社区的一个侧面可以想到一些问题. 很多人给开源做贡献的目的是自己常用的某种 workload 效率不高或者有优化空间. 添加功能 /特性的想法通常也是因为用过项目才能想到的.
    从这里展开, 首先你自己或者你的雇主是开源项目的使用者. 要有一定的诊断调试能力去确定自己环境中的问题所在. 然后通过你的观察, 去设计并实施你设想的修改方案. 最后是把你的方案推给主线 /上游.

    这一条线上有很多问题. 抓出其中一个比较重要的来, 就是对自己的环境来说有效而很可能会损害全局或者其他人环境中性能的修改方案实在太常见了. 正确的设计需要相当长期的经验和对系统体系的整体理解.
    遵守这样一种不破坏的规则严格讲也是不对的. 社区更需要有胆量创新的人, 但现实是万一审核人看不懂或者稍有意见就很容易破坏潜在贡献者的积极性. linux kernel 里面很多东西只是属于"争论正确", 是开发者们打架扯皮的权衡结果. 有很多优秀的设计走不通这个流程被主线拒绝了, 彻底看不到合并的希望. 其他项目也同理但矛盾可能没有那么明显.

    底层系统和应用不一样的地方可能在于, 应用做糟了应该还是能强推出去的, 堵上耳朵装听不见不好用的意见就是了, 所以只要做出来就可以赚到快钱. 底层更倾向于确实做对了才有奖励.
    327beckham
        32
    327beckham  
       2016-06-02 00:29:18 +08:00
    同意之前楼上一位同学的观点,底层的东西门槛相对高,工资相对少。想要在这方面有前途,得有强大的毅力,付出的时间精力比其他方向多很多。

    如果你这方面的兴趣到位了,能坚持学个几年,如果乐在其中,那么必有前途。如果中途略有犹豫踌躇或者兴趣下降,建议立马换个方向搞。
    msg7086
        33
    msg7086  
       2016-06-02 04:46:49 +08:00
    对企业来说,能挣钱才是最重要的。
    如果你底层搞得滚瓜烂熟却没办法用在业务上,没办法给公司带来利润,那就没啥用。
    msg7086
        34
    msg7086  
       2016-06-02 04:52:15 +08:00
    (除非你已经财务自由希望把玩一番,否则还是先专注于怎样提高收入吧,毕竟现阶段钱还是很重要的。)
    jamesarch
        35
    jamesarch  
    OP
       2016-06-02 06:35:53 +08:00 via Android
    @msg7086 嗯,财务算不上自由,但是努力赚钱还是很重要的
    @327beckham
    @fcicq
    嗯嗯,会认真考虑这个问题的,基础也应该会比以前踏实些,之前也看到过不少帖子,说底层这条路确实不是那么好走的,哪怕就当是学基础课了,再次感谢二位的认真回答

    @lechain 哈 一起加油(๑•̀ω•́๑)
    @Reficul
    go 的话也看过一些基础教程之类的,因为自己基础太薄弱了,所以又回头学 C,不过 GO 确实很强大, Ubuntu 的 snap 包管理上次看了下就是用 go 写的,好像还有不少服务端的东西也是用 go 开发的,之前看了下 gopher 2015 的 PDF 才知道原来 go 可以那么强大


    @fewspider
    现在头脑一片空白,之前一个劲儿的学 Python 学完之后又是想用 flask 做博客,又是想做爬虫的,结果又回头学 C 了,对自己也是无语 O__O"…

    @JamesRuan 先谢谢啦,我还是先把基础打好吧,等到自己可以独立写一些小项目练手的时候再说吧,要不去了也是添乱
    ㄟ(≧◇≦)ㄏ
    cxbig
        36
    cxbig  
       2016-06-02 06:43:10 +08:00
    做什么都好,问问自己坚持是为了什么,如果这个答案是真心喜爱,而不是钱或虚荣心作祟,那就坚持下去。
    郭德纲说过一句话:坚持下去,把别人都熬死了,你就是艺术家了。这个道理放哪个行业都管用。
    jamesarch
        37
    jamesarch  
    OP
       2016-06-02 08:25:03 +08:00 via Android
    @cxbig 嗯 自己算是乐在其中吧,其他爱好没有,就这一爱好了 哈哈
    Ixizi
        38
    Ixizi  
       2016-06-02 09:31:59 +08:00
    just do it 。
    NeoAtlantis
        39
    NeoAtlantis  
       2016-06-02 09:46:54 +08:00
    民科心态啊……
    jamesarch
        40
    jamesarch  
    OP
       2016-06-02 10:06:54 +08:00 via Android
    @Ixizi o( ̄▽ ̄) 好哒
    @NeoAtlantis 额 民科?
    nicegoing
        41
    nicegoing  
       2016-06-02 11:55:25 +08:00
    还是觉得家人,女朋友比底层重要。找个有钱途的方向,让他们生活的更好。
    前段时间我也用 arch ,最后发现玩个 QQ,PS,音乐播放器好麻烦。最后换成 win10+msys2 发现也不错,还有微软的 oneNote 非常强大。哪个效率高好用用哪个, linux 感觉还差一点。
    mogging
        42
    mogging  
       2016-06-02 12:52:49 +08:00 via iPhone
    @cankoor 如果只想做普通人,随便学习一段时间就行咯,鸡汤文还真是影响深远啊
    dtysky
        43
    dtysky  
       2016-06-02 12:57:18 +08:00   ❤️ 1
    我觉得这个我可以打一波。。。

    我原来做 FPGA ,更底层。。。
    幻想过自己从 CPU 层次开始做,打一套自己的装备
    也造轮子,很 hardcore

    最后么。。。
    http://dtysky.moe/article/Life-2015_08_09_a

    然后我现在在做 WEB233333 。。。(当年舍友让我转 WEB 我可是一脸鄙夷

    LZ 要明白,在现在,越底层,个人可以影响到的东西就越少
    你想要的到底是什么。。。
    是那种改变一切的成就感,还是真的就对那些感兴趣
    就算真的感兴趣
    爱好 还的在有基本的生活保证的前提下来支撑

    靠应用赚钱,然后养兴趣。。。比较靠谱
    jamesarch
        44
    jamesarch  
    OP
       2016-06-02 13:16:24 +08:00 via Android
    @nicegoing 嗯 Linux 毕竟做开发还是可以的,做桌面嘛 我就 233 了 毕竟桌面软件数量级别在那摆着的,一般做开发还是喜欢在 Linux 下

    @dtysky 嗯 以前就是学 web 的 后来被 IE6 兼容性留下了深深地阴影 再也没碰过
    pljhonglu
        45
    pljhonglu  
       2016-06-02 13:53:13 +08:00
    在能够正常生活的前提下,做自己喜欢的事情是能够让人心情愉悦的,别管什么前途,喜欢就去做~
    zztt168
        46
    zztt168  
       2016-06-02 14:03:28 +08:00 via Android
    楼主,我也不是程序员,也梦想当程序员。恕我直言,我觉得马上着手开发才是正途,实干比看书学得快,也容易知道自己有没有前途。
    jamesarch
        47
    jamesarch  
    OP
       2016-06-02 14:38:41 +08:00 via Android
    @pljhonglu
    @zztt168
    嗯 确实吧 毕竟在做东西的时候边做边学也挺好的
    luohaha
        48
    luohaha  
       2016-06-02 14:39:21 +08:00
    系统底层是一定要学的,比如操作系统,网络,编译原理等。对这方面感兴趣可以深入研究。但是不代表你要找 c 语言的工作,或者只能从事系统底层的工作。底层的知识是基本功,然后再选择一个时下热门的方向研究研究。有好的基本功学新技术很快的,多新的技术都离不开底层。
    我和楼主很像,也喜欢系统底层的技术,自己折腾着写过系统内核,解释器编译器等,研究方向是网络方面的。现在在看 hadoop 的源码实现,看 docker 的实现,觉得底层还是那些东西。
    jamesarch
        49
    jamesarch  
    OP
       2016-06-02 14:43:12 +08:00 via Android
    @luohaha 嗯 算是打基础了吧 至于学的能不能成 也是看个人吧
    eam0n
        50
    eam0n  
       2016-06-02 15:04:55 +08:00
    有前途,但前途大小看水平!
    jamesarch
        51
    jamesarch  
    OP
       2016-06-02 15:15:32 +08:00 via Android
    @eam0n 看个人能力吧,就是喜欢程序员这一点(๑•̀ω•́๑)
    zhangdawei
        52
    zhangdawei  
       2016-06-02 16:08:34 +08:00
    努力搞,绝对饿不死
    ren2881971
        53
    ren2881971  
       2016-06-02 16:30:11 +08:00
    @pljhonglu 说的很对。
    jamesarch
        54
    jamesarch  
    OP
       2016-06-02 16:45:00 +08:00 via Android
    @zhangdawei
    @ren2881971 好哒( • ̀ω•́ )✧
    hitmanx
        55
    hitmanx  
       2016-06-03 11:28:04 +08:00
    @dtysky

    '''
    LZ 要明白,在现在,越底层,个人可以影响到的东西就越少
    你想要的到底是什么。。。
    是那种改变一切的成就感,还是真的就对那些感兴趣
    '''

    这几句话我也有体会,受教了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2808 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:41 · PVG 21:41 · LAX 05:41 · JFK 08:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.