요리와 프로그래밍
훌륭한 요리사가 되기 위해서 필요한 자질이 무엇일까요?
훌륭한 칼솜씨? 훌륭한 재료를 고르는 안목? 눈대중으로도 기가 막히게 계량할 수 있는 능력?
물론 이 모든게 100점이면 좋겠죠.
주어진 여러 재료를 조합했을 때 어떤 맛이 날 지 그릴 수 있는 능력이 있다면,
위의 능력들은 70~80점만 되어도 훌륭한 요리사가 될 수 있을 것입니다.
프로그래밍도 마찬가지입니다.
좋은 프로그램을 만들기 위해서는 좋은 재료와 좋은 설계가 필요합니다.
하지만 좋은 재료를 가지고 어떻게 조합할 줄 모르면 제대로 작동하지 않고, 오류가 발생하는 프로그램이 탄생할 것입니다.
컴퓨터 공학 전공과목들과 프로그래밍 입문 서적들은 좋은 재료들을 알려주지만, 어떻게 해야 좋은 조합을 할 수 있는지 알려주지 않습니다.
각각의 세부 내용을 배우기 전에 큰 그림을 한 번 그리면 도움이 될겁니다.
안 바쁘면 이거 다 들으세요
재생 목록 길이 7시간 54분 57초
https://www.youtube.com/watch?v=tpIctyqH29Q&list=PL8dPuuaLjXtNlUrzyH5r6jN9ulIgZBpdo
입문 전에 알면 좋은 것들
아래 강의 다 합하면 72분
컴퓨터 공학과, 컴퓨터 과학과, 소프트웨어학과를 선택하기 전이라면 아래 강의 중 1 ~ 4 들으세요.
프로그래밍 입문 전, 예를들어 국비학원, 부트캠프, 독학 하기 전이거나 이미 이런 과정에 있다면 아래 강의 1 ~ 5 다 들으세요.
1. 이진수를 이용해 데이터를 저장하고 나타내는 방법. 데이터가 결국에 문자인 이유 (한국어 자막 있음)
https://www.youtube.com/watch?si=wuZ4rbkVMb-VvRBq&v=1GSjbWt0c9M&feature=youtu.be
2. 컴퓨터가 실제로 작동하는 방법(폰 노이만 구조)
https://www.youtube.com/watch?v=GVX-m3RF-K0
10:50 ~ 26:54
3. 프로그래밍 언어 : 컴퓨터 내부를 (자세히 혹은 전혀)신경쓰지 않고 컴퓨터에게 일을 시키는 방법 (한국어 자막 있음)
https://www.youtube.com/watch?si=kiNAvpEhX85z0OyA&v=RU1u-js7db8&feature=youtu.be
4. 운영체제가 필요한 이유와 운영체제의 역사 (한국어 자막 있음)
https://www.youtube.com/watch?si=iuWIVX8-7pXPzhUt&v=26QPDBe-NB8&feature=youtu.be
5. 중앙 처리에서 개인용 컴퓨터로 나아가다가 웹 서버로 회귀하게 된 이유. 웹 프로그래밍이란
https://www.youtube.com/watch?si=vAsU6Z44MKn01tEL&v=rhJJlCrjqDo&feature=youtu.be
컴퓨터 과학의 핵심 : 추상화
컴퓨터 과학에서는 추상화가 중요합니다.
추상화란 무엇인가요?
추상화란 현실의 구체적인 것 중에 필요 없는 부분을 없애고, 핵심적인 것만 남기는 것을 말합니다.
간단한 수학적인 예를 들어보죠.
우리가 처음 더하기를 배울 때 '사과 한 개에 사과 두 개가 더해지면 몇 개인가?' 라는 문제를 풀게 됩니다.
이 때 사과라는 것은 중요하지 않고 '1 + 2 = 3' 이라는 것이 중요합니다.
이 때 더하는 대상이 사과가 아니라, 돈, 사람이어도 똑같이 작동합니다.
더하기를 곱셈으로 확장시키면
2 + 2 + 2 = 6 => 2 × 3 = 6
곱셈을 지수로 확장시키면
2 × 2 × 2 = 8 => 2³ = 8
이 됩니다.
위의 강의들을 들었다면 프로그래밍이 발전하면서 기계에 가까운 부분(저수준)을 추상화 시켜 신경쓰지 않게 해준다는 것을 알 수 있습니다.
저수준 뿐만 아니라 동일한 수준 혹은 더 높은 수준의 다른 부분과 데이터를 주고 받을 때에도 그 내부가 어떻게 작동하는지 알 필요가 없습니다.
하나의 프로그램 내부에서도 마찬가지로 프로그램에서 사용되는 함수, 라이브러리 내부가 어떻게 작동하는지 알 필요 없이 어떤 데이터를 입력하면 어떤 데이터가 출력된다는 것만 알면 됩니다.
이게 컴퓨터 과학의 추상화입니다.
컴퓨터 과학에서 추상화가 중요한 이유는 역할과 책임을 나눠서 자신이 맡은 부분에 집중할 수 있기 때문입니다.
앞으로 배우게 될 절차지향 프로그래밍의 함수, 객체지향 프로그래밍의 객체, 데이터베이스의 정규화 등 컴퓨터 과학 분야에서 추상화는 핵심적인 개념입니다.
컴퓨터를 사용하는 근본적인 이유 : 문제해결
지금까지 요구 분석과 설계를 다뤘습니다.
추상적이지 않고 구체적인 예를 들기 위해
요구 : 컴퓨터라는 도구를 효율적으로 다루는 방법
설계 : 추상화 기법을 활용해 역할과 책임을 분할
을 다뤘죠.
그렇다면 구현과 테스트는 무엇일까요?
이것이 보통 사람들이 생각하는 프로그래밍입니다.
구현을 잘하기 위해서는 요구 사항 분석과 설계가 잘 되어 있어야 합니다.
똑같은 요구 사항이어도 요구 사항 분석과 설계를 잘 못하면 구현의 난이도가 높아지고,
요구 사항 분석과 설계를 잘하면 구현의 난이도가 낮아집니다.
프로그래밍 언어를 잘 몰라도 괜찮습니다.
잘못된 문법은 IDE가 오류를 나타내주고, 실행 시 오류가 발생해 수정할 수 있으니까요.
코드가 보기 싫어도 괜찮습니다.
다들 처음엔 어떻게든 프로그램이 돌아가도록 코드를 작성하고, 코드를 보기 좋게 변경하는 작업하는 과정을 거칩니다.
여러분들이 보는 책이나 오픈 소스에서 보는 코드는 코드를 보기 좋게 변경하는 작업을 거친 결과물을 보기 때문에 아름다워 보이는 것이지 처음부터 아름답게 작성되지 않았습니다.
이 글을 쓰게 된 이유가 이겁니다. 컴퓨터 과학, 프로그래밍을 처음 배울 때 보통 프로그래밍 언어부터 배우기 시작합니다.
오로지 코딩만이 프로그래밍이라고 생각하고, 프로그래밍 언어의 문법 하나하나를 다 알아야 한다고 생각하죠.
하지만 프로그래밍에서 코딩은 일부분일 뿐입니다.
코딩을 잘 하려면 사전 작업이 잘 되어있어야 하고, 코딩하는 과정 또한 프로그래밍 언어를 사용해 요구 분석과 설계 과정을 반복하는 것일 뿐입니다.
'프로그래밍' 카테고리의 다른 글
프로그래밍을 배우기 전에 알아야 할 최소한의 지식 (0) | 2023.12.31 |
---|---|
멍청하게도 내가 객체지향 프로그래밍을 하고 있단 것을 몰랐다 (0) | 2023.12.09 |
프로그래머에게 필요한 수학과 문제 해결 능력 (0) | 2022.12.25 |
C언어를 꼭 배워야 하는가 (0) | 2022.07.09 |
프로그래머는 정말 실력으로 먹고 사는가 (0) | 2022.07.04 |