[인생 프로그래밍] 프로그래밍의 활용 예시

Rex·2022년 1월 1일
2

인생 프로그래밍

목록 보기
3/33
post-thumbnail

프로그래밍의 활용 예시

이전에는 간단하게 자판기와 계산기를 예로 들었지만, 몇 가지 사례를 조금 더 다양하고 세부적으로 이야기해 보려고 한다.


라면 끓이기

라면을 끓이는 방법은 사람마다 각각의 취향에 따라 다를 것이다. 여기에서는 내가 라면 끓이는 방법을 나열해 보겠다.

  1. 라면, 냄비, 물을 준비한다.
  2. 냄비에 물을 500ml 넣는다.
  3. 냄비를 가스레인지 위에 올린다.
  4. 가스레인지 불을 켠다.
  5. 라면 봉투를 뜯어 내용물을 꺼낸다.
  6. 라면 수프를 뜯어서 물에 넣는다.
  7. 물이 끓으면 면을 물에 넣는다.
  8. 4분간 끓인다.
  9. 불을 끄고 계란을 까서 넣는다.

이런 것도 하나의 프로그램이 될 수 있다. 이것은 라면을 끓이기 위한 절차를 만든 것이니, '라면 끓이기 알고리즘' 이라고 할 수 있을 것이다.
이 알고리즘을 그대로 프로그래밍 하면 '라면 끓이는 프로그램' 이 될 것이고, 그 프로그램을 사용해서 기계를 만들면 '라면 끓이는 기계' 가 되는 것이며, 앱으로 만들면 '라면 끓이는 앱' 이 되는 것이다.


빨래

현대 사회에서 빨래를 하지 않는 사람은 없을 것이다. 빨래를 하는 방법은 대부분 동일하다. 아래의 4단계를 따르는 편이다.

  1. 세탁물에 물과 세제를 넣기
  2. 세탁물을 주무르거나 흔들어서 오염을 씻어내기
  3. 세제가 빠져나갈 때까지 헹구기
  4. 짜기(탈수하기)

이것을 프로그래밍해서 만든 게 '세탁기' 라는 프로그램인 것이다. 세탁기는 위의 과정을 세탁-헹굼-탈수 라는 과정으로 표시한다. 우리는 세탁물을 넣고 버튼 한 번만 누르면 깨끗해진 세탁물을 결과물로 받을 수 있다. 이것을 '세탁 알고리즘' 이라고 부를 수 있을 것이다.

위의 과정을 대략적인 코드로 구현하면 다음과 같다.

def 세탁기(오염된_세탁물):
    깨끗해진_세탁물 = 세탁(오염된_세탁물)
    헹궈진_세탁물 = 헹굼(깨끗해진_세탁물)
    탈수된_세탁물 = 탈수(헹궈진_세탁물)
    return 탈수된_세탁물

세탁기(오염된_세탁물)

위 코드의 구조와 동작 방식 등은 추후에 배울 것이다. 여기에서 중요한 것은 위 코드를 이해하는 것이 아니라, 일상에서 반복되는 문제를 해결하기 위해 소스코드를 작성해야 한다는 사실이다.

위 코드는 실제로 실행되는 코드가 아니라, 우리들의 머릿속에 있는 논리를 프로그래밍 코드의 모습으로 풀어놓은 것이다. 이런 형태의 코드를 의사코드(pseudocode, 슈도코드) 라고 한다. 앞으로 프로그래밍의 이해를 돕기 위해 종종 의사코드 형태로 작성할 것이다.

이 외에도 토스트 만드는 프로그램, 햄버거 만드는 프로그램 등을 만들 수 있을 것이다. 그들은 항상 반복되고 비슷한 형태를 가지고 있으니 말이다. 이처럼, 인생에서 반복적으로 일어나는 정형화된 모든 것들은 모두 프로그램으로 만들 수 있다! 이 문장을 꼭 기억하길 바란다. 펜이 있다면 별 표시를 5개 이상 해야 하는 문장이다.


인터넷 뱅킹의 원리

