ko ko ko en en en ko ko cs zh ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko fr ko ko ko ko fr ko ko ko en en ko en zh en en
파이썬 코딩 도장: 1.1 문제 해결을 위한 과학적 사고
Unit 1. 소프트웨어 교육과 파이썬
스마트폰이 나오면서 일상을 변화시켰습니다. SNS를 통해 손쉽게 주변 사람들의 소식을 주고 받고, 몇 번의 터치만으로 은행 업무도 볼 수 있게 되었습니다. 그리고 이제는 스마트폰의 지도와 길 찾기 기능만 있으면 어디든지 정확하게 찾아갈 수 있습니다. 모두 소프트웨어가 발전한 덕분입니다.
자동차 또한 단순한 기계를 넘어서서 컴퓨터로 진화하고 있습니다. 이미 자동차 엔진은 ECU(Engine Control Unit, 엔진 제어 장치)라는 컴퓨터가 제어하고, 더 나아가 차선 유지 기능, 앞 차와의 충돌 방지 기능은 물론 자율 주행까지 가능한 컴퓨터가 내장되고 있습니다. 게다가 구글은 자율 주행 시스템을 위해 웨이모를 개발했습니다.
▼ 그림 1-1 구글 웨이모
영화 산업도 컴퓨터 그래픽스가 필수입니다. 멋진 영웅들이 등장하는  는 대부분의 장면이 컴퓨터 그래픽으로 제작되었습니다. 또한, 애니메이션  은 컴퓨터와 3D 모델링 소프트웨어가 없으면 만들 수 없는 작품입니다.
금융 업계도 급속히 소프트웨어 산업으로 바뀌고 있습니다. 오프라인 지점 없이 온라인으로만 영업하는 인터넷 은행은 나오자 마자 큰 돌풍을 일으켰습니다. 개인 대출 시장도 인터넷을 통해 대출을 연결해주는 P2P 대출로 발전했습니다. 특히 국가 중앙은행의 통제를 받지 않는 비트코인 등 가상화폐까지 등장했습니다. 이들 모두 금융과 소프트웨어가 결합한 핀테크(fintech)입니다.
유통 업계는 이미 소프트웨어 업계로 바뀐지 오래입니다. 미국의 아마존은 인터넷 쇼핑몰을 넘어서서 세계 최대의 클라우드 서비스 업체로 발전했습니다. 물론 국내도 유통 분야에서 인터넷 쇼핑몰이 보편화되었고, 빅데이터를 활용하여 소비자에게 최적화된 상품을 추천해주는 등 소프트웨어를 적극 활용하고 있습니다. 그래서 요즘은 이런 회사들을 유통 업체가 아닌 소프트웨어 업체로 분류하고 있습니다.
생산 분야는 3D 프린터가 도입되어 다품종 소량 생산 및 자동화가 가능해졌고, 의료 업계 중에서도 이미 치과 보철 분야는 3D 프린터를 사용하고 있습니다. 물론 여기서도 3D 모델링 소프트웨어는 필수입니다.
의료 분야는 빅데이터와 인공 지능을 통해 최적화된 치료법을 제공해주고 있습니다. 또한, 일상 생활에서도 스마트 워치로 심박수, 혈당 수치 측정, 칼로리 계산까지 가능합니다. 이러한 의료 정보는 모두 소프트웨어로 처리되며 스마트 헬스케어라는 분야로 자리를 잡았습니다.
특히 인공지능은 놀라울 정도로 발전했습니다. 지금까지 인공지능은 사람을 이길 수 없을 것이라 여겨졌던 바둑도 구글 알파고가 나오면서 사람을 압도했습니다. 그리고 일상 생활에서는 스마트폰에 내장된 시리와 빅스비 같은 서비스가 활용되고 있습니다.
그리고 빅데이터는 데이터를 기반으로 예측을 하고 과학적으로 의사를 결정하는 분야인데, 대표적인 사례가 서울시 심야버스 노선 최적화입니다. 서울시와 KT는 사람들의 휴대전화 사용 위치, 신용 카드와 교통카드 결제 데이터, 택시 승하차 정보, 휴대전화 청구지 주소 등을 분석하여 실제 유동인구를 파악한 뒤 노선을 최적화하여 심야버스 이용율을 크게 늘였습니다.
▼ 그림 1-2 심야버스 노선 최적화(국토교통부 NS센터)
이처럼 일상 생활의 모든 분야에 소프트웨어가 적극적으로 활용되면서 예전보다 삶의 질이 눈에 띄게 향상되었습니다. 기업 중에서도 소프트웨어를 적절히 활용한 기업들은 크게 성장했지만 그렇지 않은 기업들은 고전을 면치 못하고 있습니다. 이미 세계 기업 순위는 애플, 구글, 마이크로소프트, IBM 등 소프트웨어 회사가 상위권을 차지하고 있으며 페이스북, 텐센트, 알리바바 등이 새롭게 등장했습니다. 특히 AirBnB, Uber 등 작은 아이디어에서 거대한 소프트웨어 기업으로 성장하는 사례도 흔히 볼 수 있습니다. 하지만 GE, 월마트, 토요타 등은 뒤로 밀려난지 오래입니다.
따라서 앞으로는 어떤 분야든 소프트웨어 기술은 필수입니다. 소프트웨어 전문가는 늘 부족한 상태입니다.
1.1 문제 해결을 위한 과학적 사고
소프트웨어라는 말은 많이 사용하는데 도대체 소프트웨어는 무엇일까요? 지금까지 설명했던 스마트폰, 전기자동차, 영화, 핀테크, 인터넷 쇼핑몰, 인공지능 등의 소프트웨어는 지금까지 불편했던 문제들을 해결하기 위해 개발되었습니다.
예를 들어 일반 휴대전화에서는 인터넷이 안 되니 데이터 통신 기능과 웹 브라우저가 내장된 스마트폰이 개발되었고, 인터넷으로 물건을 팔기 위해 인터넷 쇼핑몰이 만들어졌습니다. 그리고 사람이 운전하지 않고 스스로 달리는 자동차를 만들기 위해 자율 주행 시스템이 개발되었습니다.
그럼 이렇게 어렵고 복잡한 문제를 공학자들은 어떻게 해결할까요?
1.1.1 복잡한 문제를 작은 문제로 분해
자율 주행 시스템을 예로 들면 사람의 눈과 귀 역할을 하는 카메라와 센서를 장착해서 주변 상황을 인식하게 하고, 팔과 다리 역할을 하는 각종 제어 장치를 만들어서 사람 없이 움직이게 합니다. 그다음으로 주변 상황 정보, GPS 정보, 지도 정보 등을 이용해서 자동으로 운전하는 소프트웨어를 만듭니다. 즉, 복잡한 문제를 작은 문제로 나누어서 하나씩 접근합니다. 이렇게 작은 문제를 하나씩 해결하다 보면 결국 큰 문제를 해결하게 됩니다.
▼ 그림 1-3 복잡한 문제를 작은 문제로 분해
1.1.2 날씨 데이터를 그래프로 그리는 문제
이 책에서는 현실에서 벌어지는 복잡한 문제는 아니지만 프로그래밍을 처음 배운 사람이 도전해볼 수 있는 작은 문제를 하나 제시합니다. 바로 기상청 웹 사이트의 날씨 데이터를 그래프로 그리는 문제입니다. 다음과 같이 주요 도시의 기온과 습도를 막대 그래프로 나타내는 것이죠.
▼ 그림 1-4 주요 도시의 기온과 습도 그래프
그러면 기상청 웹 사이트의 데이터를 어떻게 그래프로 그릴까요? 한 번에 생각하면 어렵습니다. 그렇다면 작은 문제로 나눠보죠.
우선 기상청 웹 사이트에서 데이터가 어디에 어떻게 표시되는지 알아야 합니다. 보통 웹 사이트는 HTML(HyperText Markup Language)이라는 언어로 글자와 그림을 표시하므로 우리는 HTML을 분석하여 도시 이름, 기온, 습도 값이 저장된 위치를 찾습니다.
그다음에 분석한 정보를 토대로 HTML에서 기온과 습도 정보를 가져와서 정형화된 데이터로 만듭니다. 그리고 데이터 중에서 특별시와 광역시만 추출한 뒤 막대 그래프로 그리면 됩니다(자세한 내용은 '‎Unit 46 실전예제: 웹의 데이터로 그래프 그리기'에서 설명하겠습니다).
지금까지 설명한 작은 문제들을 정리하면 다음과 같습니다.
HTML에서 기온과 습도 가져와서 정형화된 데이터로 만듦
데이터 중에서 주요 도시 추출
이렇게 나눈 작은 문제를 해결하다 보면 기상청 웹 사이트의 데이터를 그래프로 그린다는 큰 문제가 해결됩니다.
이처럼 현실 세계의 문제를 분석하여 해결책을 찾는 과학적 사고법을 컴퓨테이셔널 씽킹(computational thinking)이라 하며 이렇게 설계한 해결책을 컴퓨터의 명령어로 작성하는 것을 컴퓨터 프로그래밍이라 합니다.
▼ 그림 1-5 해결책을 컴퓨터의 명령어로 작성
즉, 작은 문제로 분해하고, 문제의 패턴을 발견하고, 어떤 데이터를 이용해야 하는지 결정하고, 문제를 일반화하고 모델링할 수 있는지를 찾는 과정이죠. 다음과 같이 웹 사이트의 데이터를 그래프로 그리는 작업을 패턴, 데이터, 일반화와 모델링으로 구분할 수 있습니다.
패턴: HTML에서 도시, 기온, 습도의 패턴을 파악
데이터: HTML, 도시 이름, 기온, 습도
일반화와 모델링: HTML에서 데이터 가져오기, HTML 분석
처리하고자 하는 작업 또는 문제는 다른 말로 요구사항이라고도 부릅니다. 즉, 프로그램을 작성하는 작업은 요구사항을 만족시키는 일이 됩니다.
컴퓨터는 물리적인 기계로 구성되어 있어서 하드웨어라고 하는데 이에 대비되는 개념으로 프로그램은 소프트웨어라고 합니다. 그래서 컴퓨터 프로그래밍은 다른 말로 소프트웨어 개발이라고 합니다.
1.2 알고리즘과 코딩 ▶︎
Unit 1. 소프트웨어 교육과 파이썬
1.1 문제 해결을 위한 과학적 사고
1.4 코딩 도장을 학습하는 방법
Unit 2. 파이썬 설치하기
Unit 3. Hello, world!로 시작하기
Unit 4. 기본 문법 알아보기
Unit 5. 숫자 계산하기
Unit 6. 변수와 입력 사용하기
Unit 7. 출력 방법 알아보기
Unit 8. 불과 비교, 논리 연산자 알아보기
Unit 9. 문자열 사용하기
Unit 10. 리스트와 튜플 사용하기
Unit 11. 시퀀스 자료형 활용하기
Unit 12. 딕셔너리 사용하기
Unit 13. if 조건문으로 특정 조건일 때 코드 실행하기
Unit 14. else를 사용하여 두 방향으로 분기하기
Unit 15. elif를 사용하여 여러 방향으로 분기하기
Unit 16. for 반복문으로 Hello, world! 100번 출력하기
Unit 17. while 반복문으로 Hello, world! 100번 출력하기
Unit 18. break, continue로 반복문 제어하기
Unit 19. 계단식으로 별 출력하기
Unit 20. FizzBuzz 문제
Unit 21. 터틀 그래픽스로 그림 그리기
Unit 22. 리스트와 튜플 응용하기
Unit 23. 2차원 리스트 사용하기
Unit 24. 문자열 응용하기
Unit 25. 딕셔너리 응용하기
Unit 26. 세트 사용하기
Unit 27. 파일 사용하기
Unit 28. 회문 판별과 N-gram 만들기
Unit 29. 함수 사용하기
Unit 30. 함수에서 위치 인수와 키워드 인수 사용하기
Unit 31. 함수에서 재귀호출 사용하기
Unit 32. 람다 표현식 사용하기
Unit 33. 클로저 사용하기
Unit 34. 클래스 사용하기
Unit 35. 클래스 속성과 정적, 클래스 메서드 사용하기
Unit 36. 클래스 상속 사용하기
Unit 37. 두 점 사이의 거리 구하기
Unit 38. 예외 처리 사용하기
Unit 39. 이터레이터 사용하기
Unit 40. 제너레이터 사용하기
Unit 41. 코루틴 사용하기
Unit 42. 데코레이터 사용하기
Unit 43. 정규표현식 사용하기
Unit 44. 모듈과 패키지 사용하기
Unit 45. 모듈과 패키지 만들기
Unit 46. 실전예제: 웹의 데이터로 그래프 그리기
C 언어 코딩 도장
- 이 사이트에 실린 모든 내용, 디자인, 이미지, 편집 구성의 저작권은 (주)도서출판 길벗과 지은이에게 있습니다.
- 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다.
- 책의 내용을 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다.
- 링크, SNS 공유는 허용합니다.
서울시 마포구 서교동 월드컵로 10길 56 (서울시 마포구 서교동 467-9)
Copyright © 2016-2021 Coding Dojang