블로그 이미지
자유로운설탕

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

Notice

2017. 8. 19. 23:28 프로그래밍

  이제 개인적으로 소프트웨어를 바라 보는 관점에 영향을 주었던 글을 하나 소개하면서, 구글로 공부하는 파이썬 시리즈를 마무리 하려 한다.

 

 

[목차]

0. 왜 파이썬 공부에 구글을 이용하는게 좋은가?

1. 언어를 바라보는 방법. 파이썬을 어떻게 바라봐야 할까?

2. 파이썬 설치와 환경, 버전 선택 하기의 이유.

3. 만들고자 하는 기능을 모르는 조각으로 나눠 조사해 보기

4. 데이터 베이스에서 내용 가져와 출력하기

5. 암호화 모듈을 이용해 암복호화 해보기

6. 퍼즐 조각들을 합쳐보기

7. 엑셀 파일 사용해 보기 -> 부록 : fuction 을 이용해서, 코드 정리해 보기

8. 정규표현식을 왜 사용해야 할까? 언어속의 미니 언어 정규표현식 살펴보기

9. 입력과 결과를 GUI 화면과 연결해 보기

10. Whois API 이용해 보기

11. 웹페이지 호출해 내용 파싱 하기(BeautifulSoup 그리고 한계)

12. 자동화 - 웹 자동화(with Selenium)

13. 자동화 - 윈도우즈 GUI 자동화(with pywinauto)

14. 자동화 - 작업 자동화

15. 수학 라이브러리 살펴보기

16. 그래픽 라이브러리 살펴보기

17. 머신러닝에서의 파이썬의 역활

18. 웹 프로그래밍 - Legacy Web

19. 웹 프로그래밍 - Flask 살펴보기(feat. d3.js)

20. 웹 프로그래밍 - Django 살펴보기

21. 정리 - 이런저런 이야기

 

 

[추가]

현재 모바일에서 코드(colorscript 이용)가 나온 후에 글 색깔이 흐려져서 읽기가 어렵네요. 티스토리 개편하고 현재 스킨이 너무 예전것이라서 그런가도 싶긴한데, 수정이 쉽진 않을것 같아서 일단 웹에서는 정상적으로 보이니 웹을 이용해 주세요. 조만간 수정해 보도록 하겠습니다.

감사합니다.

 

 

[The five orders of ignorance]

  저도 몇년전에 누군가에게 소개 받았던 글이긴 하지만, 'Communications of the ACM' 저널에 실렸던 'The five orders of ignorance(무지의 5계층)' 라는 소프트웨어 개발에 대한 글을 소개하려 한다(아래 URL 안의 링크를 클릭하면 pdf 로 된 전체 글을 다운받을 수 있다).