이번에는 조금 더 현실적이고 구체적인 예시를 들어보겠다. 흥미로울 수 있으니 천천히 잘 들어보길 바란다. 요즘 세상에 통장을 만들거나 계좌이체를 할 때 은행을 직접 찾아가는 사람은 거의 없을 것이다. 각 은행마다 스마트폰 앱이 있고, 무엇이든 편하고 빠르게 할 수 있는 세상이기 때문이다. 인터넷뱅킹이 탄생하기 이전에, 과거에 계좌이체를 하기 위해서는 아래와 같은 과정을 거쳐야만 했다.

  1. 은행에 직접 찾아간다.
  2. 번호표를 뽑고 기다린다. 내 번호가 오면 창구에서 은행원과 마주한다.
  3. 은행원이 "무엇을 도와드릴까요?" 라고 물으면, 나는 "계좌이체를 하려고요" 라고 말한다.
  4. 은행원은 나에게 신분증을 요구하고 나는 은행원에게 신분증을 건넨다.
  5. 신분증의 진위 확인을 하고 통과되면 은행원은 나에게 계좌이체에 필요한 서류를 건넨다. 종이에는 상대방 계좌번호, 이체할 금액, 이체할 때 기재할 내용 등의 입력폼이 있다.
  6. 모든 내용을 손으로 기록하고 은행원에게 제출한다.
  7. 은행원은 해당 내용을 검토한 뒤, 계좌의 잔액 등을 확인하고, 금액 이체를 진행하기 전에 "OOO 님에게 20,000원을 이체하시겠어요?" 라며 나에게 최종적으로 확실한 의사를 물어본다.
  8. 내가 "네, 해주세요" 라고 하면, 은행원은 내가 수기로 입력한 내용을 은행 장부에 기록하고, 이체가 완료되면 업무가 종료된다.

어떤가? 2000년 이전에 태어난 세대라면 위와 같은 과정을 대다수가 경험했을 것이다. 위의 모든 과정들이 너무 불편하고, 느리고, 귀찮아서, 이걸 편하게 하려고 만든 프로그램이 '인터넷뱅킹' 이다.
자, 스마트폰으로 계좌이체를 해본 사람이라면 이 일련의 과정들을 보면서 확실하게 와닿는 게 있을 것이다. 우리 삶의 한 부분이 결국 앱 하나로 완벽하게 프로그램화 되었다는 사실을. 이 원리를 이해하는 것이 아주 중요하다. 위 과정들을 풀어서 설명해 볼 테니 이제부터 집중해야 한다.

  1. 은행에 직접 찾아간다.
    • 은행에 찾아가는 것은 우리가 스마트폰 앱을 플레이스토어, 앱스토어 등에서 검색하는 것으로 대체되었다. 이미 설치된 앱이라면 실행하는 것만으로 완료된다.
  2. 번호표를 뽑고 기다린다. 내 번호가 오면 창구에서 은행원과 마주한다.
    • 번호표는 더 이상 필요가 없다. 앱이 실행되길 기다릴 뿐이다.
  3. 은행원이 "무엇을 도와드릴까요?" 라고 물으면, 나는 "계좌이체를 하려고요" 라고 한다.
    • 이제 우리는 화면의 메뉴에서 내가 원하는 업무를 클릭하면 된다.
  4. 은행원은 나에게 신분증을 요구하고, 나는 은행원에게 신분증을 건넨다.
    • 신분증은 온라인에서 공인인증서(공동인증서)로 대체되었고, 이제는 공인인증서 외에도 각종 본인인증이 가능해졌다.
  5. 신분증의 진위 확인을 하고 통과되면, 은행원은 나에게 계좌이체에 필요한 서류를 건넨다. 종이에는 상대방 계좌번호, 이체할 금액, 이체할 때 기재할 내용 등의 입력폼이 있다.
    • 공인인증서의 비밀번호가 맞다면 계좌이체 화면이 뜨고, 위의 입력폼이 그대로 화면에 출력된다.
  6. 모든 내용을 손으로 기록하고 은행원에게 제출한다.
    • 우리는 그 입력폼을 스마트폰 키보드로 입력하고 확인 버튼을 누르면 된다.
  7. 은행원은 해당 내용을 검토한 뒤, 계좌의 잔액 등을 확인하고, 금액 이체를 진행하기 전에 "OOO 님에게 20,000원을 이체하시겠어요?" 라며 나에게 최종적으로 확실한 의사를 물어본다.
    • 만약 나에게 20,000원 이상의 잔액이 없다면, 화면에는 "잔액이 부족합니다." 라는 알림이 노출될 것이고, 잔액이 충분하다면 "OOO 님에게 20,000원을 이체하시겠어요?" 라는 메시지가 노출될 것이다.
  8. 내가 "네, 해주세요" 라고 하면, 은행원은 내가 수기로 입력한 내용을 은행 장부에 기록하고, 이체가 완료되면 업무가 종료된다.
    • '확인' 버튼을 누르면 내가 입력한 입력폼이 은행의 서버로 전송되고, 은행 서버에서 모든 후처리를 완료한 후 이체가 완료된다.

