Хөгжүүлэлтийн орчин ба Хэрэгслүүд

Хөгжүүлэлтийн орчин (development environment) гэдэг нь код бичихдээ өдөр бүр ашигладаг tool-уудын багц юм. Голд нь текст засах workflow байна; үүн дээр syntax highlighting, type checking, formatter, autocomplete зэрэг зүйлс нэмэгдэнэ. VS Code зэрэг IDE (Integrated Development Environment) эдгээрийг нэг app дотор багтаадаг. Харин Terminal төвтэй workflow-д tmux, Vim, Zsh, мөн тухайн хэлний CLI tool-ууд болох Ruff (Python linter/formatter), Mypy (Python type checker) зэрэг ордог.

IDE болон Terminal төвтэй workflow хоёр хоёулаа давуу, сул талтай. GUI-тэй IDE сурахад амар, AI autocomplete зэрэг integration нь ихэвчлэн шууд бэлэн байдаг. Terminal workflow харин хөнгөн, remote server эсвэл GUI байхгүй орчинд бараг цорын ганц сонголт болох үе бий. Аль алиных нь суурийг мэдээд, ядаж нэгийг нь сайн эзэмшээрэй. Одоогоор дуртай IDE байхгүй бол VS Code-оос эхлэхэд зүгээр.

Энэ лекцээр бид дараах зүйлсийг үзнэ:

Текст редактор ба Vim

Код бичих үед цагийн ихэнх нь урт текст тасралтгүй бичихэд биш, код дотор хурдан шилжих, хэсэг хэсгээр нь унших, жижиг засваруудыг зөв газарт нь хийхэд зарцуулагддаг. Vim яг ийм төрлийн ажилд маш сайн таарсан текст редактор.

Vim-ийн философи. Vim-ийн гол санаа нь энгийн хэрнээ хүчтэй: интерфейс нь өөрөө текст дотор шилжих, засах жижиг “хэл” шиг ажилладаг. Товчлуурууд нь command, command-уудыг хооронд нь compose хийж болно. Vim mouse-оос зайлсхийдэг, сумтай товчлуураас ч аль болох татгалздаг, учир нь гарын байрлалаа байнга өөрчлөх нь удаан. Дасчихвал editor бараг бодсон хурдаар чинь хөдөлж байгаа мэт мэдрэмж төрдөг.

Бусад програм дахь Vim-ийн дэмжлэг. Энэ санааг ашиглахын тулд заавал цэвэр Vim дээр амьдрах албагүй. Текст засдаг олон tool built-in байдлаар эсвэл plugin-аар “Vim mode” дэмждэг. VS Code-д VSCodeVim, Zsh-д Vim emulation-ийн built-in support, Claude Code-д хүртэл Vim editor mode-ийн built-in support бий. Таны хэрэглэдэг editor эсвэл текст оруулдаг tool Vim mode дэмждэг байх магадлал өндөр.

Модал горимоор засварлах

Vim бол модал засварлагч (modal editor) юм: энэ нь өөр өөр төрлийн ажлуудад зориулагдсан өөр өөр горимуудтай.

Товчлуурууд нь өөр өөр горимд өөр өөр утгатай байдаг. Жишээлбэл, Insert горимд x үсгийг дарахад зүгээр л “x” тэмдэгт бичигдэх бол Normal горимд энэ нь курсор доор байгаа тэмдэгтийг устгана, харин Visual горимд сонгосон текстийг устгах болно.

Эхний тохиргоогоор Vim одоогийн горимыг зүүн доод буланд харуулдаг. Анхны горим нь Normal горим байна. Та цагийнхаа ихэнх хэсгийг Normal болон Insert горимуудын хооронд шилжиж зарцуулна.

Та дурын горимоос Normal горим руу буцахдаа <ESC> товчлуурыг дарж шилжинэ. Normal горимоос Insert горим руу орохдоо i, Replace горим руу орохдоо R, Visual горим руу орохдоо v, Visual Line горим руу орохдоо V, Visual Block горим руу орохдоо <C-v> (Ctrl-V эсвэл ^V), харин Command-line горим руу орохдоо : дараарай.

Vim-ийг ашиглах үед та <ESC> товчлуурыг маш их дарах болно: тиймээс Caps Lock товчлуурыг Escape болгож солих (macOS заавар) эсвэл энгийн товчны хослолоор <ESC> товчлуурын өөр холбоос үүсгэх талаар бодоорой.

