Operating System, 운영체제
Hardware과 software을 연결되게 하는 Computer OS
<--Software--> ==== <--Hardware-->
Applications -> OS -> CPU + Memory
우리의 프로그램이 동작할 수 있는 구동 환경.
application은 Operating System에 종속되어 있다.
OS를 선택한다? = 어떤 개발환경에서 개발을 실행할 것인가에 대한 선택.
file이란 컴퓨터 등의 기기에서 의미 있는 정보를 담는 논리적인 단위.
모든 프로그램은 파일로 구성되어 있고, 파일을 사용한다.(from wiki)
file system은 root directory로 부터 시작되며,
OS에서 file을 저장하는 tree 구조의 저장 체계를 말한다.
directory는 폴더로 불리기도 하는데,
파일과 다른 디렉토리를 포함할 수 있다.
file은 파일명과 확장자로 식별된다.
실행, 쓰기, 읽기 등을 할 수 있다.
경로란 컴퓨터 파일의 고유한 위치, 트리구조상 노드의 연결을 말한다.
절대경로 : root directory로부터 target file 위치까지의 경로
상대경로 : 현재 directory로부터 target file 위치까지의 상대적인 경로
terminal : display + keyboard
terminal은 mouse가 아닌, keyboard로 명령을 입력해 프로그램을 실행할 수 있다.
terminal은 CLI로 입력하는 화면을 말한다.
(Console = Terminal = CMD)
CLI(Command Line Interface)는 GUI와 달리,
text를 사용하여 computer의 명령을 입력하는 interface를 말한다.
Windows terminal - Powershell, CMD window, Windows Terminal 등
Mac, Linux - zsh, bash, Terminal
shell이 있고 그 안에 코어가 있다고 생각하면 된다.
우리가 terminal을 통해 명령어를 입력하면,
shell을 통해서 core에 명령어가 들어가고,
그것이 작동해서 우리에게 return을 돌려주는 구조임.
각 터미널에서는 program을 작동하는 shell이 존재한다.
그렇기 때문에, shell마다 다른 명령어를 사용한다.

directory에서 ".." 은 현재 directory 기준 한 칸(폴더) 앞으로 가라!
Tab키를 누르면, 긴 이름을 가진 파일을 한두글자만 입력해도 자동으로 불러와준다.
ex)~workspace\test\one-depth>copy ....\abc.txt .\
=> copy : 파일을 카피해라
=> ..\ : 한칸 앞의 test폴더로 가라
=> ..\ : 한칸 앞의 workspace폴더로 가라
=> \abc.txt : 거기 안에 있는 abc.txt 파일을
=> .\ : 현재 디렉토리로 copy 하라
Python은..
C언어로 구현되었다.
platform independent하다.
interpreter language이다.
object-oriented language이다.
dynamic typing language이다.
플랫폼 = OS
윈도우, 리눅스, 안드로이드, 맥 OS, IOS 등 프로그램이 실행되는 운영체제를 플랫폼 이라고 함.
Independant = 독립적인 -> 상관없는, 관계없는
프로그램을 작성하면 OS에 상관없이 사용이 가능하다.
Interpreter = 통역기를 사용하는 언어
통역기를 사용한다는 뜻은 소스코드를 바로 실행할 수 있도록 지원하는 프로그램 실행 방법을 뜻한다.

원래는 소스코드를 기계어로 먼저 번역하고,
이를 플랫폼(OS)에 최적화하여 프로그램을 실행하는 데 반해,
인터프리터 언어는 소스코드를 실행시점에 해석하여
별도의 번역과정(기계어로 번역하고 이를 다시 OS에 맞게) 없이
컴퓨터가 처리할 수 있도록 한다!