인터넷뱅킹의 경우 더욱 강력한 보안을 위해 '보안카드' 또는 'OTP 번호' 를 추가로 입력하거나, 비대면 영상통화 인증 등을 해야 하는 경우도 있을 것이다.

어떤가? 정말 우리의 인생에서 '계좌이체' 라는 하나의 영역이 완전히 프로그램화 되었다는 것을 느끼는가? 우리가 사용하는 모든 앱, 모든 인터넷 서비스, 모든 프로그램들은 '현실에서 일어나는 모든 과정', 그러니까 우리 인생의 일부분을 자동화시킨 것에 불과하다.

다시 한번 말하지만, 우리의 인생에서 반복적으로 일어나는 정형화된 모든 것들은 모두 프로그램으로 만들 수 있다. 실제로 우리의 삶에서 우리가 전혀 인식하지 않고 자연스럽게 사용했던 아주 많은 것들이 전부 소스코드로 구현되어 있는 것이다.


프로그램, 프로그래밍의 정의

이전에 언급했던 '프로그램, 프로그래밍이란 무엇인가?' 를 다시 반복하겠다. 그 만큼 중요하다는 뜻이다. 펜이 있다면 반드시 별 표시를 하기를 권장한다. 그리고 마음속에 각인시키길 바란다.

프로그램이란 인생에서 일어나는 반복적인 일들을 자동화시킨 것 이고, 프로그래밍이란 인생에서 일어나는 반복적인 일들을 정형화하는 것이다. - Developer Rex

위 문장은 당신의 프로그래밍 인생의 모든 순간에 빛날 것이다.


프로그래머 = 기술자 + 예술가

꼭 들려주고 싶은 말이 있다.
프로그래밍은 무(無)에서 유(有)를 창조하는 일이다. 예술적인 일이다. 프로그래밍을 딱딱하고 어렵게 생각하는 것이 아니라, 무에서 유를 창조하는 예술이라고 생각해 주길 희망한다. 인터넷뱅킹의 사례와 같이, 프로그래밍을 알면 인생에 존재하는 것을 창의적으로 새롭게 해석하여 결과물을 재창조할 수 있다.
프로그램은 우리 삶의 정형화된 일들을 컴퓨터로 옮겨놓은 것 뿐이다. 그것이 소프트웨어(Software)인 것이다. 어렵게 생각하지 않길 바란다.

기술자(Engineer) 이면서 예술가(Artist) 인 프로그래머(Programmer) 가 되어보자!


정리하기

  1. 프로그램으로 만들 수 있는 것들
    • 인생에서 반복적으로 일어나는 정형화된 모든 것들
  2. 알고리즘
    • 특정 문제를 해결하기 위한 절차를 나타낸 것
  3. 의사코드(pseudocode, 슈도코드)
    • 프로그래밍 언어가 아닌 우리들의 일상 언어로 프로그래밍의 문법을 흉내 내어 이해를 높이기 위해 작성된 코드
  4. 프로그래머 = 기술자 + 예술가
    • 프로그래밍은 무(無)에서 유(有)를 창조하는 일이다.

생각 해보기

우리의 삶에서 어떤 것들을 알고리즘으로 만들 수 있을지 생각해 보라. 그걸 생각할 수 있다면 프로그래밍이 정말 재미있어질 것이다!

우리가 사용하는 모든 앱, 모든 인터넷 서비스, 모든 프로그램들은 '현실에서 일어나는 모든 과정', 그러니까 우리 인생의 일부분을 자동화시킨 것에 불과하다.


궁금증 / 질문 / 개선점이 있다면 꼭 댓글을 달아주세요. 제가 최선을 다해 도와드리겠습니다. 여러분들의 최고의 학습 친구가 되어드리겠습니다.

#인생프로그래밍 #개발자렉스 #프로그래밍 #프로그래머 #개발자 #개발입문 #프로그래밍입문서적 #코딩교육 #코딩무료교육 #파이썬 #자바스크립트 #자바 #파이썬기초 #파이썬독학 #파이썬책 #혼자공부하는파이썬 #혼공파 #자바스크립트책 #앱개발 #어플개발 #ProgrammingOfLife #programming #programmer #coding #software #developer #python #javascript #java

profile
🔥 from Abstraction to Realization

0개의 댓글