첫 강의는 프로그래밍 논리/수학 단계로 2차시까지 진행되었으며 1차시는 동영상, 2차시는 PDF 파일로 이루어져 있었다.
강의가 끝나고 나서 알았지만 2차시 PDF 내용을 1차시 동영상에서 설명해 주신다.
PDF 파일의 첫 페이지에 당신이... 라는 항목과 함께
Problem Soving 문제들 봤는데 어떻게 풀어야할지 감이 안온다.
프로그램 처음부터 짜려면 막막하다. 등의 내용이 있었는데 너무 공감이 되어서 뒷 내용을 더 집중해서 볼 수 있었다.
프로그래밍의 어려운 점이라고 하면 당연히 사용하는 프로그래밍 언어의 문법과 라이브러리 사용도 있겠지만 이것들을 사용해서 논리적으로 코드를 짜는 것 또한 어려울 것이다,
능숙해지기 위해 많은 훈련과 노력이 필요하지만 그것과 비례로 실력이 느는 경향이 있다고 한다.
새롭게 알게 된 내용은 논리(Logic)에도 Hard와 Soft가 있다는 것이었다.
일반적으로 우리가 문제를 풀기위해 사용하는 logic은 Soft Logic 인데 Soft Logic은 직관과 유사하다고 한다,
직관은 논리적은 느낌만을 주는 것이고 강한 착각과 정확하지 않은 단점이 있지만 익숙한 상황이 닥쳤을 때 빠르게 판단할 수 있어 사람들이 습관적으로 주로 사용한다고 한다.
프로그래밍에서 필요한 Logic은 Hard Logic 쪽인데 이유는 프로그래밍에서 사용되는 언어와 수많은 알고리즘들이 논리학으로부터 비롯되었고 이것을 이해하기 위해서 Hard Logic을 사용하는 것이라고 한다.
알고리즘을 이해하기 힘들어하는 이유도 우리에게 익숙한 Soft Logic을 이용해 알고리즘을 이해하려고 하기 때문이고 명제의 증명을 보지 않거나 증명을 보아도 Soft Logic으로 하기 때문이라고 한다.
p,q p→q 등 과거 중,고등학교 교육 과정에서 명제를 본 적이 있을 것이다.
명제식을 p와 q를 사용하여 만든다고 했을 때
p→q 에서
p가 거짓일 때 q의 참,거짓과 상관없이 해당 명제식은 항상 참이 된다.
p가 참이고 q가 거짓일 때만 명제식이 거짓이 된다.
p가 참인지 거짓인지 알 수 없을 때는 대우 명제를 이용하여 ~q→~p 를 이용하면 된다.
위처럼 명제의 참과 거짓을 판단하고 이를 증명하기 위해서 몇 가지의 문제들이 주어졌고 이를 푸는 것 또한 익숙하지 않아서인지 쉽지 않았다.
증명을 할 때 중요한 것은 정확한 명제식으로 표현할 수 있는 것이어야 한다고 한다. 보통 정확한 명제식까지 쓰지는 않지만 근본적으로는 바꿀 수 있는 것이여야 한다.
예를 들어,
int sum(int x)
{
if (x <= 0) return 0;
return x + sum(x-1);
}
의 코드가 있다고 했을 때 증명을 위해서 수학적 귀납법을 사용할 수 있는데
수학적 귀납법의 기본형은 P(1)이 참일 때, P(n) → P(n+1)이 참이면 P(n)은 모든 자연수 n에 대해서 참이라는 것이다.
위의 예시에도 수학적 귀납법을 적용했을 때 증명 가능한 명제는 "sum(x)가 return 하는 값은 1+2+...+x 값과 항상 같다" 이다.
P(x) → P(x+1) 이 참이다를 증명하기 한다는 것은 "sum(x-1)이 1+2+...+x 값을 return 했을 때 → sum(x)는 1+2+...+x 값을 return한다." 를 증명하면 된다.
위의 식에서 sum(x)는 x+sum(x-1)의 값을 return 하기 때문에 결국 return 값은 x+1+2+...+(x-1) 이 된다.
즉, sum(x-1)이 1+2+...+x-1 값을 return 했을 때
sum(x)가 1+2+...+x 값을 return 했으므로 명제는 참이 된다.
외에도 몇 가지 증명 연습 문제들이 주어져 있었는데 이건 따로 A4용지에 써보며 증명 연습을 해보았다.
생각해보고 나중에 답안을 보면 그렇게 어려운 내용은 아니지만 이런 사고 발상 자체를 평소에 가지고 살지 않아서인지, 오랜만에 안 쓰던 이공계 파트 뇌를 쓰려니 힘든건지 모르겠다...
'CS 지식 > Computational Thinking' 카테고리의 다른 글
| SWEA - 0. SWEA 입문 (0) | 2023.07.03 |
|---|