计算机基础差(计算机原理,操作系统,计算机网络等课程基础极差),如何学习好的开源项目

做了两年PHP开发,一直做一些简单的操作,目前转go,想往游戏方面转,但是基础很差。英语也差(不能看英文文档)。当初在学校学的时候没有认真,导致现在一些理论不太明白

想问问各位前辈,如何建立起学习信心,需不需要重新去学基础部分。目前刚毕业,不知道如何学习了,一些队列,分布式这些只是听过,但是从来没有用过,做过。看到一些招聘要求自己都不满足,很苦恼,希望有过来的前辈指导

有点乱,不过就是想进步,希望有前辈给一些建议。谢谢

已邀请:

simple - 既要有梦想,又要有实力

赞同来自: zhaohu flewliu StubbornGrass DennisMao

谢邀。首先我没有关注过游戏领域, 不知道游戏领域对哪些技术要求高。但这不到三年的工作经历让我觉得这些计算机里面的经典基础(操作系统原理,网络,数据结构与算法等等)太tmd重要了。可能是由于我的工作主要在中间层(中间件和系统软件),相对于上层的业务层更关心功能,我们中间层更关注稳定性/高可用/高并发等,这样才能给上面的业务层建立构建大规模业务的信心。所以我的观点是如果你不想一直做业务开发,这些东西对你还是很重要(即使是业务开发,懂这些也对你很有帮助),而且工作越久可能会觉得它们越发重要。
其次,怎么学的问题,我也是非科班生,主要靠自学,这些东西学起来大部分时间还是觉得很枯燥的,tupunco的回答很好。我主要是先找一些简单好理解的书开始,如网络方面的:网络是怎样连接的,图解TCPIP/HTTP。算法与数据结构方面:啊哈算法,大话数据结构..., 然后再去啃经典的书就相对轻松多了,我主要是这种模式来自学。也许这些需要花慢(笨)功夫去学习的东西将成为你竞争的核心能力。
再次,分布式领域真的很大,以下是从我的角度总结出来的清单,想每个部分都学习的很牛逼基本不可能。我觉得可能从一些常用的开始了解如rpc(grpc), mq(nsq)等,先了解这个框架或技术为了解决什么问题?在解决问题的同时又引入了什么新问题?然后玩它,基本玩法,高端玩法都试试,再然后看它们的核心部分源码。最终可以选择一两个领域深入进去,成为大牛。

基本理论:
ACID、CAP、BASE
一致性协议
(paxos - zookeeper, raft - etcd)

服务架构:
单体,SOA, 微服务(service mesh)

常见组成部分:
1. 软负载与配置中心:服务注册与发现,负载均衡,发布/订阅配置等
2. 服务通信:RPC, MQ, Actor
3. 日志:采集,存储索引,可视化。如elk stack
4. 监控:应用监控,系统监控(cpu, mem, network, 磁盘io...),分布式调用链路跟踪
5. 数据存储:数据库(mysql, redis, mongodb,newdb),缓存 
6. 安全
7. 大数据处理:批处理(hadoop, spark)与实时计算(storm, flink)
8. 资源管理:容器&容器调度(docker, kubernetes, mesos)
......

这些是现阶段的我的一些观点和看法(不一定对),希望对你有帮助。

Xargin

赞同来自: zhaohu haoc7 DennisMao

越觉得痛苦的东西就得逼着自己去干,看不了英文文档就强迫自己去翻译一本英文书(可以找比较短的) 坚持完一本之后再去看也就没那么痛苦了

tupunco

赞同来自: lesliefang flewliu

基础差花时间把基础补一下, 可以到这里: https://www.icourse163.org/ 找需要得课程, 比如 数据结构, 计算机网络, 有精力把 计算机原理, 操作系统 也补一下. 现在看跟你上学时候看有很大差别, 你会发现好多之前 云山雾罩 得东西一看就明白. 另外 把 Linux 操作系统 相关得也看看.

英语差没太大关系, 可以先找中文资料看. 英文部分使用谷歌翻译 (Chrome 自带), 积累词汇量.

h12 - https://h12.io/about

赞同来自: haoc7

“不过就是想进步”(潜台词是:但是想走捷径,不想面对那么多困难)。想得美哦。比你聪明且努力的人很多,你打算怎么办?

一句话忠告:我们总是高估短期努力的成效,却低估长期努力的潜力。

xkey - go

赞同来自:

谢邀。 英文文档看不懂,这个问题比较严重,无论是开源代码的文档,还是谷歌出来的问题解答都是英文。 看你这种情况,基本上语言底层的一些东西都不懂,转go确实难度比较大。 操作系统肯定要看,建议看APUE这本书,计算机网络也需要了解了解,tcp/ip协议的知识在工作中多少还是要会一点的。 多看看好的开源代码吧,你这种应该属于先天不足,说太多也没啥用,需要自己找到适合自己的学习路线,盲目听从别人的意见也不一定适合

zhaohu

赞同来自:

明知道的短板为啥不补呢?

keeprunning

赞同来自:

先把go基础看一遍,不需要太追究底层实现。然后找一个开源项目,NSQ等,硬着头皮上,看源码。开始肯定一头雾水,别老想着多长时间能完全看懂,哪里不会查哪里,知识盲点一个一个的攻破。这些是碎片化的知识点,同时还要阅读专业书籍系统化学习,把这些知识点融会贯通。坚持下来,你就赢了。

英语不好也没关系,百度中文的资料也足够了。

最重要的,看源码的时候,不要放弃!不要放弃!不要放弃!

个人经验,祝你成功~

suc

赞同来自:

回答好励志~~ 不错!

Xib - fxxking code

赞同来自:

有时间多补补基础,会让你形成一种本能

changjixiong - 时常做白日梦的程序员

赞同来自:

说真的,对于有一点开发经验又觉得基础薄弱不知道如何下一步的同学,我通常的建议都是去看《软件设计师教程》,去考 “软件设计师”这个证书。就是面试招聘的情况来看,能通过这个考试的,基本上基本功是入门了,进阶的话心里也有了门路。

而且这个证书对于应聘是通常是加分的,至少在我找工作的经历以及在我招聘的过程中。

如果这个证书拿不下来的话,可能要慎重考虑是不是要继续从事软件开发工作了。

PS:纯前端的话,可能会有点不同,因为纯前端大部分工作内容貌似和计算机基础知识没有直接联系。如果有说的不对的地方,请指正。

gone - whatever

赞同来自:

simple那个不错

要回复问题请先登录注册