返回首页

计算机基础知识对程序员来说有多重要?

76 2024-03-12 15:36 admin

一、计算机基础知识对程序员来说有多重要?

不知道这个回答是否能成为热门回答,不过我自己作为一个工作三年的码渣来说,想要变成工程师或者往更高的层次走,那么计算机基础就是内功。

或许你现在学这些知识看不到终点,看不到方向,看不到对岸,但还是要给自己一点信心,因为没有走不完的路,啃不完的书。成人后,才发现,学点知识,很舒服。

扯了一些题外话,自从我做公众号以来,也写了一些关于计算机基础方面的知识,同时我也囤了很多计算机相关的书

我的梦想是想把这些书都刷完,然后写出文章,传播出去,供更多人可以看到,做一个对的起自己的人。

可能这个梦想我今生也很难实现,因为书有难以想象之多,不过,有生之年要尽我所能,做更多的事情。

  • 这是我的 Github ,你也可以在上面找到我所有的文章,另外,求各位 star 谢谢。
crisxuan/bestJavaer
  • 这是我的知乎专栏,我所有的文章也会同步知乎专栏,欢迎大家关注。
Java建设者

好了,先来看看我都写了哪些文章吧。

这是计算机基础系列,这个系列只是简单介绍了一下计算机组成,CPU、内存、磁盘、压缩算法、二进制、操作系统、汇编、硬件入门,语言简练适合未入门的小白,强烈推荐给大家。

程序员cxuan:CPU 是怎样运行的?程序员cxuan:程序员需要了解的硬核知识之内存程序员cxuan:程序员必知的基础知识之二进制程序员cxuan:程序员需要了解的硬核知识之磁盘程序员cxuan:程序员需要了解的硬核知识之操作系统入门程序员cxuan:程序员需要了解的硬核知识之操作系统和应用程序员cxuan:程序员需要了解的硬核知识之汇编语言程序员cxuan:程序员需要了解的硬核知识之控制硬件

如果上面是基础版本的话,那么操作系统系列就是硬核分享了,那么为什么需要学习操作系统呢?或许你可以看看这个回答。

为什么要学操作系统?

下面是我的操作系统的文章。

我是根据中文版和英文版结合来看的,下附我的文章链接

第一章:操作系统介绍

写给大忙人看的操作系统

第二章:关于进程和线程

写给大忙人看的进程和线程

第三章:内存管理

内存:你跑慢点行不行?CPU:跑慢点你养我吗?内存:我不管!

第四章:文件管理

简直不要太硬了!一文带你彻底理解文件系统

第五章:I/O 管理

肝了很久!一文了解操作系统 I/O

第六章:操作系统死锁

写给大忙人看的死锁详解

如果你觉得上面的文章有点难度的话,可以看看下面这些操作系统的所有概念。帮你梳理一下操作系统所有的概念。

我写了一份操作系统词典送给你!

另外,我还抽空写了一篇关于操作系统的面试题系列,写的不好,还请知乎各位大佬多多指教。

看完这篇操作系统,和面试官扯皮就没问题了。

最近我从自己的学习总结还有一些优秀的回答中提出出来了一些非常硬核的操作系统学习网站,帮助你理解。

珍藏已久的 OS 学习网站拿出来分享给大家

还有操作系统硬核整理的一篇文章。

5万字、97 张图总结操作系统核心知识点

作为程序员来说,Linux 操作系统是你必须要了解甚至是说精通的,因为 Linux 真的很 Geek。

我写过一个 Linux 系列,能够非常全面而有效的帮你入门 Linux 。

程序员cxuan:初识 Linux 系统,就这一篇了!程序员cxuan:Linux 进程必知必会程序员cxuan:真香!Linux 原来是这么管理内存的程序员cxuan:Linux IO 管理就这一篇程序员cxuan:文件系统:隐藏在 Linux 背后的机制

另外,计算机网络也是内功,TCP/IP 协议簇都有哪些,计算机网络有非常多重要的协议,一个报文是如何从一个端系统传递到另外一个端系统的?计算机网络都有哪些层次?从页面上输入网址后,为什么能显示出来内容?如果不了解计算机网络,分布式怎么玩儿?这些都是内功。我现在也在刷计算机网络系列,如果小伙伴们有兴趣交流,可以私信我。

目前只有 HTTP 相关系列文章,但是我后面会继续写其他关于计算机网络的内容。

