Lecture 0
처음에는 계획에 없던 컴퓨터공학개론 수업인데 첫 강의만 보고 놀라서 수강하기로 했다.
Computer science란 코드만 작성하거나 하드웨어를 다루는 일들이 아닌 "문제를 해결하는 것이다."
문제를 푸는데에는 '해결하고자 하는 것'에 해당하는 input이 있고 '해결이 된 것'에 해당하는 output이 있으며 그 사이에 문제를 해결할 '무언가'가 존재한다. 이로써 컴퓨터공학이 무엇인지 확 와닿았다.
또 한 손으로 셀 수 있는 숫자가 5가 아닌 32이라는 방식을 설명할 때 신선했으며 이를 통해 이진법이 구동하는 방식을 아주 쉽게 이해할 수 있었다. 숫자를 변환하는 방식은 간단한 데 문자는 어떻게 하나?라는 질문에 문자를 변환하는 방식은 위와 같이 각 숫자를 문자에 할당하면 해결이 되었다. 이는 ASCII코드 방식을 보여준다.
같은 방식으로 각 숫자(10진법)에 해당하는 문자를 나열한 페이지 이다.
HI!라는 문자를 보내게 된다면 각각에 해당하는 숫자로 주고 받게 되는 것이며 또한 각 10진법으로 표현된 숫자들이 컴퓨터에게 표현되는 숫자(2진법)으로 변환이 되었을 때의 모습이 실제 송/수신할 경우의 데이터가 된다.
하지만 ASCII의 경우 8bits만 사용하기 때문에 키보드에 있는 특수문자나 위와 같은 특수문자들까지 커버하기에는 역부족이다. 이것이 Unicode가 나오게 된 배경이며 이를 통해 더욱 다양한 문자뿐만 아니라 Emoji에 대한 정보까지 입력할 수 있게 되었다.
예를 들어 위와같은 Emoji를 친구에게 보낸다고 한다면 친구의 폰이 받는 것은 128514(10진법)이며 실제로는 11111011000000010(2진법)인 것이다.
또한 해당하는 Emoji에는 색깔에 대한 정보도 필요한데 이는 RGB 조합으로 데이터를 저장하게 된다. 삼원색인 RGB로 모든 색깔을 대변할 수 있으며 각각 0~255에 해당하는 level로써 값을 지정하면 원하는 색을 얻게되는 방법이다. 여기서는 각각 색에 대한 level이 R:72, G:73, B:33일때 연노랑색이 출현하는 것을 볼 수 있다.
한 점에 대한 색을 지정할 수 있겠고 이 단위점들은 pixel이 되는 것이며 위의 Emoji를 확대했을 때 pixel의 존재에 대해 더 명확하게 인지할 수 있다.
다시 원점으로 돌아가서 Computer science는 문제를 해결하는 것이라고 하였고 문제를 해결하는 '무언가'는 Algorithm이 된다. 한가지 예시로 전화번호부에서 누군가를 찾아야 하는 문제가 있을 때 이를 해결할 방법인 3가지의 algorithm이 있다.
그렇게 할 때 1번의 방법은 전화번호부의 크기(size of problem)이 커질 수 록 해결하는 데 그만큼 더 시간이 걸릴 것이다. 2번의 방법도 1번보다는 2배 빠르지만(물론 놓칠 가능성이 있지만) 똑같이 시간이 더 들게 된다. 3번의 방법이 가장 효율적인 방법이라는 것을 알 수 있고 전화번호부의 크기가 아무리 커지더라도 그냥 냅다 절반찢어버리면 되기 때문에 선형적으로 시간이 더 걸리지 않는다.(log 함수처럼 증가한다)
위의 3번의 해결법(algorithm)을 pseudocode로 표현하였을 때 위와 같다.
*pseudocode is just express yourself(algorithm) succinctly and correctly
위에서 표현된 pseudocode 중 노란색으로 강조된 것들은 함수(function)이다. 어떠한 행동을 하도록 정의한 것들이다.
다음으로 강조된 것들은 조건문(condition)이며 해당하는 조건에 맞을 때 상황에 따라 동작하게 만드는 것들이다.
조건문 뒤에 있는 것들은 부울식 표현(Boolean expression)이며 True/False를 판가름하는 표현이 되겠다.
마지막으로는 루프(loop)이며 routine한 작업들을 계속적으로 진행하게 하도록 도와주는 역할이다.
이 외에도 variables, breaks, events 등 다양한 역할을 수행하는 것들이 있다.
이 이후에는 Scratch라는 프로그램을 이용하여 pseudocode와 같은 형식으로 algorithm을 작성하여 어떤식으로 구동이 되는지 확인 할 수 있었다.
처음에는 계획에 없던 컴퓨터공학개론 수업인데 첫 강의만 보고 놀라서 수강하기로 했다.
Computer science란 코드만 작성하거나 하드웨어를 다루는 일들이 아닌 "문제를 해결하는 것이다."
문제를 푸는데에는 '해결하고자 하는 것'에 해당하는 input이 있고 '해결이 된 것'에 해당하는 output이 있으며 그 사이에 문제를 해결할 '무언가'가 존재한다. 이로써 컴퓨터공학이 무엇인지 확 와닿았다.
또 한 손으로 셀 수 있는 숫자가 5가 아닌 32이라는 방식을 설명할 때 신선했으며 이를 통해 이진법이 구동하는 방식을 아주 쉽게 이해할 수 있었다. 숫자를 변환하는 방식은 간단한 데 문자는 어떻게 하나?라는 질문에 문자를 변환하는 방식은 위와 같이 각 숫자를 문자에 할당하면 해결이 되었다. 이는 ASCII코드 방식을 보여준다.
같은 방식으로 각 숫자(10진법)에 해당하는 문자를 나열한 페이지 이다.
HI!라는 문자를 보내게 된다면 각각에 해당하는 숫자로 주고 받게 되는 것이며 또한 각 10진법으로 표현된 숫자들이 컴퓨터에게 표현되는 숫자(2진법)으로 변환이 되었을 때의 모습이 실제 송/수신할 경우의 데이터가 된다.
하지만 ASCII의 경우 8bits만 사용하기 때문에 키보드에 있는 특수문자나 위와 같은 특수문자들까지 커버하기에는 역부족이다. 이것이 Unicode가 나오게 된 배경이며 이를 통해 더욱 다양한 문자뿐만 아니라 Emoji에 대한 정보까지 입력할 수 있게 되었다.
예를 들어 위와같은 Emoji를 친구에게 보낸다고 한다면 친구의 폰이 받는 것은 128514(10진법)이며 실제로는 11111011000000010(2진법)인 것이다.
또한 해당하는 Emoji에는 색깔에 대한 정보도 필요한데 이는 RGB 조합으로 데이터를 저장하게 된다. 삼원색인 RGB로 모든 색깔을 대변할 수 있으며 각각 0~255에 해당하는 level로써 값을 지정하면 원하는 색을 얻게되는 방법이다. 여기서는 각각 색에 대한 level이 R:72, G:73, B:33일때 연노랑색이 출현하는 것을 볼 수 있다.
한 점에 대한 색을 지정할 수 있겠고 이 단위점들은 pixel이 되는 것이며 위의 Emoji를 확대했을 때 pixel의 존재에 대해 더 명확하게 인지할 수 있다.
다시 원점으로 돌아가서 Computer science는 문제를 해결하는 것이라고 하였고 문제를 해결하는 '무언가'는 Algorithm이 된다. 한가지 예시로 전화번호부에서 누군가를 찾아야 하는 문제가 있을 때 이를 해결할 방법인 3가지의 algorithm이 있다.
- 전화번호부를 한장씩 넘겨서 찾는다.
- 전화번호부를 두장씩 넘겨서 찾는다.
- 전화번호부의 절반을 펴서 찾는 사람의 이름쪽과 먼 절반을 찢어버리고 다시 남은 절반을 펴서 찾는 사람의 이름쪽과 먼 절반을 찢어버리고... 찾을 때까지 반복한다.
그렇게 할 때 1번의 방법은 전화번호부의 크기(size of problem)이 커질 수 록 해결하는 데 그만큼 더 시간이 걸릴 것이다. 2번의 방법도 1번보다는 2배 빠르지만(물론 놓칠 가능성이 있지만) 똑같이 시간이 더 들게 된다. 3번의 방법이 가장 효율적인 방법이라는 것을 알 수 있고 전화번호부의 크기가 아무리 커지더라도 그냥 냅다 절반찢어버리면 되기 때문에 선형적으로 시간이 더 걸리지 않는다.(log 함수처럼 증가한다)
위의 3번의 해결법(algorithm)을 pseudocode로 표현하였을 때 위와 같다.
*pseudocode is just express yourself(algorithm) succinctly and correctly
위에서 표현된 pseudocode 중 노란색으로 강조된 것들은 함수(function)이다. 어떠한 행동을 하도록 정의한 것들이다.
다음으로 강조된 것들은 조건문(condition)이며 해당하는 조건에 맞을 때 상황에 따라 동작하게 만드는 것들이다.
조건문 뒤에 있는 것들은 부울식 표현(Boolean expression)이며 True/False를 판가름하는 표현이 되겠다.
마지막으로는 루프(loop)이며 routine한 작업들을 계속적으로 진행하게 하도록 도와주는 역할이다.
이 외에도 variables, breaks, events 등 다양한 역할을 수행하는 것들이 있다.
이 이후에는 Scratch라는 프로그램을 이용하여 pseudocode와 같은 형식으로 algorithm을 작성하여 어떤식으로 구동이 되는지 확인 할 수 있었다.
댓글
댓글 쓰기