기술면접 준비

소프트웨어 - 알고리즘은 이상, 프로그래밍은 현실 / 다른 프로그램을 처리하기 위한 프로그램

또롱또 2022. 6. 1. 10:02
728x90

알고리즘과 프로그램

 

  • 알고리즘(Algorithm)
    • 알고리즘은 세심하고 정확하고 명료하게 작성된 레시피나 납세 신고서의 컴퓨터 과학 버전이라고 할 수 있는데, 결과를 정확하게 계산하도록 보장된 일련의 단계다. 각 단계는 기본 연산으로 표현되어 있으며, 연산의 의미는 완전히 명시된다.
      • 예를 들면 '두 개의 정수를 더하세요. 처럼, 알고리즘을 이루고 있는 모든 구성 요소의 의미에 한치의 모호함도 있어선 안 된다. 입력 데이터가 어떤 유형이어야 하는지도 제공해야 한다.
    • 알고리즘은 추상적이고 이상적인 절차를 기술한 것으로, 구현에 필요한 세부 사항과 현실적인 고려 사항을 무시한다.
    • 의미가 완전히 알려져 있고, 구체적으로 명시된 기본 연산으로 표현된다.
    • 그리고, 알고리즘은 결국 멈춰야 한다.
    •  
  • 프로그램(Program)
    • 알고리즘과 달리, 추상적인 것과는 거리가 멀다! 알고리즘이 이상적인 거라면, 프로그램은 실재하는 것.
    • 특정 목적에 따라 실행될 코드(명령어)와 데이터로 이루어진 일종의 리스트.
    • 실제 컴퓨터가 과제를 완료하기 위해 수행해야 하는 모든 단계를 구체적으로 서술한다.
    • 실질적인 문제를 신경 써야 한다. ex) 불충분한 메모리, 제한된 프로세서 속도, 하드웨어 결함 등등.
    •  

알고리즘이 이상적인 요리 레시피라고 하면, 프로그램은 적군의 공격을 받는 동안 군인들이 먹을 1개월치 식사를 로봇에게 준비하도록 하는 상세한 명령어 모음!

프로그래밍 언어

 

  • 프로그래밍 언어는 컴퓨터가 어떤 과제를 수행하는 데 필요한 계산 단계를 사람에게도 어느 정도 자연스러운 형태로 표현하도록 해 주는 언어. 우리가 사용하는 Python, Javascript, JAVA 등등!

⚙ 쉽게 말해 컴퓨터는 일을 대신 해주는 기계, 프로그램은 컴퓨터가 어떤 일을 해야할지 알려주는 설명서, 프로그래밍 언어는 설명서를 적기 위해 사용하는 언어라고 말할 수 있다.

 

다른 프로그램을 처리하기 위한 프로그램

    • 프로그래머가 수기나 암산 등으로 계산하여 기록을 직접 관리해야 했고, 변경 사항이 있을 때마다 카드나 종이 테이프에 구멍을 뚫어 메모리에 적재해야 될 정도로, 수동적으로 관리해야 했기 때문에!어셈블리 언어가 나오기 전에는 프로그래밍이 너무너무 어렵고 힘들었다…
  • 이 힘든 것을 해결하기 위해 만든 언어, 어셈블리!
    • 특정한 처리를 수행하는 프로그램을 **어셈블러(assembler)**라고 한다. 이 프로그램 작성에 사용되는 언어는 어셈블리 언어, 이 수준의 프로그래밍은 어셈블리 언어 프로그래밍!
  • 0과 1의 이진수로 프로그램을 하는 기계어는 인간의 관전에선 컴퓨터가 바로 읽을 수 있다는 점만 빼면 장점이 없는 언어이기 때문에, 이를 보완하기 위해 나온 언어가 어셈블리어. 기계어와 명령어가 1:1로 대응되는 단어들로 구성되어 있다.
  • 어떤 작업을 수행하기 위해 특정 종류와 프로세서(ex. 맥이나 PC의 인텔 프로세서)의 어셈블리 언어로 작성된 프로그램은 다른 프로세서(ex. 휴대전화의 ARM 프로세서)에 맞춰 작성된 어셈블리 언어 프로그램과는 다르다. 작성 CPU마다 사용되는 어셈블리어가 다를 수 있다는 뜻
  • 고급언어 : 컴퓨터에 대한 전문적인 지식이 없어도 저급언어에 비해 배우기 쉽고, 기종에 관계없이 공통적으로 사용할 수 있으며, 그 의미를 쉽게 이해할 수 있는 사용자 중심의 언어
  • 저급언어 : 고급언어에 비해 이해하기 어렵고, 사용하기에는 불편하지만 컴퓨터가 처리하기엔 용이한 컴퓨터 중심의 언어

컴파일 vs 어셈블

고급언어로 작성한 원시 프로그램을 컴파일러가 기계어로 번역하는 작업을 컴파일(Complie)한다고 하고, 어셈블리어로 작성한 원시 프로그램을 어셈블러가 번역하는 작업을 어셈블(Assemble)한다고 한다!

728x90