看完这篇HTTP,跟面试官扯皮就没问题了震惊 | HTTP 在疫情期间把我吓得不敢出门了你还在为 HTTP 的这些概念头疼吗?你说你懂互联网,那这些你知道么?建议看 | 计算机网络核心概念你要问我应用层?我就和你扯扯扯看完这篇 HTTPS,和面试官扯皮就没问题了看完这篇 Session、Cookie、Token,和面试官扯皮就没问题了面试 HTTP ,99% 的面试官都爱问这些问题

我还写了关于编译原理方面的内容,也会持续更新,目前只写了一篇

为什么编译原理被称为龙书?

汇编语言的内容,也要搞起来,这些都是内功,内功马虎不得。

没错!cxuan 对汇编下手了爱了爱了,这篇寄存器讲的有点意思

关于语言方向,不管你搞什么语言,C 语言和汇编都是需要了解的一门语言

哦!这该死的 C 语言!

---------------------------------------分割线----------------------------------------------

感谢大家认可,没想到可以破千赞,计算机网络我也开始更新了。

计算机网络第一篇,聊一聊网络基础

计算机网络基础知识总结

计算机网络第二篇,聊一聊 TCP/IP 基础

TCP/IP 基础知识总结

计算机网络第三篇,这些应用层协议你也应该知道

拿下计网协议后,我就是公园里最靓的仔

计算机网络第四篇,这篇文章写的时间很长了,图文精美,非常值得花时间阅读

40 张图带你搞懂 TCP 和 UDP

计算机网络第五篇,网络层之路由器的基本概念。

路由器你竟然是这样的...

计算机网络第六篇,了解一下 IP 基础知识的概念。

IP 基础知识总结

计算机网络第七篇,全方位了解一下网络层的知识。

我画了 40 张图就是为了让你搞懂计算机网络层

计算机网络第八篇,了解一下 ARP 协议是什么

ARP,这个隐匿在计网背后的男人

计算机网络第九篇,DNS 协议是面试经常会考到的点,这篇带你深入了解一下 DNS 协议

万字长文爆肝 DNS 协议!

另外,因为我主要是从事Java后端开发,所以我也写了很多关于 Java 方向的文章。

看完这篇 final、finally 和 finalize 和面试官扯皮就没问题了一场 Atomic XXX 的魔幻之旅(文末露脸)Java 中的语法糖,真甜。Redis 秒杀实战为什么一个还没毕业的大学生能够把 IO 讲的这么好?给女同事讲完代理后,女同事说:你好棒哦活久见!64 张图带你 Maven 实战通关2w字 + 40张图带你参透并发编程!老哥,您看我这篇Java集合,还有机会评优吗?操作系统和并发的爱恨纠葛我向面试官讲解了单例模式,他对我竖起了大拇指看完这篇 HashMap ,和面试官扯皮就没问题了硬核原创|Java 面试题全梳理面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他看完这篇Exception 和 Error,和面试官扯皮就没问题了我画了35张图就是为了让你深入 AQS肝完这篇线程池,我咳血了

还有一些关于 MySQL 的文章,这类文章还比较少。

47 张图带你 MySQL 进阶!!!138 张图带你 MySQL 入门很用心的为你写了 9 道 MySQL 面试题面试官的灵魂一击:你懂 MySQL 事务日志吗?炸裂!MySQL 82 张图带你飞!

我从 B 站汇总了一些计算机方面非常好的课程,推荐给你

我爱 B 站!

二、培训班出来的程序员,怎么学习计算机基础知识?

自己写一个CPU(可不做)

在自己写的CPU上运行自己写的操作系统,然后用自己写的编译器编译运行一个程序。

OK,基础打好了。

三、培训班出身的程序员怎么样提升自己的计算机基础知识?

跟题主一样,培训后拿了12K,工作两年开始狂补计算机基础知识。我是培训出身,有幸是计算机专业,但是我大学的时候等于一点没学。其实学了也没啥用,大学学的内容基本上用处不大。

说说自己恶补计算机知识经历:

契机是因为我当时在的初创公司的APP日活原本在2000左右,后来业务起来每天将近3万用户注册,可能2000用户和3万用户对于前端开发来说差不大,但是后端就是天壤之别。

都不说架构问题,而是服务器资源。从这些问题发现:

  • 计算机组成原理可以告诉你计算机的物理机构,数据如何存储。
  • 计算机操作系统可以告诉你怎么管理内存,什么是进程、线程、IO;
  • 计算机网络可以知道TCP和HTTP,什么是报文。

该补什么:

1.计算机组成原理、计算机操作系统、计算机网络:

完全从0带你掌握计算机与编程基础

