고민하기 15

빅오(O)는 왜 최악의 경우가 아닐까

상한보다 최악이 있는가 헷갈리는 부분이라 고민을 해보고 싶어서 작성한다. 먼저 시간 복잡도에서 빅오는 충분히 큰 입력을 가정하며, 입력에 대한 연산수로 알고리즘의 실행 시간을 표기하는 방법이다. 이 때 빅오는 상한, 빅오메가는 하한, 빅세타는 평균의 의미로 사용한다. 그런데 나는 상한(Upper Bound)라는 말이 왜 최악과 같지 않은지 와닿지 않았다. 위와 아래로 일정한 범위를 이루고 있을 때, 위쪽의 한계 상한의 정의는 위쪽의 한계. 이보다 더 높을 수 없기 때문에 시간을 기준으로 가장 오래걸리는 최악이다. 그런데 왜 최악과 상한을 분리시켜 봐야하는가? 그림을 그려보았다. 알고리즘에는 입력 데이터의 수, 그리고 정렬의 경우 데이터 배열에 의해 최선/최악의 연산수가 결정된다. 어떤 알고리즘의 연산수가..

고민하기 2021.07.02

구글 파이썬 스타일 가이드 - 2.12 Default Argument Values (Mutable vs Immutable)

1. 구글 파이썬 가이드 - Default Argument Values "파이썬 알고리즘 인터뷰"라는 책을 쭉 읽으면서 그냥 넘어가지 못한 구간이 있다. 구글 파이썬 스타일 가이드를 설명하던 중, 아래와 같은 글귀와 코드를 보여주었다. 함수의 기본 값으로 가변 객체(Mutable)를 사용하지 않아야 한다. # No def foo(a, b=[]): pass # No def foo(a, b: Mapping = {}): pass # Yes def foo(a, b=None): if b is None: b = [] # Yes def foo(a, b: Optional[Sequence] = None): if b is None: b = [] 위 코드에서 "No"라는 comment에 적힌 함수들을 사용하지말고, "Yes..

고민하기 2021.06.29

객체(Object), 클래스(Class), 인스턴스(Instance)를 구분할 수 있을까

단어는 많은 것을 포함하고 있다. 무언가를 설명하거나 말을 할 때는 용어 선택에 따라 이해가 달라질 수 있다. 따라서 단어를 명확히 정의하고 올바른 단어선택을 해야한다고 생각한다. 이에 나는 단어가 갖는 의미를 깊게 생각하는 일이 빈번하다. 클래스와 인스턴스의 정의 처음 객체지향(Object-Oriented)를 접할 때 헷갈리는 용어는 클래스(Class)와 인스턴스(Instance)였다. 클래스와 인스턴스의 정의는 다음과 같다. 클래스 (https://ko.wikipedia.org/wiki/클래스_(컴퓨터_프로그래밍)) - 클래스는 객체 지향 프로그래밍(OOP)에서 특정 객체를 생성하기 위해 변수와 메소드를 정의하는 일종의 틀이다. 객체를 정의하기 위한 상태(멤버변수)와 메서드(함수)로 구성된다. 인스턴..

고민하기 2021.06.29

Parameter(매개변수)와 Argument(전달인자)의 차이

# 여기서 a, b는 parameter def func(a: int, b: int) -> int: return a+b # 여기서 1, 2는 argument func(1, 2) Parameter는 함수 안에서 정의되어 실제값을 전달해주는 임의의 변수. Argument는 함수에게 전달할 실제 계산될 값. 누군가에게는 너무나 당연한 사실, 혹은 중요하지 않을 수 있다. 실제로 두 용어의 쓰임에 대해 아직 명확하게 정의되지 않았으며, 따라서 위에 설명한 내용이 맞다라고 할 수 없다. 나는 길게 설명을 잘 못하고 명확한 것을 좋아하기 때문에, 확실하게 용어를 정의하고 이를 사용하여 설명하는 것을 좋아한다. 이에 대해 고민해주는 여러 사람들 덕분에 두 용어의 차이가 만들어져가고 있고, 더 확실해지면 좋겠다. 이 내..

고민하기 2021.06.27

기업들이 말하는 데이터 엔지니어

데이터 엔지니어를 조사하게 된 이유 데이터 엔지니어가 되고싶어졌다. 흔한 계기로 시작했지만 나에겐 매우 중요한 일이다. 데이터 엔지니어가 되고 싶다는 이야기를 할 때마다 "데이터 엔지니어가 왜 되고싶어?"라는 질문이 항상 뒤따랐다. 나는 데이터 엔지니어를 정의하지 못하기 때문에 항상 추상적인 대답을 해야했다. 물론 이제 시작하는 입장에서 추상적인 대답이 틀린 것은 아니라고 생각한다. 하지만 되고싶다면 적어도 무슨 일을 하는지, 어떤 능력이 필요한지는 알고 목표 의식을 가져야한다. 학생 때처럼 뉴스에서 본 아동성추행범 잡아쳐넣겠다고 막연하게 검사가 되겠다고 이야기 하기에는 현실성 있게 커버렸다. 먼저 데이터 엔지니어를 정의하고 있는 기업들의 글들을 정리해보기로 했다. 데이터 엔지니어는 직업이고, 그들은 회..

고민하기 2021.06.23