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

转行做程序员,工作两年了,想补充一下基础知识,求教。

  •  1
     
  •   Gaussen · 2019-01-05 12:43:29 +08:00 · 9745 次点击
    这是一个创建于 1900 天前的主题,其中的信息可能已经有所发展或是发生改变。

    转行的时候学的是 java,不过现在工作用 PHP,中间也写过一些 python 的脚本。

    平时基本上看的都是编程技巧之类的博客,经常会看一些网课,不过看的多了,开始觉得烦恼了,因为这些网课从来都只是讲怎么使用,哪里有什么坑,怎么避免坑,但不会深入讲原理。

    虽然使用了两年的 PHP,但是很多原理还是不了解,包括常用的框架,也只是会用,或者比较熟练罢了。

    于是萌生了想要补充基础知识的念头,因为我是转行做的程序员,很多科班生学的理论知识我都没有学过,培训班也不会教这些。

    现在想要去补充,但不知道该从何入手,最近看到一本书《计算机组成与设计:硬件软件接口 第 5 版》,很多人都很推荐,不过好像要懂 c 和汇编语言才能看的懂,是这样的吗?

    希望各位可以推荐一条填补基础知识的路线,自己实在是不了解这些,感谢。

    --------补充---------

    身边也有朋友跟我说,叫我先不要看那些,让我先把常用的语言和框架的原理弄明白,再去看那些。

    47 条回复    2019-01-11 18:26:46 +08:00
    hv3s1
        1
    hv3s1  
       2019-01-05 12:51:34 +08:00   ❤️ 1
    推荐 中国大学 MOOC 的数据导论。https://www.icourse163.org/course/ZJU-93001
    学习之后你会对算法与结构又初步认识。

    非科班真需要学!
    Akiyu
        2
    Akiyu  
       2019-01-05 12:58:35 +08:00
    如果你想真的明白底层的话, 汇编有必要学, 但不需要精
    高级语言会先转换成 CPU 架构对应的汇编语言, 再转换成二进制的机器指令
    而二进制是看不懂的, 所以汇编是能接触到的最底层语言
    在汇编里面, 会有很多细节实现, 一些在教材上一句话概括的特性, 或者什么功能, 都会有很多句汇编支持
    看懂它们, 你就能理解真正是如何实现的, 从而明白这些"特性"到底是什么

    关于汇编, 有两本书推荐
    1. 汇编语言 王爽
    masm 汇编, 如果只是想了解, 那么这本书不错, 简单易懂
    2. 汇编语言语言程序设计 红皮的
    AT&T 汇编, 这种格式是比较常看到的, 也是 gcc -S 默认的格式
    这本书比较厚, 个人觉得不如上一本那么好懂, 不过深度要比上一本深

    其余的话
    深入理解计算机原理
    这本书很不错, 也可以读一下
    driveby
        3
    driveby  
       2019-01-05 13:01:23 +08:00   ❤️ 3
    一本 CSAPP 就完事了
    kristpan
        4
    kristpan  
       2019-01-05 13:04:51 +08:00
    1. 数据结构与算法:你会 Java 的话,看 Sedgewick 那本 Algorithms 就挺好
    2. 体系结构:《深入理解计算机系统》,比硬件软件接口那本性价比高一些,但是要有 C 语言的基础
    3. 操作系统:《现代操作系统》或《操作系统概念》,有个概念就行了
    111qqz
        5
    111qqz  
       2019-01-05 13:05:43 +08:00 via Android
    汇编不需要看得太细,推荐王爽的那本,看前面一半就行
    kljsandjb
        6
    kljsandjb  
       2019-01-05 13:10:41 +08:00 via iPhone
    推荐 csapp 第三章、第四章对底层汇编的训练比较多,把题目和 lab 做掉,我目前才看到缓存那一章,大半年了,折腾 ing …
    Gaussen
        7
    Gaussen  
    OP
       2019-01-05 13:46:22 +08:00   ❤️ 1
    @hv3s1 已报名,感谢推荐。
    @Akiyu 感谢推荐,请问我描述里提到的《计算机组成与设计》,以我现在的水平有必要看吗?是要学习汇编之后再看效果更好吗?
    @driveby 好的,感谢推荐。
    @kristpan 感谢推荐。很齐全。
    @111qqz 好的,我之后找找看。感谢推荐。
    @kljsandjb 感谢推荐。

    之前在定学习目标的时候突然发现,自己需要学习的太多了,一下子不知道该如何安排,只能今天看一会这个,明天看一会那个,工作一忙起来,就什么都不想看,学习的效率实在是太低了。
    ttxhxz
        8
    ttxhxz  
       2019-01-05 13:48:44 +08:00   ❤️ 2
    @Gaussen 我觉得跟着网易云那个计算机课程的顺序来一遍没什么问题
    https://study.163.com/curricula/cs.htm
    Gaussen
        9
    Gaussen  
    OP
       2019-01-05 14:01:22 +08:00
    @ttxhxz 感谢推荐,坐等开课。
    yiranHZT
        10
    yiranHZT  
       2019-01-05 14:03:58 +08:00
    网上找找计算机专业的本科生的学期 /学年课程表,或者是教务系统里的培养计划,看里面感兴趣的书。计算机本科的课程都是以培养基础知识和编程思想为主的,所有知识的实用性不是很高,有不少已经过时,所以盲目看别人推荐的通常看不下去。一定要看感兴趣的比较概况性的那些书。
    如果决心更强的,甚至可以去附加的大学蹭书蹭课。
    Gaussen
        11
    Gaussen  
    OP
       2019-01-05 14:17:01 +08:00
    @yiranHZT 感谢建议,还真没想过去查课表这些。之后看一下。
    learnshare
        12
    learnshare  
       2019-01-05 14:30:07 +08:00   ❤️ 1
    网络也学习一下,主要是 HTTP 用得比较多
    Raisu
        13
    Raisu  
       2019-01-05 14:40:21 +08:00 via Android
    请问现在月薪多少?做完这些以后工资会涨多少?
    Gaussen
        14
    Gaussen  
    OP
       2019-01-05 14:45:53 +08:00
    @learnshare 嗯,慢慢来,一下子学太多我会混乱- -
    @Raisu 现在是 8k,学完以后,看能学成什么样子吧。我计划是用 2 年时间来提升自己。
    lidongyx
        15
    lidongyx  
       2019-01-05 14:52:05 +08:00 via iPhone   ❤️ 9
    你朋友说的有道理,你与其花时间学楼上推荐的计算机课程,不如深入去学习语言和框架。
    那些计算机理论课程,对你工作的帮助并不大,推荐你整理一下大公司对 PHP 开发工程师的技能要求,这样更有目的性去学。
    你待遇才 8k,远没有到要去学习理论的程度,月薪 2 万以上基础理论才会起作用。
    Gaussen
        16
    Gaussen  
    OP
       2019-01-05 15:25:48 +08:00
    @lidongyx 感谢建议。确实从职场角度来考虑的话,深入语言和框架才是更快提升自己价值的一条路。我会好好计划一下学习安排的。
    j2gg0s
        17
    j2gg0s  
       2019-01-05 16:11:33 +08:00   ❤️ 1
    我觉得你朋友说的是对的,先从工作上延伸出去比较现实。个人建议是你现在用的 HTTP/RPC 服务框架, DB/Cache/MQ 的 client,MQ 的实现,以及各种中间件。代码看的累的话,可以先看 C/S 之间交互的协议
    php01
        18
    php01  
       2019-01-05 16:38:42 +08:00
    15 楼说得没错,现在推荐你看这些的,肯定都是 20k 往上走的
    stdying
        19
    stdying  
       2019-01-05 16:57:47 +08:00
    15 可以的
    Akiyu
        20
    Akiyu  
       2019-01-05 18:08:50 +08:00
    这本书我也没看过, 不能做出什么建议
    不过我倒是又想到一本书, <编码> 这本书也不错

    至于#15 的, 说的有一定道理...
    现在的话与其练内功, 或许练练外功会更好
    多一点框架或者工具的运用, 在短时间内能达到最好的效果

    不过从现在积累也不错, 就当没事看着玩吧
    huruwo
        21
    huruwo  
       2019-01-05 18:45:23 +08:00
    面向工资编程即可
    supermanheng21
        22
    supermanheng21  
       2019-01-05 20:03:30 +08:00
    15 楼说的很对
    tujin
        23
    tujin  
       2019-01-05 20:43:15 +08:00 via Android
    从常用框架入手到 http,tcp 更好一点
    likuku
        24
    likuku  
       2019-01-05 20:53:57 +08:00
    Java, PHP, Python .... 嗯,先修 数据结构,再修 算法,PHP 工作的话,网络这块也得补 重点 http

    DB 也免不了了,SQL 的基本概念什么得补,nosql 的看情况主次有别补补

    计算机组成原理,汇编什么,这些靠近底层硬件的,你有优化编译器 /虚拟机 /runtime 这个需求,才有必要学
    ZCapping
        25
    ZCapping  
       2019-01-05 20:56:49 +08:00
    我感觉你可以先学深入学习下 Redis 和 MySQL,然后可能你就知道还是需要先学《数据结构》,然后就知道可能搞下 c 语言。以上是我目前的心境,希望对你有帮助。
    hanxiaomeng
        26
    hanxiaomeng  
       2019-01-05 22:33:23 +08:00 via iPhone
    计算机网络(七层的常用协议),Linux 系统( rhca 水平,非原理),数据库(企业实际应用的那些,非原理),数据结构。
    hanxiaomeng
        27
    hanxiaomeng  
       2019-01-05 22:34:36 +08:00 via iPhone
    月薪 2w 以下,可以数据结构可以先放一边,Linux 达到 rhce 就可以了
    Donne
        28
    Donne  
       2019-01-05 23:28:02 +08:00
    作为 2w 以下,学了一段数据结构的人,确实感觉是为学而学,先学 Linux,MySQL 和 HTTP 可能更好一些,个人意见。
    JRight
        29
    JRight  
       2019-01-06 00:00:52 +08:00
    深入理解计算机系统,算法(第四版)(结合 Coursera 上的普林斯顿算法课)
    hugo54
        30
    hugo54  
       2019-01-06 00:09:34 +08:00 via Android
    如果真是想好好深入学计算机本科的专业课,可以刷国外名校的课,例如 cmu 的 15-213 和 ucb 的 cs61b
    AltairT
        31
    AltairT  
       2019-01-06 03:19:18 +08:00
    @Donne #28 我能说我之前还想着看算法嘛,后来想了下这样不行,没有适当的正反馈坚持不下来.就简单了解下常用数据结构,然后看 mysql 了.
    ljzxloaf
        32
    ljzxloaf  
       2019-01-06 09:18:23 +08:00
    同野生,握爪
    我觉得你说的这些东西学的时候不用太计较细节:一方面是没有时间和精力;另一方面知识体系都是螺旋进化的,没必要一开始就吃个胖子.所以我一般找网课学.
    汇编:http://www.xuetangx.com/courses/course-v1:TsinghuaX+20240103X+sp/about
    操作系统:http://www.xuetangx.com/courses/course-v1:TsinghuaX+30240243X+sp/about
    其他的应该都能找到
    Hanggi
        33
    Hanggi  
       2019-01-06 10:04:42 +08:00
    计算机组成原理对理解计算机工作很有帮助,如果英语还可以可以试着看原版,或者看 CSAPP,非常经典。
    MIMEIK
        34
    MIMEIK  
       2019-01-06 10:38:28 +08:00
    考个中级 /高级资格证,还能减税。
    mamahaha
        35
    mamahaha  
       2019-01-06 11:05:37 +08:00
    开车的司机了解一些汽车结构以更好地服务于驾驶,基本都是在维修保养过程中积累出来的,而不是系统学习车辆工程专业。
    maplelin
        36
    maplelin  
       2019-01-06 11:18:36 +08:00
    @Gaussen 科班至少前三年都在学基础,补基础这个急不来,除了上面提到的,嵌入式系统和数据库设计还有计算机网络都要补的。
    wolfie
        37
    wolfie  
       2019-01-06 11:58:11 +08:00
    23 小时 14 分钟前 · 3528 次点击 ∙ 133 人收藏
    quinoa42
        38
    quinoa42  
       2019-01-06 12:00:12 +08:00
    csapp 实体书就算不想看了还能垫桌角,虽然太重了压不了泡面
    xwbz2018
        39
    xwbz2018  
       2019-01-06 14:01:08 +08:00
    要不要来点更基础的 https://www.bilibili.com/video/av21376839
    wangluofansi
        40
    wangluofansi  
       2019-01-06 14:25:23 +08:00 via Android
    月薪两万也是搞懂 csapp 就行了,跟着 cmu 15213 的课程上完就是了,其他用得着再学
    Gaussen
        41
    Gaussen  
    OP
       2019-01-06 14:26:26 +08:00   ❤️ 1
    感谢各位的建议。
    真的感叹,想起自己初学编程的时候,有点小成果就沾沾自喜。
    工作后,慢慢的适应了公司的节奏,每天考虑的大多是业务上如何实现,技术上却几乎没有进步。终于在我离开第一家公司之后觉察到了这点,我在温水里被煮了太久,加上自己的惰性,让我寻找新东家的时候碰了很多次壁,虽然我现在已经落定,不过想到当时连续碰壁的经历也不免焦虑,感到了十足的危机感,使我开始不停地去学习。
    结合我个人以及现在工作的情况来说,我一开始想要做的那些可能是真的性价比不高,因此我决定先从工作入手,加深对 PHP,常用框架框架的理解和使用,同时更多的去了解一下协议(确实我现在对协议的了解很粗浅,很多时候也感到不知道该如何深入了解协议的知识),以及常用数据库也要加深认识,之后再去考虑别的。
    因为个人英语也很差,所以在去年年末也下定决心提升自己的英语水平,并为之付出努力,路还很长,希望自己能稳步前进,每一年都有巨大的进步。
    nililnellaf
        42
    nililnellaf  
       2019-01-06 15:09:17 +08:00
    这本书和 Computer Architecture: A Quantitative Approach 都建议看完 CS:APP 之后再说
    CS:APP 看之前补一下标准 C 就行了
    xrr2016
        43
    xrr2016  
       2019-01-06 16:51:40 +08:00
    mark
    MorningBOBO
        44
    MorningBOBO  
       2019-01-06 17:51:17 +08:00
    共勉 mark
    kios
        45
    kios  
       2019-01-06 18:01:46 +08:00   ❤️ 1
    CS 50 哈佛的公开课
    inter18099
        46
    inter18099  
       2019-01-07 07:55:45 +08:00
    @kios 我学过 web programming with python and js。很好的课程,提供了很多 insight。
    driveby
        47
    driveby  
       2019-01-11 18:26:46 +08:00
    不太赞同 LZ 朋友的观点。
    在对计算机基础知识没有一个整体概念之前,强行去深入学习语言和框架,虽然能提高工程能力,但是这个过程是很枯燥且低效的。
    相反,在有一定理论基础后,再深入学习语言,绝对会有一种豁然开朗的感觉,也很利于长远的发展。
    永远记住:磨刀不误砍柴工。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3415 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 11:31 · PVG 19:31 · LAX 04:31 · JFK 07:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.