차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

컴퓨터_프로그래밍 [2015/05/22 06:26] (현재)
raychani 만듦
줄 1: 줄 1:
 +====== 컴퓨터 프로그래밍 ======
 +**컴퓨터 프로그래밍**은 어떤 알고리듬을 컴퓨터 언어로 기술하는 것이다. 예를 들어 1+1을 컴퓨터 언어 C로 기술하면 "a = 1 + 1;"이 된다.
 +
 +{{tag> it}}
 +
 +===== 공부하려는 사람들에게 =====
 +==== 필요한 재능 ====
 +컴퓨터 언어도 결국 언어다. 단지 사람과 대화하기 위한 것이 아니라 컴퓨터와 대화하기 위한 것이다. 따라서 컴퓨터는 수학에 기반을 두고 태어난 논리적인 기계이고,​ 따라서 컴퓨터 언어도 매우 논리적인 언어이다. 개인적으로는 논리를 잘 공부한 철학 전공자들이 의외로 잘 할 수 있을 것 같다. 그리고 컴퓨터 언어로 글을 쓰는 것이다. 언어 관련(국문학과,​ 영문학과 등) 전공자들도 의외의 재능을 보일 것 같다. 수학 전공자들은 말할 필요도 없다. 물론 타 전공자들 아무나 잘 할 것 같다는 것이 아니다. 자기 분야를 잘 이해하는 사람을 말하는 것이다.
 +
 +==== 첫 언어 선택 ====
 +
 +초급 과정으로 먼저 컴퓨터 언어를 배운다. 보통 대학교에서 배우는 것은 C언어, 미국에서는 파이선(Python)으로 시작하는 경우도 많은 것 같다. 학원에서는 Java로 시작하기도 한다. ​
 +
 +C언어의 장점은 가장 기본이 되는 언어라는 것이다. C를 잘 이해하면 다른 언어를 이해하는데 굉장히 큰 도움이 된다. 예를 들어 자바는 메모리 관리를 쓰레기 수집기(garbage collector)가 다 해 주어 메모리 해제를 크게 신경쓰지 않는다.때문에 자바로 공부하기 시작하면 C의 메모리 관리가 복잡하게 느껴질 것이다. 파이선으로 공부를 시작하면 변수에 종류가 있다는 것이 어색할 수도 있다. 물론 C언어는 그 만큼 복잡하고 어려운 내용을 다 포함하고 있어, 이해하기 어렵다는 점이 큰 단점이다.
 +
 +컴퓨터공학 전공이라면 파이선으로 기본적인 감을 잡고, 이후 C언어로 넘어가는 것도 좋을 것이라 생각한다. 그러나 파이선, 자바, C를 전혀 다른 언어라고 받아들이는 경우가 많아서 이런 과정을 추천하기가 부담스럽다. 분명 파이선에서 공부한 내용이 C에서 버려지는 것이 아닌데 전혀 새로운 학문으로 받아들이는 경우가 대부분이다. 전자전기컴퓨터 계열이면 다른 과목도 많아 C언어 하나 하기도 벅찰 것이다.
 +
 +==== 문법과 의미 ====
 +1 더하기 1, 1에 1 추가, 1과 1의 합 등 다양한 말로 표현하지만 수학의 문법대로 기술하면 1+1이다. 다른 표현방법이 사실상 존재하지 않는다. '​+'​라는 기호를 암기하고,​ 이해하지 못하면 수학을 전혀 할 수 없는 것 처럼, 컴퓨터도 언어도 기본 문법은 암기가 필요하다.
 +
 +컴퓨터 언어의 가장 기초는 문법이다. 변수를 선언하는 것은 어떻게 기술하는가?​ 수식은 어떻게 기술하는가?​ 등과 같은 규칙을 매우 엄밀하게 정의한다. 컴퓨터 언어에 대한 어려움은 여기서 시작되는 것 같다. 사람의 언어와 다르게 일말의 오류와 모호함을 허용하지 않는다. 또한 외워야 하는 부분을 어설프게 이해하려다가 막히기도 한다.
 +
 +문법만 알아서는 좋은 글을 쓰기 어렵다. 글을 쓰기 위해서는 의미를 문법에 맞추어야 한다. "I ate a car."​가 문법에 맞는 문장일 수는 있지만 의미를 파악하기 어려운 문장이다. 이 문장 뒤에 "I went to the food."​가 나온다면 이상한 문장이 연결되어 이상한 문단, 글이 된다. 컴퓨터 프로그래밍도 마찬가지다. 언어를 잘 이해하고,​ 의미 있는 문장을 연결해야 좋은 프로그램이 된다. 그러나 문법에서 한번 막히고, 의미에서 한번 더 막히면서 많은 사람들이 포기하는 것 같다.
 +
 +==== 기본 목표 ====
 +대학 한 학기 과정에서 배우는 컴퓨터 언어의 목표는 리스트 구조이다. 그만큼 중요하고 기본적인 지식을 모두 활용할 수 있어야 리스트를 만들 수 있다. 기본적인 변수 선언, 연산으로 시작해서 함수, 포인터, 구조체, 객체에 대한 지식까지 필요하다. 리스트는 굉장히 중요한 개념이기 때문에 이후 객체지향,​ 멀티스레드 등에서도 계속 등장한다. 정렬도 중요한 목표가 될 수 있다. 리스트가 컴퓨터 언어의 모든 개념을 총 동원하는 것이라면 정렬은 알고리즘의 기초이다. SW 면접에서도 정렬 문제와 함께 자주 등장한다.