GoSuda

Moderní jazyk éry AI

By Rabbit Princess
views ...

모던 언어

모던 언어란 과거의 언어들에 비해 더 높은 생산성, 안정성, 보안성, 유지보수성을 제공하는 언어를 의미한다. Tyto jazyky znamenají takové, které v porovnání s dřívějšími jazyky poskytují vyšší produktivitu, stabilitu, bezpečnost a udržovatelnost. 이러한 언어들은 최신 기법과 개념을 적극적으로 도입하며, 개발자에게 더 효율적이고 안전한 개발 도구를 제공한다. Tyto jazyky aktivně zavádějí nejnovější techniky a koncepty a poskytují vývojářům efektivnější a bezpečnější vývojové nástroje. 대표적인 모던 언어로는 Java, Rust, Python, TypeScript 등이 있으며, 이들은 다음과 같은 특징을 갖는다. Mezi reprezentativní moderní jazyky patří Java, Rust, Python, TypeScript a další, které se vyznačují následujícími rysy.

1. 객체지향 설계 ( OOP )

모던 언어는 대부분 객체지향 개념을 기반으로 설계되었다. Moderní jazyky jsou z velké části navrženy na základě konceptů objektově orientovaného programování. 객체지향은 캡슐화, 상속, 다형성과 같은 원칙을 지원하며, 복잡한 시스템을 작은 단위의 객체로 나누어 관리함으로써 프로그램의 구조를 명확하고 유연하게 만든다. Objektově orientované programování podporuje principy jako zapouzdření, dědičnost a polymorfismus a správou komplexních systémů rozdělených na malé jednotky objektů činí strukturu programu jasnou a flexibilní. 이는 특히 대규모 소프트웨어 개발 시 개발 비용과 공수를 통제하고, 유지보수 시 발생할 수 있는 문제를 줄이는 데 효과적이다. To je účinné zejména při vývoji rozsáhlého softwaru pro řízení nákladů na vývoj a vynaloženého úsilí a pro snižování problémů, které mohou nastat při údržbě.

2. 문법 설탕 및 표현식

모던 언어는 코드의 가독성과 개발 생산성을 높이기 위해 다양한 문법 설탕과 표현식 기반 문법을 제공한다. Moderní jazyky poskytují různé syntaktické cukry a gramatiku založenou na výrazech pro zvýšení čitelnosti kódu a produktivity vývoje. 삼항 연산자, 람다 표현식, 패턴 매칭 등의 기능은 보일러플레이트 코드를 줄이고, 코드를 예측 가능하게 하며, 개발자의 생산성을 향상시킨다. Funkce jako ternární operátor, lambda výrazy a pattern matching snižují boilerplate kód, činí kód předvídatelným a zvyšují produktivitu vývojářů.

3. 모듈 시스템

모던 언어는 모듈 시스템을 통해 프로그램을 여러 단위로 분리해 관리할 수 있게 한다. Moderní jazyky umožňují správu programů rozdělených na více jednotek prostřednictvím modulárního systému. 이는 코드의 재사용성과 의존성 관리를 용이하게 하며, 프로젝트 규모가 커져도 유지보수를 수월하게 만든다. To usnadňuje znovupoužitelnost kódu a správu závislostí a zjednodušuje údržbu i při zvětšování rozsahu projektu. 대표적인 예로는 Java의 Maven/Gradle, Rust의 Cargo, TypeScript의 npm/yarn 등이 있다. Reprezentativními příklady jsou Maven/Gradle v jazyce Java, Cargo v jazyce Rust, npm/yarn v jazyce TypeScript a další.

4. 중간 언어 및 가상 머신

모던 언어들은 플랫폼 독립성과 성능 최적화, 보안성을 위해 중간 언어와 가상 머신을 도입한다. Moderní jazyky zavádějí mezijazyky a virtuální stroje pro platformní nezávislost, optimalizaci výkonu a bezpečnost. 대표적인 예로 JVM, LLVM, WASM, GraalVM 등이 있다. Reprezentativními příklady jsou JVM, LLVM, WASM, GraalVM a další.

AI 시대의 개발과 모던 언어의 한계점

