HelloWorld 第一个程序教程
Hello World 程序是编程入门的第一课:用最简单的代码在屏幕上打印一句话来验证环境与语法是否正确。下面通过历史背景、为何要先做 Hello World、从环境准备到多语言示例(含编译/运行命令)、常见错误与调试思路,带你一步步把“能跑一个程序”变成“知道程序是怎么跑的”。

Table of Contents
Toggle什么是 Hello World?起源和意义
Hello World 是最简单的示例程序,通常仅打印一行文本(例如 “Hello, World!”)。它的价值不在于输出本身,而在于完成一条闭环:写代码、保存文件、编译或解释、在终端或控制台看到预期输出。这个过程验证了你的开发环境与基本工具链是否可用。
简短历史
常被引用的起源来自于 1970 年代,Brian Kernighan 在早期教程和 1978 年与 Dennis Ritchie 合著的《The C Programming Language》中推广了这一例子,使其成为编程教学的惯例。换句话说,Hello World 既是“入门礼”,也是确认工具链工作的最小证明。
为什么要先写 Hello World?用费曼法解释
用教别人的方式理解:想象你要教别人怎么开车,第一步不是赛车,而是确认车能启动、档位能切换、刹车有效——Hello World 就像引擎启动的那一刻。
- 验证环境:确保编辑器、编译器/解释器、路径设置正确。
- 理解执行流程:从源代码到机器执行的每一步都可以逐一拆解和观察。
- 降低心理门槛:初学者看到输出会有即时反馈,增强信心。
准备工作:工具与常见设置
你不需要复杂配置,但要确保几件事:安装相应的语言运行环境或编译器;文本编码设置为 UTF-8;能在终端/命令行运行基本命令;了解文件扩展名。
- Windows 用户:建议使用 PowerShell / Windows Terminal,并把编译器的 bin 路径加入 PATH。
- macOS / Linux 用户:终端通常就绪,使用包管理器(brew/apt)安装对应工具。
- 编辑器:VS Code、Sublime、或简单的文本编辑器均可,但记得保存为 UTF-8 并关闭 BOM(有时会导致某些编译器识别问题)。
多语言 Hello World 示例(实操与注意事项)
下面给出主流语言的最小示例,并说明如何编译或运行及常见错误。每个例子先给出源码再给出命令。
C(gcc)
/* hello.c */
#include <stdio.h>
int main(void) {
printf("Hello, World!\n");
return 0;
}
编译与运行:
- gcc hello.c -o hello
- ./hello
注意:如果看到 “undefined reference to `main’” 说明函数签名或文件名有问题;若字符乱码,检查文件是否为 UTF-8 且终端编码一致。
C++(g++)
/* hello.cpp */
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
命令:
- g++ hello.cpp -o hello
- ./hello
Java
/* HelloWorld.java */
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
命令:
- javac HelloWorld.java
- java HelloWorld
注意:类名必须与文件名匹配;包声明会改变运行命令。
Python(推荐 Python 3)
# hello.py
print("Hello, World!")
运行:
- python3 hello.py
注意:在 Windows 上使用 python 而非 python3 取决于安装;缩进错误会导致异常。
JavaScript(Node.js)
/* hello.js */
console.log("Hello, World!");
运行:
- node hello.js
Bash / Shell
#!/bin/sh echo "Hello, World!"
运行:
- chmod +x hello.sh
- ./hello.sh
Go
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
命令:
- go run hello.go
- go build hello.go # 生成可执行文件
Rust
fn main() {
println!("Hello, World!");
}
命令:
- rustc hello.rs
- ./hello
C#(dotnet)
using System;
class Hello {
static void Main() {
Console.WriteLine("Hello, World!");
}
}
命令(.NET SDK):
- csc Hello.cs # 或使用 dotnet new/ run 的模板方式
- ./Hello.exe(Windows) 或 mono Hello.exe(老方案)
对比表:扩展名、编译与运行
| 语言 | 文件扩展名 | 典型编译/运行命令 |
| C | .c | gcc hello.c -o hello;./hello |
| C++ | .cpp | g++ hello.cpp -o hello;./hello |
| Java | .java | javac HelloWorld.java;java HelloWorld |
| Python | .py | python3 hello.py |
| JavaScript (Node) | .js | node hello.js |
| Go | .go | go run hello.go;go build |
| Rust | .rs | rustc hello.rs |
常见问题与调试技巧(按症状找原因)
写 Hello World 的过程中遇到问题是很正常的。下面用“故障树”方式快速定位。
- 没有输出或程序根本没运行:检查命令是否正确,当前目录是否含有目标文件,是否有执行权限。
- 编译错误(语法错误):仔细读编译器提示的行号,常见原因是拼写、缺分号、括号不配对或文件名/类名不匹配(如 Java)。
- 乱码:确认源文件与终端都使用 UTF-8;Windows 系统有时默认使用 GBK,需要设置终端编码或保存为对应编码。
- 环境变量问题:如 gcc、java、python 找不到,检查 PATH 是否包含安装目录。
- CRLF 与 LF 换行差异:跨平台编辑可能引起脚本解析失败(尤其在 Unix shell 中);把换行格式统一为 LF。
如果 Hello World 运行但不理解发生了什么
这正是 Feynman 方法要解决的:把黑箱打开,逐步解释。
- 源代码是人类可读的文本。
- 编译器/解释器把这段文本转换为更接近机器的指令或在运行时逐行解释并调用操作系统接口。
- 操作系统负责把文本输出到终端设备(标准输出)。
- 回传到你眼前的就是显示器上的那段文字。
一个小练习:在你的 Hello World 中去掉分号或改成拼写错误,观察编译器的错误提示,并尝试用搜索或文档理解这些提示,这能迅速提高对流程的直观理解。
进阶练习:把 Hello World 做成学习台阶
- 把一次输出换成多次输出,体验顺序执行。
- 在输出中加入变量与格式化,理解字符串与变量的拼接。
- 参数化输出:让程序接受命令行参数并打印,例如 Java 的 args 或 Python 的 sys.argv。
- 将输出写入文件而非终端,学习文件 I/O。
- 用版本控制(git)保存你的第一个项目,提交、查看历史。
小建议(实用而不空洞)
- 先把工具链搞定:一个能顺利运行 Hello World 的环境,省去了后面很多不必要的烦恼。
- 少抄多动手:不要只是复制粘贴示例,尝试改动并观察结果。
- 读错误信息:编译器和解释器的错误通常不是神秘的,读懂它们是学习的捷径。
- 记录步骤:把安装/运行命令写下来,下一次你就不会忘了为什么能跑起来。
参考书与延伸读物
- The C Programming Language — Kernighan & Ritchie(经典,但偏 C 语言)
- Learn Python the Hard Way(适合动手练习)
- 官方语言文档(每种语言的权威参考)
就这样,Hello World 看似简单,但它帮你搭起了认识编程世界的第一座桥。别担心出错,出错就是学习的进度条——修复它们你会明白得更多。接下来随手改几个例子,去感受每一个小改动带来的运行差异,就像在厨房试不同佐料会发现味道变化一样,自然能学会更多。