IT 지식

소프트웨어와 알고리즘과 초콜릿 케이크 레시피

OIIUOI 2022. 8. 9. 01:48

소프트웨어로 들어가기 전에 알아 둬야 할 좋은 소식과 나쁜 소식이 있다. 좋은 소식은 컴퓨터가 어떤 계산이라도 수행할 수 있는 범용 기계라는 점이다. 활용할 수 있는 명령어의 종류는 몇 가지뿐이지만, 컴퓨터는 명령어를 매우 빨리 처리할 수 있고 자신의 동작을 대부분 제어할 수 있다. 나쁜 소식은 컴퓨터는 무엇을 해야 할지 누군가가 극도로 상세하게 알려 주지 않는다면 스스로 아무것도 하지 않는다는 점이다. 컴퓨터는 궁극적인 마법사의 제자라고 할 수 있다. 지칠 줄 모르고 실수없이 명령을 따르지만, 해야 할 일을 설명해 주려면 공들여 정확을 기해야 한다.

 소프트웨어는 컴퓨터가 뭔가 유용한 일을 하게 해주는 일련의 명령어를 의미하는 일반적인 용어다 소프트웨어는 하드웨어와는 대조적으로 형체가 없고 손에 잡히지 않는다. 먼저 알고리즘에 초점을 맞춰 소프트웨어의 추상적인 측면을 살펴본다 알고리즘은 특정 과제를 해결하기 위한 이상적인 절차라고 할 수 있다. 다음으로는 프로그래밍과 프로그래밍 언어에 대해 이야기한다. 프로그래밍 언어는 컴퓨터가 수행하기를 원하는 일련의 계산 단계를 표현하려고 사용하는 언어다. 그런 다음 우리 모두에게 익숙한 주요 소프트웨어 시스템에 대해 설명한다. 마지막으로 요즘가장 인기 있는 언어인 자바스크립트와 파이썬으로 프로그래밍하는 방법을 간략히 소개한다. 최신 기술 시스템은 범용 하드웨어, 즉 프로세서, 메모리, 외부 환경과의 연결 장치를 점점 더 많이 사용하고 구체적인 작동 방식은 소프트웨어로 구현하는 추세다 소프트웨어가 하드웨어보다 더 저렴하고 유연하고, 바꾸기 쉽다는 통념이 있다. 특히 어떤 기기가 공장에서 출고되고 나면 그렇다. 예를 들어 컴퓨터가 자동차의 동력과 브레이크가 작동하는 방식을 제어한다면 잠금 방지 제동이나 전자식 주행 안정 제어같은 다양한 기능은 분명히 소프트웨어가 담당할 것이다

 기차, 선박, 항공기에서 소프트웨어가 차지하는 비중도 점점 더 커지고 있다. 컴퓨터는 필수 시스템에서 핵심을 차지하며, 소프트웨어가 필수 시스템을 제어한다. 자율주행 자동차뿐만 아니라 최신 자동차가 제공하는 운전자 보조 기술만 해도 소프트웨어로 제어된다. 스바루 포레스터에는 앞 유리창 밖을 내다보는 두 대의 카메라가 장착돼 있다. 이 모델은 컴퓨터 비전 기술을 이용해서 운전자가 방향 지시등을 켜지 않고 차선을 변경하거나 자동차나 사람이 너무 가까이 있는 것이 감지되면 경고한다.

 의료 영상 시스템은 컴퓨터로 신호를 제어하고 의사들이 해석할 영상을 만들어 낸다. 이러한 시스템에서 필름은 디지털 영상으로 대체되었다. 항공 교통 관제 시스템, 항법 보조 장치, 전력망이나 전화통신망 같은 인프라도 컴퓨터를 이용하여 제어된다.

 무기와 병참 지원을 위한 군용 시스템은 컴퓨터에 전적으로 의존하며, 전 세계의 금융 시스템도 마찬가지다. 사이버 전쟁과 사이버 스파이 활동은 실제 위협으로 작용한다. 사이버 공격은 서비스 운영, 대규모 정전 사태, 랜섬웨어를 이용한 서비스 운영,스턱스넷 웜 공격으로 인한 이란의 우라늄 농축 원심분리기 파괴 등 폭넓은 대상에게 가해질 수 있다. 사용하는 소프트웨어가 신뢰할 만하거나 견고하지 않다면 우리는 많은 문제에 노출될 것이고 소프트웨어 의존도가 커질수록 상황이 더 악화될 것이다

 

