그저 내가 되었고

🌟CS:: 'Computer Science? 컴퓨터 '과학'? 본문

개발/CS

🌟CS:: 'Computer Science? 컴퓨터 '과학'?

hyuunii 2022. 9. 12. 20:56

이런게 궁금해지는 날이 올 줄이야..... 역시 사람은 경험하고 볼 일ㅋㅋㅋㅋㅋ 각설하고,

 

최근 CS50이라는 하버드의 강의를 부스트코스에서 수강중에 있다. 그러다가 CS라는 용어 자체에 대해 궁금증이 생겼다.

흔히 생각하는 '과학'이라면 물리학, 천문학, 생명과학, 지구과학 등등 기초과학에 가깝고,

컴퓨터 과학보다는 오히려 컴퓨터 공학에 가까울 것 같은데 왜 Computer Science라고 부르는걸까? 싶었다.

 

찾아보니 소프트웨어정책연구소의 역대 연구원분께서 적어놓으신 글이 있어서 좀 가져와보았다.

또한 밑에는 컴퓨터과학(Computer Science)와 컴퓨터공학(Computer Engineering)의 차이에 관해 개발자 커뮤니티 오키에서 긁어온 댓글도 좀 첨부해보았다.

 

 

여러 글을 읽어도 아직까지 모호하긴 한데... 대략의 윤곽은 잡힌다.


 

** https://spri.kr/posts/view/21907?code=column 

 

컴퓨터과학에 대한 오해와 진실 - SPRi

“ 컴퓨터과학은 컴퓨터를 연구하는 건가요?”얼 마 전 특강에서 받은 질문이다. 질문의 ‘ 컴퓨터’가 우리가 주변에서 보는 보통의 PC, 노트북 같은 기기라면, 내 대답은 “아니다”. (후략)

