学习计算机科学也可以选择网络学习方式
自学成才的开发人员和训练营毕业生通常很难找到一份工作。我发现,如果新开发人员回过头来学习他们在跳入应用程序代码的深层时跳过的 CS 基础知识,那么一份工作就会容易得多。对编程教育采取捷径方法类似于跳过生物学去参加为期三周的颅骨外科速成课程。另一方面,许多开发人员花四年或更长时间上大学,并花费数万元,而在网上获得相同的教育所需的时间和成本的一小部分。
学习计算机科学是一种合适而有效的方式,可以快速开始您的编码生涯,而且您可以在线进行。您无需上大学即可获得很好的 CS 教育。让我们回顾一下您获得软件工程师工作所需的资源和技巧,您无需离开房间即可完成。
如何开始——简答
各地大学的计算机科学学科的学生研究了几个主要主题。我们将这些主题中的一些视为“必修”,而另一些则是“选修”或“可选”。查看下面的列表以进行概述,您应该大致按照显示的顺序研究这些主题。
此外,在深入探讨所有各种要求之前,我想指出我近期推出了一种旨在通过编码练习教授计算机科学的资源。如果您对简单的动手方法感兴趣,请务必查看它,可以免费审核。
研究这些计算机科学主题
这些主题几乎涵盖了典型 CS 学生在大学中会学到的内容,但您显然需要确保对每个主题进行适当深入。在本文的后面,我们将更详细地介绍每个主题,并提供帮助您入门的资源。可选选择 2 个
典型的计算机科学本科生需要4年才能完成学位。希望这对您来说不是新闻,这就是大学的运作方式。有希望!如果你是自学,你可以减掉不必要的并加快这个过程。如果您遵循这些提示,您可能会在不到两年的时间内学习相当于 CS 很好的知识,并且应该能够在 3-6 个月后获得实习或一份工作,具体取决于多长时间你可以每天练习和学习。
请记住,找工作通常需要的不仅仅是了解你的东西。在此过程中获得证书并完成实际项目可为您提供一些具体的内容来填写您的简历,以填补缺少的 CS 学位。
1. 在网络上观看是讲座,而不是教程
教程和课程应该涉及编码,我会建议一些资源来做到这一点。另一方面,讲座对于学习不一定需要动手经验的概念很有用。您可以在早餐或火车上观看这些视频。
2. 参与开发社区
您是否在空闲时间浏览一些开发社区?对您的在线内容消费做一个小小的改变,并开始阅读与技术相关的内容,或者除了您已经消费的内容之外。查看此社区列表,让自己成为其中的一员。
3. 早找工作
您在网上教自己,弹射教育的有效方式是让实习或入门级的工作,你能尽快。根据您感兴趣的 CS 工作类型,您可以早些或晚些开始,因为有些需要或多或少的经验。
为什么要学习计算机科学?
许多开发人员在没有计算机科学学位的情况下确实获得了高薪的编程工作,但这可能很困难,通常需要运气或行业内的朋友,一旦找到工作,他们往往停滞不前,无法参与认真创新和具有挑战性的工作.
初步学习可能足以获得一份低薪的入门级工作,但我发现这些开发人员经常会触及他们的收入潜力上限,并因使用相同的工作而精疲力竭工具很快。
不要成为那个开发人员,或者如果您是那个开发人员,您可以轻松返回并学习基础知识。
像我一样,在过去的 15 年中,您可能已经听说过“编程工作的数量多于应聘者的数量”。虽然仍然如此,但软件工程的职业前景正在发生变化。
很多自学成才的开发人员或 毕业生,他们都在寻找入门级工作,但没有基本的数学和 CS 技能来解决更具技术挑战性的问题。通过对计算理论和算法有更深入的了解,你可以让自己脱颖而出,更快地找到工作,并在到达那里时获得更高的薪水。
主题
1 – 编码
编码真的很有趣,而且入门门槛很低。这里的目标是扎实掌握一两种编程语言。我建议 JavaScript 或 Python 作为适合新开发人员的语言。这里的目标只是开始编写代码并从中获得乐趣!有大量的项目和课程适合初学者。
目标
理解和编写小程序
使用变量和表达式
使用条件语句
使用迭代结构
使用列表/数组结构
了解编程环境的基本元素,包括库和模块、编辑器、解释器和指令行
使用基本的编程结构,包括控制结构、函数、键盘输入、类和对象
2 – 计算机架构和硬件
计算机体系结构可以说是训练营和自学开发人员社区中较容易被忽视的主题。如果对运行的硬件没有基本的了解,几乎不可能编写高性能和友效的软件。
计算机由各种组件(硬件)构成,包括 CPU、内存、总线、时钟以及您熟悉的外围设备,如鼠标和键盘。所有这些组件都必须相互通信并为用户提供必要的服务,但作为软件开发人员,我们要了解的重要的组件是内存 (RAM) 和处理器 (CPU)。
例如,处理器如何知道采用以下用 JavaScript 编写的表达式,let sum = 5 + 3并计算 5 加 3 的结果?
谁教处理器理解阿拉伯数字?答案当然是它没有,处理器只能按位工作,处理二进制数。
Javascript 由解释器(Node.js 或浏览器)运行,它本身是一个编译程序。解释器是用 C、Rust 或 Go 等编译语言编写的,然后编译成 CPU 可以理解的原始字节码。为了更好地处理计算机实际上是如何计算事物的,编写汇编代码会有帮助。
汇编是处理器的本机语言,编写一些它可以真正帮助我们理解 CPU 如何处理东西。由于汇编与 CPU 体系结构紧密耦合,因此语言会根据处理器类型而变化。我建议从 ARM 开始,我认为它的语法比 x86 更优雅。
目标
转换并理解二进制、十六进制、八进制和十进制等数基之间的差异
了解计算机指令集和汇编语言(可能是 ARM)的基础知识
编写直接与系统交互的低级程序
对 CPU 的工作原理有基本的了解
3 – 算法和数据结构
算法和数据结构的研究是计算机科学的基础。我们学习如何快速编写计算机程序是很重要的,这样它们才能让我们的用户满意并快速找到有意义的答案。
我同意传统的教育体系,即熟悉通用算法和数据结构对于开发人员的成功都很重要。了解这些基本的解决问题的技能也将使您在职业和生活的方面受益。
目标
了解各种软件数据结构的基本原理,包括它们的效率和权衡
以已知的编程语言实现和使用多种数据结构
复习代数,包括指数和对数
了解 Big-O 复杂性
查看堆栈、队列、未排序列表和排序列表等结构
实现二叉搜索树 (BST)
练习平衡树
了解哈希
搜索和排序算法
了解图形以及如何遍历它们
4 – CS 数学
与许多科学一样,计算机科学只是应用数学。许多软件工程师竭尽全力忽略这一事实,并做出无知的声明,例如“我从未在编码时使用数学”。我一直说我宁愿带一个数学学生教他们编程,也不愿带一个程序员教他们做数学。
对让计算机科学发挥作用的数学有扎实的理解将使您比依靠同行的学术理解来度过难关的开发人员具有大的优势。
目标
鸽巢原理
感应和强感应
题目逻辑
等价和范式
基本概率
条件概率
贝叶斯定理
理解线性方程组
了解基本的概率论
矩阵的对角化
线性变换
5 – 数据库
数据库知识和理论是大多数工程工作中实用的主题之一。我从来没有在没有多个数据库的公司工作过,公司成功的工程师通常是那些对如何使用它们有一点了解的人。
目标
了解关系型和非关系型数据库的区别
了解不同查找使用的复杂性
能够为实际目的设计有效的数据库模式
熟练使用关系、键值和文档系统
了解事务和 ACID 的基础知识
6 – 网页开发
正如您可能想象的那样,在训练营中教授 Web 开发的原因是因为这是赚钱的工具。大多数开发工作,尤其是入门门槛较低的工作,都是网络开发机会。当您深入研究各种 Web 开发资源时,如果您选择学习一个,请尝试专注于单一后端语言(可能还有一个框架)和单一前端框架。
就个人而言,我建议使用没有框架的 Go 编程语言来学习后端 API。我还建议使用 vanilla JS 构建前端,以及使用 Vue.js 或 React.js 构建另一个前端。这种做法是值得的,不要跳过原版 javascript!框架很棒,但它们来来去去。
目标
在客户端和服务器端开发现代 Web 应用程序
评估各种客户端和服务器端 Web 应用程序框架并对比它们的差异
在浏览器中使用 JavaScript、HTML 和 CSS 创建交互式用户体验
创建一个基于浏览器的前端应用程序可以创建、读取、更新和删除信息的 RESTful API
7 – 图形编程
从游戏和视频编辑软件到 Web 浏览器,图形编程是行业内一个高性能、快速发展的主题。您需要从一个相当低级的工具(如 OpenGL)开始,以便了解大多数框架(如Unity和Unreal Engine)的构建基础。一旦您构建了一些小项目,我建议您使用更高等级的框架(如上述框架之一),或者是基于浏览器的工具(如 WebGL)来构建简单游戏。
目标
理解为什么我们使用 GPU 而不是 CPU 来进行图形渲染
了解为什么 OOP 可以让我们在游戏开发环境中的生活变得更轻松
使用基本几何学和三角学来构建漂亮的模拟
了解无法访问内存的语言对性能的影响
玩得开心——这是编程的创造性方面
8 – 函数式编程
函数式编程概念和风格在 Web 开发中尤为重要,因为前端应用程序和框架开始使用函数式风格来帮助简化代码库的维护。递归、避免副作用和纯函数式数据结构是必须知道的概念,它们将使在该行业找到工作变得更加容易。即使您不会使用纯函数式语言,函数式编程的基础也普遍适用于所有编码环境。
目标
理解函数式编程范式之间的区别
实现许多常见算法的递归版本
了解 Lisp 以及解释器的工作原理,编写一个基本的解释器
了解纯函数的好处
9 - 计算理论
计算理论,除了纯数学之外,由于其理论性质,是“纯”的计算机科学主题之一。通常被称为计算机科学之父的艾伦图灵开创了许多我们现在用来计算复杂问题解决方案的理论。在我看来,计算理论是 CS 教育的好处,理解其概念真正使学生在就业市场上的竞争中脱颖而出。
目标
了解不同计算模型的能力和局限性
了解形式符号 (LaTeX) 以及如何分析形式系统。
识别不同类别的计算复杂度
了解停机问题和车床
研究有限自动机以及它们如何用于模拟现实的问题
了解计算模型的局限性以及依赖它们的现实系统
其它学习内容
1 – 密码学
密码学是所有数字应用程序可靠性的基础。有价值的工程师不仅需要了解较佳实践,还需要了解这些实践如何以及为何起作用。密码学可能是一门重数学的学科,这取决于您对材料的深入研究,因此在研究密码材料时复习数学基础知识可能是个好主意。
目标
了解加密原语,如 XOR 和一次性密码
实施和研究对称加密系统
了解公钥系统引入行业的概念
学习和实施分组密码和流密码
了解您选择的语言的标准开源加密库
创建和使用数字签名以发送经过身份验证的数据
2 – 网络
每隔一段时间,公司的服务器连接就会出现问题,只有有经验的开发人员才能处理中断。这些开发人员是更有价值的资源,因此获得更高的薪水。对网络基础知识的了解对您的工程生涯来说是一个福音。
目标
互联网的基本组成部分
分层网络模型
域名服务 (DNS)
面向应用程序开发人员的网络 API
常用网络诊断工具
网络性能——吞吐量和数据包丢失
TCP – 可靠性和拥塞控制
IPv4/IPv6 寻址/路由
网络地址解读
固定和点对点无线网络中的路由
基本网络稳定可靠– 僵尸网络、DoS/DDoS、病毒和蠕虫
3 – 编译器
虽然许多流行的编程语言(如 JavaScript 和 Python)是解释性的,但许多是直接编译为机器代码的。
目标
语言、语法和机器理论
扫描和词法分析
解析和解释
口译
机器码
代码生成
存储和符号管理
从头开始编写自己的玩具编译器
4 – 分布式系统
互联网已经变得如此庞大,很少有流行的在线服务能够在一台机器上运行他们的系统。以前,公司购买更大、更强大的机器,但谷歌是编写更智能软件的先驱之一,这些软件可以简单地利用许多更小、更便宜的机器的力量。
分布式系统是对可以有效利用通过网络连接在一起的硬件的程序的研究,并且它一直变得越来越相关。
目标
区分实际项目(Kubernetes、ElasticSearch、Kafka 等)实现的分布式系统的方法和解决方案
设计和实现通过网络连接使用多台计算机的程序
学习使用 Go 的并发模式,并了解它如何帮助分布式系统的实现
5 – 系统
如果不了解运行软件的软件,就很难编写好的软件。就像对 CPU 架构的理解一样,对系统如何工作的深入了解将使您成为宝贵资产。大多数开发人员对 Linux 的运行方式只有粗略的了解,如果您像大多数人一样在 Linux 上部署,您的知识将获得丰厚的回报。
目标
了解系统的主要组件并与之交互
分析系统软件中相互竞争的目标之间的权衡,包括稳定可靠性、性能、便利性和未来维护的便利性
评估和批评现代和历史系统的设计
了解启动顺序
学习基本的 Unix 并熟悉使用
了解 Linux 内核
6 – 人工智能和机器学习
虽然 AI 和 ML 曾经是相当小众的领域,但随着公司转向大数据来解决长期存在的营销和产品问题,它们变得越来越重要。如果你有兴趣,我强烈建议你看看一些开源框架的基础知识,比如 Tensorflow 和 Keras。
目标
经典AI搜索算法:无信息搜索、有信息搜索、本地搜索
重要的人工智能概念,如启发式和贪婪算法
题目和一阶逻辑在线学习计算机科学综合指南
团业企业管理为您分享
做企业管理、为客户打造信息化管理平台、做企业管理服务,选型、销售、实施、服务ERP系统都是一个积累经验的过程。20多年的企业管理经验沉淀,但是并没有改变学习的心态。与时俱进才能更好的为企业服务!接触了各行各业的企业,处理了各种各样的问题形成了一种认真、负责、细腻、职业、敬业的服务理念!为您提供用友云产品软件:用友U8cloud,用友畅捷通T+cloud。用友U9,用友NC,财务软件,电商通。企业相关服务:企业品牌运营,公司注册,财税管理,数据维护,数据恢复,域名商标,软件定制开发。用友、金蝶ERP销售实施服务。深圳市团业科技有限公司(团业)为您提供企业一体化服务。