2023-11-14 – 개발환경의 변천사

Author

최규빈

Published

November 14, 2023

주의사항!!

본 강의노트는 작성자의 상상에 근거하여 작성되었으며, 사실이 아닌 내용이 포함되어 있을 수 있습니다. (특히 옛날사람들의 코딩습관들)

1. 강의영상

2. 파이썬이 어려웠던 이유

- 파이썬 배우는 초보자에게 가장 어려운것!

  • 선생님마다 파이썬 설치하는 방법이 모두 다름. (수업 한과목 들을때마다 그것에 비례하여 컴퓨터가 더러워짐)

- 왜 저렇게 설치방법이 다른가? 왜 다른 방법으로 각각 파이썬을 실행하는가? 이런것이 너무 어려움

  • 방법1: 파이썬프로그램 다운로드 -> 시작버튼 눌러서 설치
  • 방법2: 아나콘다 설치 (그럼 자동으로 파이썬이 설치됨)
  • 방법3: 아나콘다 설치 + 가상환경

- 심지어 실행하는것도 다름

  • 방법1: 파이썬 프롬프트
  • 방법2: .py를 이용하여 실행?
  • 방법3: IDLE
  • 방법4: 파이참
  • 방법5: 스파이더
  • 방법6: Visual Studio Code
  • 방법7: 주피터노트북, 주피터랩
    • 가상환경을 만들어서 해라..
    • 아나콘다 네비게이터에 주피터가 있다..

- 머리아프니까 collab을 쓰라는 사람도 있음. 아니면 도커이미지를 줄테니까 그걸 쓰라는 사람도 있음. AWS를 쓰라는 사람도 있음.. \(\to\) 이게 더 머리아픔. (여기서 하면 된다는데, 왜 되는것인지 이해가 되어야 할 것 아님..)

- 핵심: 그냥 (1) 컴퓨터에 (2) 파이썬을 깔아서 (3) 실행하는 것임

- 의문: 그런데 방법이 왜이렇게 많은가? 엑셀처럼 프로그램 설치하고 아이콘 더블클릭하면 끝나는 식으로 만들어야 하는것 아닌가?

3. 개발환경 구축방법이 많은 이유?

- 파이썬 개발환경 구축은 수많은 방법이 있다.

- 이는 마치 라면의 레시피를 검색하면 수많은 방법이 나오는것과 유사함.

  • 방법1: 스프를 먼저 넣고 끓인다음 라면을 넣어야 합니다.
  • 방법2: 양은냄비에 물넣고 물이 끊으면 라면과 스프를 같이 넣고 마지막에 계란을 넣는다.
  • 방법3: 먹다남은 삼겹살을 후라이팬에 볶은다음에 물을 붓고 라면을 넣는다.
  • 방법4: 용기에 라면+스프+뜨거운물 랩을 씌운뒤에 젓가락으로 구멍을 뚫고 전자렌지에 돌린다.

- 우리는 모든 방법을 나열할 순 없지만 모든 방법을 이해할 수 있다. 왜냐하면 라면을 끓이는 공통적인 맥락을 우리는 알고 있으니까!

- 파이썬을 설치하는 다양한 방법 역시 공통맥락을 파악하면 이해하기 쉽다.

- 수업의 목적: 파이썬을 설치하고 실행하는 공통맥락을 설명하고 싶음

- 설치하는 방법이 다양한 이유? 파이썬이 인기있음 + 다양한 방법을 설치를 하면 각자의 장점이 뚜렷해서

4. 개발환경의 변화

A. 0세대 프로그래머 (프롬프트)

- 특징: 프롬프트만 쓴다..

# 실습1python 사용

- 윈도우에서 anaconda prompt 실행 -> python

(base) C:\Users\python>python
Python 3.9.7 (default, Sep 16 2021, 16:59:28) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> [1,2,3]+[4]
[1, 2, 3, 4]
>>> a=[1,2,3]+[4]
>>> a
[1, 2, 3, 4]

- 2개를 실행할 수도 있음. (두 환경은 각각 서로 독립적인 파이썬, 변수가 공유되지 않음) \(\star\)