모던 언어는 사람이 대부분의 코드를 작성한다는 전제하에 생겨났다. Moderní jazyky vznikly za předpokladu, že většinu kódu píší lidé. 자연스럽게 모던 언어의 목적은 반복 작업을 줄이고 생산성을 높이며, 개발자들이 협업할 수 있는 구조를 통해 대형 소프트웨어를 효과적으로 구현하는 것이다. Přirozeně je cílem moderních jazyků snižovat opakující se úkoly, zvyšovat produktivitu a efektivně implementovat rozsáhlý software prostřednictvím struktury umožňující spolupráci vývojářů. 그러나 AI 시대에 이러한 전제가 점점 무너지고 있다. Avšak v éře AI se tento předpoklad postupně hroutí. Copilot, Cody 등과 같은 AI 기반 도구는 코드 작성의 많은 부분을 자동화하고 있으며, 한 명의 개발자가 생산할 수 있는 코드의 양이 비약적으로 증가하고 있다. Nástroje založené na AI, jako jsou Copilot, Cody a další, automatizují velkou část psaní kódu a množství kódu, které může vytvořit jeden vývojář, exponenciálně roste. 이로 인해 과거에는 장점으로 느껴지던 모던 언어의 특징이 점차 구시대적인 단점으로 변하고 있다. V důsledku toho se rysy moderních jazyků, které byly dříve vnímány jako výhody, postupně mění v zastaralé nevýhody.

객체지향 설계

AI는 하나의 함수나 모듈 안에서 모든 정보가 명시된 구조는 빠르고 정확하게 분석할 수 있다. AI dokáže rychle a přesně analyzovat struktury, kde jsou všechny informace explicitně uvedeny v rámci jedné funkce nebo modulu. 반면에, 컨텍스트가 증가할수록 추론할 구간이 늘어나기 때문에 AI 의 생산성과 정확도는 낮아진다. Na druhou stranu, s rostoucím kontextem se zvyšuje rozsah pro odvozování, čímž klesá produktivita a přesnost AI. OOP 로 짜여진 코드는 로직을 한 곳에서 관리하기보다는 여러 객체에 분산시키며, 이는 결과적으로 AI 에게 더 많은 컨텍스트를 요구하게 된다. Kód napsaný v OOP spíše než aby spravoval logiku na jednom místě, ji rozptyluje mezi více objektů, což v důsledku vyžaduje od AI více kontextu. 아래 코드를 보자. Podívejme se na následující kód.

 1public class AnimalHandler {
 2    public void handle(Animal animal) {
 3        animal.speak();
 4    }
 5}
 6
 7public class Main {
 8    public static void main(String[] args) {
 9        AnimalHandler handler = new AnimalHandler();
10
11        Animal a1 = new Dog();
12        Animal a2 = new Cat();
13        Animal a3 = new Horse();
14
15        handler.handle(a1);
16        handler.handle(a2);
17        handler.handle(a3);
18    }
19}

위 코드에서 AI는 speak() 메서드가 실제로 어떤 동작을 할지 알기 위해 다음과 같은 추론을 반복해야 한다 V kódu výše musí AI opakovaně provádět následující dedukce, aby zjistila, co metoda speak() skutečně provede:

  1. animal은 어떤 구체 클래스의 인스턴스인지?
  2. Jakou konkrétní třídou je animal instancí?
  3. 그 클래스에서 오버라이드된 speak() 메서드는 어디에 정의되어 있는지?
  4. Kde je definována metoda speak(), která je v této třídě přepsána?
  5. Dog과 Cat 클래스의 정의는 어디에 있으며, 그 내부의 동작은 무엇인지?
  6. Kde jsou definice tříd Dog a Cat a jaká je jejich vnitřní činnost?
  7. Dog 와 Cat 클래스가 다른 클래스에서 오버라이드될 가능성은 없는지?
  8. Existuje možnost, že třídy Dog a Cat budou přepsány jinými třídami?

이러한 정보는 한 파일 혹은 한 함수에 모여 있지 않고, 클래스 파일들 간의 관계와 상속 구조를 따라가야만 이해할 수 있다. Tyto informace nejsou shromážděny v jednom souboru nebo jedné funkci, ale lze je pochopit pouze sledováním vztahů mezi soubory tříd a strukturou dědičnosti. 더군다나, 리플렉션 또는 동적 로딩 처럼 런타임에 결정되는 요소들은 AI 입장에서 블랙박스와도 같아, 사실상 분석이 불가능하다. Navíc prvky, které se rozhodují za běhu, jako je reflexe nebo dynamické načítání, jsou pro AI jako černá skříňka a jejich analýza je fakticky nemožná.

문법 설탕 및 표현식

AI 는 암시적인 동작보다 명시적인 동작을 선호하며, 복잡한 구조를 가져다가 쓰기 보다는 단순한 구조를 조합해 하나의 정답을 만드는 것을 선호한다. AI preferuje explicitní chování před implicitním a dává přednost kombinování jednoduchých struktur pro vytvoření jedné správné odpovědi spíše než použití složitých struktur. 그에 반해, 문법 설탕은 다양한 표현을 허용하면서도, 그 내부 동작은 동일하거나 유사한 경우가 많다. Naproti tomu syntaktický cukr sice umožňuje různé výrazy, ale jejich vnitřní chování je často stejné nebo podobné. AI는 이 다양한 표현의 의미를 일일이 학습해야 하며, 특정 상황에서 어떤 문법을 추천해야 하는지 우선순위를 판단하기 어려워질 수 있다. AI se musí naučit význam těchto různých výrazů jeden po druhém a může mít potíže s určením priority, jakou syntaxi doporučit v konkrétní situaci.

