计算机编程入门先学什么最好?零基础入门到精通,收藏这篇就够了

news2024/11/27 20:38:00

看完其他知友的回答,我认为他们的观点过于局限,并没有真正切中问题的要害。

我们不妨换个角度,站在更高一层来看这个问题「计算机编程入门先学什么最好?」

计算机入门最应该学的是 Linux,而非任何的编程语言。

这篇文章4600字,有点长,如果你能耐心看完,或许会给你带来更多的思考。

1. 为什么?

任何编程语言都只是一门工具,一门让人能够与计算机“交流”的工具。人学习编程最重要的是要学习解决问题的思想、方法,其次才是使用编程语言解决生活中的问题。

「计算机为什么会诞生?编程语言为什么会诞生?」,归根结底,这些事物的出现只不过是帮助人们更好地解决生活中的问题。你知道世界第一台(电子)计算机发明的原因是什么吗?第一台计算机的诞生是因为「战争」,1943年,二战后期,M 国人在研制武器过程中迫切想要解决「快速得出新武器的射程和检测模拟运算表」这个难题,随后投入建造了第一台电子计算机 ENIAC(埃尼阿克)。

图片源自维基百科

三年后(1946年),ENIAC 建成并投入使用,人们在“计算”领域得到新的突破,这标志着人类文明进程进入了新的阶段,ENIAC 也是人类在电子计算上的首个里程碑,人类就此进入计算机时代。

随着计算机发展,人类对计算机的应用不满足于只将其单纯地用于计算。随着键盘、鼠标、显示屏、操作系统、计算机网络……这些东西的出现与发展,计算机也从「专用」逐渐演进到「通用」,计算机慢慢进入人们的生活。

2. 编程语言的出现

要让计算机为人类工作,必须要将人类的意图告诉计算机,我们不可能直接使用英语、汉语这些自然语言与机器沟通。人们跟 ENIAC “沟通”的方式是人们手工搬动开关和插、拔电缆。虽然计算一个运算表仍旧很费力,但是这远比之前的器械式计算机快了非常多。

人们发现计算机开关的插拔可以抽象成二进制中的“0和1”,随后人们将德国数学家莱布尼兹提出的「二进制计数法」(二进制最早起源可以追溯到中国的《易经》,感兴趣的可以去了解。)引入到计算机当中。计算机拥有了真正意义上的语言——机器语言,也可称二进制语言。

当时的工程师跟计算机交流使用的是一串串「0和1」组成的数,复杂而难学,记忆和排查问题都异常困难。随后出现了相比机器语言更抽象的汇编语言(助记符语言),有了助记符,人类能够更好地记忆与计算机交互的「指令」,汇编语言的出现进一步简化了编程过程,降低了编程难度,此时人们可以更高效地跟计算机打交道了。

但是,随着计算机架构的不同,使用的汇编指令就会有差异,人们想着能否发明一门「通用的编程语言」呢?随后,高级语言诞生了,高级语言是对汇编语言的再一次抽象,高级语言更方便人们使用,更易于记忆,更通用,人们跟计算机的“沟通”也变得更高效了。

自高级编程语言出现后,这半个多世纪里,世界上的高级编程语言已经有了上百乃至几百种。无论是什么样的高级编程语言,最终都会被编译成机器语言,以此实现人与机器的交互。

由此可见,学习编程语言只不过是让我们更好、更容易地与计算机交流,让计算机帮助我们解决现实中遇到的问题。编程语言只是一门我们与计算机沟通的语言,如同我们跟 M 国人交流,我们需要学习一门共通的语言,可以是中国人学习英语,也可以是 M 国人学习汉语。所以,我们不应该局限于学习什么样的编程语言,如果没有从根本上解决问题,那么问题永远无法被解决。

如果要学习计算机编程入门,最应该学习如何使用计算机的命令。如同图形化编程,将一个个代码块、功能模块拼接起来后可以解决某个问题、闯过某个关卡。同样我们可以使用计算机命令来控制计算机帮助我们完成某些事情,解决某个问题,计算机命令也像编程语言的发展一样,是不断对底层封装、抽象得来的,也是我们与计算机“沟通”的一种方式。