객체지향(Object Oriented)란 실행문서가 아닌 단위 모듈(객체)을
중심으로 프로그램을 작성하는 것을 뜻한다.
각 단위 모듈이 목적이 있다는 것이다.
이런 목적이 있는 각 모듈을 조립해서 큰 프로그램을 만들어낸다는 것.
각 객체는 어떤 목적을 달성하기 위해서
data를 저장할 수 있는 속성 attribute,
그리고 data에 대하여 행동할 수 있는 method가 있다.
동적 타이핑 (Dynamic Typing)이란,
Programming이 실행되는 그 시점에,
사용해야할 그 data의 type을 결정하는 방식을 말한다.
사람들은 왜 파이썬을 많이 사용할까?

핵심은, 사람의 시간이 기계가 사용하는 시간에 비해 소중하다는 점에 있다.
어떻게 보면 이는 컴파일 언어와 인터프리터 언어의 차이로도 볼 수 있는데
파이썬은 쉽고 간단하며 다양하다는 특징을 가진 언어이다.
기존 컴파일 언어는 프로그램을 작성하는데 걸리는 시간은 오래 걸리지만,
그에 반해 프로그램을 실행하는데 걸리는 시간은 적게 걸린다.
하지만 인터프리터 언어는 프로그램을 작성하는데 컴파일 언어에 비해 시간이 적게 걸리고 프로그램을 실행하는데 시간은 비교적 오래 걸린다.
이전에는 컴퓨터의 성능이 좋지 않다 보니, 사람의 시간보다 기계의 시간이 훨씬 중요했다. 그렇기 때문에 기계의 시간을 줄이기 위해 컴파일 언어를 많이 사용했다.
그렇지만, 시간이 지남에 따라 기술이 눈이 부시게 발전하고 있고 이에 따라, 기계가 프로그램을 실행하는데 얼마만큼의 시간을 쓰는 지보다, 사람이 조금 더 많은 코드를 작성할 수 있는 것이 더 많은 가치를 지닌다.
파이썬은 쉬운 문법과 다양한 라이브러리로 이미 널리 쓰이는 언어가 되었다.
개발 환경이란?
프로그램을 작성하고, 실행시키는 환경을 말한다
일반적으로 Conding Environment라고 부른다.
개발환경을 결정하는 것은 세 가지다.
1) 운영체제(Operating System, OS)
2) Python Interpreter
3) 코드 편집기(Editor)
OS는 세가지 정도가 있는데,
1) Windows
장점 : 친숙하고 초기에 쉽다.
단점 : 모듈 설치가 어렵다
2) Linux
장점 : 모듈 설치 쉬움, Free, 참고문서가 많다.
단점 : OS 자체 사용이 어렵다.
3) Mac OS
장점 : 모듈 설치 쉽다, 참고 문서가 많다.
단점 : 비싸다.
기존 라이브러리 사용 여부에 따라 버전을 선택한다.
2020년 부터 Tensorflow에서 2.X 버전 지원하지 않는다.
1) Python
2) Anaconda(Miniconda)
파이썬 코드도 일종의 문서이다.
그렇기 때문에, 한글이나 워드처럼 코드를 입력할
text editor가 필요하다.
text 타입의 문서를 저장하는 모든 편집기가 사용가능하다.
1) 메모장 : 윈도우의 기본 문서 편집도구
2) VI editor : 리눅스의 기본 문서 편집도구
3) Sublime Text, Atom, VS Code : 프로그램에 특화된 문서 편집도구
4) PyCharm : 다양한 기능을 갖춘 파이썬 전용 개발 도구
코드 편집기는 두 가지 타입이 존재한다.
1) 설치 Appication Editor
VS Code : MS에서 제공하는 코드 편집 도구, 최근 가장 빠르게 발전 중
Anaconda : 간편한 파이썬, 패키지 관리도구, ML의 사실상 표준
2) Web 기반 interactive Editor
Jupyter : web 기반 interactive 코드 편집기의 표준
Google Colab : 구글에서 제공하는 cloud 기반 interactive Code Editor
Reference
https://www.boostcourse.org/precourse1/lecture/1547326?isDesc=false