http://www.corvusintl.com/CACM002-5OI.htm

 

  약간의 개인적인 해석을 추가해 요약하자면 아래와 같다.

 

  인류가 가지고 있는 지식을 저장하는 매체는 DNA, 뇌, 하드웨어, 책을 거쳐 현재는 소프트웨어라는 형태가 생겨나게 되었다. 소프트웨어는 뇌처럼 공간이 제한되어 있거나, 쉽게 변하지 않고, 책처럼 수동적이지도 않으며(뭐 읽는 사람에게 감성과 상상력을 일으킨다는 측면에서는 그렇지 않을지도 모르지만...), 하드웨어나, DNA 처럼 느린 변화를 가지거나, 유연성이 부족하지도 않다.

 

  우리가 소프트웨어 제품을 만든다는 것은, 특정한 제품 자체를 만드는것이 아닌 우리가 알고 있는 지식들을 저장하는 매체를 구현하는 행위라는 것이다. 그래서 소프트웨어의 잘 알려진 지식들은 프레임워크나, IDE 를 통해서 자동으로 코드를 만들어 낼 수 있는 반면에, 다른 특정한 부분들은, 직접 해당 지식을 획득하여 구현해 내야 한다.

 

  예를 들어 현재의 파이썬 시리즈를 다 읽은 시점에서, 새로운 파이썬 프로그램을 만든다고 해보자. 그 중에 어떤 부분들은 우리가 이미 알고 있는 지식을 재사용하여 쉽게 구현할 수 있으며, 만약 새로운 프로그램의 주요한 부분들이 기존에 지식들과 유사하다면, 정말 쉽게 짧은 시간에 새로운 프로그램을 만들 수 있을 것이다. 그런데 만약에 우리가 현재 다루지 않았던 기능을 가진 프로그램을 만들려 한다면 해당 분야에 대한 지식을 추가로 획득해야 한다. 추가적인 지식이 필요한 경우인 경우라도 다른 유사한 프로그래밍 경험을 통해서, 해당 지식의 영역(예를 들어 쓰레드 구현)을 경험해 본적이 있다면 프로그래밍 언어의 차이점만을 잘 극복한다면 백지에서 시작하는 것보다 좀더 쉽게 원하는 지식을 획득할 수 있을 것이다. 아마도 최악의 경우는 어떻게 해당 부분을 해결해야 할지에 대한 방법이 전혀 감이 잡히지 않는 경우일 것이다.

 

  이런 관점에서 볼때 소프트웨어 개발은 지식을 획득하는 활동인 동시에, '무지(ignorance)' 를 줄이거나 제거하는 활동으로 바라볼 수 있다. 이 글에서는 이러한 측면에서 무지의 계층을 5단계로 나누어 제시한다.

  • 0 계층 - 무지의 결핍(Lack of Ignorance) : 무언가를 오랬동안 경험해 왔기 때문에 그것에 대해 잘 아는 상태이다. 오랫동안 보트를 타봤다면 어느 정도 항해에 대해서 잘 안다고 얘기할 수 있는 것처럼 말이다.
  • 1 계층 - 지식의 결핍(Lack of Knowledge) : 무언가를 모른다는 것을 정확히 알고 있는 상태이다. 예를 들어 러시아어를 못한다는 것을 안다면, 러시아어를 공부하기 위해 학원을 다니거나 책을 봐야한다는 것을 명확히 알수 있다.
  • 2 계층 - 의식의 결핍(Lack of Awareness) : 무엇을 모른다는 것 자체를 인지하지 못하고 있는 상태이다. 무엇을 모르는지 자체를 모르기 때문에, 무엇을 해야 하는지도 모르는 상태 이다.
  • 3 계층 - 프로세스의 결핍(Lack of Process) : 인지하지 못하는 무지를 알수 있게 해주는 수단 자체가 없는 상태를 얘기한다. 그것은 특정한 프로세스의 부재 일수도 있고, 특정한 환경의 부재일 수도 있다.
  • 4 계층 - 약간 유머 같긴 하지만, 무지의 5계층 자체를 모르는 단계라고 한다. 이 글을 읽게 되면 이 단계에서 벗어나는 셈이라고 한다.

 

  개인적으로는 이 글에 공감이 가서 소프트웨어를 바라보는 관점이 많이 바뀌게 되었고 설명은 하기 어렵지만 왠지 좀더 대상을 편하게 바라보게 되었다. 소프트웨어에 대한 여러 다양한 기술 업무들이 비슷하게 무지를 줄이고, 숨어있는 무지들을 찾아내는 활동이라는 생각이 들었으며, 결국 소프트웨어에 담겨있는 내용은 지식이기 때문에, 소프트웨어이외의 다른 분야들의 좋은 접근 방법이나 개념들도 무형적 지식이라는 측면에서 비슷하게 연결이 되는게 아닐까하는 생각도 들었다. 스타크래프트의 'Black Sheep Wall' 처럼 무지의 영역을 한순간에 밝혀주는 마법의 치트키는 없겠지만, 자신이 모르는 필요한 부분들을 계속 발견하고 해당 영역들을 채우는 것이, 소프트웨어에 관한 직업을 가져가면서 스트레스를 덜 받는 방법이 아닌가 싶다.

 

 

 

 

[마무리 하면서]

  이 글의 목적은 읽는 사람을 파이썬에 대해서 어느 수준까지 끌어가는 것은 아니다(개인적으로 그럴만한 능력도 안된다고 생각하고...). 오히려 프로그래밍이란 생각보다 모호한 일이며, 다른 사람들이 미리 만들어 놓은 수많은 지식과 접근법들을 조합하여 문제를 해결하는, 정답이 여러개이며 완벽한 정답은 없는 선택적 영역이라는 것을 얘기하고 싶었다. 또한 코드를 만드는 과정에서 무언가가 막혔을때, 검색 엔진을 이용해 문제를 찾아서 해결하는 과정에서 일어나는 '헤멤'이라는 활동을 실제로 보여주고 싶기도 했다(뭐 다른 사람은 다른 방식으로 헤멜 수는 있을 것 같다). 그리고 조금 욕심을 내자면 각 주제 영역에 대해서 스스로 공부할 수 있게, 조금 먼저 길을 걸어본 입장에서 해당 지식들에 대한 접근 방법을 안내를 하고 싶었다. 얼마나 해당 부분을 충족 시켰는지 자신은 없지만, 목표로 했던 이야기들은 다 한 것 같아서 여기서 일단 글을 멈추려고 한다. 다들 너무 부담 갖지는 말고 천천히, 하지만 꾸준히 공부 하시기를 바란다.

 

 

 

 

2017.8.20 by 자유로운설탕
cs

 

  

 

 

posted by 자유로운설탕