개론
실습
"AI 시대의 프로그래머 AI 페어 프로그래밍" 톰 타울리 2024
(톰 타울리 2024)
책소개
프로그래머, AI 세계에서 살아남기
이제 AI는 프로그래머의 강력한 동반자가 됐다. 이 책을 통해 AI 도구를 마스터해, 코드 품질은 높이면서 개발 시간은 대폭 단축해 보자. 빠르게 변화하는 기술 환경에서 AI와 함께 당신의 개발 능력을 한 단계 높여보자. 생산성 200% 향상은 시작일 뿐이다. AI 개발 도구는 요구사항 정의부터 계획 수립, 설계, 코딩, 디버깅, 테스트, 문서화까지 프로그래밍의 모든 단계에 실용적인 조언을 준다. 이 책은 챗GPT와 클로드 같은 LLM부터 깃허브 코파일럿, 아마존 Q 디벨로퍼 같은 코드 특화 AI에 이르기까지 다양한 도구를 사용하는 방법을 소개한다. 초보자부터 경험 많은 프로그래머까지 AI와 함께 개발 생산성을 높여보자.
CHAPTER 1 개발자에게 열린 새로운 세상
- 1.1 진화와 혁신
- 1.2 생성형 AI
- 1.3 활용 사례
- 1.4 한계점
- 1.5 개발자의 새로운 접근 방식
- 1.6 결론
CHAPTER 2 AI 어시스턴트의 작동 원리
- 2.1 주요 기능
- 2.2 지능형 코드 완성과의 비교
- 2.3 컴파일러와의 비교
- 2.4 역량 수준
- 2.5 생성형 AI 및 거대 언어 모델(LLM)
- 2.6 LLM 성능 평가
- 2.7 오픈소스 LLM
- 2.8 AI 어시스턴트 프로그래밍 도구 평가
- 2.9 결론
CHAPTER 3 프롬프트 엔지니어링
- 3.1 예술과 과학
- 3.2 도전 과제
- 3.3 프롬프트
- 3.4 컨텍스트
- 3.5 지시
- 3.6 입력 데이터
- 3.7 출력 형식
- 3.8 모범 사례
- 3.9 환각 감소
- 3.10 보안 및 개인정보 보호
- 3.11 자율 AI 에이전트
- 3.12 결론
CHAPTER 4 깃허브 코파일럿
4.1 깃허브 코파일럿
4.2 시작하기
주석
[2024-10-17 Thu 15:47]
채팅
[2024-10-17 Thu 15:47]
VSCODE 전용 명령어들이 있다. 이건 이맥스에서 커버가 되나?!
- 코드 일부만 설명해줘 - 블록 설정 후 호출 #설명해줘
어
[2024-10-17 Thu 15:47]
4.3 코파일럿 파트너 프로그램
4.4 결론
CHAPTER 5 기타 AI 어시스턴트 프로그래밍 도구
_5.1 아마존 Q 디벨로퍼 _5.2 제미나이 코드 어시스트 _5.3 탭나인 _5.4 리플릿 _5.5 코드GPT _5.6 코디 _5.7 코드WP _5.8 워프 _5.9 비토 AI _5.10 커서 _5.11 코드 라마 _5.12 기타 오픈소스 모델 _5.13 결론
CHAPTER 6 챗GPT 및 기타 범용 LLM
_6.1 챗GPT _6.2 GPT 모델의 코드 생성 능력 _6.3 챗GPT 탐색하기 _6.4 웹 브라우징 _6.5 반복적인 작업 _6.6 크로스 브라우저 호환성 _6.7 배시 명령 _6.8 깃허브 액션 _6.9 GPTs _6.10 제미나이 _6.11 클로드 _6.12 결론
CHAPTER 7 기획
_7.1 브레인스토밍 _7.2 시장 조사 _7.3 경쟁 분석 _7.4 요구사항 작성 _7.5 프로젝트 관리 _7.6 결론
CHAPTER 8 코딩
_8.1 코드 리뷰 _8.2 판단 호출 _8.3 학습 _8.4 주석 _8.5 모듈식 프로그래밍 _8.6 프로젝트 시작하기 _8.7 자동 완성 _8.8 리팩터링 _8.9 함수 _8.10 객체 지향 프로그래밍 _8.11 프레임워크 및 라이브러리 _8.12 데이터 _8.13 프런트엔드 개발 _8.14 API _8.15 결론
CHAPTER 9 디버깅, 테스트, 배포
_9.1 디버깅 _9.2 문서 _9.3 코드 리뷰 _9.4 배포 _9.5 결론
CHAPTER 10 AI 시대의 개발자를 위한 팁
_10.1 AI가 바꾼 프로그래밍 방식 _10.2 AI 어시스턴트의 이점 _10.3 AI 어시스턴트의 유의점 _10.4 프롬프트 엔지니어링의 특성 _10.5 프로그래밍 이상의 작업 _10.6 프로그래머의 역할 _10.7 결론
APPENDIX A 클로드 3.5
국문판에 추가 된 내용
A.1 클로드 아티팩트
A.2 클로드 프로젝트
자료
"ttaulli/AI-Assisted-Programming-Book" Taulli, Tom 2024
(Taulli [2024] 2024)
[AI어시스턴트 프로그래밍(AI-Assisted Programming)]의 코드 저장소 입니다
(lee- monster [2024] 2024)
AI 시대의 프로그래머 추가 자료
『AI 시대의 프로그래머』(한빛미디어, 2024)에 언급된 프로그래밍 관련 용어나 링크 등의 부가 설명을 모아둔 문서입니다. 책에는 언급되지 않은 내용이지만 이해를 돕기 위해 작성했습니다. 도서를 읽다가 어려운 용어나 궁금한 내용이 있으면 이 문서를 참고하시기 바랍니다.
Ctrl(또는 Cmd) + F를 눌러 검색하면 빠르게 원하는 내용을 찾을 수 있습니다.
AI 도구
- v0 by Vercel
- Uizard
- 깃허브 코파일럿(GitHub Copilot)
- 비토AI(Bito AI)
- 아마존 Q 디벨로퍼(Amazon Q Developer)
- 제미나이(Gemini)
- 챗GPT(ChatGPT)
- 커서(Cursor)
- 클로드(Claude)
- 코디(Cody)
- 코드WP(CodeWP)
- 탭나인(Tabnine)
- 워프(Warp)
프로그래밍 관련 용어
diff
diff는 파일이나 디렉터리의 차이점을 비교하는 명령어입니다. 두 개의 파일이나 디렉터리를 비교하여 차이점을 출력하며, 변경된 부분을 쉽게 확인할 수 있습니다. diff 명령어는 리눅스나 유닉스 운영체제에서 주로 사용되며, 파일이나 디렉터리의 변경 내용을 확인할 때 유용합니다.
n그램(n-gram)
n그램은 자연어 처리에서 연속된 n개의 단어를 의미합니다. n이 1일 때는 유니그램(unigram), n이 2일 때는 바이그램(bigram), n이 3일 때는 트라이그램(trigram)으로 부르며, n이 4 이상일 때는 일반적으로 n그램(n-gram)이라고 부릅니다. 문장이나 문서를 n개의 단위로 나누어 단어의 순서를 파악하는 데 사용되며, 이를 통해 문장이나 문서의 특징을 추출할 수 있습니다.
PEP 8
PEP 8은 파이썬 코드를 작성할 때의 스타일 가이드입니다. 파이썬 커뮤니티에서 코드의 가독성을 높이기 위해 만들어졌으며, 파이썬 코드를 작성할 때 지켜야 하는 규칙을 제시합니다. 들여쓰기, 줄 길이, 띄어쓰기, 명명 규칙 등 다양한 사항에 대한 규칙을 포함하고 있어, 파이썬 코드를 작성할 때 참고하면 좋습니다.
객체지향 프로그래밍(Object-Oriented Programming, OOP)
객체지향 프로그래밍은 프로그램을 객체들의 모임으로 바라보고, 객체들 간의 상호작용으로 프로그램을 구현하는 프로그래밍 패러다임입니다. 객체를 정의하고, 객체 간의 관계를 정의하며, 객체들 간의 상호작용을 통해 프로그램을 구현합니다. 코드의 재사용성이 높고 유지보수가 쉽다는 장점이 있으며, 객체들 간의 관계를 명확하게 표현할 수 있습니다.
기울기 소실(gradient vanishing)
기울기 소실은 인공 신경망에서 발생하는 문제로, 역전파 과정에서 입력층 방향으로 기울기가 점차 작아지는 현상을 의미합니다. 주로 심층 신경망에서 발생하며, 역전파 과정에서 출력층 방향으로 기울기가 전파되지 않아 가중치가 업데이트되지 않는 문제를 일으킵니다. 이 문제를 해결하기 위해 가중치 초기화, 활성화 함수 변경, 배치 정규화, 잔차 연결 등의 방법을 사용할 수 있습니다.
기울기 폭주^gradient exploding^
기울기 폭주는 인공 신경망에서 발생하는 문제로, 역전파 과정에서 입력층 방향으로 기울기가 점차 커지는 현상을 의미합니다. 주로 심층 신경망에서 발생하며, 역전파 과정에서 출력층 방향으로 기울기가 지수적으로 증가하여 가중치가 업데이트되지 않는 문제를 일으킵니다. 이 문제를 해결하기 위해 가중치 클리핑, 가중치 초기화, 활성화 함수 변경, 드롭아웃 등의 방법을 사용할 수 있습니다.
비주얼 스튜디오 코드(Visual Studio Code)
비주얼 스튜디오 코드는 마이크로소프트에서 개발한 소스 코드 편집기입니다. 오픈 소스이며, 다양한 프로그래밍 언어를 지원하고, 플러그인을 통해 여러 기능을 추가할 수 있습니다. 가볍지만 강력한 기능을 제공하며, 여러 플랫폼에서 사용할 수 있어 개발자들에게 널리 사용됩니다.
스크립팅 언어
스크립팅 언어는 인터프리터 방식으로 동작하는 언어로, 코드를 한 줄씩 실행하는 방식으로 동작합니다. 컴파일 과정이 없이 코드를 바로 실행할 수 있으며, 결과를 즉시 확인할 수 있습니다. 주로 작은 프로그램이나 스크립트를 작성할 때 사용되며, 코드를 빠르게 작성하고 실행할 수 있습니다.
스파게티 코드(Spaghetti Code)
스파게티 코드는 읽기 어려운 코드를 의미하며, 코드가 복잡하고 얽힌 구조를 가지고 있어서 스파게티와 비슷하다는 의미로 부르는 용어입니다. 코드의 가독성이 떨어지고 유지보수가 어려워지는 문제를 일으킵니다. 스파게티 코드는 코드의 가독성을 높이고 유지보수를 쉽게 하기 위해 리팩토링을 통해 개선할 수 있습니다.
자연어 처리(Natural Language Processing, NLP)
자연어 처리는 인간이 사용하는 언어를 컴퓨터가 처리할 수 있도록 하는 기술로, 텍스트를 이해하고 생성하는 기술을 의미합니다. 텍스트를 분석하고 처리하여 정보를 추출하거나 생성하는 기술로, 기계 번역, 텍스트 분류, 감성 분석 등 다양한 분야에서 활용됩니다.
주피터 노트북(Jupyter Notebook)
주피터 노트북은 웹 브라우저에서 코드를 작성하고 실행할 수 있는 오픈 소스 웹 애플리케이션입니다. 코드와 텍스트, 그래프, 이미지 등을 하나의 문서로 통합하여 보여주므로 데이터 분석이나 머신러닝 프로젝트를 할 때 유용하게 사용됩니다. 주피터 노트북 서버와 주피터 노트북 애플리케이션으로 구성되어 있으며, 서버를 실행하면 웹 브라우저에서 사용할 수 있습니다.
콘텐츠 관리 시스템(Content Management System, CMS)
콘텐츠 관리 시스템은 웹사이트의 콘텐츠를 관리하는 시스템으로, 웹사이트의 콘텐츠를 쉽게 작성하고 수정할 수 있도록 도와줍니다. 사용자가 프로그래밍 지식 없이도 웹사이트의 내용을 관리할 수 있게 해주는 도구입니다.
테스트 주도 개발(Test-Driven Development, TDD)
테스트 주도 개발은 테스트를 먼저 작성하고, 테스트를 통과하는 코드를 작성하는 개발 방법론입니다. 테스트 케이스를 먼저 작성하고, 이를 통과하는 코드를 작성하며, 테스트 케이스를 통과하지 않으면 코드를 수정하여 통과하도록 합니다. 코드의 품질을 높이고 버그를 줄이는 효과가 있으며, 코드를 안정적으로 유지할 수 있습니다.
특징 학습(feature learning)
특징 학습은 기계 학습에서 입력 데이터의 특징을 학습하는 과정을 의미합니다. 입력 데이터의 특징을 추출하고, 이를 기반으로 모델을 학습하여 입력 데이터의 패턴을 파악하는 과정입니다. 이를 통해 모델은 데이터의 중요한 특징을 자동으로 학습하고 이를 바탕으로 예측이나 분류 작업을 수행할 수 있습니다.
풀 리퀘스트(Pull Request)
풀 리퀘스트는 오픈 소스 프로젝트에서 사용되는 용어로, 다른 사람의 저장소에 기여한 내용을 병합해 달라고 요청하는 것을 의미합니다. 오픈 소스 프로젝트에 기여하고 싶을 때 풀 리퀘스트를 보내면 됩니다. 프로젝트 관리자가 풀 리퀘스트를 검토하고, 코드를 병합할지 여부를 결정합니다.
현지화(localization)
현지화는 소프트웨어나 웹사이트를 특정 지역이나 언어에 맞게 수정하는 작업을 의미합니다. 언어 번역뿐만 아니라 날짜 형식, 통화, 문화적 차이 등을 고려하여 소프트웨어나 웹사이트를 해당 지역의 사용자들이 쉽게 사용할 수 있도록 조정하는 과정입니다.
Related-Notes
References
톰 타울리. 2024. AI 시대의 프로그래머 - 페어 프로그래밍. https://www.yes24.com/Product/Goods/130736603.
monster, lee-. (2024) 2024. “Lee-Monster/AI-Assisted-Programming.” https://github.com/lee-monster/AI-Assisted-Programming.
Taulli, Tom. (2024) 2024. “Ttaulli/AI-Assisted-Programming-Book.” https://github.com/ttaulli/AI-Assisted-Programming-Book.