第十一章:编程语言识别图鉴
目标:拿到任何陌生项目,3 秒判断出它用什么语言写的。 这是程序员的”看片识人”基本功,识别准确率不需要 100%——能猜对主语言就够了。
11.1 三种识别方法(按可靠度排序)
🥇 方法 1:看根目录的「标志性文件」(最权威)
每种语言都有它独有的”身份证文件”——光看一眼根目录就能高准确率判断(约 90%,剩下 10% 是少数特殊框架,比如 Deno 也用 package.json)。
| 看到这个文件 | 大概率是这种项目 | 包管理器 |
|---|---|---|
package.json | JavaScript / Node.js / TypeScript | npm / pnpm / yarn |
requirements.txt 或 pyproject.toml 或 setup.py | Python | pip / poetry / uv |
pom.xml | Java(用 Maven) | Maven |
build.gradle 或 build.gradle.kts | Java / Kotlin(用 Gradle) | Gradle |
go.mod | Go | go mod |
Cargo.toml | Rust | cargo |
composer.json | PHP | Composer |
Gemfile | Ruby | bundler |
*.csproj 或 *.sln | C# / .NET | NuGet |
*.xcodeproj 或 Package.swift | Swift(iOS / macOS) | Swift PM |
pubspec.yaml | Dart / Flutter | pub |
CMakeLists.txt | C / C++ | - |
Makefile | 可能是 C / C++ / Go / Python 等(不是独占文件,需结合其他线索判断) | - |
📌 就一招:拿到任何项目,先看根目录有没有这些文件——90% 的情况一秒就知道用什么语言。
🥈 方法 2:看文件后缀名(最直接)
| 后缀 | 语言 |
|---|---|
.js | JavaScript |
.ts / .tsx | TypeScript(.tsx = TS + React 组件) |
.jsx | JavaScript + React 组件 |
.py | Python |
.java | Java |
.kt | Kotlin |
.c | C |
.cpp / .cc / .cxx | C++ |
.cs | C# |
.go | Go |
.rs | Rust |
.php | PHP |
.rb | Ruby |
.swift | Swift |
.dart | Dart(Flutter) |
.html / .css | 网页(HTML/CSS 不算编程语言,是”标记语言”) |
.sh | Shell 脚本(macOS/Linux) |
.sql | 数据库查询语言 |
🥉 方法 3:看 GitHub 仓库右上角的「Language」条(最直观)
打开任意 GitHub 仓库主页,右上角会自动显示一个彩色比例条,告诉你这个项目用了哪些语言、各占多少。
比如 gpt_image_playground 的 GitHub 页面右侧会显示:
■ TypeScript 92.3% ← 主语言
■ JavaScript 4.1%
■ CSS 2.5%
■ HTML 1.1%
第一种语言就是项目的”主语言”。
📌 GitHub 是用一个开源工具叫 linguist 自动分析的,准确率很高。
11.2 常见 10 种语言「长相图鉴」(一眼就能认出)
光看一段代码的”风格”,老手就能秒判断是哪种语言。给你看每种语言的”招牌长相”:
1. JavaScript / TypeScript(前端 / Node.js)
特点:花括号 {}、分号、箭头函数 =>
function hello(name) {
console.log(`Hello, ${name}!`);
}
const add = (a, b) => a + b;TypeScript 多了类型标注:
function hello(name: string): void {
console.log(`Hello, ${name}!`);
}2. Python(数据 / AI / 脚本)
特点:靠缩进区分代码块、没有花括号、def 定义函数、: 结尾
def hello(name):
print(f"Hello, {name}!")
if __name__ == "__main__":
hello("World")看到大量缩进、没有
{}和;→ 99% 是 Python
3. Java(企业后端 / Android)
特点:每个文件都得有 public class、类型声明在前
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}看到
public class XXX开头 → Java
4. C / C++(系统级 / 游戏引擎)
特点:#include、int main()、指针 * &
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}5. C#(微软系 / Unity 游戏)
特点:跟 Java 很像,但用 using 而不是 import
using System;
class Hello {
static void Main() {
Console.WriteLine("Hello, World!");
}
}6. Go(云原生 / 后端)
特点:package main、func 定义函数、没有分号
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}7. Rust(系统级 / 区块链 / 高性能)
特点:fn 定义函数、let 声明变量(默认不可变)/ let mut(可变)、! 后缀(宏)
fn main() {
let name = "World"; // 不可变变量(默认)
let mut count = 0; // 可变变量需要 mut
println!("Hello, {}!", name);
}看到
fn和println!那个感叹号 → Rust
8. PHP(传统 Web 后端)
特点:<?php 开头、变量前面有 $
<?php
$name = "World";
echo "Hello, $name!";
?>9. Ruby(Rails 全栈框架)
特点:def...end 配对、puts 输出
def hello(name)
puts "Hello, #{name}!"
end
hello("World")10. Swift(苹果生态:iOS / macOS)
特点:func、var/let、字符串插值用 \()
func hello(name: String) {
print("Hello, \(name)!")
}11.3 给小白的「3 秒判断法」
按这个顺序自检,3 秒能判断 90% 的项目:
打开 GitHub 仓库 / 项目目录
│
▼
看右上角语言条 ─────────→ 直接告诉你了 ✅
│(如果是本地)
▼
看根目录有 package.json? → JS/TS 项目 ✅
│否
▼
有 requirements.txt? → Python 项目 ✅
│否
▼
有 pom.xml / build.gradle?→ Java 项目 ✅
│否
▼
有 go.mod? → Go 项目 ✅
│否
▼
有 Cargo.toml? → Rust 项目 ✅
│否
▼
看 src/ 里文件后缀(.cpp / .rb / .php / ...)
11.4 按「应用领域」反推语言
不同语言擅长的领域不一样,看到项目类型也能反推:
| 你看到的项目 | 大概率用的语言 |
|---|---|
| 网页前端 | JavaScript / TypeScript |
| 网页后端 API | Node.js / Python / Java / Go / PHP |
| 数据分析 / AI / 机器学习 | Python(90%+) |
| 移动 App(iOS) | Swift / Objective-C |
| 移动 App(Android) | Kotlin / Java |
| 移动 App(跨平台) | Flutter (Dart) / React Native (JS) |
| Windows 桌面软件 | C# / C++ |
| Mac 桌面软件 | Swift / Objective-C |
| 游戏(PC / 主机) | C++ / C# (Unity) |
| 游戏(手机休闲) | C# (Unity) / Lua |
| 操作系统 / 驱动 | C / Rust |
| 区块链 / 加密货币 | Rust / Go / Solidity |
| 云原生 / 容器(Docker / K8s) | Go(几乎全用) |
| 老牌企业系统 | Java / C# |
| WordPress 插件 / 老网站 | PHP |
| 数据库本身 | C / C++ / Rust |
| Shell 自动化脚本 | Bash / Python |
11.5 实战练习:拆解 gpt_image_playground
按上面的方法套一遍:
- 看根目录 → 有
package.json✅ - 看后缀 →
src/里全是.tsx和.ts - 看 package.json 里的 scripts →
tsc -b && vite build(tsc = TypeScript Compiler) - 看 GitHub 语言条 → TypeScript 占大头
结论:这是一个 TypeScript + React 的前端项目。
11.6 混合型项目怎么办?
很多大项目是多语言混合的,比如:
some-project/
├── frontend/ ← TypeScript(前端)
├── backend/ ← Python(后端 API)
├── scripts/ ← Bash(部署脚本)
└── docker/ ← Dockerfile(部署)
这种情况下:
- 看子目录:每个子项目独立判断
- 看 GitHub 语言条:自动给你按比例显示
- 看 README:作者通常会说明架构
11.7 一些容易混淆的「兄弟语言」
新手常被这些”长得像”的语言搞混,记住关键差异:
| 对比 | 区分关键 |
|---|---|
| JavaScript vs TypeScript | TS 比 JS 多了类型标注(name: string);后缀 .ts/.tsx |
| Java vs JavaScript | 完全两种语言!只是名字撞车(“Java 是 JavaScript 的关系类似 Car 和 Carpet”) |
| Java vs Kotlin | 都跑在 JVM 上,Kotlin 更现代简洁;后缀 .java vs .kt |
| C vs C++ vs C# | C 最底层,C++ 加了面向对象,C# 是微软的 .NET 语言(跟 Java 更像) |
| Python 2 vs Python 3 | Python 2 已死,现在新项目都是 Python 3。print "x" 是 2,print("x") 是 3 |
| TypeScript vs Java | 都是强类型,但 TS 跑在浏览器/Node,Java 跑在 JVM |
11.8 记住这一节的「3 句话总结」
- 看根目录”身份证文件” → 90% 的项目能瞬间识别
- 看后缀名 → 兜底方法
- GitHub 仓库右上角语言条 → 最快最直观
📌 不要去”背”每种语言的全部特征——会用工具识别就够了。
最后更新:2026-06-02(据 git 提交历史回填,非内容重新审校日期)