중간언어 및 가상머신

AI는 대부분 소스코드를 기반으로 학습한다. AI se většinou učí na základě zdrojového kódu. 반면, 중간 언어(bytecode)는 컴파일 과정에서 변수명 등의 의미가 제거되며, 실행 시점에 가상 머신이 재해석해야 한다. Naopak, z mezijazyka (bytecode) se v procesu kompilace odstraňuje význam názvů proměnných a dalších prvků a musí být reinterpretován virtuálním strojem za běhu. 이는 AI가 이해하거나 변환하기 매우 어려운 작업이다. To je pro AI velmi obtížný úkol k pochopení nebo převodu. 예를 들어 AI 에게 TypeScript에서 Go로의 변환은 가능하지만, V8 engine의 바이트코드를 JVM의 바이트코드나 기계어로 변환하는 것은 사실상 불가능에 가깝다. Například pro AI je možný převod z TypeScriptu do Go, ale převod bytecodu V8 engine na bytecode JVM nebo strojový kód je fakticky téměř nemožný.

AI 시대의 진짜 모던 언어

위 내용을 통해 우리는 모던 언어의 특징들이 실제로는 AI 시절에 적합하지 않은 구시대적인 요소라는 것을 알 수 있다. Na základě výše uvedeného obsahu můžeme vidět, že rysy moderních jazyků jsou ve skutečnosti zastaralými prvky, které nejsou vhodné pro éru AI. 그렇다면 어떤 언어가 AI 시대의 가장 적합한 모던 언어가 될 수 있을까? Jaký jazyk se tedy může stát nejvhodnějším moderním jazykem pro éru AI? 이는 과거 모던 언어들이 배척했던 요소들에서 힌트를 얻을 수 있다. Nápovědu lze získat z prvků, které moderní jazyky v minulosti odmítaly. AI 시대의 모던 언어는 Moderní jazyk v éře AI by měl:

  1. 명시적인 문법과 자연스러운 흐름을 가져야 한다.
  2. Mít explicitní syntaxi a přirozený tok.
  3. 과도한 OOP 구조를 벗어나 평면적이고 단순한 구조를 가져야 한다.
  4. Odklonit se od nadměrných OOP struktur a mít plochou a jednoduchou strukturu.
  5. 불필요한 문법설탕이나 암시적 패턴보다는, 한정된 기본 키워드만으로 여러 기능을 제작한다.
  6. Místo zbytečného syntaktického cukru nebo implicitních vzorů vytvářet různé funkce pouze s omezeným počtem základních klíčových slov.
  7. 복잡한 빌드 시스템이 아닌 단순하고 예측가능한 빌드 시스템을 가져야 한다.
  8. Mít jednoduchý a předvídatelný build systém namísto složitého.

이러한 기준에 가장 부합하는 언어는 Golang이다. Jazyk, který nejlépe splňuje tato kritéria, je Golang. Go언어는 최소한의 핵심 키워드와 단순한 문법 조합만으로도 실용적인 대부분의 기능을 구현할 수 있도록 설계되었으며, 불필요한 추상화와 암시적 동작을 철저히 배제한다. Jazyk Go byl navržen tak, aby umožňoval implementaci většiny praktických funkcí pouze s minimem základních klíčových slov a jednoduchými syntaktickými kombinacemi, a důsledně vylučuje zbytečnou abstrakci a implicitní chování. 이는 개발자뿐만 아니라 AI가 코드를 해석하고 생성하는 데에도 유리한 구조이다. Jedná se o strukturu, která je výhodná nejen pro vývojáře, ale i pro AI při interpretaci a generování kódu.

이처럼 예측 가능하고 평면적인 구조, 명시적인 흐름, 일관된 문법을 지향하는 Go의 특성은, 인간 개발자를 기준으로 설계된 기존 모던 언어들과 달리, AI가 적극 참여하는 개발 환경에 더 잘 어울린다. Vlastnosti jazyka Go, které směřují k předvídatelné a ploché struktuře, explicitnímu toku a konzistentní syntaxi, se na rozdíl od stávajících moderních jazyků navržených pro lidské vývojáře lépe hodí do vývojového prostředí, kde se aktivně zapojuje AI. 한때는 구시대적이라고 여겨졌던 Go의 보수적 설계 철학이, 오히려 AI 시대에는 가장 앞선 선택이 되는 셈이다. Konzervativní filozofie návrhu jazyka Go, která byla kdysi považována za zastaralou, se tak v éře AI stává naopak nejprogresivnější volbou.