목록분류 전체보기 (498)
규도자 블로그

함수형 프로그래밍을 하면서 느낀 것들 함수형 프로그래밍과 함수형 프로그래밍을 위한 언어를 배우면서 느끼게 된 점이 참 많다. 공부해가면서 크고 작은 깨달음의 과정들이 있었고 또 깨달아가고 있는데 그것들을 지금 적어두지 않으면 경험상 곧 머지않아 당연하게 느끼고 머릿속에서 희석될 것이 뻔하기 때문에 의식적으로 남겨야할 것 같다는 생각이 들었다. 그런 의미로 기록한다. 1. Equal sign(=)에 대한 개념 회귀 프로그래밍을 배우지 않은 사람들은 절대 풀 수 없는 1차방정식 문제가 하나 있다. x = x + 1 하지만 프로그래밍을 배운 사람이라면 x가 생략된 이전의 과정에서 이미 정수형으로 초기화된 상태이며, 그 초기화된 x에 1을 더해 새로이 또 x에 할당한 것이라는 걸 쉽게 유추할 수 있다. 그럼 보..

클로저(closure)란 무엇인가 (clojure 아님. Feat. Python) closure의 사전적인 정의는 이렇다. 프로그래밍에서 사용하는 closure란 1번과 2번, 폐쇄라는 의미를 차용하기 위해 부여한 이름으로 보인다. 그렇다면 프로그래밍에서의 closure란 무슨 의미일까. "중첩된 함수에서 내부 함수가 정의될 때 스코프가 변수를 저장해두어 내부 함수의 변수를 나중에 사용할 수 있도록 하는 것" 을 의미한다. 무슨 말인지 쉽게 와닿진 않는다. 개발자들에게 익숙한 코드로 살펴보자. 우리가 흔하게 볼 수 있는 함수는 이러한 모양이다. def hello(name): inner_var = name print("Hello " + inner_var) hello("World") =============..

가마우지란 무엇이냐. 새의 일종이다. 특이한 점이 하나 있다면 HTML 삽입 미리보기할 수 없는 소스 해당 영상을 굳이 보진 않아도 된다. 중요한 건 가마우지란 사람에게 큰 물고기를 낚아다주고 작은 물고기를 보상으로 받는 새라는 것이다. 그렇다면 유튜브를 가마우지로 만든다는 건 어떤 의미일까. 바로 유튜브 알고리즘 최적화를 통해 내게 도움이 되는 정보를 쏙쏙 물어다주는플랫폼으로 만들자는 것이다. 유튜브는 프로파일별로 추천 알고리즘이 적용되므로 특정 분야에 관한 영상을 계속 보면 그 영상을 좋아하는 사람들이 좋아할만한 다른 것들을 계속 추천해준다. 처음 프로파일을 새로 생성하면 기존에 있던 다른 계정들을 참고한 이러한 추천 목록들을 보여주는데 내가 원하지 않는 관심 영상들은 관심없음을 체크하고 관심있는 분..
파이썬 인터닝 (Python Interning) - 객체 재사용 파이썬 인터닝이란 만들어진 객체를 재사용하는 것을 의미한다. 파이썬을 처음 배울 때 알게 되는 내용이지만 파이썬은 oop를 지원하기 위해 모든 것들을 클래스와 객체로 관리한다. 다른 언어에서는 흔히 자료형이라고 부르는 것들도 객체이다. bool_ = True int_ = 123 str_ = 'zxc' float_ = 12.3 list_ = [1, 2, 3] tuple_ = (1, 1, 1) set_ = {1, 2, 3} dict_ = {'a': 1, 'b': 2, 'c': 3} print(type(bool_)) print(type(int_)) print(type(str_)) print..

인디드(indeed)로 살펴본 프로그래밍 언어의 실력대비 연봉 테이블 요즘 엘릭서(Elixir)라는 함수형 프로그래밍 언어를 실무에 도입하기 위해 스터디를 하고 있다. 시작하기 전의 우려와는 달리 함수형 프로그래밍이 너무나도 재미있고, 그것과 더불어 엘릭서의 엄청난 장점(무중단 배포, 스케일링, 프로세스 관리 등등)을 알게 되면서 대체 왜 이 언어가 메인프레임이 되지 않았을까 궁금해졌을 정도이다. 그정도로 시스템 운영에 필요한 거의 모든 개념이 이미 elixir에 built-in되어있다. 뭐 아무튼 이것과 더불이 올해 초에 봤던 Stack Overflow Developer Survey 2021가 생각났는데 주목할만한 건 함수형 언어들이 연차대비 좋은 연봉을 받고 있다는 점이다. 스칼라, Ruby, Ex(..
brew install elixir iex IO.puts "hello world" 종료: ctrl + c 두 번.

만약에 어떤 분야에 대한 실력을 차트로 표현할 수 있다면 우리들은 머릿속에서 이런 모습을 상상할 것이다. 이것은 흔한 로그함수의 그래프이다. 만약에 x축을 시간, y축을 실력이라고 생각한다면 "실력을 그래프로 표현"한다고 했을 때 가장 쉽게 연상할 수 있는 모양일 것이다. 하지만 실제로는 이렇게 완만하지 않고 크고 작은 깨달음을 얻어가며 결국 로그함수와 비슷한 모습으로 수렴하는 게 보다 적합하다고 한다. 그리고 이걸 보면 알 수 있듯이 상위권으로 가면 갈 수록 작은 디테일이 실력을 구분한다는 것을 알 수 있다. 그러니까 사람은 크고 작은 돈오의 순간을 겪어가며 점점 실력이 늘게 된다. 하지만 계속 프로그래밍을 하면서 느낀 게 있다. 바로 실제 실력 그래프 말고 자신이 인식하는 실력 그래프라는 것이다. 다..

search safe한 숫자압축 알고리즘 (feat. python) 이런 일이 있었다. 어떤 자료에서 해석한 특정 값을 elasticsearch에 저장하고 그것을 검색을 통해 가져와야 했는데 그 특정 값은 길이가 300자가 넘어가는 숫자였다. 그래서 fuzzy나 more_like_this등을 통해 검색을 구현하려 했으나 길이가 워낙 길어서인지 검색이 잘 되지 않았다. 어차피 이 값을 다시 쓰지 않고 그저 검색용도로만 쓸거라면 압축해서 저장하는 게 훨씬 낫겠다는 생각이 들었다. 그냥 간단하게 0부터 9까지는 냅두고 ASCII를 이용해 10부터 이어지는 숫자들을 알파벳이나 다른 숫자들을 이용해 압축하는 느낌으로 접근했는데 구글이나 네이버같이 검색엔진을 써본 사람들은 알겠지만 검색엔진에서는 특수하게 처리하는 ..

파이썬 함수의 매개변수에 쓰이는 bare asterisk(*)의 의미 def include_router( self, router: routing.APIRouter, *, prefix: str = "", tags: Optional[List[Union[str, Enum]]] = None, dependencies: Optional[Sequence[Depends]] = None, responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None, deprecated: Optional[bool] = None, include_in_schema: bool = True, default_response_class: Type[Response] = Default(JSONR..
파이썬의 유닛테스트를 한번에 파악할 수 있는 코드 # unittest_example.py import unittest def add(a, b): return a + b def sub(a, b): return a - b def mul(a, b): return a * b def div(a, b): return a / b class DummyTest(unittest.TestCase): def test_add(self): c = add(10, 20) self.assertEqual(c, 30) def test_sub(self): c = sub(20, 10) self.assertEqual(c, 10) def test_mul(self): c = mul(10, 10) self.assertEqual(c, 100) def..