0
0
Lập trình
Hưng Nguyễn Xuân 1
Hưng Nguyễn Xuân 1xuanhungptithcm

Nghệ Thuật Viết Code Thông Minh: Từ Sạch Đến Nén Qua AI

Đăng vào 6 tháng trước

• 8 phút đọc

Chủ đề:

KungFuTech

Giới thiệu

Trong lập trình, có hai thế giới: mã nguồn sạch, chuẩn doanh nghiệp, an toàn và dễ hiểu. Và mã nguồn thô, nén, phong cách hacker, nơi mà các quy tắc bị uốn cong để đạt được kết quả nhanh chóng.

Hầu hết các lập trình viên nghĩ rằng bạn phải chọn một bên. Nhưng với AI, bạn không cần phải làm như vậy. Bạn có thể lấy mã sạch, chi tiết và biến nó thành các triển khai gọn gàng, nhanh chóng mà không mất đi chức năng. Bài viết này sẽ đề cập đến cách viết mã không chỉ thông minh, mà còn hiệu quả một cách bất công.

Điểm Bắt Đầu: Bộ Chuyển Đổi Dữ Liệu IoT Kiểu Doanh Nghiệp

Chuyến hành trình của chúng ta bắt đầu với yêu cầu chuyển đổi dữ liệu IoT điển hình trong một bài kiểm tra mô phỏng công việc tại Deloitte. Chúng ta cần chuyển đổi giữa các định dạng JSON khác nhau cho dữ liệu thiết bị:

json Copy
Input Format 1 (Cấu trúc phẳng):
{
    "deviceID": "dh28dslkja",
    "deviceType": "LaserCutter",
    "timestamp": 1624445837783,
    "location": "japan/tokyo/keiyō-industrial-zone/daikibo-factory-meiyo/section-1",
    "operationStatus": "healthy",
    "temp": 22
}
Target Output (Cấu trúc):
{
    "deviceID": "dh28dslkja",
    "deviceType": "LaserCutter",
    "timestamp": 1624445837783,
    "location": {
        "country": "japan",
        "city": "tokyo",
        "area": "keiyō-industrial-zone",
        "factory": "daikibo-factory-meiyo",
        "section": "section-1"
    },
    "data": {
        "status": "healthy",
        "temperature": 22
    }
}

Giai Đoạn 1: Triển Khai Mã Sạch

Ban đầu, theo các nguyên tắc viết mã sạch, việc triển khai rất dài dòng và rõ ràng:

python Copy
def convertFromFormat1(jsonObject):
    # Xác thực dữ liệu đầu vào
    if not isinstance(jsonObject, dict):
        raise ValueError("Dữ liệu đầu vào phải là một từ điển")

    # Kiểm tra các trường cần thiết
    required = ["deviceID", "deviceType", "timestamp", "location"]
    for field in required:
        if field not in jsonObject or jsonObject[field] is None:
            raise KeyError(f"Thiếu trường bắt buộc: '{field}'")

    # Phân tích chuỗi địa điểm thành đối tượng cấu trúc
    location_parts = [part.strip() for part in jsonObject["location"].split('/') if part.strip()]
    location = {
        "country": location_parts[0] if len(location_parts) > 0 else "unknown",
        "city": location_parts[1] if len(location_parts) > 1 else "unknown", 
        "area": location_parts[2] if len(location_parts) > 2 else "unknown",
        "factory": location_parts[3] if len(location_parts) > 3 else "unknown",
        "section": location_parts[4] if len(location_parts) > 4 else "unknown"
    }

    # Trích xuất dữ liệu cảm biến (loại bỏ các trường metadata của thiết bị)
    metadata_fields = {"deviceID", "deviceType", "timestamp", "location"}
    sensor_data = {}
    for key, value in jsonObject.items():
        if key not in metadata_fields:
            if key == "operationStatus":
                sensor_data["status"] = value
            elif key == "temp":
                sensor_data["temperature"] = value
            else:
                sensor_data[key] = value

    # Xây dựng kết quả
    result = {
        "deviceID": jsonObject["deviceID"],
        "deviceType": jsonObject["deviceType"],
        "timestamp": jsonObject["timestamp"],
        "location": location,
        "data": sensor_data
    }

    return result

Thống Kê: 35+ dòng, dễ đọc, tuân thủ tiêu chuẩn doanh nghiệp.

Giai Đoạn 2: Chiến Lược Nén

Kỹ Thuật Yêu Cầu

Chìa khóa để nén mã thành công thông qua yêu cầu AI là tinh chỉnh dần dần:

  • Bắt đầu với mã đang hoạt động — Đảm bảo chức năng trước khi tối ưu
  • Sử dụng ngôn ngữ cụ thể — "làm cho nó hacky", "nén cái này", "hành xử như một hacker"
  • Tinh chỉnh tuần tự — Giải quyết lỗi và các trường hợp biên dần dần
  • Yêu cầu giải thích — Hỏi để hiểu logic nén

Cụm Từ Yêu Cầu Quan Trọng

  • "có thể rút ngắn thêm các dòng mã. hành xử như một hacker"
  • "đừng để chúng thành các hàm riêng biệt, đặt chúng vào một hàm duy nhất"
  • "tìm cách tốt hơn so với trên"
  • "bây giờ làm cho cái này theo cách hacky. nhớ thêm bình luận"

Giai Đoạn 3: Kết Quả Nén

Thông qua việc nén hỗ trợ AI tuần tự, hàm 35 dòng đã trở thành:

