发布于2026-07-21 阅读(0)
扫一扫,手机访问
聊到编程入门,大家最纠结的一个问题就是:到底该学哪门语言?这个问题在五湖四海、世界各地,几乎成了每个月都会出现的“月经贴”。给出的回答呢,有的直接告诉你学Python,有的会打比方说编程语言就像画家手里的笔,有毛笔、钢笔……还有的会甩出一张技术栈图表,告诉你如果要做XXX,那就学XXX,如果做YYY,那就学YYY。感觉这些建议都不错,结果明确,但缘由通常不会展开太多。纯新手听完,似懂非懂,将信将疑。
自上而下、由整体到具体地理解一个事物,效率往往比从具体到整体要高,更容易明白自己所处的位置,也更容易入门。可惜,对程序员来说,能把开发领域的各种知识归纳总结、融会贯通,可能是十几、二十年后的事了。所以,在分析编程语言优劣,或者选一个语言写具体的“Hello World”之前,最好对“编程语言”有一个更整体、更全面的了解。
百度百科说,编程语言是一种计算机和人都能识别的语言,能让程序员准确地定义数据和行为。维基百科则更准确:编程语言是一种规则,能把文字或图形元素转化为机器码,用于在计算机上实现各种算法。百度那个定义,说了等于没说,而维基百科讲得就很实在。编程,其实就是把你写的一段文字(代码),按照特定的规则转换成机器码(机器能运行的指令),用于在计算机上实现算法,比如显示两个输入数字中最大的那个。你要学的,就是这种规则。
举个例子,当需要在屏幕上显示“Hello World”时,不同语言的规则会让你写出这样的文字:
c语言
printf("\nhello world!");php语言
echo "hello world!"; ja va语言
System.out.println("Hello World!");看上去有些差别,但又有些相似。实际上,目前主流的高级语言,如Ja va、C#、Ja vaScript、Python,它们的基础语法规则非常近似。无论先学哪个入门,后面的切换成本基本是几小时就能搞定。当你学会一门语言,除了学会具体关键字、语法之外,更主要的是你会沉淀下来一种对编程语言模式的理解。当你理解了变量、函数、控制结构(顺序、分支、循环),迁移到其他语言时,会发现这些概念依然存在且完全适用。
伪代码是一种脱离具体语言、体现编程思维的描述方式。相同层次的语言,编程思维是共通的。比如显示两个输入数字中最大的那个:
变量A等于输入的第一个数字
变量B等于收入的第二个数字
如果 变量A大于 变量B 屏幕显示变量A
否则 屏幕显示变量B上面的算法思想,在各种语言中都能实现,只是变量定义的方式、判断分支的书写方式略有差别。所以,对入门来说,学习一门编程语言,通常狭义地指语言本身(基本不涉及第三方类库框架等)。你学到语法细节的切换成本很低,各个语言差不太多,而真正沉淀下来的,是你在编写过程中逐渐熟悉领会的编程思路——即组合使用变量、函数、控制结构(如果/那么/循环)等要素,解决具体算法问题的能力。
在纠结良久终于选定了学哪一门语言之后,可能第一个接触到的就是IDE。比如学Python可能会用PyCharm,学Basic的可能用Visual Basic。IDE的含义是“集成开发环境”,名字很准确,但对小白来说其实很困惑,搞不清楚IDE与编程语言之间的关系,也搞不清楚写完代码后,点那个绿色小三角(运行)到底发生了什么。IDE可以方便开发,但也会影响新手对编程语言的理解,很难理解“集成开发环境”到底集成了什么。

——上面是Python的Hello World,IDE为PyCharm
IDE大概集成了这样几种东西:
1. 文本编辑器:用于编写文本,像上图写“print Hello World”的地方。编程其实就是在编写一段文字,保存成一个文件。简单文本编辑器如Windows中的记事本,也能用来编程,但IDE中的文本编辑器会提供很多额外功能,比如文本着色、智能提示(敲pr会自动提示print),这些快捷功能是语言相关的。当然也提供保存、查找、替换等常见功能。
2. 编译器、连接器:对于非脚本语言(最终生成独立的可执行程序,如C),编写好的程序文件无法直接被运行。例如Windows中,典型的可执行文件扩展名为EXE,这是一种特定格式(PE文件格式)。编译器与连接器的作用,就是将程序文件最终转化为EXE文件。编译器针对不同CPU将程序文件编译为对应的CPU指令,连接器则平台相关,将编译后的中间文件组装成约定格式,如Windows EXE。
3. 解释器:对于脚本语言,解释器能直接执行由文本编辑器编写完成的程序文件。比如点击上图的运行,实际是运行了“python ./a.py”,其中的“python”可以理解为解释器。
4. 调试器:提供了一个可视化调试器,可以直接点击按钮进行调试操作,而不是在黑洞洞的命令行上敲命令。

——gdb调试界面
5. 其他工具插件:通常具有集成其他插件的能力,比如集成版本管理,可以直接把代码上传云端进行版本控制,或者统计分析写了多少代码、是否编写规范等。
通过以上介绍可以看出,编程语言是一种规则,准确地说是一种规范。比如存在一条规则:当你写了一行“printf(hello)”,之后就在屏幕上显示hello。规则是稳定不变的,而过程中用到的工具、IDE的各个组成部分,都是可以替换的。只要编译器符合语言的标准规范即可,因此会有多种编译器存在,其性能特点可能会有一些差异。
想入行的同学经常会说“我想学Ja va该怎么学”“我想学Python该怎么学”,这其实通常不太准确。狭义来说,你只需要花几天(老手可能是几小时甚至几十分钟),去看一下这个语言的语法规则——如何定义变量、如何写判断和循环、如何调用方法,然后做一些算法练习,比如对10个数字排排序、写个猜数字的游戏,基本就算学会了。但这可能跟你的期望不一致。你说“学Ja va”,可能是觉得学会了Ja va就能写出像《魔兽世界》那样的游戏,或像QQ那样的聊天工具,或像淘宝那样的网站。而学会了语言之后,你仍然会觉得无从下手,只会在命令行控制台中做点简单的输入输出。那么,这中间的gap究竟在哪里呢?原因在于——技术栈。

——图片来源于知乎回答“互联网”技术栈
要规范专业地做一个能支持一定访问量的互联网站点(如淘宝),会涉及上面大部分的技术内容,这远超“编程语言”定义的范围。其中很大一部分是语言无关的,例如运维、工具、中间件中的分支内容。后端中的语言分支之下是语言相关的,而前端中如果不考虑移动端Android、iOS,对Web来说其实只有HTML、CSS、Ja vaScript三种语言。AngularJS以及Vue,属于Ja vaScript语言中的不同框架,但差异较大。
综合以上,涉及的语言类型主要分为以下几类:
命令式:关注步骤细节。比如查询一堆数字中最大的一个,需要写循环、判断、定义变量进行比较,最终得到结果。计算机的算法过程完全由你定义。通常学习的Ja va、Ja vaScript、PHP、C都可以理解为这一类语言。
结构化查询——声明式:多用于结构化数据库查询(“数据库”是为了解决程序存储、查询数据问题,想象一个图书管理程序),比如SQL语言。取得最大数字如下,你并不需要关心它的具体算法:
SELECT max(num) FROM table标记语言:HTML、XML、CSS等属于标记语言,用于定义布局,没有逻辑,严格来说不属于编程语言。比如HTML标记语言规定“