为什么应该学习 Linux 而不是学习 Dos 命令呢?这个是我从通用性和易用性出发,如果感兴趣你也可以去了解 Dos 的命令,Dos 是 Windows 电脑的通用命令。如果你不知道什么是 Linux,那么可以简单跟你科普一下,Linux 几乎构筑了当今整个互联网世界,常见的路由器、智能电器、安卓手机、自动驾驶汽车、通讯系统、操作系统、网站、各种程序应用……无一例外地、或多或少地都使用了 Linux 内核或其衍生的系统。

Linux 命令行是我们与计算机或者说操作系统沟通的一个外壳(Shell),我们将简单易懂的命令输入到 Shell,Shell 会将我们的命令传给操作系统,操作系统与计算机交互后,又会将结果返回到命令行中。Shell 在某种程度上可以看作一个翻译家,帮助我们更好地去使用计算机。使用 Linux 后,你或许会体会到:图形界面能做的,命令行也能做;命令行能做的,图形界面却无能为力。这句话虽不是绝对的正确,但却反映了命令行的精髓和巧妙之处。之前我写过一篇文章谈 GUI 和 CLI, 感兴趣可以读一读:

为什么有人坚信人类不可能基于 GUI 的操作方式,发明出比「命令式编辑器」效率更高的开发环境?10 赞同 · 4 评论回答

学好 Linux 后(特指命令行),学习任何一门编程语言都是水到渠成的事。我举一些例子:

3. ShellScript 编程语言

当你学习完 Linux 命令,你会接触 Shell 编程,你会想将这些简单而又经常重复使用的命令写到一个文件里,方便下一次使用。ShellScript 脚本编程语言就是由此而来,不知不觉你已经学习了一门编程语言。ShellScript 灵活而简单,只要拥有使用命令行的基础,学习 ShellScript 就是非常简单了。

4. VimScript 编程语言

在学习写 Shell 脚本的过程中,必不可少的工具就是编辑器,通过编辑器编写代码,然后保存成文件。Linux 中可用的命令行编辑器也不少,比如 Vi、Nano、Vim、Emacs、Neovim……

我相信使用 Linux 必定会接触 Vi 编辑器,然后是 Vim 编辑器,再深一点会接触 Neovim。当你认识到 Vim 是「编辑器之神」后,你的编程观念会更近一步。你会发现,编辑器原来也拥有「属于自己的编程语言」。当你想优化 Vim 编辑器的工作流时,你会除了可以使用内置选项、别人编写好的插件外,你还可以使用 VimScript 这个专属于 Vim 编辑器的编程语言,来实现一些自定义功能、逻辑以此来实现一个更加顺手的代码编辑器。

5. Lisp 与 Elisp 编程语言

如果你接触了 Emacs 这个被程序员称为「神的编辑器」的强大编辑器,那么你一定会使用 Elisp 这门语言。因为 Elisp 是专属于 Emacs 的编程语言,相信每个入坑 Emacs 的程序员,或多或少就是想品味这个「古老的编程语言」,享受函数式编程的快感,想要使用 Org 这个强大的 Emacs 组件,我当初也是因为这些原因入坑 Emacs。Emacs 强大到无所不能,比如煮咖啡、当作视频播放器、音乐播放器、浏览器、玩游戏……Emacs 与操作系统只是一核之差。因此,许多程序员将 Emacs 戏称为「隐藏在编辑器之中的操作系统」。

Spacemacs

Lisp 作为世界上第二古老的高级编程语言,诞生于1958年,世界第一老的高级编程语言 Fortran 只比它老一年而已。这个编程语言如同魔法一般,神奇而强大,在而后的半个多世纪里衍生出了十几种「方言」。