Үндсэн ойлголт: Текст оруулах

Normal горимоос i дарахад Insert горимд шилжинэ. Одоо Vim нь таныг буцаад Normal горимд шилжихээр <ESC> дарах хүртэл бусад ердийн текст редакторид шиг ажиллах болно. Энэ нь дээр дурдсан үндсэн ойлголтуудын хамт Vim ашиглан файлыг засварлаж эхлэхэд хангалттай (гэхдээ Insert горимоос бүх зүйлийг хийгээд байвал тийм ч үр дүнтэй биш байх болно).

Vim-ийн интерфейс бол програмчлалын хэл юм

Vim-ийн интерфейс бол програмчлалын хэл юм. Товчлуурууд (цээжлэхэд хялбар нэрстэй) нь command-ууд бөгөөд тэдгээр нь хамт ажиллаж (compose) чаддаг. Энэ нь кодоор хурдан шилжих болон засварлахад туслах бөгөөд гарны байрлалыг сурсны дараа бичих үйлдэл үр дүнтэй болдог шиг эдгээр command-ууд таны булчингийн санах ойд орох үед маш өндөр бүтээмжтэй болно.

Шилжилт

Та ихэнх цагаа Normal горимд өнгөрөөж, кодоор шилжихийн тулд шилжих command-уудыг ашиглах хэрэгтэй. Vim дэх шилжилтүүдийг текстийн хэсгийг заадаг тул “нэр үг” (nouns) гэж нэрлэж болно.

Сонгох

Visual горимууд:

Текстийг сонгохдоо дээрх шилжилтийн товчлууруудыг ашиглаж болно.

Засварлах

Урьд нь хулганаар хийдэг байсан бүх зүйлээ одоо гарнаас, шилжилтийн command-уудтай хамтран ажилладаг засварлах command-уудыг ашиглан хийнэ. Эндээс л Vim-ийн интерфейс програмчлалын хэл шиг харагдаж эхэлнэ. Vim-ийн засварлах command-ууд нь нэр үг дээр үйлдэл хийдэг тул тэдгээрийг “үйл үг” (verbs) гэж нэрлэдэг.

Тоолох

Та нэр үг болон үйл үгийг тоотой хослуулан ашиглаж болох бөгөөд ингэснээр тухайн үйлдлийг заасан тоогоор давтан хийнэ.

Хувиргагчид (Modifiers)

Та нэр үгний утгыг өөрчлөхийн тулд хувиргагчийг ашиглаж болно. Зарим хувиргагчид нь доторх гэсэн утгатай i (inner эсвэл inside) болон тойрсон гэсэн утгатай a (around) юм.

Бүгдийг нэгтгэх нь

Доор алдаатай бичигдсэн fizz buzz програмыг харуулав:

def fizz_buzz(limit):
    for i in range(limit):
        if i % 3 == 0:
            print("fizz", end="")
        if i % 5 == 0:
            print("fizz", end="")
        if i % 3 and i % 5:
            print(i, end="")
        print()

def main():
    fizz_buzz(20)

Бид дараах command-ын дарааллыг ашиглан Normal горимоос эхлэн алдааг засах болно:

Vim сурах нь

Vim-ийг сурах хамгийн сайн арга бол үндсэн ойлголтуудыг (энэ хүртэл үзсэн зүйлс) сураад, дараа нь өөрийн бүх програм дээр Vim горимыг идэвхжүүлж практикт шууд ашиглаж эхлэх юм. Хулгана болон сумтай товчлуурыг ашиглах хэрэгцээг гаргахгүй байхыг хичээгээрэй; зарим засварлагчид зөв дадал суулгахын тулд сумтай товчлуурын холбоосыг идэвхгүй болгож болно.

Нэмэлт эх сурвалжууд

Кодын оюун ухаан ба Хэлний серверүүд

