Andrej Karpathy’nin JSON Yükleyici Kodu Neden Viral Oldu?
Bu koddaki, onu modern, aşırı mühendislikle geliştirilmiş Python’un mükemmel bir hicivi haline getiren her bir konuyu tek tek ele almama izin verin.
1. Tamamen Anlamsız AutoTokenizer İçe Aktarımı
python
try:
from transformers import AutoTokenizer # type: ignore
except Exception as e: # pragma: no cover
logger.warning(f"Could not import transformers.AutoTokenizer: {e}")
AutoTokenizer: Optional[Any] = None # type: ignore
Sorun nedir:
- Hiç kullanılmamış bir şeyi içe aktarır:
AutoTokenizer
içe aktarılır ancak işlevde kelimenin tam anlamıyla hiçbir zaman başvurulmaz - JSON yükleyicide yanlış: Bir JSON dosya yükleyicisinin neden bir transformatör belirtecine ihtiyacı olsun ki? Sıfır bağlantı
- Yakalamalar
Exception
yerineImportError
: Aşırı geniş. Sözdizimi hataları veya sistem sorunları gibi hataları gizleyebilir - Modül içe aktarma sırasındaki günlükler: Bu uyarı, modülü içe aktardığınızda tetiklenir ve herhangi bir işlev çağrılmadan önce günlükler karmaşık hale gelir.
- Tiyatroyu yoksay yazın: Kullanım Alanları
# type: ignore
iki kez, tür ipuçlarının tüm amacını ortadan kaldırır - **
Optional[Any]
anlamsız**: Eğer öyleyseAny
,Optional
hiçbir bilgi eklemez. Sadece kullanAny
- Kapsama pragması yanlış satırda:
# pragma: no cover
üzerindeexcept
blok değil, çizgi. Aslında kodu kapsam raporlarından hariç tutmaz - Başka bir dosyadan kargo kültü: Açıkçası transformatörleri kullanan koddan kopyalanıp yapıştırıldı, asla temizlenmedi
Bu tek blok “Anlamadan standart metni kopyaladım” diye bağırıyor.
2. Saçma Bir Şekilde Ayrıntılı Dokümanlar
“`piton
"""
Verilen yoldan bir JSON dosyasını güvenle yükleyin.
Args: path (str): JSON dosyasının yolu.
Döndürür: Dikte[str, Any]: JSON verileri sözlük olarak ayrıştırıldı.
Yükseltir: FileNotFoundError: Dosya mevcut değilse. ValueError: Dosya boşsa veya geçerli JSON olarak ayrıştırılamıyorsa.
"""
””
Sorun nedir:
- Açık olanı belgelemek: “JSON dosyası yükle” çok paragraflı bir açıklamaya ihtiyaç duymaz
- Args bölümü gereksiz: “path (str): JSON dosyasının yolu” – evet, bunu fonksiyon imzasından görebiliriz
- İade bölümü bariz olanı belirtir: Elbette bir JSON yükleyicisi ayrıştırılmış JSON verilerini döndürür
- Yükseltmeler bölümü koddan daha uzun: Önemsiz bir işlem için belgelenen üç istisna türü
- “Güvenle” anlamsız bir pazarlamadır: Burada “güvenli bir şekilde” ne anlama geliyor? Özel bir şey yapmıyor
- Docstring, 15 satırlık bir işlev için 10 satırdır: Dokümantasyon neredeyse uygulama süresi kadar uzundur
Bu, şirketiniz verimliliği belge satırlarıyla ölçtüğünde yazdığınız türden bir belgedir.
3. Yedekli Dosya Varlığı Kontrolü
“`python içe aktarma işletim sistemi
os.path.exists(path) değilse: FileNotFoundError(f’yi yükseltin)"JSON dosyası bulunamadı: {path}") “`
Sorun nedir:
- Yarış durumu (TOCTTOU): Kontrol Zamanı Kullanım Zamanı hatası. Dosya şu tarihler arasında silinebilir:
exists()
kontrol edin veopen()
Arama - Tamamen gereksiz:
open()
zaten yükseltiyorFileNotFoundError
dosya mevcut değilse - İç işlevi içe aktar:
import os
işlevin içinde değil, modül düzeyinde olmalıdır. Bu tuhaf bir tarz - Yinelenen hata işleme: Python’un zaten ücretsiz olarak yaptığı şeyi manuel olarak yapıyorsunuz
- Performans ek yükü: Okumadan önce varlığı kontrol etmek için ekstra sistem çağrısı
Tek “faydası” özel bir hata mesajıdır, ancak bu, yarış koşuluna ve kod karmaşıklığına değmez.
4. Anti-Desen Yeniden Eşleme İstisnası
python
try:
with open(path, "r", encoding="utf-8") as f:
data = json.load(f)
except json.JSONDecodeError as e:
raise ValueError(f"Invalid JSON in {path}: {e}") from e
except OSError as e:
raise OSError(f"Error reading file {path}: {e}") from e
JSONDecodeError kullanımında sorun nedir:
- Belirli istisna türünü kaybeder: Dönüştürür
JSONDecodeError
(belirli) içinValueError
(genel) - Arayanın beklentilerini kırar: Kod yakalama
JSONDecodeError
bunu özleyeceğim -
from e
zincir sorunu çözmüyor: İstisna zincirlemede bile tür artık yanlış - Gerçek bir fayda yok: Orijinal istisnanın yolu ve hata ayrıntıları zaten var
OSError yönetimindeki sorun nedir:
- Gereksiz: Yakalar
OSError
onu sarar…OSError
. Tamamen anlamsız - Zaten kapsanıyor:
FileNotFoundError
bir alt sınıfıdırOSError
yani bu yine yakaladı - Manuel kontrolle çakışmalar: Dosyanın varlığını zaten manuel olarak kontrol ettiniz, öyleyse neden tekrar yakalayasınız ki?
5. Geçerli JSON’u Bozan Tür Doğrulaması
python
if not isinstance(data, dict):
raise ValueError(f"Expected a JSON object (dict) in {path}, got {type(data).__name__}")
Sorun nedir:
- Geçerli JSON’u reddeder: JSON dizileri gibi
["foo", "bar", "baz"]
tamamen geçerli JSON’lardır ancak burada başarısız olurlar - İşlev sözleşmesini ihlal ediyor: Fonksiyonun adı
_load_json
Olumsuz_load_json_object
- Doktrin yalanları: “JSON dosyası yükle” diyor ancak yalnızca sözlükleri kabul ediyor
- Dönüş tipi yalanlar:
Dict[str, Any]
bir dikte vaat ediyor, ama olmalıAny
tüm JSON’ları kabul ederseniz - Keyfi kısıtlama: Genel bir JSON yükleyicisi neden dizileri reddeder? Hiç mantıklı değil
Bu ya:
- Geçerli tüm JSON’ları kabul edin ve geri dönün
Any
- Adlandırıl
_load_json_object
ve dict gereksinimini belgeleyin - Hiç mevcut değil
6. İpucu Tutarsızlıklarını Yazın
python
def _load_json(path: str) -> Dict[str, Any]:
Sorun nedir:
- Kullanım Alanları
Dict
yerinedict
: Python 3.9+ sürümünde küçük harf kullanılmalıdırdict[str, Any]
- **
Dict
içe aktarılması gerekiyor**: Şuradan içe aktarılması gerekiyor:typing
yerleşik olduğundadict
iyi çalışıyor - Dikte sözü verir ancak dikte için doğrular: Eğer bunun bir dict olduğunu doğrulayacaksanız, neden doğrulamanıza güvenip daha spesifik bir dönüş türü kullanmıyorsunuz?
- Gerçek davranışla tutarsız: Tür dict diyor ancak kod geçerli JSON’u reddediyor
7. Aşırı Spesifik Kodlama
python
with open(path, "r", encoding="utf-8") as f:
Sorun nedir:
- UTF-8’i varsayar: Çoğu JSON UTF-8’dir ancak JSON spesifikasyonu UTF-8, UTF-16 ve UTF-32’yi destekler
- Algılama yok: Kodlamayı algılamaz, yalnızca varsayar
- Kullanılabilir
json.load()
doğrudan:json.load()
modern Python’da kodlama algılamayı otomatik olarak yönetir
Bu teknik olarak %99 oranında doğrudur, ancak dokümanların iddia ettiği kadar “güvenli” değildir.
8. İşlev Adlandırma Kuralı
python
def _load_json(path: str) -> Dict[str, Any]:
Sorun nedir:
- Özel olmayan işlev için baştaki alt çizgi:
_
önek bunun özel/dahili olduğunu gösteriyor ancak genel bir şey yapıyor - Eğer özelse neden bu kadar yoğun bir şekilde belgelensin ki?: Özel işlevler kurumsal düzeyde belge dizelerine ihtiyaç duymaz
- Adlandırma kısıtlamayla eşleşmiyor: Olmalı
_load_json_dict
veya_load_json_object
doğrulama göz önüne alındığında
9. Hata Mesajı Tutarsızlığı
Farklı hata mesajları farklı formatlara sahiptir:
"JSON file not found: {path}"
– basit"Invalid JSON in {path}: {e}"
– orijinal hatayı içerir"Error reading file {path}: {e}"
– orijinal hatayı içerir"Expected a JSON object (dict) in {path}, got {type(data).__name__}"
– tür adı ile ayrıntılı
Sorun nedir:
- Tutarlı format yok: Bazıları orijinal istisnayı içerir, bazıları içermez
- Stilleri karıştırma: Bazıları “JSON dosyası” diyor, bazıları ise sadece “dosya” diyor
- Aşırı açıklama:
type(data).__name__
sadece yerinetype(data)
– gereksiz ayrıntı
10. Günlük Kaydı Karşıtı Desen
python
logger = logging.getLogger(__name__)
Daha sonra şunları kullanır:
python
logger.warning(f"Could not import transformers.AutoTokenizer: {e}")
Sorun nedir:
- İçe aktarma sırasındaki günlükler: Bu uyarı, işlevler çalıştırıldığında değil, modül yüklendiğinde tetiklenir
- Kontrol yok: Kullanıcı günlük kaydını genel olarak yeniden yapılandırmadan bunu devre dışı bırakamaz
- Bir yardımcı modülde: Düşük seviyeli yardımcı programlar kayıt tutmamalı, istisnalar oluşturmalı ve arayanların karar vermesine izin vermeli
- Yararsız uyarı: Eğer
AutoTokenizer
kullanılmıyorsa neden ithal edilmemesi konusunda uyarıyorsunuz?
Bu Neden Viral Oldu?
Bu kod mükemmel hiciv çünkü şunları birleştiriyor:
- Yapay zeka tarafından oluşturulan kod kalıpları: Ayrıntılı dokümanlar, yok sayılan tip ipuçları ve ortak metin yapısı “LLM çıktısı” diye bağırıyor
- Kurumsal kargo yetiştirme: Düşünülmeden uygulanan her “en iyi uygulama”:
- İpuçları yazın? ✓ (ancak daha sonra göz ardı edildi)
- Dokümanlar mı? ✓ (ama aşırı ayrıntılı)
- Hata işleme? ✓ (ancak gereksiz)
- Kayıt mı yapıyorsunuz? ✓ (fakat yanlış yerde)
- Kapsama pragmaları mı? ✓ (ama kırık)
- Transformatörler ithalatı: Bu dumanı tüten silah. Bir transformatör tokenizer’ı içe aktaran bir JSON yükleyicinin hatalı olduğu o kadar bariz ki hiciv doğrulanıyor
- Aslında hatalar var: Sadece aşırı mühendislik değil, aynı zamanda hatalı:
- Yarış durumu
- Geçerli JSON’u bozar
- Yanlış istisna türleri
- Kırık kapsama pragması
- Gönderen Karpathy: Kendisi ciddi bir mühendis (Tesla Autopilot, OpenAI, şu anda öğretmenlik yapıyor), dolayısıyla insanlar onun modern Python uygulamalarına değindiğini biliyor.
- İlişkilendirilebilir ağrı: Her Python geliştiricisi buna benzer kodlar görmüş veya yazmıştır. Bu, “Bunu üretime hazır hale getireceğim” dürtüsünün absürdlüğe götürülmesidir
Kod Ne Olmalı
python
def load_json(path: str) -> dict:
with open(path) as f:
return json.load(f)
İşte bu. Üç satır. Geriye kalan her şey törendir.
Daha Derin Hiciv
Kod alay ediyor:
- LLM kodu oluşturma: Sözdizimsel olarak doğru ancak aşırı mühendislik gerektiren kodlar üretir
- Kargo kült programlama: Nedenini anlamadan kalıp uygulamak
- Tip ipucu tiyatrosu: Türleri kullanma ancak sonra
# type: ignore
her yer - Kurumsal gelişim: Her işlevin koddan daha uzun belgelere ihtiyaç duyduğu yer
- Yığın Taşması kopyala-yapıştır: Kullanılmayan içe aktarma, kodun anlaşılmadan ödünç alındığını gösteriyor
- Python’un karmaşıklığı sürünüyor: Yazma, günlüğe kaydetme, hata işleme vb. özellikleriyle modern Python, basit görevleri nasıl 40 satırlık işlevlere dönüştürebilir?
Karpathy, bu kadar çok konuyu tek bir işlevde toplayan ve bazı insanların bunun bir hiciv olduğunun muhtemelen farkına varmayacağı kadar makul tutan bir efsanedir.
Etiketler:
https://x.com/karpathy/status/1981009115523789169