spri.kr

 “컴퓨터과학은 컴퓨터를 연구하는 건가요?” 얼마 전 특강에서 받은 질문이다. 질문의 ‘컴퓨터’가 우리가 주변에서 보는 보통의 PC, 노트북 같은 기기라면, 내 대답은 “아니다”. 컴퓨터과학이 수학, 과학, 공학을 토대로 한 융합학문이기에 다시 한 번 이 질문을 곱씹어 봤지만, 아직까지 내 대답은 같다.

 컴퓨터 역시 컴퓨터과학에서 도구이지 주된 연구 대상은 아니다. 아직 100년도 안 된 짧은 컴퓨터과학의 역사 때문에 최근까지도 컴퓨팅 도구의 영향력이 높은 것도 사실이지만, 컴퓨터과학의 주제는 컴퓨터기기(하드웨어)가 아닌 컴퓨테이션(Computation), 문제를 효율적으로 해결하기 위해 고안된 자동화된 계산 방식이다.

 

 사실, 컴퓨터과학에서 보는 컴퓨터와 일반적 컴퓨터는 다르다. 일반적으로 우리가 말하는 컴퓨터는 [그림 1]에서 왼쪽과 같은 기기들이다. 위키피디아 정의에 따르면, 이 기계는 수식이나 논리적 언어로 표현된 계산을 수행하거나 작업을 통제하는 일을 하는 도구다.

 

 이에 반해, 컴퓨터과학에서의 컴퓨터는 ‘자동화된 계산과정(Computation)을 수행하는 시스템’이다. [그림 1]에서 오른쪽에 있는 그림은 컴퓨터과학의 아버지라 불리우는 영국의 수학자 앨런 튜링이 만들어낸 상상 속 기계인 튜링기계(Turing machine)이다. 유한개의 방을 가진 테이프(저장공간)와 그 방안의 기호(그림의 a, b로 저장공간 안에 적힌 내용물), 저장공간의 현재 상황(그림의 q1)과 지금 헤더가 읽은 기호에 따라 헤더를 움직이는 규칙들 등 어찌 보면 단순해 보이는 이 설계도는 그동안 사람들이 머릿 속에서 생각해왔던 문제 풀이 과정(computation)을 기계라는 객관성있는 모형으로 형상화한 것이다.

 

 컴퓨터과학자들은 이 사고의 모형에서 풀 수 있는 문제를 찾아내고, 그 문제를 어떻게 효과적으로 풀 어낼 것인지 고민해왔다. 실세계의 문제를 효과적으로 풀기 위해서는 그 문제를 둘러싼 환경을 어떻게 바라보고 모형화할 것인지, 그 위에 해결방안의 각 단계들은 다음 단계로 어떻게 이동하는 것이 효율적인지 그리고 이 문제와 해결방안을 SW로 어떻게 나타낼 것인지(프로그래밍) 등을 포함하여 연구해 왔다. 사람들은 '컴퓨테이션 이론’이라는 컴퓨터과학과 대학부 기본과목 이야기가 아닌가라고 생각하겠지만, 운영체제, 네트워크, 인공지능 등 컴퓨터과학 세부 분야 역시 이를 기반으로 다양한 분야·관점에서 고민하고 발전시켜왔다. 즉, 컴퓨터과학자에게 컴퓨터는 컴퓨터기계의 개념적 동작 원리(Computing)를 갖고 있는 모델이자 SW가 실행되는 또 하나의 환경이다.

 

 이를 위해, 컴퓨터과학자들은 수학적·물리적 기반을 토대로 논리와 사고를 적용하는 독특한 이론과 사고 기술을 발전시켜 왔다. 크고 복잡한 문제들을 핵심요소로 단순화하기(추상화), 작은 독립형 문제들로 쪼개기(세부화, 모듈화), 효과적이고 정확한 단계적 문제 해결 방안 고안하기(알고리즘), 문제의 해결방안의 실행비용 구하기(복잡도), 특정 문제의 해결 방안을 다른 문제의 해결방안으로 확대·적용하기(일반화), 코딩으로 구체화하기(프로그래밍) 등이 그 사례이다.

 

 이것들을 우린 ‘컴퓨팅 사고력’이라 부르고, 컴퓨터과학자의 사고방식이라 정의한다. 이러한 컴퓨팅 사고력은 사실 그동안 인류가 쌓아왔던 지식이자 지혜이며, 컴퓨터과학자는 이 지식과 지혜를 컴퓨팅 도구에 효과적으로 적용시키기 위해, 학문적으로 연구, 발전시켜왔다. 인지와 사고가 없는 컴퓨터란 기계에게 적절하고 효율적인 명령을 내릴 수 있는 사람의 논리적·창의적 사고력, 즉‘ 컴퓨팅적 사고력’은 현명한 사람이 할 수 있는 ‘생각의 기술’(Art of Thinking)이다.

 

 컴퓨팅 사고력의 ‘일부’가 프로그래밍(코딩)이다. 사람의 생각을 컴퓨터가 이해하고 수행할 수 있도록 컴퓨터 프로그래밍 언어로 옮기는 일을 프로그래밍(programming)이라 하고, 좀더 쉽고 편한 말로 코딩(coding)이다. 코딩 기술은 SW 개발인력에게는 가장 핵심기술이고 컴퓨팅 사고력을 배양할 수 있는 좋은 훈련방식이기도 하다. 직접 SW를 만들어보고 돌려보는 경험만큼 그 원리를 이해하고 자신만의 지식으로 만들 수 있는 방법은 없기 때문이다.

 

 그렇지만, 코딩이 컴퓨터과학의 전부는 아니다. 좋은 SW를 만들어내는 핵심은 프로그램 명령어 뒤에 숨어있는 사람의 논리적 생각과 창의적 발상이다. 더욱이 이제는 이러한 SW를 만들어내는 사람의 사고가 더 중요한 시점이 되었다. 누구나 쉽게 프로그래밍할 수 있게 된 최근의 프로그래밍 환경과 개발 도구의 발전, 신문기사를 써내고 그림을 화풍에 맞춰 그릴 수 있는 최신 SW기술의 발전으로, 단순한 코딩은 로봇도 할 수 있을 것이라 전망된다.

 

 그렇다면, 사람이 할 수 있는 업무는 무엇인가. 창의적 아이디어로 풀어낼 문제를 찾고 어떻게 풀 것인지 설계하는 일이다. 따라서, 우리는 코딩 기반이 아닌 컴퓨팅사고력 기반의 SW교육을 우리 아이들에게 해야 한다.

 


