学习一些计算机科学将使你成为更优秀(也更昂贵)的工程师

2025-06-08

学习一些计算机科学将使你成为更优秀(也更昂贵)的工程师

艾伦·图灵,“计算机科学之父”

软件工程!=计算机科学

软件工程是分析用户需求并通过使用软件编程语言设计、构建和测试满足这些需求的最终用户应用程序的过程

科技百科

计算机科学是研究数字计算机信息处理理论与方法、计算机硬件和软件设计以及计算机应用的科学。

https://www.dictionary.com/browse/computer-science

软件工程师 -> 计算机科学家 -> 数学家
https://xkcd.com/435/
xD

计算机科学家不一定是软件工程师,而且不幸的是,许多软件工程师并不一定对计算机科学了解很多。软件工程师专注于构建产品,编写可维护的代码和架构。计算机科学包含了软件工程所依赖的基础,通过更多地了解计算机科学,我们可以成为更优秀的工程师。

前端开发的转变

在过去十年中,前端开发真正成为人们关注的焦点,React、Angular 和 Vue.js 等框架引领了这一潮流。许多以前由服务器渲染的模板页面(PHP、Django、Rails)提供的功能,现在都以解耦的前端包的形式存在。

这绝对是个好消息,原因如下。首先,我认为这种解耦是一个很好的架构决策。其次,这意味着前端开发人员可以承担更多责任,从而成为更优秀的工程师,并赚取更多收入

几年前,前端工作更多是 HTML 和 CSS,而不是 JavaScript,前端开发更多是设计,而不是开发。因此,从事前端开发工作所需的计算背景不如设计背景那么多。

如今,前端开发人员需要具备强大的逻辑和编程技能,不仅因为他们需要在浏览器中处理更多的逻辑,而且因为他们很有可能被要求在 Node 中执行服务器工作。

学习基础知识——从哪里开始

计算机科学领域有数百万个主题,没有人能够全部理解,但下面我列出了一些很好的起点。

大O符号

https://xkcd.com/399/

大 O 算法处理的是时间复杂度。换句话说,它是如何保持程序运行速度。通过学习算法速度,我们可以了解如何对数据进行排序以便显示,如何利用数据库来提高性能,如何让应用程序响应更快等等!

我们还了解了互联网上密码学和安全技术的工作原理,因为它们负责保持加密速度快和暴力解密速度慢。

https://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/

内存管理

什么是栈和堆?指针?内存泄漏?如果你从未使用过 C++ 或 Go 这样的编译语言,我建议你先做一两个小项目。

对于主要使用 JavaScript 或 Python 等内存管理语言的人来说,了解内存的底层工作原理至关重要。即使解释器(很可能是用 C++ 编写的)负责内存管理,但如果不了解其基本原理,我们仍然会遇到问题。

指针:http://www.cplusplus.com/doc/tutorial/pointers/

栈与堆:https://medium.com/fhinkel/confused-about-stack-and-heap-2cf3e6adb771

内存泄漏:https://www.geeksforgeeks.org/memory-leak-in-c-and-how-to-avoid-it/

处理器架构

处理器如何知道采用以下表达式:

5 + 3;
Enter fullscreen mode Exit fullscreen mode

并将数字 5 和 3 相加?

谁教会了处理器理解阿拉伯数字?答案当然是没有,处理器只能按位处理二进制数。

JavaScript 由解释器(Node.js 或浏览器)运行,解释器是一个编译型程序。解释器是用编译型语言(例如 C++ 或 Go)编写的,然后被编译成 CPU 可以理解的原始字节码。为了更好地理解计算机实际的计算方式,编写汇编代码会非常有帮助。

汇编语言是处理器的原生语言,编写一些汇编语言可以帮助我们理解 CPU 的处理方式。由于汇编语言与 CPU 架构紧密耦合,因此它会根据处理器类型的不同而变化。我建议从 ARM 开始,我认为它的语法比 x86 更优雅。

编写 ARM 汇编(第 1 部分)

ARM 汇编基础知识介绍

线程

有没有想过计算机是如何同时执行多项任务的?我们编写的大多数程序都有一个简单的逻辑流程,所有操作都按顺序进行。如果我们编写在浏览器中运行的代码,那么大多数代码都是基于事件触发的,但事实上,两条指令永远不会同时运行。

线程是利用多个处理器(或处理器核心)同时进行计算的一种做法。线程是一门强大但危险的艺术。线程使我们能够利用计算机架构的优势来加速程序,但也可能引入诸如死锁或竞争条件之类的错误。

用 Go 编写一个玩具程序并利用虚拟线程(称为 goroutines)是熟悉线程的好方法。

Goroutines:https://tour.golang.org/concurrency/1

谢谢

感谢阅读!希望我列出的这些概念能够对你的职业生涯有所帮助!

作者:Lane Wagner @wagslane

下载 Qvault:https://qvault.io

为我们的 Github 加星标:https://github.com/q-vault/qvault

学习一些计算机科学将使您成为一名更优秀(且更昂贵)的工程师一文首先出现在Qvault上。

鏂囩珷鏉yu簮锛�https://dev.to/bootdotdev/learning-some-computer-science-will-make-you-a-better-and-more-expensive-engineer-2bmf
PREV
最佳免费 Bootstrap 5 模板
NEXT
Implementando Clean Architecture com Golang