现在看来 Lisp 更像是一个编程语言家族,不断演进而且繁荣。Lisp 这门编程语言与人工智能(Ai)相伴相生,在上世纪60年代起,Lisp 语言就被用于人工智能编程,随后衍生出的多种方言也在某个领域深耕,比如 Emacs Lisp 就是为 Emacs 而生的 Lisp 方言。虽然现在人工智能的主力编程语言是 Python,但是丝毫不影响 Lisp 的历史地位,即便在某些领域默默退出历史舞台,但在另一些领域又再一次熠熠生辉。如果说要评选编程语言中的经典,那么 Lisp 必占一席。

所以,如果想品味 Lisp 这门具有一定魔法色彩、古老而繁荣的高级编程语言,推荐你从 Elisp 学起,从使用 Emacs 编辑器开始。当使用了一段时间后你就会慢慢喜欢上 Elisp 这门有趣的编程语言、感受一下跟现代高级编程语言有所区别或者没有的「逆波兰表达式」。

6. Lua 编程语言

如果你更喜欢「现代一点的 Vim」,那么 Neovim 一定不要错过。Neovim 从0.5版本起,官方将 Lua 这门编程语言作为 Neovim 的一等语言,提供丰富的 API 接口。虽然 Neovim 是 Vim 的一个分支,但随着 Neovim 社区不断壮大,Neovim 开始追寻更广阔的天空,既继承了 Vi 和 Vim 优秀的基因,也向着强大、易用、现代化发展。

如果做游戏开发的程序员,一定对 Lua 不陌生,这是一门简单易学、小巧灵活、易扩展的脚本语言。如果想为 Neovim 开发插件,如果想写游戏逻辑,那么你一定会接触和使用 Lua 这门编程语言的。

7. C 编程语言

当然,如果想要深入理解计算机,那么 C 语言是必学的,这是通往计算机世界的必经之路。因为目前市面上绝大多数计算机教材、经典书籍都使用 C/C++ 语言来描述,Linux 内核也是用 C 语言来写的,当你真正想去了解操作系统,了解 Linux 的编程哲学、设计哲学,那么此时就需要一定的 C 语言基础了。当然这一步,一定要放在拥有 Linux 使用经验后,否则你会学得异常吃力。

当你学成了 C 语言后,你会对许多高级编程语言的设计、原理有更深的理解,C 语言当之无愧是你打开编程世界大门的第二把钥匙。有一句话是这样讲的:一生二,二生C,C生万物。万物源于 C,对这样评价,C 语言确实是实至名归。

8. Go 编程语言

有许多编程语言一开始都是由 C 语言写出来的,随后才实现自举,不再依赖于 C 语言,比如我最喜欢的编程语言——Go。如果感兴趣也可以了解一下这门被称为“21世纪的C”的编程语言,我写有一篇文章介绍过,感兴趣可以读一读:

同样是巨头的语言,为什么中国是 Go 最热的国家,而 C# 越来越少?9 赞同 · 0 评论回答

9. Rust 编程语言

这是一门跟 C/C++ 比肩的现代的系统级编程语言,这一门语言几乎与 Go 在同一时期诞生。都是新时代的编程语言,它跟 Go 的定位还是不一样的。感兴趣的朋友也可以去了解一下这门语言,这门语言有可能在将来取代 C++ 这门,或许在不久地将来这门语言也会像 C++、Java 一样火气来的,只是时间的问题罢了。如果想学一门比较新的语言,Rust 兴许值得你去投资,它代表了未来的无限可能。

10. 总结

经过我这一番举例说明,你应该明白我为什么推荐你编程入门先学 Linux 了吧。编程语言迟早都会接触,基础的东西才是恒古不变的,如同九层之台起于垒土,掌握了 Linux 命令的使用,学习 ShellScript、C/C++、Java、Python、Go、Lua……众多编程语言都只是水到渠成的事情。当你使用一个 Linux 命令久了,你会思考如果使用其他编程语言要怎么实现这个功能,有了一个靶子,学习编程语言才会有的放矢。

希望这篇我写了半天的文章能给你一些启发,学习编程语言很容易,学习编程的思想才是一直探索的星辰大海。