** 아래는 오키 커뮤니티의 게시물(https://okky.kr/articles/558317) 댓글 발췌.

타키투스 차이는 극명한데, 자연과학대에서의 최고봉은 새로운 이론을 만들거나 자연의 어떤 법칙을 발견하는 겁니다. Theory를 중심으로 이것들을 탐구해나가는게 자연과학대에 Goal 라고 할 수 있습니다.

 

 하지만 공학은 Application입니다. Theory를 가지고 인간이 살아가는데 유용한 뭔가를 만들어내는 걸 Goal로 칩니다. 공과대가 영역이 넓기는 합니다. Theory도 배워야 하고 이걸 기반으로 기존에 Application한 물건들에 어떻게 적용됐는지를 살펴보고 새로운 뭔가를 만들어 내야 하죠.

 

 컴파일러 수업을 듣다보면 기본이 되는 이론이 오토마타 라는게 있습니다. 거기다 이산수학 같은것도 있지요. 이런게 자연과학대에 이론에 기반한것이고 이러한 몇개의 다양한 이론을 기반으로 컴파일러라는걸 만드는게 바로 공학입니다. 또 대표적으로 컴퓨터 알고리즘이 있는데, 완벽한 컴퓨터 과학 입니다. 만일 이것을 가지고 뭔가 유용한 소프트웨어를 만들어내면 그게 공학인거죠.

 

 

void__ 저는 미국에서 나와서 좀 다를지도 모르지만 컴퓨터 과학은 소프트웨어, 프로그래밍, 이산수학, Algorithm 쪽이고 컴퓨터 공학은 전자공학하고 같은 학과소속으로 운영체제, 프로세서 아키텍쳐, 하드웨어 쪽입니다. 대충 아날로고+디지털은 전자, 디지털 하드웨어 + 소프트웨어는 컴공, 소프트웨어는 컴퓨터 사이언스라고 보시면 얼추 맞습니다.

 하지만 전자와 컴퓨터 공학 애들이 소프트웨어 쪽에 돈이 몰리고 하드웨어 + 임베디드 신입자리가 많이 없어지니까 컴공, 심지어는 전자쪽 애들까지 컴퓨터 과학으로 갈아타거나 학과만 걸어놓고 소프트웨어로 갈아타는 현상이 제가 졸업할때 까지 있었습니다.

 제 전공(전자공학)에서 날리던 애들도(심지어 공대 탑 5 안에 드는 학교였는데) 취직 때문에 졸업하고 컴과학 석사해서 전직했습니다. 전자, 컴공 졸업작을 같이 하게 된 놈이 프로세서와 회로에 대한 이해는 전혀 없고 웹앱 개발 밖에 모르는 기현상이 생기더군요. 결국 그놈은 애들 가지고 노는 아두이노 가지고 혼자 고민하다 한학기동안 아무것도 안하고 저 혼자 회로 만들고 펌에어를 넣는 이갈리는 경험이 있어서 이런 부류 굉장히 싫어합니다.

사실 이런말 하는 저도 전자과면서 아날로그부터 소프트웨어 까지 다 청강 했었고 지금도 소프트웨어 많이 만집니다... 둘 중 어떤 학과를 나와도 프로그래머로 취업은 괜찮지 않을까 생각합니다만 서로 다른 수업제한이 어떻게 걸려있나 확인하시면 더 좋은 선택을 하실 수 있습니다