IDE-үүд нь ерөнхийдөө Language Server Protocol-ийг хэрэгжүүлдэг хэлний серверүүдтэй (language servers) холбогдох IDE өргөтгөлүүдээр дамжуулан кодыг семантик байдлаар ойлгож, тухайн хэлэнд зориулсан дэмжлэгүүдийг санал болгодог. Жишээлбэл, VS Code-д зориулсан Python extension нь Pylance дээр суурилдаг бөгөөд Go extension нь gopls-ийг ашигладаг. Хөгжүүлэлт хийж буй хэлнийхээ өргөтгөл болон хэлний серверийг суулгаснаар та өөрийн IDE дээр дараах боломжуудыг идэвхжүүлэх боломжтой:

Хэлний серверийг тохируулах

Зарим хэлний хувьд танд зөвхөн өргөтгөл болон хэлний серверийг суулгахад л хангалттай байх болно. Бусад хэлний хувьд хэлний серверийг бүрэн дүүрэн ашиглахын тулд IDE-д өөрийн ажиллаж буй орчныг зааж өгөх шаардлагатай болдог. Жишээлбэл, VS Code-д өөрийн Python-ий ажиллах орчныг зааж өгснөөр хэлний сервер таны суулгасан багцуудыг олж харж болно. Орчны талаар манай Кодыг тээвэрлэх ба суулгах лекц-ээр илүү дэлгэрэнгүй үзэх болно.

Тухайн хэлнээс хамааран та өөрийн хэлний серверт зориулж зарим тохиргоог хийж болно. Жишээлбэл, VS Code-ийн Python дэмжлэгийг ашиглан Python-ий нэмэлт төрлийн тэмдэглэгээ ашигладаггүй төслүүдийн хувьд статик төрөл шалгах үйлдлийг идэвхгүй болгож болно.

AI-д суурилсан хөгжүүлэлт

2021 оны дунд үеэс эхлэн OpenAI-ийн Codex загвар дээр суурилсан GitHub Copilot гарч ирснээр LLM-үүдийг програм хангамжийн инженерчлэлд маш өргөнөөр ашиглах болсон. Одоогоор ашиглагдаж буй үндсэн гурван хэлбэр нь: autocomplete, inline chat болон coding agents юм.

Автомат нөхөлт

AI-д суурилсан автомат нөхөлт нь таны IDE дэх уламжлалт автомат нөхөлттэй ижил хэлбэртэй бөгөөд таныг бичиж байх явцад курсор байгаа байрлалд кодын үргэлжлэлийг санал болгодог. Заримдаа энэ нь цаанаа ажилладаг идэвхгүй функц байдлаар ашиглагддаг. Үүнээс гадна AI-ийн автомат нөхөлтийг кодын сэтгэгдэл ашиглан prompt хийж чиглүүлж болно.

Жишээлбэл, лекцийн тэмдэглэлийн агуулгыг татаж аваад түүн доторх бүх холбоосыг салгаж авах скрипт бичицгээе. Дараах кодоор эхэлж болно:

import requests

def download_contents(url: str) -> str:

Загвар нь функцийн биеийг автоматаар нөхөх болно:

    response = requests.get(url)
    return response.text

Бид сэтгэгдэл ашиглан автомат нөхөлтийг цааш чиглүүлж болно. Жишээлбэл, хэрэв бид Markdown холбоосыг салгаж авах функц бичиж эхэлсэн боловч түүнд тодорхой нэр өгөөгүй бол:

def extract(contents: str) -> list[str]:

Загвар ингэж зүйлийг санал болгож магадгүй:

    lines = contents.splitlines()
    return [line for line in lines if line.strip()]

Бид үүнийг кодын сэтгэгдлээр дамжуулан чиглүүлж чадна:

def extract(content: str) -> list[str]:
    # extract all Markdown links from the content

Энэ удаад загвар илүү сайн нөхөлт санал болгоно:

    import re
    pattern = r'\[.*?\]\((.*?)\)'
    return re.findall(pattern, content)

Эндээс бид AI хэрэгслийн нэг сул талыг харж болно: энэ нь зөвхөн курсор байгаа байрлалд нөхөлт хийдэг. Энэ тохиолдолд import re санг функцийн дотор биш, модулийн эхэнд бичих нь илүү зөв практик байх байсан юм.

Дээрх жишээнд сэтгэгдэл ашиглан кодын автомат нөхөлтийг хэрхэн чиглүүлж болохыг харуулахын тулд тодорхой бус нэртэй функцийг ашигласан; амьдрал дээр та extract_links гэх мэт илүү тодорхой нэртэй функц бичиж, түүнд docstrings бичих нь зүйтэй (үүнд үндэслэн загвар дээрхтэй ижил нөхөлтийг санал болгоно).