在这里插入图片描述

行业发展空间大,岗位非常多

网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…

在这里插入图片描述
为了帮助大家更好的学习网络安全,我给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂这些资料!

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

[2024最新CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]


在这里插入图片描述

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

[2024最新CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]

在这里插入图片描述

在这里插入图片描述

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

[2024最新CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2192595.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

A_H_README_TO_RECOVER勒索恢复---惜分飞

有客户mysql数据库被黑(业务数据库被删除),创建了一个A_H_README_TO_RECOVER库 [rootwww.xifenfei.com ~]# mysql -uroot -pxxxxx Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; …

站岗放哨树形dp

前言&#xff1a;好久没有写树上dp了&#xff0c;这儿题目还是挺有意思的 题目地址 #include<bits/stdc.h> #include<iostream> using namespace std;//#define int long long int n; const int N (int)1e510; int e[N],ne[N],h[N],idx 0; int dp[2][N];void add…

【笔记】神领物流Day1.1.20权限管家

传智权限管家是一个通用的权限管理中台服务&#xff0c;在神领物流项目中&#xff0c;我们使用权限系统管理企业内部员工&#xff0c;比如&#xff1a;快递员、司机、管理员等。 在权限管家中可以管理用户&#xff0c;管理后台系统的菜单&#xff0c;以及角色的管理。 权限管家…

【百度文心智能体】想开发爆款智能体?来看看 万圣节之夜探秘者 智能体开发流程大揭秘

目录 前言 一. 创作灵感 二. 智能体中Prompt如何设计 2.1 头像 && 聊天背景 2.2 智能体简介 && 角色定位与目标 2.3 思考路径 && 个性化 2.4 开场白 && 自动追问 2.5 插件选择 三. 总结 前言 从2022年11月底ChatGPT …

JavaEE: 数据链路层的奇妙世界

文章目录 数据链路层以太网源地址和目的地址 类型数据认识 MTU 数据链路层 以太网 以太网的帧格式如下所示: 源地址和目的地址 源地址和目的地址是指网卡的硬件地址(也叫MAC地址). mac 地址和 IP 地址的区别: mac 地址使用6个字节表示,IP 地址4个字节表示. 一般一个网卡,在…

论文选题没思路?用这7个GPT提示词10分钟确定论文选题

选题是论文写作的第一步&#xff0c;也是至关重要的一步。毕业论文选题都是让大学生头疼的大事。没有灵感、方向不清、信息太多&#xff0c;常常让人无从下手。现在有了ChatGPT这样的AI写作辅助工具&#xff0c;它可以帮你快速生成丰富的选题思路&#xff0c;轻松解决选题难题。…

Anaconda创建环境

目录 前言 第一步&#xff1a;更改环境创建位置 第二步&#xff1a;安装环境 前言 在我们创建多个项目的时候&#xff0c;有时会安装的库版本冲突&#xff0c;所以最好是一个项目一个环境 第一步&#xff1a;更改环境创建位置 新安装Anaconda后&#xff0c;在创建环境时环…

洛谷每日一题(P1205 [USACO1.2] 方块转换 Transformations)矩阵变换

原题目链接&#xff1a; P1205 [USACO1.2] 方块转换 Transformations - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 原题目截图&#xff1a; 思路分析&#xff1a; 这题目还是比较简单&#xff0c;模拟一下旋转变化的过程&#xff0c;然后注意变换的规律就行了。 读取输入…

电脑提示msvcp140.dll丢失如何解决,马上教你6种解决方法

在使用电脑时&#xff0c;我们可能会遇到提示缺少msvcp140.dll的错误信息。这个提示意味着我们的电脑中缺少MSVCP140.dll这个文件&#xff0c;它是某些程序运行所必需的。如果我们遇到这个问题&#xff0c;应该如何解决呢&#xff1f;本文将详细解析如何解决msvcp140.dll丢失的…

C. Tree Pruning【Codeforces Round 975 (Div. 1)】

C. Tree Pruning (永远不知道为什么TLE直到把初始化的memset换成for循环 题意很简单&#xff0c;就是找到一个深度&#xff0c;使得删除最少的节点且所有的叶子节点都为这个深度。 从小到大遍历可能的深度i&#xff0c;容易知道所有 深度大于i的节点 和所有 子树最大深度小于i…

vue出现Component name “Politic“ should always be multi-word错误

效果 原因 组件名不能为单个单词&#xff0c;怕和html标签混淆 解决方法 1.选择多个单词区分 2.修改package.json里的rules规则&#xff0c;忽略文件命名校验

详细解释:前向传播、反向传播等

详细解释:前向传播、反向传播等 在机器学习和深度学习中,**前向传播(Forward Propagation)和反向传播(Backward Propagation)**是训练神经网络的两个核心过程。理解这两个概念对于掌握神经网络的工作原理、优化方法以及模型微调技术(如LoRA、P-tuning等)至关重要。以下…

YOLO11改进|注意力机制篇|引入ELA注意力机制

目录 一、【ELA】注意力机制1.1【ELA】注意力介绍1.2【ELA】核心代码 二、添加【ELA】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【ELA】注意力机制 1.1【ELA】注意力介绍 这篇论文的作者通过分析Coordinate Attention(C…

Python中的数据可视化:从入门到进阶

数据可视化是数据分析和科学计算中的重要环节&#xff0c;它通过图形化的方式呈现数据&#xff0c;使复杂的统计信息变得直观易懂。Python提供了多种强大的库来支持数据可视化&#xff0c;如Matplotlib、Seaborn、Plotly等。本文将从基础到进阶&#xff0c;详细介绍如何使用这些…

如何构建LSTM神经网络模型

一、了解LSTM 1. 核心思想 首先&#xff0c;LSTM 是 RNN&#xff08;循环神经网络&#xff09;的变体。它通过引入细胞状态 C(t) 贯穿于整个网络模型&#xff0c;达到长久记忆的效果&#xff0c;进而解决了 RNN 的长期依赖问题。 2. 思维导图 每个LSTM层次都有三个重要的门结构…

贝尔曼公式

为什么return 非常重要 在选择哪个策略更好的时候&#xff0c;此时需要使用到return&#xff0c;比如下面三个策略的返回值。 策略1: 策略2&#xff1a;策略3&#xff1a;涉及到两个policys path How to calculate return 定义 上图定义了不同的起点下的return value 递推…

优化销售漏斗建立高效潜在客户生成策略的技巧

如何建立有效的潜在客户生成策略&#xff1f;建立有效潜在客户生成策略需要准确定义目标受众&#xff0c;利用内容营销、SEO、社交媒体、邮件营销和定向广告吸引客户&#xff0c;参加行业会议并跟踪分析数据。借助Zoho CRM系统&#xff0c;企业能够更加高效地管理客户信息&…

Windows上 minGW64 编译 libssh2库

下载libssh2库:https://libssh2.org/download/libssh2-1.11.0.zip 继续下载OpenSSL库: https://codeload.github.com/openssl/openssl/zip/refs/heads/OpenSSL_1_0_2-stable

算法讲解—最小生成树(Kruskal 算法)

算法讲解—最小生成树&#xff08;Kruskal 算法&#xff09; 简介 根据度娘的解释我们可以知道&#xff0c;最小生成树(Minimum Spanning Tree, MST)就是&#xff1a;一个有 n n n 个结点的连通图的生成树是原图的极小连通子图&#xff0c;且包含原图中的所有 n n n 个结点…

【Diffusion分割】CTS:基于一致性的医学图像分割模型

CTS: A Consistency-Based Medical Image Segmentation Model 摘要&#xff1a; 在医学图像分割任务中&#xff0c;扩散模型已显示出巨大的潜力。然而&#xff0c;主流的扩散模型存在采样次数多、预测结果慢等缺点。最近&#xff0c;作为独立生成网络的一致性模型解决了这一问…