1.1 문제 해결을 위한 과학적 사고
Unit 1. 소프트웨어 교육과 파이썬
스마트폰이 나오면서 일상을 변화시켰습니다. SNS를 통해 손쉽게 주변 사람들의 소식을 주고 받고, 몇 번의 터치만으로 은행 업무도 볼 수 있게 되었습니다. 그리고 이제는 스마트폰의 지도와 길 찾기 기능만 있으면 어디든지 정확하게 찾아갈 수 있습니다. 모두 소프트웨어가 발전한 덕분입니다.
자동차 또한 단순한 기계를 넘어서서 컴퓨터로 진화하고 있습니다. 이미 자동차 엔진은 ECU(Engine Control Unit, 엔진 제어 장치)라는 컴퓨터가 제어하고, 더 나아가 차선 유지 기능, 앞 차와의 충돌 방지 기능은 물론 자율 주행까지 가능한 컴퓨터가 내장되고 있습니다. 게다가 구글은 자율 주행 시스템을 위해 웨이모를 개발했습니다.
영화 산업도 컴퓨터 그래픽스가 필수입니다. 멋진 영웅들이 등장하는 <어벤져스>는 대부분의 장면이 컴퓨터 그래픽으로 제작되었습니다. 또한, 애니메이션 <겨울왕국>은 컴퓨터와 3D 모델링 소프트웨어가 없으면 만들 수 없는 작품입니다.
금융 업계도 급속히 소프트웨어 산업으로 바뀌고 있습니다. 오프라인 지점 없이 온라인으로만 영업하는 인터넷 은행은 나오자 마자 큰 돌풍을 일으켰습니다. 개인 대출 시장도 인터넷을 통해 대출을 연결해주는 P2P 대출로 발전했습니다. 특히 국가 중앙은행의 통제를 받지 않는 비트코인 등 가상화폐까지 등장했습니다. 이들 모두 금융과 소프트웨어가 결합한 핀테크(fintech)입니다.
유통 업계는 이미 소프트웨어 업계로 바뀐지 오래입니다. 미국의 아마존은 인터넷 쇼핑몰을 넘어서서 세계 최대의 클라우드 서비스 업체로 발전했습니다. 물론 국내도 유통 분야에서 인터넷 쇼핑몰이 보편화되었고, 빅데이터를 활용하여 소비자에게 최적화된 상품을 추천해주는 등 소프트웨어를 적극 활용하고 있습니다. 그래서 요즘은 이런 회사들을 유통 업체가 아닌 소프트웨어 업체로 분류하고 있습니다.
생산 분야는 3D 프린터가 도입되어 다품종 소량 생산 및 자동화가 가능해졌고, 의료 업계 중에서도 이미 치과 보철 분야는 3D 프린터를 사용하고 있습니다. 물론 여기서도 3D 모델링 소프트웨어는 필수입니다.
의료 분야는 빅데이터와 인공 지능을 통해 최적화된 치료법을 제공해주고 있습니다. 또한, 일상 생활에서도 스마트 워치로 심박수, 혈당 수치 측정, 칼로리 계산까지 가능합니다. 이러한 의료 정보는 모두 소프트웨어로 처리되며 스마트 헬스케어라는 분야로 자리를 잡았습니다.
특히 인공지능은 놀라울 정도로 발전했습니다. 지금까지 인공지능은 사람을 이길 수 없을 것이라 여겨졌던 바둑도 구글 알파고가 나오면서 사람을 압도했습니다. 그리고 일상 생활에서는 스마트폰에 내장된 시리와 빅스비 같은 서비스가 활용되고 있습니다.
그리고 빅데이터는 데이터를 기반으로 예측을 하고 과학적으로 의사를 결정하는 분야인데, 대표적인 사례가 서울시 심야버스 노선 최적화입니다. 서울시와 KT는 사람들의 휴대전화 사용 위치, 신용 카드와 교통카드 결제 데이터, 택시 승하차 정보, 휴대전화 청구지 주소 등을 분석하여 실제 유동인구를 파악한 뒤 노선을 최적화하여 심야버스 이용율을 크게 늘였습니다.
이처럼 일상 생활의 모든 분야에 소프트웨어가 적극적으로 활용되면서 예전보다 삶의 질이 눈에 띄게 향상되었습니다. 기업 중에서도 소프트웨어를 적절히 활용한 기업들은 크게 성장했지만 그렇지 않은 기업들은 고전을 면치 못하고 있습니다. 이미 세계 기업 순위는 애플, 구글, 마이크로소프트, IBM 등 소프트웨어 회사가 상위권을 차지하고 있으며 페이스북, 텐센트, 알리바바 등이 새롭게 등장했습니다. 특히 AirBnB, Uber 등 작은 아이디어에서 거대한 소프트웨어 기업으로 성장하는 사례도 흔히 볼 수 있습니다. 하지만 GE, 월마트, 토요타 등은 뒤로 밀려난지 오래입니다.
따라서 앞으로는 어떤 분야든 소프트웨어 기술은 필수입니다. 소프트웨어 전문가는 늘 부족한 상태입니다.
1.1 문제 해결을 위한 과학적 사고
소프트웨어라는 말은 많이 사용하는데 도대체 소프트웨어는 무엇일까요? 지금까지 설명했던 스마트폰, 전기자동차, 영화, 핀테크, 인터넷 쇼핑몰, 인공지능 등의 소프트웨어는 지금까지 불편했던 문제들을 해결하기 위해 개발되었습니다.
예를 들어 일반 휴대전화에서는 인터넷이 안 되니 데이터 통신 기능과 웹 브라우저가 내장된 스마트폰이 개발되었고, 인터넷으로 물건을 팔기 위해 인터넷 쇼핑몰이 만들어졌습니다. 그리고 사람이 운전하지 않고 스스로 달리는 자동차를 만들기 위해 자율 주행 시스템이 개발되었습니다.
그럼 이렇게 어렵고 복잡한 문제를 공학자들은 어떻게 해결할까요?
1.1.1 복잡한 문제를 작은 문제로 분해
자율 주행 시스템을 예로 들면 사람의 눈과 귀 역할을 하는 카메라와 센서를 장착해서 주변 상황을 인식하게 하고, 팔과 다리 역할을 하는 각종 제어 장치를 만들어서 사람 없이 움직이게 합니다. 그다음으로 주변 상황 정보, GPS 정보, 지도 정보 등을 이용해서 자동으로 운전하는 소프트웨어를 만듭니다. 즉, 복잡한 문제를 작은 문제로 나누어서 하나씩 접근합니다. 이렇게 작은 문제를 하나씩 해결하다 보면 결국 큰 문제를 해결하게 됩니다.
1.1.2 날씨 데이터를 그래프로 그리는 문제
이 책에서는 현실에서 벌어지는 복잡한 문제는 아니지만 프로그래밍을 처음 배운 사람이 도전해볼 수 있는 작은 문제를 하나 제시합니다. 바로 기상청 웹 사이트의 날씨 데이터를 그래프로 그리는 문제입니다. 다음과 같이 주요 도시의 기온과 습도를 막대 그래프로 나타내는 것이죠.
그러면 기상청 웹 사이트의 데이터를 어떻게 그래프로 그릴까요? 한 번에 생각하면 어렵습니다. 그렇다면 작은 문제로 나눠보죠.
우선 기상청 웹 사이트에서 데이터가 어디에 어떻게 표시되는지 알아야 합니다. 보통 웹 사이트는 HTML(HyperText Markup Language)이라는 언어로 글자와 그림을 표시하므로 우리는 HTML을 분석하여 도시 이름, 기온, 습도 값이 저장된 위치를 찾습니다.
그다음에 분석한 정보를 토대로 HTML에서 기온과 습도 정보를 가져와서 정형화된 데이터로 만듭니다. 그리고 데이터 중에서 특별시와 광역시만 추출한 뒤 막대 그래프로 그리면 됩니다(자세한 내용은 'Unit 46 실전예제: 웹의 데이터로 그래프 그리기'에서 설명하겠습니다).
지금까지 설명한 작은 문제들을 정리하면 다음과 같습니다.
- HTML 분석하기
- HTML에서 기온과 습도 가져와서 정형화된 데이터로 만듦
- 데이터 중에서 주요 도시 추출
- 데이터로 그래프 그리기
이렇게 나눈 작은 문제를 해결하다 보면 기상청 웹 사이트의 데이터를 그래프로 그린다는 큰 문제가 해결됩니다.
1.1.3 컴퓨테이셔널 씽킹
이처럼 현실 세계의 문제를 분석하여 해결책을 찾는 과학적 사고법을 컴퓨테이셔널 씽킹(computational thinking)이라 하며 이렇게 설계한 해결책을 컴퓨터의 명령어로 작성하는 것을 컴퓨터 프로그래밍이라 합니다.
즉, 작은 문제로 분해하고, 문제의 패턴을 발견하고, 어떤 데이터를 이용해야 하는지 결정하고, 문제를 일반화하고 모델링할 수 있는지를 찾는 과정이죠. 다음과 같이 웹 사이트의 데이터를 그래프로 그리는 작업을 패턴, 데이터, 일반화와 모델링으로 구분할 수 있습니다.
- 패턴: HTML에서 도시, 기온, 습도의 패턴을 파악
- 데이터: HTML, 도시 이름, 기온, 습도
- 일반화와 모델링: HTML에서 데이터 가져오기, HTML 분석
처리하고자 하는 작업 또는 문제는 다른 말로 요구사항이라고도 부릅니다. 즉, 프로그램을 작성하는 작업은 요구사항을 만족시키는 일이 됩니다.
컴퓨터는 물리적인 기계로 구성되어 있어서 하드웨어라고 하는데 이에 대비되는 개념으로 프로그램은 소프트웨어라고 합니다. 그래서 컴퓨터 프로그래밍은 다른 말로 소프트웨어 개발이라고 합니다.