python Copy
def convertFromFormat1(j):
    # Xác thực loại dict và kiểm tra tất cả các trường bắt buộc tồn tại và không phải None trong một dòng duy nhất
    if not isinstance(j, dict) or any(f not in j or j[f] is None for f in ["deviceID", "deviceType", "timestamp", "location"]): raise ValueError("Dữ liệu đầu vào không hợp lệ")
    # Chia chuỗi địa điểm bằng '/', loại bỏ khoảng trắng, lọc các phần trống
    l = [p.strip() for p in j["location"].split('/') if p.strip()]
    # Từ điển ánh xạ trường cho việc chuẩn hóa dữ liệu cảm biến
    m = {"operationStatus": "status", "temp": "temperature"}
    return {
        "deviceID": j["deviceID"], "deviceType": j["deviceType"], "timestamp": j["timestamp"],
        "location": dict(zip(["country", "city", "area", "factory", "section"], (l + ["unknown"] * 5)[:5])),
        "data": {m.get(k, k): v for k, v in j.items() if k not in {"deviceID", "deviceType", "timestamp", "location"}}
    }

Thống Kê: 6 dòng chức năng, giảm 83% kích thước, duy trì chức năng.

Kỹ Thuật Nén Chính Đã Phát Hiện

  1. Giảm Thiểu Tên Biến: jsonObjectj, location_partsl, field_mappingsm
  2. Nén Chuỗi Điều Kiện: Trước đó: Nhiều câu lệnh if
  3. Xây Dựng Từ Điển Tự Động: Trước đó: Điều kiện rõ ràng
  4. Tối Ưu Hóa Lập Phương: Trước đó: Vòng lặp với điều kiện

Kỹ Thuật Nâng Cao: Triển Khai Định Dạng 2

Định dạng thứ hai yêu cầu chuyển đổi timestamp và xử lý đối tượng lồng nhau:

python Copy
def convertFromFormat2(j):
    # Xác thực tất cả các trường bắt buộc và đối tượng thiết bị lồng nhau trong một dòng
    if not isinstance(j, dict) or any(f not in j or j[f] is None for f in ["device", "timestamp", "data"]) or not isinstance(j["device"], dict) or any(k not in j["device"] for k in ["id", "type"]): raise ValueError("Dữ liệu đầu vào không hợp lệ")
    # Chuyển đổi timestamp ISO sang unix nếu là chuỗi, giữ nguyên nếu đã là số
    ts = int(datetime.fromisoformat(j["timestamp"].rstrip('Z')).timestamp() * 1000) if isinstance(j["timestamp"], str) else j["timestamp"]
    # Xây dựng từ điển địa điểm sử dụng từ điển thông qua với get() cho các trường thiếu
    loc_keys = ["country", "city", "area", "factory", "section"]
    return {
        "deviceID": j["device"]["id"], "deviceType": j["device"]["type"], "timestamp": ts,
        "location": {k: j.get(k, "unknown") for k in loc_keys},
        "data": j["data"]
    }

Nhảy Múa Gỡ Lỗi: Khi Nén Gặp Vấn Đề

Những Cạm Bẫy Thường Gặp và Giải Pháp

  1. Xung Đột Hệ Thống Kiểu
  2. Vấn Đề Về Thứ Tự Toán Tử

Thực Hành Tốt Nhất Cho Nén Mã Hỗ Trợ AI

1. Tinh Chỉnh Dần Dần

2. Yêu Cầu Chiến Lược

3. Chiến Lược Xử Lý Lỗi

4. Tích Hợp Bình Luận

Khi Nào Sử Dụng Mã Hacky

Tình Huống Thích Hợp

  • Lập trình cạnh tranh
  • Prototyping
  • Code Golf
  • Bài tập học tập

Khi Nào Nên Tránh

  • Hệ thống sản xuất
  • Môi trường nhóm
  • Logic phức tạp
  • Hệ thống quan trọng

Tác Động Hiệu Suất

Mã nén thường có hiệu suất tốt hơn:

  • So sánh số liệu: Giảm kích thước dòng
  • Số lần gọi hàm
  • Sử dụng bộ nhớ

Kết Luận: Nghệ Thuật Cân Bằng Nén

Nén mã hỗ trợ AI cho thấy sự căng thẳng giữa khả năng đọc và hiệu suất. Thông qua yêu cầu chiến lược và tinh chỉnh tuần tự, chúng ta có thể biến mã doanh nghiệp dài dòng thành các triển khai gọn nhẹ, chức năng.

Những hiểu biết quan trọng:

  • AI xuất sắc trong việc biến đổi cơ học
  • Yêu cầu tuần tự hoạt động tốt nhất
  • Bình luận là điều cần thiết
  • Biết rõ sự đánh đổi

Lựa Chọn Của Lập Trình Viên

Câu hỏi không phải là viết mã sạch hay hacky, mà là khi nào để sử dụng mỗi phương pháp. Phát triển hỗ trợ AI cho phép chúng ta khám phá cả hai cực, giúp chúng ta chọn công cụ phù hợp cho ngữ cảnh phù hợp.

"Mã tốt nhất không phải là mã đẹp nhất hay nén nhất, mà là mã phù hợp nhất cho mục đích và khán giả của nó."

Đọc Thêm

  • Kỹ Thuật Code Golf Python
  • Chiến Lược Tối Ưu Hóa Lập Trình Cạnh Tranh
  • Khi Nguyên Tắc Mã Sạch Không Áp Dụng

Tác Giả: Khám phá này xuất phát từ các phiên phát triển hỗ trợ AI thực tế, cho thấy các kỹ thuật thực tiễn cho việc chuyển đổi mã thông qua yêu cầu chiến lược và tinh chỉnh tuần tự.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào