TIL | 프로그래밍 기초

0

TIL

목록 보기
3/12

TIL | 프로그래밍 기초 | 221020

고민

html,자바 등 강의를 보다보면 컴퓨터 기초를 몰라서 답답해지는 일들이 생긴다.
그래서 간간히 추천받은 강의를 봐야겠다. 길고 깊게 파면 자바 회피용이 된다.

강의

컴맹을 위한 Go언어 기초 프로그래밍 1~6 강의
https://youtu.be/Tq3W8UyltFs


1. 트랜지스터를 알아보자

트랜지스터

사진 출처: 위키백과

-> 컴퓨터의 근본!
-> 전기 흐름을 증폭하여 원하는만큼 스위치 켜고 끄는 반도체 소자
-> 0, 1을 표현할 수 있다.
-> 1bit = 1트랜지스터..복잡도가 커질수록 많이 필요
-> 트랜지스터 증폭원리를 찾아보면 재밌을 것이다

2. 트랜지스터로 논리소자를 만든다

논리소자

-> BOOL대수를 만들 수 있다
(두 입력값의 참/거짓 여부에 따라 결과값 달라지는 애들: and,x/or,not)
-> 만드는 방법..은 좀 어렵다
-> 옴의 법칙: 저항이 클수록 물체에 전기가 흐르지 않는다 -> 부/도체로 이를 구분하는데..
트랜지스터는 전류가 흐를 때는 도체, 안 흐를 때는 부도체가 됨 -> 반도체라 함
-> 뒷부분 적기가 좀 곤란하다. 논리소자 원리?
트랜지스터 ~ 논리소자 ~ 계산기 ~ 컴퓨터

3. 논리소자가 컴퓨터가 되기까지

컴퓨터가 만들어지는 과정

  • 규소(모래) ~ 실리콘 ~ 트랜지스터 ~ 논리소자(1,0) ~ 계산기 ~ 컴퓨터
  • 튜링 테스트: 칸 너머의 존재가 12세 이하 인간인지 AI인지 묻는 실험
    튜링 기계: 앞뒤 왔다갔다하며 연산 수행(컴퓨터 있기 전 튜링이 생각한 기계)
    폰 노이만 기계: 프로그램을 메모리에 적자, 그럼 ip만 바꿔서 여러 프로그램 돌리자
    (현재 컴퓨터) ip= instruction pointer 명령어 수행 위치

4. 컴퓨터의 원리

그래서...컴퓨터란?

  • 명령을 하나씩(한 코어에 명령 하나씩) (프로그래머가 원하는)순서대로 수행하는 기계
  • 프로그램: 어떤 명령을 어떤 순서로 수행할 것인지 적어놓음
  • 어떻게 여러 기능을 수행하는가?(문서,게임,음악,이미지..)
    표현가능한 최소 단위에 특정 숫자?를 지정하여 조합하여 표현함
  • 하드웨어의 작용
    요리책: 프로그램, 마트 갈 수단:bus, 마트:hdd,
    냉장고:memory, 재료: 파일 등
    재료를 꺼내놓은 곳: cache(계속 냉장고를 여닫는 것보다 편리), 도마: register

5. 프로그래밍 언어란?

프로그래밍 언어

  • 프로그램: 명령과 순서 쓴 문서....에 써져 있는 글이 프로그래밍 언어

  • 인간의 언어(고급언어: c,자바 등)를 기계가 알아듣는 언어(기계어)로 변환해야 컴퓨터 작동
    가능, 이 중 변환이 쉬운 언어를 어셈블리어라 함, 변환기는 compiler

    프로그래머 -> 코딩 -> 빌드(변환) -> 기계어

  • 명령어에 숫자 대입한 것 : OPCODE(예. ADD= 0001 이런 식으로)

프로그래밍 언어(고급언어) 종류

- 컴파일 언어
C, C++, GO / 코딩 -> 빌드 -> 기계어, 기계어를 한번에 만든다 / 속도 빠름

- 동적 언어
C#, JAVA, JS, PYTHON / 코딩 -> 빌드?->중간언어 문서 (->필요한 것 그때그때 기계어로)
C#, JAVA는 중간과정 필요, 완성도 높다.

첫 언어 C추천
(이랬다가 포기했었던 아픈 역사가 떠오른다)

  • 정적 언어는 컴파일 타임에 차입이 정해지는 언어, 아닐 경우 컴파일언어면서 동적 언어.
    인터프리터 언어는 컴파일이 필요없는 언어로 정적타입이거나 동적타입일수도.
    대부분 언어는 컴파일 언어면 정적이고 인터프리터 언어면 동적언어

6. 컴파일 언어와 동적 언어의 차이

컴파일 언어가 꼭 좋은 것인가?

  • 문제! 플랫폼 별 다른 변환이 필요해서, 플랫폼마다(윈도/맥) 실행파일이 달랐다.
  • cpu사(인텔, AMD, IBM...)마다 어셈블리어에 주는 OPCODE가 다르다.새 코드도 추가된다.
    -> 그렇게 동적 언어 탄생. 속도 발전 중

활용

프로그램 기본은 빠른 컴파일 언어로, UI등은 동적 언어로 만들고는 한다.

0개의 댓글