소프트웨어를 설명할 때 음식을 만드는 레시피에 자주 비유하곤 한다. 레시피는 요리에 필요한 재료, 요리사가 수행해야 하는 작업 순서, 그리고 예상되는 결과를 열거한다. 이와 유사하게, 어떤 과제를 수행하는 프로그램은 연산에 필요한 데이터를 명시하고, 데이터에 대해 수행할 작업을 자세히 설명한다. 그러나 실제 레시피는 프로그램에 필요한 수준보다 훨씬 모호해서, 프로그램을 요리에 비유하는 건 썩 좋지 않다. 예를 들어 초콜릿 케이크 레시피는 이런 식이다. '오븐에서 30분, 또는 반죽이 자리 잡을 때까지 구우세요. 표면 위에 손바닥을 살짝 올려서 확인하세요. 무엇을 확인해야 할까? 흔들림, 탄력 혹은 다른 것일까? 살짝은 얼마나 살짝일까? 굽는 시간은 최소 30분일까, 아니면 30분을 넘겨서는 안 되는 것일까?

소프트 웨어는 요리 레시피보다 남세 신고서에 비유하는 것이 더 적절하다. 납세 신고서에는 무엇을 해야 하는지 극도로 상세하게 설명돼 있다. 29행에서 30행을 빼세요. 만일 값이 0 이하이면 0을 입력하세요. 31행에 0.25를 곱하세요... 여전히 완벽한 비유는 아니지만, 납세 신고서는 레시피보다는 계산적 측면을 훨씬 더 담아낸다. 즉 산술 연산이 필요하고, 데이터 값을 한 곳에서 다른 곳으로 복사하고, 조건을 검사하고, 차후의 계산은 기존 계산 결과에 달려 있다.

 세금 계산은 특히 처리 절차가 완전해야 한다. 어떤 상황에서라도 결과, 즉 납부할 세액을 항상 산출해 내야 한다. 절차는 명료해야 하며, 누구든 똑같은 절차는 한정된 시간 내에 끝나야 한다. 개인적인 경험으로 말하자면 이러한 명제들은 모두 이상에 불과하다. 용어가 항상 명확하지는 않고, 설명은 세무 당국이 의도한 것보다 더 모호하며, 어떤 데이터 값을 사용해야 하는지 불확실할 때가 자주 있기 때문이다.

 알고리즘은 세심하고 정확하고 명료하게 작성된 레시피나 납세 신고서의 컴퓨터과학 버전이라고 할 수 있는데, 결과를 정확하게 계산하도록 보장된 일련의 단계다. 각 단계는 기본 연산으로 표현되어 있으며, 연산의 의미는 완전히 명시된다. 예를 들면 '두 개의 정수를 더하세요' 처럼. 알고리즘을 이루고 있는 모든 구성 요소의 의미에 한치의 모호함도 있어선 안 된다. 입력 데이터가 어떤 유형이어야 하는지도 제공해야 한다. 알고리즘은 모든 가능한 상황을 다루어야 하며, 다음에 무엇을 해야 할지 모르는 상황이 발생하면 안된다. 더 꼼꼼한 컴퓨터 과학자들은 조건 하나를 더 추가한다. 알고리즘은 결국 멈춰야 한다는 것이다. 따라서 정석대로라면 '거품을 내고, 헹구고, 반복하라' 같은 우리가 잘 알고 있는 샴푸 사용법은 '알고리즘'이 아니다.

 효율적인 알고리즘의 설계, 분석, 구현은 컴퓨터과학이라는 학문에서도 매우 핵심적인 부분이고, 알고리즘에는 현실에서도 중요하게 활용되는 것들도 있다. 여기서는 어떤 알고리즘을 콕 집어서 설명하거나 자세히 표현하지는 않겠지만, 한 가지 개념만큼은 전달하려고 한다. 알고리즘은 지능이나 상상력이 없는 개체가 수행하더라도 연산의 의미와 수행 방법에 의심의 여지가 없을 정도로 상세하고 정확하게 일련의 연산을 명시해야 한다는 것이다. 그리고 알고리즘의 효율성에 대해서도 설명할 텐데, 알고리즘의 효율성은 처리 데이터 양에 따라 계산에 소요되는 시간을 표현하는 방법을 말한다. 친숙하고 쉽게 이해할 수 있는 기본적인 알고리즘 몇 개를 가지고 효율성을 따져보자.

'IT 지식' 카테고리의 다른 글

이진 검색  (0) 2022.08.10
선형 알고리즘  (0) 2022.08.10
캐시가 뭔가요?  (0) 2022.08.06
프로세서는 무조건 빠른 게 좋을까?  (0) 2022.08.06
HDD와 SSD의 차이  (0) 2022.08.04