프로그래밍 학습을 위한 개괄적인 안내
프로그래밍을 시작하려는 분들에게 필요한 정보를 제공하기 위해 작성되었습니다. 이 글은 프로그래밍 학습의 방향성과 기본 개념에 대한 안내입니다.
응용 프로그래밍 분야
프로그래밍은 응용 분야로 나눌 수 있습니다.
- 응용분야 프로그래밍
- 시스템분야 프로그래밍
- 임베드분야 프로그래밍 (하드웨어)
- 연구분야 프로그래밍
- 데이터과학 및 기계학습 분야 프로그래밍
프로그래밍을 시작하는 많은 사람들은 응용 프로그램을 만들기 위해 학습합니다. 이는 컴퓨터용, 모바일용, 웹 브라우저용 등 다양한 응용 프로그램을 포함합니다.
AI 프로그래밍
AI 프로그래밍이라는 용어는 다양한 영역을 포괄합니다. 연구 분야는 AI를 학습하고 발전시키는 데 관련되며, 취업을 위해서는 관련 전공 학력이 필요합니다. 반면 응용프로그래밍 분야에서는 AI 모델을 활용하여 간단한 앱을 개발하는 것이 가능합니다.
프로그래밍 학습에 가장 중요한 두 가지 분류
프로그래밍을 학습하는 데 가장 중요한 두 가지는 언어와 프레임워크입니다.
- 언어(문법) & 라이브러리
- 프레임워크 & 플랫폼
언어를 공부한 후 프레임워크를 익히는 것이 효율적이지만, 반대로 혹은 동시에 공부하는 것도 가능합니다.
플랫폼 또는 프레임워크 종속의 언어
대부분의 언어는 특정 플랫폼이나 프레임워크를 위해 존재합니다. 예를 들어 Swift는 Apple 플랫폼을 위한 언어이며, Kotlin은 안드로이드 앱 개발을 위한 것입니다.
서버 개발은 언어 선택이 자유롭지만, 웹 벡엔드와 같은 분야에서도 특정 프레임워크에 종속되어있습니다.
언어 공부
언어 공부는 문법을 공부하는 것에 불과합니다. 이해할 수 있는 수준으로 언어를 공부했다고 실용적으로 활용할 수 있는 것은 아닙니다.
언어 공부는 인내심이 필요하며, 현실적으로는 반복 숙달을 통해 실력이 향상됩니다.
객체지향
C언어로 선행 학습하는 것을 권장하는 의견도 있지만, 객체지향 개념이 중요합니다. 객체지향은 프로그래밍 초보자에게 어려운 개념일 수 있으며, 언어 공부의 한 단계로서 넘어가기 전에 이해해야 하는 중요한 부분입니다.
언어 공부 단계에서 어려운 부분이 객체지향 개념인 경우, 프레임워크 학습 단계에서 실용적인 내용을 익히고 나면 더 쉽게 이해될 수 있습니다.
프레임워크와 플랫폼
언어 공부를 마쳤다면, 프레임워크로 나아가야합니다. 프레임워크는 해당 언어를 실제로 사용하여 목표를 이루기 위한 핵심입니다. 이를 통해 어떻게 앱이 만들어지는지 이해할 수 있게 되며, 더 흥미롭게 느껴지게 됩니다.
플랫폼과 프레임워크
플랫폼은 소프트웨어 개발에 필요한 모든 것을 포함한 환경입니다. iOS의 경우, Xcode와 시뮬레이터 같은 여러 프레임워크가 통합되어 있습니다. UIKit, SwiftUI, Foundation, ARKit 등이 이러한 프레임워크에 속합니다.
프로그래머는 이러한 프레임워크를 다루며 해당 플랫폼의 기술을 활용합니다. 이를 위해 플랫폼에서 제공하는 문서를 공부해야하며, 이 양은 상당히 방대합니다.
프레임워크 이해하기: 라이브러리와의 차이
프레임워크를 이해하는 가장 좋은 방법은 먼저 라이브러리를 사용해보는 것입니다. 이 둘은 핵심을 제외하면 모호한 정도로 유사합니다. 여러분들도 스스로의 프레임워크를 만들어 배포할 수 있으며, 이는 재사용 가능합니다.
언어 공부 단계에서 기본 라이브러리와 함께하는 예제들을 만나게 됩니다. 이러한 소개는 언어 책 중반 이후에 나오곤 합니다.
제어 역전과 프레임워크
프레임워크에서 가장 중요한 개념은 '제어 역전'입니다. 프레임워크는 프로그래머가 정해진 규칙을 따라야 하며, 이 규칙에 따르지 않으면 해당 프레임워크를 이용한 애플리케이션을 만들 수 없습니다. 이는 언어와는 다른 측면입니다.
언어와 프레임워크의 연결
언어를 안다고 해서 프레임워크를 다룰 줄 안다는 것은 아닙니다. 새로운 분야로 전향할 때 새로운 프레임워크와 규칙, 패러다임 등을 배워야 합니다. 이를 통해 언어와 프레임워크 사이의 경계를 이해하고, 다음 단계로 나아갈 수 있습니다.
언어 학습과 프레임워크 활용
언어를 배울 때 문법 공부와 실제 사용을 통한 반복학습은 분명한 차이가 있습니다. 경계를 인식하고, 목적을 달성할 수 없는 지겨운 언어 문법 공부에서 잠시 쉬거나, 실용 예제를 통해 익히는 것도 중요합니다.
프로그래밍은 지속적인 학습과 새로운 기술 습득이 필요한 분야입니다. 언어 공부만으로는 충분하지 않으며, 프레임워크와 플랫폼을 활용하여 목표를 이루는 것이 진정한 프로그래밍의 시작입니다.
API와 개발자 인터페이스
API는 프레임워크나 라이브러리를 연결해주는 규칙과 도구입니다. 이를 통해 코드를 사용하거나 연결할 수 있습니다.
API의 역할
API는 코드 사이의 다리 역할을 하며, 내부 동작에 대해 자세히 알 필요 없이 해당 기능을 사용할 수 있도록 해줍니다.
프레임워크와 API의 공부량
프레임워크와 API에 대한 공부는 언어 문법 공부만큼 중요합니다. 공식 문서나 주석 등을 통해 이를 배워야 합니다.
프로그래머의 발전
프로그래밍에서 중요한 것은 문제 해결 능력과 API, 프레임워크의 숙련도입니다.
언어 공부와 CLI 개발툴
CLI 개발툴은 텍스트로 명령어를 입력하며 개발하는 도구입니다. 서버 개발이나 배포 과정에서 사용됩니다.
CLI 개발툴의 활용
CLI 개발툴을 사용하면 개발 과정이 간편해질 수 있습니다. 서버 개발자나 배포자에게 필요한 도구입니다.
언어 공부 뿐만 아니라 CLI 개발툴에 대한 이해도 필요한 경우가 있습니다. 특정 분야에서 CLI 개발툴을 사용하면 효과적일 수 있습니다.
웹 개발과 앱 개발의 다른 언어, 다른 관점
웹 개발과 앱 개발 사이에서는 프론트엔드와 백엔드, 클라이언트와 서버 사이에서 다양한 역할이 분명히 구분됩니다. 이것은 보통 사용자 경험과 프로그래밍 목적을 기준으로 나뉘어집니다.
웹 개발에서의 프론트엔드 프로그래밍
웹 개발에서 프론트엔드는 주로 UI와 관련되어 있습니다. 대부분의 작업은 HTML, CSS, JavaScript를 통해 이루어지며, 이는 주로 웹 브라우저에서 실행됩니다. 이는 사용자에게 정보를 표시하고 상호작용하는데 초점을 맞추고 있습니다.
하지만 JavaScript는 단순히 UI를 다루는 것 이상의 역할을 할 수 있습니다. 클라이언트 사이드에서 DB를 다루거나 웹 게임을 개발하는 등 다양한 작업이 가능합니다. 그러나 이런 분야에서의 시장이 제한적이며 정보와 자료도 부족합니다.
프론트엔드의 현실과 시장 요구
대부분의 프론트엔드 취업처에서는 단순한 UI 구현과 회원가입, 로그인과 같은 기능이 요구됩니다. 이는 서버 사이드에서 JavaScript 없이 UI를 렌더링하는 방식이 유행하고 있기 때문입니다. 많은 웹 페이지는 라이브러리를 활용해 UI를 조립하고, 동적 요소를 최소화하는 추세입니다.
실제로, 대부분의 웹페이지는 애플 홈페이지처럼 동적이고 화려한 요소를 갖추지 않습니다. 따라서 애니메이션과 같은 부드러운 요소를 구현하는 일은 드물고, 프로그래밍 능력 자체가 크게 강조되지 않는 현실이 있습니다.
앱 개발에서의 다양성
모바일 앱 개발은 프론트엔드와 백엔드, 클라이언트와 서버 사이에서 구분됩니다. 클라이언트 사이드는 UI뿐만 아니라 다양한 로직을 다룹니다. UI 개발만으로도 충분한 경우가 있지만, 저수준 그래픽 프로그래밍이나 로컬 DB 다루기, 게임 개발 등의 다양한 영역도 포함됩니다.
네이티브 vs. 크로스 플랫폼
앱 개발에서는 개발의 한계에 따라 네이티브와 크로스 플랫폼 개발의 선택이 중요합니다. 각각에는 장단점이 있으며, 각 플랫폼의 최신 기능을 활용하거나 최고의 성능을 끌어내는 데 적합한 언어와 기술이 있습니다.
서버 사이드의 이해도 또한 중요한데, 예를 들어 AI 그림 앱은 서버에서 생성한 데이터를 클라이언트 사이드로 전송하는 방식으로 구현될 수 있습니다. 하지만 AI 모델을 앱에 직접 탑재하는 것은 보안과 용량 등의 이슈로 좋은 선택이 아닐 수 있습니다.
목적을 정하고 적합한 기술을 선택하자
프로그래밍 분야는 다양하며, 목적에 맞는 기술을 선택하는 것이 중요합니다. 자신의 목표를 분명하게 하고, 그에 맞는 언어와 프레임워크를 선택하는 것이 개발 공부에 도움이 될 것입니다. 모바일 앱 출시, 취업, 자아실현 등 각기 다른 목표에 따라 다른 기술과 방향이 필요합니다.
목표가 모호한 경우에는 간단한 프로젝트부터 시작해서 자신이 흥미를 느끼는 부분을 찾아보는 것이 좋습니다. 즐거운 공부를 통해 흥미로운 분야를 찾아나가고, 목표를 정하는 것이 발전에 큰 도움이 될 것입니다.