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

作为一个计算机科班的学生,应该具备哪些基本的基础知识呢

  •  
  •   crayonyi · 2017-01-18 15:30:47 +08:00 · 9382 次点击
    这是一个创建于 2858 天前的主题,其中的信息可能已经有所发展或是发生改变。

    做了几年开发,发现应用层的东西怎么学都学不完。

    只有底层和基础,几十年都不变。 现在想回去把基础都加深一下,提高下内功。

    作为一个计算机科班的学生,应该具备哪些基本的基础知识呢?

    下面每个分支都列出了参考的书籍内容。 希望大家也能提供一些建议。

    http://naotu.baidu.com/file/1a0e968910ebcf1f2d7c499a90294350?token=39df775a20b4f6da

    53 条回复    2017-01-22 09:52:45 +08:00
    wshcdr
        1
    wshcdr  
       2017-01-18 15:37:30 +08:00   ❤️ 2
    楼主就是忘了一个英语,其他很完美了
    xiandao7997
        2
    xiandao7997  
       2017-01-18 15:38:27 +08:00   ❤️ 1
    把妹。大学可以挂科,不能不谈恋爱。
    xiandao7997
        3
    xiandao7997  
       2017-01-18 15:38:36 +08:00
    @xiandao7997 一把辛酸泪。。。 TAT
    crayonyi
        4
    crayonyi  
    OP
       2017-01-18 15:41:52 +08:00
    @wshcdr 说的对。 英语这种软技能,还是挺重要的。
    hffaxy
        5
    hffaxy  
       2017-01-18 16:06:02 +08:00   ❤️ 2
    垃圾本科非计算机科班,除了没有选择做小型操作系统的课设以外,其他上述知识点也基本在大学里学过一遍了。
    楼主列出的书感觉大多都是经典,感觉能够看完的人真的太厉害,至少我差得远。其实很多的都还是看的学校的教材。
    比如说编译原理那里,我也只大致看过 SICP ,给我感觉就编译原理上来不如我学过的形式语言自动机和编译原理教材对实现一个语言的子集有帮助。
    目前来说,毕业在小公司干了半年了,自己看的书更多的是工程方向的,毕竟大学没学过,什么设计模式啦, Effective C++啦,偶有补补算法之类,准备跑路笔试什么的,毕竟这半年来感觉能写代码和能写较为优雅的代码差别还是挺大的。
    数学最近拾起来看了看,因为统计学习方法中间好多都看不懂了, sad ,机器学习好难。


    啊,上班不能看书,下班不想看书,只能继续咸鱼了。
    以上个人粗鄙意见,望轻喷
    misaka19000
        6
    misaka19000  
       2017-01-18 16:11:00 +08:00
    基本上很全了,这些都掌握本科毕业基本上就已经很厉害了
    @hffaxy 是做机器学习方向的吗?
    hffaxy
        7
    hffaxy  
       2017-01-18 17:25:16 +08:00
    @misaka19000 不是啊,本科学习的是信息安全方向。只是最近看了一些 TensorFlow 的东西,接触了一些机器学习,可是数学原理很多都已经不懂了。在我们学校只有计科科班才会学习机器学习,数据挖掘,人工智能什么的。我没学过的说。
    greatghoul
        8
    greatghoul  
       2017-01-18 17:54:22 +08:00 via iPhone
    我想会打字,应该算是一项基本能力。
    wcj
        9
    wcj  
       2017-01-18 18:17:40 +08:00   ❤️ 1
    电路不用学那么深,随便找本数字逻辑翻翻就行了,甚至硬件描述语言都不用看
    计算机体系结构可能比组成原理更重要,量化研究方法那本太难了,硬件软件接口那本更适合

    编译一个操作系统?还是实现一个操作系统?实现一个操作系统太复杂了,时间不值
    编译原理不推荐龙书吗?

    漏了数据库,范式很重要,推荐数据库系统概念

    最后,献上一本神书:《计算机科学的基础》,图灵社区免费下载: http://www.ituring.com.cn/book/1019
    langmoe
        10
    langmoe  
       2017-01-18 18:27:53 +08:00
    Windows 安装
    安卓刷机
    笔记本选购
    路由器设置
    misaka19000
        11
    misaka19000  
       2017-01-18 18:29:49 +08:00 via Android
    @wcj 看了下目录,感觉还不错
    withlqs
        12
    withlqs  
       2017-01-18 18:30:46 +08:00
    1 、数电的先修课程是模电,数电里面放大器的原理是模电的基本内容
    2 、为什么把 操作系统 和 编译原理 放在一个组,我觉得 编译原理 和 组成原理(或者体系结构) 关系更大一些才对:比如指令的执行原理和指令流水线在编译器中的优化
    3 、计算机图形学也值得推荐,会用到一些线性代数的内容
    4 、有精力的话,组合数学学一下也很好:比如鸽笼原理、母函数、递推式转换、 polya...都是很美的数学知识
    5 、算法的一些基础理论和微积分的内容相关,想深入算法理论,需要学习微积分(尤其是极限和级数方面的知识)
    jimzhong
        13
    jimzhong  
       2017-01-18 18:34:43 +08:00
    1. 算法,数据结构,离散数学,线性代数
    2. 数字电路,计算机组成,体系结构
    3. 操作系统,嵌入式系统
    4. 数据库
    5. 计算机网络,密码学
    6. 编译原理
    m31271n
        14
    m31271n  
       2017-01-18 18:41:38 +08:00
    @greatghoul 调皮了。
    kankk
        15
    kankk  
       2017-01-18 18:43:03 +08:00
    工作后越来越发现大学的基础课程有多重要
    crayonyi
        16
    crayonyi  
    OP
       2017-01-18 18:45:12 +08:00
    @wcj 一直觉得数据库应该算应用层的东西,就没有放上去。 不过在实际应用中,数据库确实挺重要的。

    计算机体系结构硬件软件接口 那本确实 比我写的那本易懂。 多谢推荐。
    crayonyi
        17
    crayonyi  
    OP
       2017-01-18 18:54:38 +08:00
    @withlqs
    1 我记得上学的时候只学了数电,没学模电。 不过模电比数电确实难好几个量级,还不敢去深入。
    2 我把体系结构归到硬件了,所以编译原理就往下放,和操作系统放一起了。
    3 计算机图形学、数值分析是到后期才学的,偏应用一些,学完才发现全是矩阵运算之类的。 当初要是和线性代数一起开课,我肯定卯足了劲学。 可以作为拓展材料看。
    4 组合数学和微积分也可以作为拓展材料看。有些难度。
    crayonyi
        18
    crayonyi  
    OP
       2017-01-18 18:56:35 +08:00
    @kankk 工作后也才发现,大学的教材有多坑。 考研指定教材、老师自己出教材,真心不如直接拿国外的
    forrestchang
        19
    forrestchang  
       2017-01-18 19:33:49 +08:00   ❤️ 1
    1. 硬件
    - CSAPP :普通的程序员硬件部分看着一本应该已经足够了,第三版也出了,配合 labs 来做比较好,每一章后面有提供参考文献,想具体深入某一部分可以参考来阅读。
    - 《计算机体系结构:量化研究方法》:有时间多的话可以看一下这一本。

    2. 算法&数据结构
    - CLRS :有人肯定说这本书太难了,其实是你看的方法不对。第一遍看的时候略过证明部分和习题就可以了,主要目的是了解各个算法的原理,然后用熟悉的语言实现出来;第二遍阅读的时候可以理解一下如何证明算法的正确性,习题中有很多有启发性的问题,配合 MIT 给出的视频和作业更好。
    - 《算法》:红书, Java 描述,图多,不想看 CLRS 可以看这一本(看完这本 CLRS 还是逃不掉的)

    3. PL
    PL 有太多东西了,了解较浅
    - SICP : Scheme 、函数式、抽象,此书吹得有点过神了,但其实可能看完并不会发现有什么*明显*的提高,题目很有意思,看完这本书就可以和别人撕逼写 Tokenizer 了(笑
    - 《 Programming Language Pragmatics 》: PL 入门书

    先吃饭去了……
    sundong
        20
    sundong  
       2017-01-18 20:06:22 +08:00
    英语 + JAVA (或者你说的那些中间 挑一条路走 ) =。=
    acumen
        21
    acumen  
       2017-01-18 20:16:14 +08:00
    借用浙大某老师的设想
    > cs 科班基础技能 github 、 command line 、科学上网、 markdown 、重复 7 次以上的动作就要写脚本...

    个人感觉以上几点是最最...基本的技能。但是对于基本的深入展开还是有很多有意思的东西。反思学生时代自己...(惭愧,弱将毕业
    q397064399
        22
    q397064399  
       2017-01-18 20:54:51 +08:00
    其实内功也是看你内到什么程度,如果你要练就神功,那么算法是必不可少的,可惜绝大部分时候都在调包

    ML 之类的算法都是领域算法,这个比较高深,没良好的数学功底玩不转,非此领域的人士 没必要去填坑

    简单的例如 算法( 4th 红书)里面讲的常见的算法,基本上只要高中数学的基础 理解+(证明)

    编程语言这东西,如果是要搞自己一套语言 就推荐 编程语言的模式
    (编译原理 这东西 毕竟..太厚了,实际开发中 有需要自己弄 DSL 再去看吧)

    硬件相关以及计算机系统组成, CSAPP 一本足以,

    再深层次的 其实跟应用开发没什么关系了, IT 行业开发的工种也是相对细分的

    ,要你是做 底层驱动之类 当我没说,老老实实 啃操作系统 原理之类的,别连实模式 都搞不清楚

    另外应用层开发 说实话,不就那么回事,真要研究 再针对的去找书看,每个人有自己开发的领域

    搞 APP 的就老老实实搞 APP ,不要想着去搞 驱动 Farmework ,那不是你的领域(除非你下决心打算 转方向)

    别上来就 龙书 虎书 三大浪漫,那都是扯淡
    Powered
        23
    Powered  
       2017-01-18 21:33:40 +08:00 via iPhone
    数据结构算法
    操作系统
    网络
    数据库

    这四样基础务必打好
    JayFang1993
        24
    JayFang1993  
       2017-01-18 21:45:39 +08:00
    学那么多都没用,在其他人眼里,能解决『手机好卡』『电脑死机』的问题就够了
    panda1001
        25
    panda1001  
       2017-01-18 21:48:39 +08:00
    面向考研学习 面向工资工作
    Cassandra
        26
    Cassandra  
       2017-01-18 23:25:14 +08:00
    @crayonyi 国外的老师也自己出书,没啥奇怪的。但最重要的是国外的计算机很多情况下是没有课本的,或者课本是不那么重要的。现实的问题那么多,课本永远写不全。

    与其读书,我其实推荐去锻炼自己的逻辑。看过很多人写的代码,明明很简单的问题思路但是绕了很大一个圈的。可能是因为是新手,也可能是因为没有看到问题的本质,无论哪种原因肯定是费时又费力,写出来的代码大概也不是最好的。所以我觉得思维,逻辑对于程序员很重要,看到问题的本质,考虑到全部的可能性会让你的代码很完美。以不变应万变大概是我最喜欢的东西。
    murmur
        27
    murmur  
       2017-01-18 23:27:38 +08:00
    为什么不把数据放第一位,数学不行你这辈子都是码农,数学好才有不被培训班吞掉的可能
    因为培训班培训不了数学,而且数学一半真看天分
    数学不仅是数学,还代表一种逻辑思维能力,有的数学不行的,不仅是编程不行,写出的代码也一堆问题,就是缺乏最基本的思考能力
    你们不是推 redux 么?多干几年就能见到那种给他纸和笔画状态画流程都画不明白的,更别提说把状态转移抽象为代码了
    RockiDog
        28
    RockiDog  
       2017-01-19 01:02:02 +08:00
    @acumen 我猜是 FM
    kingcos
        29
    kingcos  
       2017-01-19 01:08:40 +08:00
    感谢分享。。
    时间好少啊!!要学的太多了!!
    gxbb097528
        30
    gxbb097528  
       2017-01-19 04:37:43 +08:00 via Android
    我去 吓尿了
    Perry
        31
    Perry  
       2017-01-19 07:09:19 +08:00
    需求工程 (Requirements engineering) 虽然不是必要,但是可以提一下
    timehzy
        32
    timehzy  
       2017-01-19 07:59:39 +08:00 via iPhone
    我和楼主的想法一样,作为一个非科班出身的开发者,更是急需补充这些知识
    rashawn
        33
    rashawn  
       2017-01-19 08:14:21 +08:00 via iPhone
    个人觉得 英语应该放第一位…
    xiamx
        34
    xiamx  
       2017-01-19 08:21:41 +08:00
    为什么木有 automata theory, regular language, push down automata, turing machine, lambda calculus 这些?
    linux40
        35
    linux40  
       2017-01-19 09:14:27 +08:00 via Android
    除了最后两个,别的都是我在点的。。。我的重点是 2 。。。
    bintianbaihua
        36
    bintianbaihua  
       2017-01-19 09:49:04 +08:00
    数据结构和算法,操作系统,计算机网络( tcp , Ip 协议栈为主),数据库原理,编译原理,大学数学课(高等数学,线性代数,概率论,离散数学,组合数学,数值分析,运筹学),英语(计算机英语,商务英语,经济学英语)
    fangjianbin
        37
    fangjianbin  
       2017-01-19 09:53:23 +08:00
    英语英语英语。。。一定要学好。还有妹纸妹纸妹纸一定要泡到。其他都不重要
    mnzlichunyu
        38
    mnzlichunyu  
       2017-01-19 10:10:40 +08:00
    看到数值分析, 运筹学 ,商务英语,经济学英语, 我感觉我可能是上了假大学。
    Vizogood
        39
    Vizogood  
       2017-01-19 10:13:04 +08:00
    装系统
    装逼
    libook
        40
    libook  
       2017-01-19 10:19:22 +08:00
    如何快速入门一项技术
    如何读一本书
    怎样才算是一个优秀的技术人员
    语文能力
    翻墙能力
    英语水平
    如何沟通
    如何解决问题
    如何打破所学的知识体系
    88250
        41
    88250  
       2017-01-19 10:48:55 +08:00
    什么是有技术含量? https://hacpai.com/article/1467959355943
    gunshot
        42
    gunshot  
       2017-01-19 11:20:29 +08:00
    @mnzlichunyu 运筹学不坑吧,涉及到 LP, 不过我自己看了之后也不觉得有收获。
    crayonyi
        43
    crayonyi  
    OP
       2017-01-19 11:25:16 +08:00
    @libook 你说的这些,即使不是计算机的,也是必备的。 应该归为人最重要的基本能力,或者叫软能力。 已补充。
    crayonyi
        44
    crayonyi  
    OP
       2017-01-19 11:28:51 +08:00
    @murmur 数学不放第 1 位,是因为前面几项和数学关系不是特别大,反而到了后面学数据结构、算法、图形学、数值分析等课程时,用的才比较多。 这样能尽快上手,并运用到实际中,体会编程的乐趣。
    sinker
        45
    sinker  
       2017-01-19 11:29:00 +08:00 via iPhone
    @RockiDog 感觉是 FM 没跑了
    misaka19000
        46
    misaka19000  
       2017-01-19 11:32:43 +08:00 via Android
    @xiamx 我也很奇怪,感觉一般提计算机基础好像都不会说到这些,可能一般做上层开发的不太会了解到这些问题。但是相反,做上层开发却经常会遇到数据库瓶颈等等,所以一般而言操作系统和算法这类的比较经常接触到,然后网络知识一般来说也是必不可少的。
    coderluan
        47
    coderluan  
       2017-01-19 11:52:09 +08:00
    学习(不是工作)这种事应该是遵循木桶原则,感觉有缺陷的可以补充,但是讨论谁最长并没有什么意义。
    azzwacb9001
        48
    azzwacb9001  
       2017-01-19 12:39:10 +08:00
    有一套《程序员的数学》,用来补数学知识挺不错的。
    hackpro
        49
    hackpro  
       2017-01-19 12:39:25 +08:00
    如果要成为顶尖的程序员 数学课使劲造
    其他可以慢慢学
    Romanticlizhi
        50
    Romanticlizhi  
       2017-01-19 13:30:12 +08:00
    英语太重要了
    a15819620038
        51
    a15819620038  
       2017-01-19 14:06:50 +08:00
    上学的时候还能这样要求自己完成以上所有,工作几年了还要完成以上是有些不切实际了哦。

    看书复习过一遍比较可能。
    libook
        52
    libook  
       2017-01-20 11:17:01 +08:00
    @crayonyi 现在计算机技术领域不缺硬技能强的人,倒是软技能强的人很罕见。
    kankk
        53
    kankk  
       2017-01-22 09:52:45 +08:00
    @crayonyi 这是..毕竟很多学校都用自己学校老师出的书...然后大部分老师自己出的书问题太多了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1149 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:50 · PVG 02:50 · LAX 10:50 · JFK 13:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.