본문 바로가기

전체 글

(53)
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, 일머리, 질문하는 방법, 정리하는 방법, 경험, 어쩌면 모든 것… 너무 나갔나? 표현이 과격할 뿐이지 틀린 말은 없다고 생각한다. 뭐가 부족하고 부족하지 않은지 판단이 안 서는 순간이 있다. 아직 전체상이 그려지지 않..
240826 - 240901 금주의 놀라운 사실들 240826별일 없이 지났다. 2408271) 함수의 인과적 적층 구조는 스택에 비유될 수 있다는 글을 쓴 적이 있다. 실제로도 콜스택(call stack)이라는 이름으로 사용되며, 그러한 스택 하나하나는 스택 프레임(stack frame)이라는 내부 구조를 갖는다.스택 프레임은 인자로 받은 매개변수, 호출 이후 절차가 종료된 다음 프로그램이 돌아가야 할 메모리 위치를 가리키는 반환 주소(return address), 지역 변수, 이전 스택 프레임의 시작 주소(=before extended base pointer)로 이루어져 있다.그러니까, 함수를 호출하는 과정에서는 이러한 스택 프레임을 형성하고 매개변수나 반환 주소를 쑤셔넣는 작업이 암시적으로 진행되는 것이다. 함수는 호출 자체가 비용이다. 그럼에도 ..
240819 - 240825 금주의 놀라운 사실들 2408191) SELECT * FROM T GROUP BY (C1);이라는 SQL이 있다고 하자. 이때 T의 column이 C1 하나라면 거의 모든 RDBMS에서 비슷하게 동작한다. 그러나 만약 column이 여럿인 경우에는 RDBMS마다 구현이 다르다. MySQL이나 SQLite 등은 해당 쿼리가 DISTINCT와 똑같이 작동하고, Oracle DB에서는 아예 작동하지 않는다. 나는 이제까지 MySQL 쪽이 정석적인 구현이라고 생각하고 있었다. 그렇게 배우기도 했고. 하지만 ISO 표준에 따르면 Oracle 쪽이 더 정석적인 것 같다. 자세한 건 더 찾아봐야겠지만.  240820별 일 없었다.  240821어떤 대상은 완벽히 파악하는 것이 불가능하다. 그 복잡성 때문이든, 우리가 가진 비용 때문이든...
240812 - 240818 금주의 놀라운 사실들 2408121) C언어에서는(다른 언어나 OS에서는 어떨지 모르겠다) 1바이트(=8비트)로 구성된 한 칸 한 칸을 가리키는 주소 체계를 가지고 있는데, 이는 물리적인 메모리와 1대1 대응한다. 그 주소를 바탕으로 접근과 조작이 이루어진다.생각해보면 디스크에서도 그러한 주소가 있어야 할 것이다. 접근을 해야 하니까. OS가 적절한 파일 관리 인터페이스를 제공해서 프로그램이 그 인터페이스로만 상호작용할 수 있다 하더라도, 그렇게 인터페이스로 wrapping된 안쪽에서는 실제적인 상호작용이 존재해야만 한다. 여기서부터 모르겠다. C언어로 디스크를 어떻게 관리 및 조작하는가?(물론 기계어나 어셈블리는 더더욱 모른다) 메모리 관리나 시스템 콜(이 단어도 처음 알았다)이 아닌 방식으로 디스크를 조작해야 하는데 도통..