개발을 한지 이제 15년 정도 되어 가는 것 같다. 그러나 일정은 계산하는 것은 아직도 어렵다. 

개발 경력이 낮을 때에는 요청하는 기능이 개발 가능한지 불가능한지에 대해서도 예측이 안되기 때문에 일정을 계산하기 어려웠다. 경력이 쌓이고 나서는 요청받은 기능이 개발적으로 불가능하면 기획이라든지 요구사항을 조금씩 협상해 가면서 일이 가능하도록 유도하는 기술이 쌓이게 된다. 그런데 이 때도 일정 계산은 어렵다. 이 때부터 개발과정은 일정과 완성도 사이의 적절한 타협을 하게 된다. 경우에 따라서는 양보할 수 없는 완성도라는 것도 있다보니 (참고로 여기서 말하는 완성도 의미는 사용편의성, 유지편의성, UI 의 화려함, 적절한 속도, 프로그램의 안정성 등등을 모두 포함하는 말이다. ) 일정이 예상했던 일정보다 늘어나기도 한다. 그러나 반대로 일정이 줄어드는 일은 없다. 이 때는 완성도를 높이기 위해 작업하기 때문이다. 

완성도 문제 이외에도 많은 문제가 일정 계산을 어렵게 한다. 개발 과정에서 기획에서 고려하지 못했던 요소가 드러나기도 하고, 예전에 그냥 무시했던 코드가 갑자기 이거 이번 기회에 고쳐야겠는데 라는 마음이 생기기도 하고. 해당 기능을 구현하기 위해서는 특정 라이브러리의 버전업이 필요할 것 같은데, 그러면 기존에 잘 동작했던 것이 문제가 생기기도 하고. 갑자기 다른 업무 때문에 회의가 잡혀서 개발 시간을 까먹기도 하고. 등등의 문제로 일정 계산이 아직도 나에게는 어렵기만 하다. 

 파이썬 extended slices 라는 것을 공부하게 되었다. 이게 무려 파이썬 2.3 대에서 부터 있었던 것이다. https://docs.python.org/release/2.3.5/whatsnew/section-slices.html

흔히 arr = list(range(10)) 에 대해서 arr[1], arr[1:2] 같은 것은 잘 알고 있을 것이다. 그런데 이 콜론이 2개까지 사용할 수 있다. 이건 마치 C나 Java 언어에서 for 문을 사용하는 것 같은 형태이다.  맨 앞이 초기값, 중간이 종료값-1, 마지막이 증감을 의미하는 형태로 사용할 수 있다. 그리고 그 숫자는 생략 할 수 있다. 다음과 같은 형태 모두 가능하다. 

arr = list(range(0,10))  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
arr[0:2]  # [0, 1]  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
arr[0:10:2]  # [0,2,4,5,8]
arr[:10:2] # 맨 앞을 생략하면 0부터 시작한다.  [0,2,4,5,8]  
arr[0::2] # 맨 뒤를 생략하면 리스트 끝까지를 의미한다. [0,2,4,5,8] 
arr[::2] # 맨 시작과 끝 모두 생략 가능하다. [0,2,4,5,8] 
arr[1::2] # [1, 3, 5, 7, 9]
arr[::3] # [0, 3, 6, 9]
arr[:] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
arr[::] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


나는 이때까지 3번째 인자를 사용하지 않고 있었다. 그러다 보니 증감이 기본값인 1로 적용하고 사용한 것이었다. 

이게 파이썬 버전 2때부터 있었다니. 분명 나는 이것을 책으로 배웠을 것 같은데, 계속 웹프로그래밍만 하다보니 사용할 일이 없다보니 이러한 Slice  방식이 매우 새롭게 느껴진다. 

 

  파이썬에 정수 나눗셈 연산자가 있는지 있는지 오늘 처음 알았다. github 에서 다른 사람이 짠 코드를 보고 이건 뭔가 하는 코드를 발견했다. 혹시 정수 나눗셈인가 하는 의심이 들어 찾아 보니 파이썬에 정수 나눗셈 연산자가 있었다.

# 이건 결과가 float
a = 12 / 5

# 이게 결과가 integer
b = 12 // 5

print("a = ", a)
 # a =  2.4
 
 print("b = ", b)
 # b = 2

 

파이썬 버전 2에서는 C나 C++ 언어처럼 정수 나누기 정수의 결과도 정수였다. 그런데 파이썬 버전 3에서부터 비개발자도 이해하기 쉽게 하기 위해 정수 나누기 정수일지라도 비개발자도 이해할 수 있게 float 데이터 처럼 결과를 보여주기 시작했다. 분명 이 연산자는 파이썬 버전 3 처음부터 있었을 텐데, 오늘 처음 인식하게 되었다. 

아마 내가 파이썬 버전 2.7 대에서는 주로 Django 로 서버를 만드는 일을 했을 것이다. 그리고 그 Djanog 가 더 이상 파이썬 버전 2를 지원하지 않게 되자, 나도 파이썬 버전3로 전향을 하게 되었다.  파이썬 버전 2.7에서 버전 3로 넘어갈 때 걱정이 많았다. 그런데 생각외로 큰 변화가 없어서 쉽게 전향을 했던 것 같다. 파이썬 2에서 버전 업을 할 때 조금씩 파이썬 버전 3 기능을 지원했기 때문에 자연스럽게 전환을 했던 것 같다. 

역시 남의 코드를 자주 봐야 다양한 기능을 익히고 문법도 익히고 스타일도 익히게 되는 것 같다.