2.数据结构:

在开发中大部分的主流语言都已经内置了常见的数据结构,比如java。因为进入工作了,很少有什么从0开始实现一个数据结构的机会,那么就要补:

  • 1、熟悉常见数据结构的概念,比如说数组、堆栈、链表、哈希表等。
  • 2、了解常用数据结构之间的差异,比如说 ArrayList 和 LinkedList,我在之前的文章中有详细说明过,可以点击链接去查看下。
  • 3、关注常用数据结构的外围算法,比如说如何对 List 和 Map 进行查找。
  • 4、关注数据结构使用中容易出错的地方,比如说线程是否安全等。

结合项目学习更适合进阶阶段:

java进阶TreeMap数据结构及源码解析

3.算法:

算法很难,我们之前一个公司明明招了一个算法工程师,结果就是调库。没几天就露馅了...算法就要涉及到高数了。所以学习算法要视情况而定,如果想走算法岗,那么《算法第4版》、《算法导论》、《数学之美》、《编程珠玑》、《剑指offer》这些书都要耐着性子啃一啃。电子书可以在下面这个 GitHub 仓库上找得到。

大咖带你玩转数据结构与算法java程序算法与实际运用--刘意老师360°解读机器学习经典算法

4.设计模式

初级程序员迈向中级或者高级的毕竟之路吧,前几年大家都在忙着熟悉编程语言,而设计模式就是在编程领域一个进阶。

墙裂!墙裂!墙裂推荐的课程!

java设计模式(图解+框架源码分析+实战)

5.软件工程:

说白了,就是学习项目安排,团队协作;也就是往管理岗位发展。我现在觉得尽管你要做技术大佬,但也一定要走管理+技术。因为思路完全不一样,亲身经历。执行的时候就是一亩三分地,想着怎么跑通,但是你做了管理就会发现眼界开阔了,不管是想着这一个模块怎么做,而是整体思路。

6.架构

  • 第一阶段:基本功扎实
  • 第二阶段:关注功能之外的,也就是开阔认知
  • 第三阶段:整个系统层面的掌控,清楚的判断优先级
C语言数据结构 培养架构师思维

四、非科班的Java程序员该如何补充计算机基础知识,需要看哪些书?

这个问题可以升华一下:非科班程序员,入了行,该如何继续提升自己?

我是科班出身,大学也算努力,系统的掌握了计算机知识。迄今为止,也工作了将近20年。但老实说,无论是从在实际开发中,还是个人成长,回头看,大学学习的很多课程,其中有很多,要么“用处”不大,要么完全可以换个方式,更高效的学习。

其中的原因,一方面是实际开发更关注知识的“实用”,另一方面,我们的大学教学也确实与产业有点脱钩。

因此,本文,我就从实用出发,简单介绍下那些领域的知识有很大的学习必要性,以及如何有重点的学习。

数据结构

毫无疑问,数据结构对一名程序员来说非常重要,不是有句话说“程序 = 数据结构 + 算法”。从某个角度看,这种说法即使现在依然成立。这也说明数据结构的重要性。

但大部分的数据结构课程,关注的重点都在如何从数学上实现一个数据结构(例如堆栈、链表)。这从研究上来说,没有错。