Үзүүлэн дасгалын зорилгоор бид скриптийг гүйцээж бичиж болно:

print(extract(download_contents("https://raw.githubusercontent.com/missing-semester/missing-semester/refs/heads/master/_2026/development-environment.md")))

Inline chat (Шууд чат)

Inline chat нь танд тодорхой мөр эсвэл кодын хэсгийг сонгоод AI загварт шууд өөрчлөлт оруулах хүсэлт өгөх боломж өгдөг. Энэ горимд загвар нь бэлэн байгаа кодонд өөрчлөлт оруулж чаддагаараа (зөвхөн курсорын ард код нэмдэг автомат нөхөлтөөс ялгаатай) давуу талтай.

Дээрх жишээг үргэлжлүүлэн, бид гадны requests санг ашиглахаас татгалзсан гэж бодъё. Бид холбогдох 3 мөр кодыг сонгож аваад inline chat-ыг нээж дараах хүсэлтийг өгч болно:

use built-in libraries instead

Загвар дараах өөрчлөлтийг санал болгоно:

from urllib.request import urlopen

def download_contents(url: str) -> str:
    with urlopen(url) as response:
        return response.read().decode('utf-8')

Хөгжүүлэлтийн агентууд

Coding agents-ийн талаар Агентлаг програмчлал лекцээр дэлгэрэнгүй үзэх болно.

Зөвлөх програм хангамж

Түгээмэл хэрэглэгддэг AI IDE-үүд бол GitHub Copilot өргөтгөл бүхий VS Code болон Cursor юм. GitHub Copilot нь одоогоор оюутнууд, багш нар болон түгээмэл нээлттэй эхийн төслийг хөгжүүлэгчдэд үнэ төлбөргүй ашиглаж болно байдаг. Энэ салбар маш хурдацтай хөгжиж байгаа бөгөөд тэргүүлэгч бүтээгдэхүүнүүд нь ерөнхийдөө ижил төстэй функцуудыг санал болгож байна.

Өргөтгөлүүд болон бусад IDE-ийн функцууд

IDE-үүд нь маш сайн хэрэгсэл бөгөөд өргөтгөлүүдийн (extensions) тусламжтайгаар бүр ч илүү сайн болдог. Бид эдгээр бүх боломжийг нэг лекцээр багтаан зааж чадахгүй тул түгээмэл хэрэглэгддэг цөөн хэдэн өргөтгөлийг энд дурдъя. Та энэ чиглэлээр өөрөө бие даан судлаарай; онлайнд маш олон шилдэг өргөтгөлийн жагсаалтууд байдаг (жишээ нь, Vim-ийн залгаасуудад зориулсан Vim Awesome болон VS Code extensions sorted by popularity).

Дасгал ажил

  1. Өөрийн ашигладаг, Vim горимыг дэмждэг бүх програм хангамж (код засварлагч, shell гэх мэт) дээр Vim горимыг идэвхжүүлж, дараагийн нэг сарын турш текст засварлах бүх ажилдаа Vim горимыг ашиглаарай. Ямар нэгэн үйлдэл үр ашиггүй санагдах эсвэл “үүнийг хийх илүү сайн арга байгаа байх” гэж бодогдох бүрд Google-ээс хайж үзээрэй, илүү сайн арга заавал байх болно.
  2. VimGolf-оос аль нэг даалгаврыг биелүүлж туршина уу.
  3. Өөрийн ажиллаж буй төсөлд зориулан IDE өргөтгөл болон хэлний серверийг тохируулна уу. Сангийн хамаарлуудын тодорхойлолт руу шилжих (jump-to-definition) зэрэг хүлээгдэж буй бүх боломжууд зөв ажиллаж байгаа эсэхийг шалгана уу. Хэрэв танд ашиглах бэлэн код байхгүй бол GitHub-аас аль нэг нээлттэй эхийн төслийг (жишээ нь, үүнийг) ашиглаж болно.
  4. IDE өргөтгөлүүдийн жагсаалтыг гүйлгэн харж, өөрт хэрэгтэй санагдсан нэг өргөтгөлийг суулгана уу.

Энэ хуудсыг засварлах.

Лиценз: CC BY-NC-SA.