第十一章:编程语言识别图鉴

目标:拿到任何陌生项目,3 秒判断出它用什么语言写的。 这是程序员的”看片识人”基本功,识别准确率不需要 100%——能猜对主语言就够了。


11.1 三种识别方法(按可靠度排序)

🥇 方法 1:看根目录的「标志性文件」(最权威)

每种语言都有它独有的”身份证文件”——光看一眼根目录就能高准确率判断(约 90%,剩下 10% 是少数特殊框架,比如 Deno 也用 package.json)。

看到这个文件大概率是这种项目包管理器
package.jsonJavaScript / Node.js / TypeScriptnpm / pnpm / yarn
requirements.txt 或 pyproject.toml 或 setup.pyPythonpip / poetry / uv
pom.xmlJava(用 Maven)Maven
build.gradle 或 build.gradle.ktsJava / Kotlin(用 Gradle)Gradle
go.modGogo mod
Cargo.tomlRustcargo
composer.jsonPHPComposer
GemfileRubybundler
*.csproj 或 *.slnC# / .NETNuGet
*.xcodeproj 或 Package.swiftSwift(iOS / macOS)Swift PM
pubspec.yamlDart / Flutterpub
CMakeLists.txtC / C++-
Makefile可能是 C / C++ / Go / Python 等(不是独占文件,需结合其他线索判断)-

📌 就一招:拿到任何项目,先看根目录有没有这些文件——90% 的情况一秒就知道用什么语言。

🥈 方法 2:看文件后缀名(最直接)

后缀语言
.jsJavaScript
.ts / .tsxTypeScript(.tsx = TS + React 组件)
.jsxJavaScript + React 组件
.pyPython
.javaJava
.ktKotlin
.cC
.cpp / .cc / .cxxC++
.csC#
.goGo
.rsRust
.phpPHP
.rbRuby
.swiftSwift
.dartDart(Flutter)
.html / .css网页(HTML/CSS 不算编程语言,是”标记语言”)
.shShell 脚本(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
网页后端 APINode.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

按上面的方法套一遍:

  1. 看根目录 → 有 package.json ✅
  2. 看后缀 → src/ 里全是 .tsx 和 .ts
  3. 看 package.json 里的 scripts → tsc -b && vite build(tsc = TypeScript Compiler)
  4. 看 GitHub 语言条 → TypeScript 占大头

结论:这是一个 TypeScript + React 的前端项目。


11.6 混合型项目怎么办?

很多大项目是多语言混合的,比如:

some-project/
├── frontend/     ← TypeScript(前端)
├── backend/      ← Python(后端 API)
├── scripts/      ← Bash(部署脚本)
└── docker/       ← Dockerfile(部署)

这种情况下:

  • 看子目录:每个子项目独立判断
  • 看 GitHub 语言条:自动给你按比例显示
  • 看 README:作者通常会说明架构

11.7 一些容易混淆的「兄弟语言」

新手常被这些”长得像”的语言搞混,记住关键差异:

对比区分关键
JavaScript vs TypeScriptTS 比 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 3Python 2 已死,现在新项目都是 Python 3。print "x" 是 2,print("x") 是 3
TypeScript vs Java都是强类型,但 TS 跑在浏览器/Node,Java 跑在 JVM

11.8 记住这一节的「3 句话总结」

  1. 看根目录”身份证文件” → 90% 的项目能瞬间识别
  2. 看后缀名 → 兜底方法
  3. GitHub 仓库右上角语言条 → 最快最直观

📌 不要去”背”每种语言的全部特征——会用工具识别就够了。


最后更新:2026-06-02(据 git 提交历史回填,非内容重新审校日期)