- 아쉬운점: `?list’와 같이 도움말 기능이 동작하지 않음

>>> ?list
  File "<stdin>", line 1
    ?list
    ^
SyntaxError: invalid syntax
>>> 

#

# 실습2ipython 사용

- 윈도우에서 anaconda prompt 실행 -> ipython

(base) C:\Users\python>ipython
Python 3.9.7 (default, Sep 16 2021, 16:59:28) [MSC v.1916 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.29.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: a=[1,2,3]

In [2]: a
Out[2]: [1, 2, 3]

In [3]: a+[4]
Out[3]: [1, 2, 3, 4]

- ?list가 가능

In [4]: ?list
Init signature: list(iterable=(), /)
Docstring:
Built-in mutable sequence.

If no argument is given, the constructor creates a new empty list.
The argument must be an iterable if specified.
Type:           type
Subclasses:     _HashedSeq, StackSummary, DeferredConfigList, SList, _ImmutableLineList, FormattedText, NodeList, _ExplodedList, Stack, _Accumulator, ...

- 색깔이 알록달록해서 문법을 보기 편하다. (구문강조)

#

# 실습3 – 0세대 프로그래머의 삶 with python

- 1부터 10까지 합을 구하는 프로그램을 만들고 싶음

- 시도1: python을 키고 아래와 같이 실행

(base) C:\Users\python>python
Python 3.9.7 (default, Sep 16 2021, 16:59:28) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> total = 0
>>> for i in range(10):
...     total=total+i
...
>>> total
45
>>>

- 반성: 정답은 55인데 45가 출력되었다! \(\to\) range(10)을 range(1,11)으로 바꿔야겠다!

- 시도2: range(1,11)을 바꿔야겠다고 생각하고 다시 입력하다가 오타가 발생

>>> total =0
>>> for i in range(1,11):
...     total = totla +i
...
  • 앗 totla이라고 잘못쳤다.

- 반성: 다음에는 정신을 똑바로 차려야겠다.

- 불편한점: … 다..

#

# 실습4 – 1세대 프로그래머의 삶 with ipython

- ipython을 사용한 프로그래머는 좀더 상황이 낫다

(base) C:\Users\python>ipython
Python 3.9.7 (default, Sep 16 2021, 16:59:28) [MSC v.1916 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.29.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: total = 0

In [2]: for i in range(1,11):
   ...:     total = total + i
   ...:

In [3]: total
Out[3]: 55
  • 편한점1: 자동으로 들여쓰기가 되어서 편함
  • 편한점2: 화살표를 이용해서 for문을 쓰는 도중에 위아래로 이동가능
  • 불편한점1: 화살표로 이동할수는 있는데 마우스로는 이동할 수 없다.
  • 불편한점2: 내가 작성한 코드를 관리하기 어렵다.

#

B. 1세대 프로그래머 (스크립트활용)

- 특징: 스크립트 + 프롬프트를 사용

# 실습1python + .py

- 메모장을 키고 아래의 내용을 적는다.

total = 0 
for i in range(1,11): 
    total = total + i
print(total)

- 파일이름을 mysum.py로 저장한다.

- anaconda prompt에서 mysum.py파일이 저장된 폴더로 이동 -> 실행

(base) C:\Users\python>cd Desktop

(base) C:\Users\python\Desktop>dir
 C 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 9AFD-A05F

 C:\Users\python\Desktop 디렉터리

2022-03-27  오전 11:32    <DIR>          .
2022-03-27  오전 11:32    <DIR>          ..
2022-03-27  오전 12:01             2,306 Chrome.lnk
2022-03-26  오후 08:32             2,332 Microsoft Edge.lnk
2022-03-27  오전 11:33                71 mysum.py
               3개 파일               4,709 바이트
               2개 디렉터리  743,643,467,776 바이트 남음

(base) C:\Users\python\Desktop>python mysum.py
55

(base) C:\Users\python\Desktop>

- 소감

  • 편한점1: 마우스를 이용하여 이동가능
  • 편한점2: 내가 작업한 내용은 바탕화면의 메모장에 저장이 되어있음
  • 아쉬운점: ipython의 장점은 활용못함 (구문강조, 도움말기능)

#

# 실습2ipython + .py

- 전체적인 개발방식

  • 메모장: 코드를 편집, 저장
  • ipython: anaconda prompt처럼 메모장의 코드를 실행하고 결과를 확인 + 구문강조, 도움말확인기능 등을 이용하여 짧은 코드를 빠르게 작성

- 기능

  • ipython에서 !python mysum.py를 입력하면 anaconda prompt에서 python mysum.py를 입력한 것과 같은 효과
  • ipython에서 %run mysum을 입력하면 메모장에서 mysum.py에 입력된 내용을 복사해서 ipython에 붙여넣어 실행한것과 같은 효과

#

C. 2세대 프로그래머 (IDE 활용)

- 메모장과 ipython을 하나로 통합한 프로그램이 등장!

  • jupyter notebook, jupyter lab
  • spyder
  • idle
  • VScode

- 주피터의 트릭 (실제로 주피터는 ipython에 기생할 뿐 아무런 역할도 안해요)

  1. 주피터를 실행

  2. 새노트북을 생성 (파이썬으로 선택)

  • 컴퓨터는 내부적으로 ipython을 실행하고 그 ipython이랑 여러분이 방금만든 그 노트북과 연결
  1. 처음보이는 cell에 1+1을 입력 -> 쉬프트엔터 -> 결과2가 출력
  • 처음보이는 cell하나 = 자동으로 열린 하나의 메모장
  • cell 1+1을 입력 = 메모장에 1+1을 적음
  • 쉬프트+엔터후 결과2를 출력 = cell의 내용을 복사 -> ipython에 붙여넣음 -> ipython 계산된 결과를 복사 -> cell로 돌아와 붙여넣기
  1. 새로운 cell을 추가하고 2+2을 입력 -> 쉬프트엔터 -> 결과4가 출력
  • 새로운 cell을 추가 = 새로운 메모장 추가
  • cell 2+2을 입력 = 새로운 메모장에 2+2를 적음
  • 쉬프트+엔터후 결과4를 출력 = cell의 내용을 복사 -> ipython에 붙여넣음 -> ipython 계산된 결과를 복사 -> cell로 돌아와 붙여넣기

- 중요한 사실들

  • IDE는 내부적으로 연산을 수행하는 능력이 없다. (생각해볼것: 왜 R을 꼭 설치하고 Rstudio를 설치해야 했을까?)
  • 주피터에서 커널을 재시작한다는 의미는 메모장이 열린채로 ipython을 껐다가 다시 실행한다는 의미
  • 주피터는 단순히 ’메모장의 내용을 복사하여 붙여넣는 기계’라고 볼 수 있다. 이렇게 생각하면 주피터는 꼭 ipython에 연결할 이유는 없다. 실제로 주피터에 R을 연결해서 쓸 수 있다. 즉 하나의 IDE가 여러개의 언어와 연결될 수 있다.
  • Jupyterlab이라는 프로그램은 크롬에 있는 내용과 ipython간의 통신을 제어하는 프로그램일 뿐이다.

D. 3세대 프로그래머 (가상환경)

E. 4세대 프로그래머 (원격컴퓨터)