但在实际开发中,大部分主流语言(例如Java、C#)都已经内置了常用数据结构。而且即使没有内置的,我们也常可以在第三方库中找到现成的实现。而且这些实现,大都经过实践检验,无论是稳定性还是性能都有保证。

也就是说,对大部分程序员来说,在实际开发中,很难有需求从头实现一个数据结构。因此,就完全没必要像科班生那样,从数学源头来学习数据结构,而只需做到下面几点:

  1. 熟悉常用数据结构的概念(例如数组、堆栈、链表、Map等)。
  2. 了解常用数据结构不同实现的差异(例如ArrayList和LinkList的差异)。
  3. 关注常用数据结构的外围算法(例如如何对List和Map进行查找)。
  4. 关注数据结构使用中容易出错的地方(例如是否线程是否安全等)。

当然也完全没必要阅读大部头的著作,而只需了解关注的重点是什么,然后再到网上搜索专题文章学习即可。至于关注的重点,可以参考《xxx面试大全》中的数据结构章节。

算法

这个要具体问题具体分析了。以我接触的领域来说,大部分普通的业务系统都不会涉及到太复杂的算法,因此就没必要专门在算法上投入时间。

但在一些特殊的领域,如果算法跟不上,可能“寸步难行”,例如图形处理领域,无论是图像的变化还是增强,无一例外都要用到矩阵变换,因此就必然涉及到线性代数的内容,顺藤摸瓜,往纵深学,就必然会牵出更多的东西。

因此,对非科班生(尤其是数学不够好的),对算法学习我是持“劝退”态度的。因为,从职业发展来说,这实在是一条太“曲折”的路线。

一方面,目前的开发越来越趋专业化,算法一般由专门的算法团队负责,普通软件工程师只负责算法转换。

以我为例,虽然是科班出身,也系统的学习过算法,但也常有力有不逮的时候。复杂的算法既实现不了,甚至是理解不了。很多时候,我干脆就不做实现,直接请算法工程师告诉我思路,甚至是伪代码,而我负责转化为正式代码(例如Java)。实践证明,这种做法不仅是可行的,而且也是高效的,正所谓“术业有专攻”。

另一方面,人的精力是有限的,你完全可以把精力投入到自己更擅长的方面,例如设计、产品、架构上,从而取得“差异化”的成功。

当然,如果你“心气”很高,一定要在算法上有所作为,我也可以推荐你两本书:

  1. 《算法导论》
  2. 《数学之美》

这些都是我读过,受益良深的作品。

设计模式

设计模式,我认为是初中级程序员,向高级程序员提升的关键点。

在实践中,我见过太多程序员,前期冲劲十足,但后继乏力,最终泯然于众生。我不敢说所有的人如此,但有不少都是吃了设计模式的亏。

在工作的前几年,大部分程序员都是处于熟悉语言层面的阶段,也就是处于“技”的阶段。这个阶段,如果人还算靠谱,大概在2到3年就会过去,接下来就要进入“术”的阶段。在编程领域,“术”的最典型代表就是“设计模式”。因此,设计模式的重要性再怎么强调都不为过。

要学习设计模式,最经典的读物依然是GOF的《设计模式:可复用面向对象软件的基础》,精炼、深刻,没有一句废话。但这本书对初学者来说,读起来太艰涩,一方面是作者极度追求语言的凝练,一方面代码是用C++描述的。因此,我推荐大家阅读《Head First设计模式》,生动有趣,而且是用Java描述的。

但是,如果精力允许,我还是建议你一定要把GOF的《设计模式:可复用面向对象软件的基础》阅读一下,而且要不止一遍的读(我就是)。这本书绝对常读常新。

当然,学习设计模式,不仅要读书,更要从实践中学习。例如学习Spring框架的过程,如果你有思考,就会发现其中有太多设计模式可供借鉴。

学习设计模式,就是从实践到理论,然后再从理论到实践,反复实践,反复思索,反复总结的过程。当然,这也是从一个“码农”转变成“工程师”的过程。

软件工程

实现一个软件系统的过程,不仅只有编码。还涉及到项目安排,团队协调等一系列非技术因素。而作为一名程序员,如果想往上更进一步,独当一面,成为team leader或者开发经理等管理职务。则软件工程一定要跟上。

当然,软件工程这么多年也一直在进步,从原来的瀑布开发,到现在流行的敏捷开发,但无论怎么变,有些经典的东西还是不变的。下面我就推荐几本我认为现在依然值得深读的书:

  1. 《人月神话》
  2. 《人件》
  3. 《Scrum敏捷软件开发》

当然,关于软件工程,最好的学习方法依然是观察。观察你所在的团队、所在的公司是如何处理工程问题,然后思索,阅读,最终形成自己的方法观。

架构 & 设计

写出一个好程序,有几个维度,从下到上,也是一个程序员逐步升级的过程。

第一阶段,首先要保证基本功扎实,最简单的说,要做到语法熟练、基本框架熟练,成为一个功夫精熟的“码农”。

第二阶段,从“技”到“术”,从“码农”到“工程师”。这个阶段的关键技术是设计模式。在局部上,不仅追求实现功能,更关注实现的好,关注功能之外的维度,例如健壮性、低耦合、可扩展等指标。对主流框架(例如Spring),不仅会用,更有深刻的理解。

第三阶段,从“术”到“道”。

这个阶段,不仅在局部上追求一个模块的好坏,而且还要从整个系统层面去掌控程序,例如保证整个程序不出现系统腐败,如何安排资源的优先级等。这个时候就不是单一的维度,单一的技术能够保证了。

那么,到底怎么才能成为一名架构师的,很难用一句话来回答。

按照某个学习方法,执行下去,你一定能成为一名优秀的软件工程师,但至于如何成为一名架构师,我想除了努力,运气肯定也很重要。但无论如何,有机遇,不是还得有准备嘛?

一名架构师日常的工作,所靠的肯定不是单一的维度,也不是但靠纯粹的读书能获得的。但是,有些经典书的阅读,确实给日常的工作带来了巨大的帮助,下面就是我认为开卷有益的:

  1. 《代码大全》、
  2. 《重构:改善既有代码的设计》
  3. 《设计原本》
  4. 《大型网站技术架构核心原理与案例分析》

.最后

作为一名程序员,从技术菜鸟到大拿的路径有很多,其中最核心的因素就是坚持和努力。学习的过程,就好像登山的过程,以我的经验,大概有80%的人在攀登的过程中,会因为这样那样的原因而掉队。

但无论如何,我相信,只要目标明确,努力加坚持,即使是一个非科班生,也完全可以登顶。

祝顺利!

五、程序员文案?

当然可以,以下是一篇关于程序员的文案,供您参考:在数字世界的深处,存在着这样一群人,他们用代码书写着未来的篇章。他们就是程序员,一群在虚拟世界中创造出无限可能的人。程序员,是现代社会的魔法师,他们操纵着计算机,创造出一款款令人惊叹的软件、应用和游戏。他们的工作,是科技的核心,也是人类智慧的结晶。他们是一群热爱挑战的人,他们面对着复杂的问题,编写出简洁而高效的代码。他们不断追求技术的极致,用创新的思维打破传统的束缚。程序员的世界,充满了逻辑与理性。他们用精确的算法和代码来解决问题,创造出丰富多彩的数字世界。他们的作品,不仅改变了人们的生活方式,也推动了社会的进步。然而,程序员的生活并不总是轻松的。他们常常面临着巨大的工作压力和技术挑战。他们需要不断学习新知识,提升自己的技能,才能在这个快速发展的行业中保持竞争力。尽管如此,程序员们依然乐此不疲。他们热爱编程,热爱挑战,热爱创新。他们用自己的智慧和汗水,书写着科技的历史,也塑造着未来的世界。让我们向这些在数字世界中奋斗的程序员们致敬!他们是我们时代的英雄,是我们前进的动力。他们的付出和努力,将为我们的未来带来更多的可能性和希望。

六、程序员座右铭?

程序员的座右铭挺多的,身为程序员的我先分享几个:

1、一个100行的代码调试都可能会让程序员遇到很多挫折,所以,面对挫折,我们永远不能低头。

2、每天都要优雅的写上每一行代码。

3、每个函数方法的调用都有诗和远方。

4、作为一个真正的程序员,首先应该尊重编程,热爱你所写下的程序,他是你的伙伴,而不是工具。

七、程序员特长?

1. 追求技术

软件开发领域,技术较多了,做技术性的工作很有成就感,很容易有一种“我又成长了我又厉害了,我的能量格又快满了好嗨哟”的感觉,所以很多程序员喜欢技术,并且能不断提升技术水平,持续精进。

2

/5

2. 渴望认可与尊重

程序员在遇到下面的情况时有多愤怒,就说明他们有多渴望被认可、被尊重。

随随便便加功能、加需求,会让程序员觉得:之前的工作量很可能被废掉了,一点也不尊重劳动成果;他们遭遇的种种事情,让他们更加:希望技术被认可,希望劳动和工作成果被尊重,希望自己被认可与尊重。

3

/5

3.被动等待

虽然程序员很希望被别人认可、尊重,但他们很少主动,一般只是在心里默念:

为什么你还没看到我的努力?为什么你还没看到我的成绩?为什么你还没看到我的进步?

因为对他们来说,搞定技术性工作是很舒服的事情,与人沟通交流,说明这个展示那个,是比较麻烦比较累的事儿,所以他们宁愿被动等待别人发现自己。

八、程序员分类?

程序员从事的人群很多,分工也不相同,从大的方面可以分为以下几类:asp程序员、delphi程序员、php程序员、powerbuilder程序员、C程序员、linux程序员、net程序员、vb程序员、java程序员、javascript程序员、C++程序员、Python程序员、ABAP程序员、android程序员、iOS程序员。

九、电脑程序员?

程序员(英文Programmer)是从事程序开发、程序维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。

十、程序员前途?

程序员的前景十分看好,伴随着互联网的发展,程序员的需求量也在不断增加,市场上对程序员的需求量也是日益增多的。

同时,随着互联网行业越来越发达,从事程序员工作的待遇也会逐渐提升,程序员的前景是十分看好的。