본문 바로가기

전체 글

(56)
땅에 발을 디디고 싶어요 회사에서 릴리즈 빌드에 디버거를 쓸 일이 있었다. 소스 코드를 같이 볼 수는 없었고 변수는 죄다 이라고 떴다. 간단한 버그라 원인은 뻔했는데 기회다 싶어서 어셈블리를 까보기로 했다. 아는 명령어라고는 mov add 정도밖에 없지만 정 안 되면 Claude가 알려줄 거라 믿었다. 기본적으로 모르니까 때려맞출 수밖에 없었고, 이때 사용한 지식은 3가지다. 1) 분기에 따라 점프하는 코드2) 함수를 호출하는 라인에서 친절하게 표시해준 진입할 함수 이름3) 특정 레지스터의 값에 상수를 더하여 다른 레지스터에 집어넣는 건 구조체 변수를 호출하는 것일 가능성이 높다는 점 위 내용을 바탕으로 대충 맞다 싶으면 캐스팅했다. 결론적으로 때려맞추는 데 성공하기는 했다. 원인은 짐작했던 대로 변수의 초기화를 명시적으로 하지..
0.1 + 0.2 != 0.3은 true인가? 잘 알려졌듯이 많은 프로그래밍 언어가 true로 평가한다. 재밌는 사실이다. 재미없는 부분도 있는데, 그 이유를 기술 면접에서 묻는 경우가 있다는 풍문이 들린다는 점이다. 개인적으로 이건 CS 지식이 아니라 수학 문제라고 생각한다. 극단적인 시점에서 대충 보면 중학교 수준의 문제기도 하다. 우선 숫자의 표현 한계에 대해 생각해보자. 모든 자연수는 2의 거듭제곱의 유한 급수(finite series)로 표현할 수 있고(존재성), 그것이 유일하다(유일성). 사실 증명은 안 해봤는데 그렇게 어려울 것 같지는 않다. 임의의 자연수 n이 존재한다고 하자. 자연수는 2로 나눌 때마다 나머지가 0이거나 1일 것이다. 이걸 몫이 0이 되는 순간까지 반복하면, 짜잔. 2의 거듭제곱에 대한 급수로 자연수 n을 표현할 수..
[BOJ] 14449 주사위 굴리기 https://www.acmicpc.net/problem/14499 주어진 보드 위에서 규칙대로 주사위를 굴리고 주사위의 변화를 출력하는 문제. 1/ 조건1) n*m 격자의 보드 정보, 주사위의 시작 위치가 주어진다.2) 주사위는 동서남북으로 굴릴 수 있으며, 한 번에 한 방향으로 한 칸씩 굴리는 명령어가 k개 주어진다.3) 주사위와 보드 숫자 사이의 상호작용이 있는데 자세한 건 링크를 참조하자. 2/ 설계단순한 구현 문제. 규칙은 간단하다. 방향에 따른 주사위의 회전을 코드로 표현하는 게 거의 전부라고 봤다. 3/ 구현# presettop = 0east = 1west = 2north = 3south = 4bottom = 5dx = [0, 0, 0, -1, 1] # 0-th idx is dummydy ..
POCU 아카데미 C++ 언매니지드 프로그래밍 수강 후기 올해 5월 5일부터 수강했던 강의가 끝났다. C++ 강의로, 인터넷 강의에 과제 및 시험이 포함된 형태였다. C++을 고른 이유는 컴파일러야 부탁해에서도 말했듯이 C언어를 하고 있는데 객체지향은 좀 알아야 할 것 같아서였다. POCU 아카데미를 고른 이유는 과제가 있어서. 나는 외압이 있어야 뭔가를 하는 타입이고, 100만원을 들이붓고 데드라인이 주어지는 만큼 뭔가 얻어가리라고 생각했다. 최소한 '나는 인강을 듣지 말아야 하는 사람인가 보다ㅎ' 정도의 결론이라도 얻을 수 있을 테니. 이하는 강의에 대한 정보와 감상을 Q&A 형식으로 쓴 것이다. 1) 듣기를 잘했는지?그렇다, 듣길 잘했다. 이 강의가 살면서 완강해본 첫 인터넷 강의가 되었다. 강의가 좋은 것도 있고, 과제가 외압으로써 잘 작용한 것도 있고..
LLM에 대해 망상하기 양적 변화가 질적 변화를 야기한다. 나는 이 말을 변증법의 맥락보다는 상전이(phase transition)의 맥락으로 생각한다. LLM - 거대 언어 모델 또한 그런 예시라고 생각한다. 파라미터의 개수가 "지능"(그러니까 지능처럼 보이는 무언가)을 야기했다. 물론 나는 같은 논문을 읽어본 적은 없다. 그냥 카더라만 주워 듣고 그런가보다 하는 거지. 그러니까 이 글은 망상이다. LLM에서 언급되는 27B 따위는 파라미터다. 모델을 기술하는 변수의 개수. 그러니까 모델의 복잡미묘함을 다루기 위해 270억 개의 변수가 필요하다는 것이다. 하지만 그 270억 개의 파라미터를 전부 의식적으로 다룰 수는 없을 것이다. 보다 조작 가능하게 바꾸는 것이 일반적일 테고, 그러기 위해 어떠한 인터페이스를 씌울 것이다...
컴파일러야 부탁해 C++을 공부하고 있다. 그놈의 객체지향이 뭔지 좀 느껴보려고. Django를 하면서 상속은 받아봤지만, JavaScript에서 prototype을 대충 써봤지만, Java를 깔짝대면서 맛은 보긴 했지만. 역시 모자라다. Java, C#, TypeScript… 여러 선택지가 있지만 C++을 골랐다. 이유는 내가 지금 하고 있는 게 C라서. 앞으로 어떤 커리어 패스를 밟아나가야 할지 감이 없으니 좀 더 진입장벽이 낮은 걸 하기로 했다. C도 더 이해할 겸해서. 보면서 감탄했던 지점이 한두 가지가 아니다. 초창기 C언어에서 고통 받았던 지점에 대한 해소와 새로운 트렌드의 도입을 어떻게든 해냈달까. 제일 재밌었던 건 참조형과 캐스팅이었다. 런타임의 속도는 늦추지 않으면서 보다 휴먼 에러를 줄여줄 수 있는 디자..
2024년 하반기 되돌아보기 새해가 밝은 지 3주가 넘게 지났다. 그간 블로그에 뭐라도 써야겠다고 생각은 했다. 물론 생각과 실천 사이에는 간극이 있고, 그 간극은 무한에 가깝다. 그냥 충분한 성실함이 없었던 것이다. 아쉽게도. 성장했는가? 글쎄. 그런 것 같기는 한데, 들인 시간에 비하면 얻은 게 적은 듯하다. 성실하지 않아서? 아니, 시간이라면 많이 쏟았다. 효율이 낮았고 운이 없었달까. 대가리가 일찍 깨졌어야 하는데 너무 늦게 깨졌다. 어렵되 데드라인이 짧은 일을 일찍 맡아서 모자람을 빠르게 직시했다면 좀 달랐을 것 같은데. 핑계라구요? 맞죠. 나는 알 것 같았다. 그러나 알 것 같은 기분만으로는 부족하다. 해낼 줄 알아야 한다. 앎과 행위의 사이에는 무한에 가까운 간극이 있고, 나는 아는 것만으로 할 수 있다고 주장하는 머저..
능력 부족과 성장 바빴다. 각자에게 각자의 일정이 있으니만큼 안 그런 사람이 어딨을까마는, 바빴다. 적어도 나는 내가 바빴다고 생각한다. 물리적으로 바쁜 구간이 있었고, 마음이 크게 흔들리는 구간이 있었다. 지금은 둘 다다. 못난 부분이 눈에 띈다. 띈다뿐인가, 만천하에 공개하고 있는 느낌이다. 어떻게든 구르고 있지만 쉽지 않다. 누구나 그런가? 그럴지도. 그렇지만 다들 자신의 지옥이 뜨겁게 느껴지는 법이다. 나도 그렇다. 내게 무엇이 부족한가? 좋은 코드, 프로그래밍의 규칙, C언어, SQL, RDBMS, 일머리, 질문하는 방법, 정리하는 방법, 경험, 어쩌면 모든 것… 너무 나갔나? 표현이 과격할 뿐이지 틀린 말은 없다고 생각한다. 뭐가 부족하고 부족하지 않은지 판단이 안 서는 순간이 있다. 아직 전체상이 그려지지 않..