1. C언어를 공부해야하는 이유
전통적인 컴퓨터공학의 커리큘럼들이 C언어로 되어있다.
바꿔 말하면 C언어를 모르면 후속과목들을 공부할때 큰 어려움을 겪을 수 있따.
두번째는 뛰어난 프로그래머가 되기위해서는 C로 시작하는게 좋다
C를 공부하다보면 자연스럽게 컴퓨터의 작동 원리를 내 안에 체화 시킬 수있기 때문에 점점 더 공부하는 속도가 빨라지고
뛰어난 프로그래머가 되기에도 더 유리하다는 이유 때문입니다.
점점 더 빨라지고 복잡해지는 현대 사회를 살아가야한 우리들이 뛰어난 프로그래머로서의 삶을 꿈꾸는 것은 당연하다
인류 문명을 이끌어가는 다양한 미래기술들의 중심에 소프트웨어가 있다는 것은 우리모두가 알기 때문이다
우리의 마음속에는 상반된 두가지감정이 있을거이다.
나도 성공할 수 있을까? 다른사람의 성공을 위한 땔감역할만 하다가 죽진 않을까?
우리의 능력을 끝없이 발전시키는 것 밖에는 답이 없다.
2. 어떻게 공부하느냐는 생각보다 중요하다
우리는 우리가 자신의 생각보다 더큰 능력을 가지고 있다는 사실을 알아야합니다.
마라톤 선수이자 물리학자인 알렉스 허친슨
" 선수가 자신의 생각보다 더 큰 능력을 가지고 있다는 사실을 가르쳐 주어야 합니다"
단순히 선수개개인의 능력을 떠나서, 그 선수를 가르치고 훈련시키는 방법에도 엄청난 발전이 있었기때문에 선수들은 결국 좋은 성과를 내었다는 것입니다.
소프트 웨어 기술은 정말 수도없이 빠르게 발전해나가고 있다. 마치 하나의 거대한 생명체처럼
이를 학습하려면 단순히 블록 조립하듯이 기술을 배우는것이 아니라 복잡한 정글을 해쳐나갈만한 생명을 가진 두뇌가 필요한 것이다.
처음부터 다양한 측면을 바라볼 수 있어야, 이 모든 것이 유기적으로 얽혀서 발전해 나가게 되고
결과적으로 현실을 더 정확하게 파악하고 더욱 창의적이며 유연한 사고방식을 갖출 수 있게됩니다.
핵심이 되는 지식을 공부해 나가는 과정에서 주변에 중요한 개념들을 끊임 없이 배치하여 지식의 소용돌이를 만들어내는 것이 바로 나선형 학습법입니다입니다.
C언어로 만들어진 프로그램을 분석하기
인체의 몸 구조는 굉장히 복잡하다.
인간의 몸을 이루고 있는 구성요소가 굉장히 다양하기 때문이다
하지만 프로그래머의 관점에서 프로그램을 분석하는일은 비교적 단순하다
메모리와 CPU가 협력해서 기능을 수행해 나간다는 작동원리는 비슷하기 때문이다
CPU의 관점에서는 메모리로부터 어떤 데이터를 입력받고 , 입력받은 데이터를 활용해서 어떠한 기능을 수행한 다음에 그 결과로써 얻어진 데이터를 다시 메모리에게 돌려주는 것이다.
그래서 특히 C언어를 이루고 있는 기본적인 구성요소는 함수라는 것을 알아야한다
함수란 어떠한 데이터를 입력으로 받아들이고 결과적으로 어떤 데이터를 출력해내는 존재를 의미한다
우리가 생각하는 근사하고 복잡한 프로그램도 알고보면 작은 함수들이 서로 입력과 출력을 주고받으면서 서로 복잡해보이고 커 보이는 기능들을 함께 수행해 나간다
우리가 어떤 프로그램을 만나거나 어떤 기능을 하는 프로그램을 설계할때,이렇게 작은 함수들이 입력과 출력을 어떻게 주고 받는지 이 구조를 얼마나 잘 파악할 수 있는가? 또는 잘 만들어낼 수 있는가?
이런걸 잘하는게 더 중요한 능력이라고 말할 수 있습니다.
가장 기본적인 코드의 구조를 뜯어보자
#include <stdio.h> //이렇게 # 붙은 것들을 전처리기(PreProcessor Instruction)이라고 부른다
//컴파일을 시작하기 전에 미리 처리후 코드를 확인
//우리가 작성한 코드는 문서다, 컴파일러는 이 문서를 분석하고 그에 맞는 프로그램을 만들어준다.
//우리의 운영체제는 시작할때 main이라는 이름을 가장 먼저 찾는다. 그래서 main이라는 이름은 굉장히 중요하다
int main (void) // main 함수 정의 시작
{ // 영역 scope의 시작
int a; //변수의 선언
int b;
a = 1; //변수에 값 대입
b = a+2; // 연산결과를 다른 변수에 대입
printf("Result is %i" ,b); // printf 함수를 호출
return 0; // 결과 값 반환
} // 영역의 끝
위처럼 main이라는 함수안에 앞으로 수많은 함수들이 들어가 있을 것이다.
결국 C언어는 함수를 기반으로 절차지향적으로 움직이는 언어라는 것을 알 수 있다.