How Computers Work [03]

Drawing

인간이 지적 존재로서 가장 근본적으로 갖는 도구는 언어이다. 컴퓨터 역시 언어를 도구로서 사용함. 소프트웨어는 컴퓨터가 어떤 일을 하도록 명령하는 특수한 언어를 사용하여 만들어진다. 인간의 언어는 의사소통을 하기위해 문법을 갖는 것 처럼, 프로그램을 위한 언어 또한 각자의 문법적 규칙을 갖는다.

terminology

  • source code - 프로그램의 source로서 프로그래밍 언어로 쓰여진 문장들의 집합. 한 source code가 하나의 프로그램 일 수 도 있지만, 여러 source code가 하나의 프로그램을 구성 할 수도 있다.

  • 프로그래밍 언어(programming language) - 위에서 설명 한 것 처럼, 독자적인 문법 규칙을 갖는 프로그램을 위한 언어로서, 형태는 다음과 같이 영어 알파벳과 여러 기호를 사용한다. (Where’s Waldo 프로그램 source code; Python)

  • Compile - Source code -> Program

  • Compiler - “Compile 해 주는 프로그램”

  • Flow Chart - 가장 많이 쓰이는 프로그램의 설계도 중 하나

  • Class Diagram - 가장 많이 쓰이는 프로그램의 설계도 중 하나.

Python

최근들어 다양한 분야에서 많이 사용되는 프로그래밍 언어. 데이터분석, 사무자동화, 웹, 등 매우 다양한 분야에서 널리 쓰일 수 있는 특징을 갖고 있으며, 문법이 굉장히 쉽기 때문에 처음 시작하기 매우 좋은 언어. + 스펙트럼이 굉장히 넓기 때문에 다양한 전문분야에도 쓰인다.

어디에 쓰일 수 있을까??

"""
Heerak Lim, rocky92.lim@gmail.com
"""

import numpy
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('01.findingwally/Beach.jpg',0)
img2 = img.copy()

template = cv2.imread('01.findingwally/wally_department.jpg',0)

w, h = template.shape[::-1]


# 6 different template matching method
methods = ['cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCORR',
            'cv2.TM_CCORR_NORMED', 'cv2.TM_SQDIFF', 'cv2.TM_SQDIFF_NORMED']



figCount=0
for meth in methods:
    img = img2.copy()
    method = eval(meth)

    # template Matching !!
    res = cv2.matchTemplate(img,template,method)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

    # If the method is TM_SQDIFF or TM_SQDIFF_NORMED, take minimum
    if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:
        top_left = min_loc
    else:
        top_left = max_loc
    bottom_right = (top_left[0] + w, top_left[1] + h)

    cv2.rectangle(img,top_left, bottom_right, 0, 2)


    figCount = figCount + 1
    plt.figure(figCount)


    plt.subplot(121),plt.imshow(res,cmap = 'gray')
    plt.title('Matching Result'), plt.xticks([]), plt.yticks([])
    plt.subplot(122),plt.imshow(img,cmap = 'gray')
    plt.title('Detected Point'), plt.xticks([]), plt.yticks([])
    plt.suptitle(meth)

plt.show()

Language preference by users

Drawing

위 표에 나오지 않은 수백, 수천가지의 프로그래밍 언어가 존재한다.

hierarchy programming language (high 와 low의 개념)

Drawing

Binary Code:

Drawing

궁극적으로 CPU가 처리하게 되는 bit들의 모임으로서, 프로그램을 이루는 프로그래밍 언어도 결국 bit들의 조합이다. 인간이 알아보거나 해석하기 매우 힘들다.

Machine Code:

Drawing

16진법으로 표현되어지는 Binary Code

Assembly Code(Language):

Drawing

계층구조에서 Assembly Code 위로는 인간이 해석 할 수 있는 수준이다.

middle level language, high level language: 대부분의 프로그래머가 소프트웨어를 만들 때 사용하는 언어로서 이 안에서도 middle, high로 계층을 나눌 수 있다. 비교적 최근에 나온 언어인 python은 굉장히 쉽고 편리한 문법구조를 갖고있다. python 언어로 만들어진 source code는 interpreter를 거쳐 실행되는데, 이때 interpreter는 python보다 낮은 계층에 위치한(middle level language)인 C로 만들어진 프로그램이다.

Compiler와 Interpreter:

프로그래밍 언어 중에서는 대화식 프로그래밍을 지원하는 언어가 있다. 예를들어 python과 같은 경우 대화식 프로그래밍을 지원하는데(예시 보여주기), 이러한 대화식 프로그래밍 언어(high level)를 해석하여 컴퓨터가 알아들을 수 있는 Low level로 바꾸어 주는 프로그램을 Interpreter라고 한다.

반면 대화식 프로그래밍 언어가 아닌 언어로 만들어진 프로그램의 source code의 경우 Compiler라는 프로그램이 비 대화식 프로그래밍 언어(high level)를 해석하여 컴퓨터가 알아들을 수 있는 Low level로 바꾸어 준다.