블로그

감자

컴퓨터 공학(CS)이 중요할까요?

저는 학부 시절에 전공수업을 들으면서 항상 답답한 마음이 있었어요.논리회로, 컴퓨터 구조, 자료구조, 알고리즘, 운영체제, 네트워크 등 컴퓨터 공학에서 꼭 배우는 과목을 들을 때마다 너무 막연한 기분이었죠.분명히 한 과목을 들을 땐 해당 내용에 대해서 자세히 배우지만 너무 이론적인 것만 배우는 느낌이 들었고,"왜 지금 당장 결과가 보이는 내용으로 공부하지 않을까?"라는 질문을 했었죠.🧐CPU가 어떤 구조이고 어떻게 동작하는지 이론적으로는 배우지만 정작 CPU가 어떻게 생겼는지는 아무도 알려주지도 않고 스스로 찾아본 적도 없었어요.CPU뿐만 아니라 RAM, 하드디스크 등 주변장치가 어떻게 생긴 줄도 몰랐죠.다른 과 친구들은 "너 컴퓨터 잘 아니까 부품도 잘 알고 조립도 잘하겠네?"라고 종종 물어보지만 그렇지 않았죠.네트워크 수업 때는 모뎀, 허브, 라우터 등 전부 이론적으로, 기껏해야 그림으로 된 예시로 보니까 현실 세계랑 매칭이 잘되지 않았어요.교수님들은 학교에서 배우는 전공이 중요하다고 말씀하실 때 항상 따라붙는 말이 있었어요.컴퓨터 공학은 매우 복잡하므로 Divide and Conquer(분할 정복)로 접근해 하나씩 자세히 알아보는 것이 중요하다, 하지만 이렇게 하나씩 배운 개념을 조합해 전체적으로 볼 줄도 알아야 한다.당시엔 전체적으로 볼 줄 알아야 한다는 말이 크게 와닿지 않았었는데요. 첫 직장에서 백엔드 개발자로 일하는 순간부터 느꼈어요.회사에서 사용하는 기술 스택들은 처음 접해보는 것들이었고 말로만 듣던 AWS도 직접 만져봐야 했죠.이때 많은 기술 스택과 AWS에서 사용하는 용어들은 굉장히 혼란스러웠죠.하지만 용어만 다를 뿐 전공에서 배운 개념들은 그대로였어요.제가 고생했던 것은 "실제로" 이것들이 어떻게 연결되어 동작하는지가 머리에 잘 정리되어 있지 않았던 것이었죠.회사에서도 공부할 시간을 줘서 얼마 되지 않아서 정리할 수 있었어요.그때 교수님들의 말씀이 다시 생각났어요."하나씩 배운 개념을 조합하는 게 이래서 중요하구나~"라고요.회사에 적응하고 개발할 때도 학과에서 배운 내용이 직/간접적으로 도움 된 적이 많아서 그때마다 교수님들을 떠올렸죠.한 번은 사용자의 특정 요청 중 일부가 아주 가끔 중복돼서 들어오는 경우가 있었어요.똑같은 환경에서 테스트해봐도 확인해볼 수도 없었고 하루에 하나가 있을까 말까 했죠.저희 팀에선 이 문제가 한 달 넘게 해결하지 못하고 있었던 상황이었어요.저도 이 문제가 왜 발생하는지 골치 아팠었죠.🧟그러던 어느 날 문득 원인이 예측됐어요. 운영체제에서 배웠던 개념에서 떠올릴 수 있었어요.그래서 예측한 원인을 해결할 방법을 찾아 코드를 수정했고 지켜봤어요!똑같은 문제는 다시는 발생하지 않았죠. 👏 이렇게 실무에서 컴퓨터 공학(CS)의 중요성을 알게 되어 기본기가 탄탄해야 한다는 말에 극공감하게 됐어요.하지만 CS를 배우는 건 어렵고 지루해서 금방 포기하게 되죠.그래서 저는 수업에서 들었던 궁금증, 그때 알았으면 좋았을 것들을 그림과 예시를 들어가며 직접 만들기로 했어요.현재 준비하고 있는 강의는 네트워크인데요.이론적인 내용뿐만 아니라 우리가 일상에서 볼 수 있는 기기가 네트워크에서 어떤 용어로 쓰이고 어떤 역할을 하는지,큰 그림을 맞춰볼 거예요. 만약 CPU의 동작 방식을 배웠다면 위의 그림처럼 CPU가 실제로 어떻게 생겼는지도 알아야 헷갈리지 않겠죠?네트워크는 하드웨어와 소프트웨어가 공존하기 때문에 이렇게 하드웨어까지 알아가며 퍼즐을 맞춰갈 겁니다.이만 다음 강의인 "그림으로 쉽게 배우는 네트워크"를 준비하러 가보겠습니다.😊

개발 · 프로그래밍 기타CS전공자비전공자컴퓨터공학그림으로쉽게배우는네트워크

감자

컴퓨터 네트워크 강의를 준비중입니다.

안녕하세요 "그림으로 쉽게 배우는 컴퓨터공학" 커리큘럼을 만들고 있는 감자입니다!지금까지 제가 만들어 온 모든 강의에서는 여러분의 이해를 돕기 위해 그림을 이용해 설명해 드렸습니다.그런데, 지금 제가 준비하고 있는 강의는 네트워크 강의로 물리적인 장치의 이해까지 필요합니다.보통 전공 수업에선 이론적인 내용 위주로 설명하므로 여러분의 컴퓨터에서 데이터가 실제로 어떻게 이동하는지 직관적으로 알기는 어렵습니다.따라서 네트워크의 이론적인 내용과 물리적인 흐름을 모두 쉽게 이해할 수 있도록 강의 방식을 업그레이드 해보려 합니다.저로서도 새로운 도전이니 여러분들이 많이 응원해주시고 피드백 주시면 좋겠습니다. 😄(가정집 내에 있는 통신단자함 내부)저는 여러분이 인터넷을 사용할 때에 여러분의 집에 있는 통신단자함부터 건물의 통신실, 통신사, 서버까지로 데이터가 어떻게 이동하는지 시각화해 직관적으로 보여드리고 싶었습니다.하지만 기존의 강의 방식으로는 이러한 흐름을 보여드리기에 한계가 있었습니다.(사진과 그림만으로 이러한 것들을 설명하려니 만족스럽지 않았습니다)그래서 저는 여러분에게 직관적으로 전달할 수 있는 가장 좋은 방법이 뭘까 이리저리 고민하다가 3D 모델을 이용해 보기로 했습니다.(서울에는 내 빌딩이 없지만 3D세상에서는 구글빌딩이 내꺼🤗)3D 모델링을 하면서 굉장히 재밌게 준비했습니다.여러분들에게 가장 효율적으로 설명해 드릴 수 있다는 생각에 두근거리기도 해요!이제 준비한 내용으로 네트워크 강의를 열심히 만들어보겠습니다.많이 기대해주세요 😀 (시중에서 팔지 않는 제품도 3D 모델링이면 자세하게 소개할 수 있습니다)

개발 · 프로그래밍 기타네트워크3D모델링그림으로쉽게배우는컴퓨터공학CS컴퓨터공학

왜 CS 전공지식은 ‘개발자 기본기’로 꼽힐까?

컴퓨터 구조, 자료구조, 알고리즘, 운영체제, 네트워크, 데이터베이스 등은 컴퓨터공학 및 컴퓨터과학, 소프트웨어공학 등의 전공에서 반드시 배우는 주제로 꼽힙니다. 학교나 학과마다 커리큘럼에 차이는 있더라도 내용 자체는 모두 동일한 개념을 배우게 되는데요.이러한 CS 전공 지식은 컴퓨터 관련 학과에서의 전공 이해를 좌우할 뿐만 아니라, 개발자 채용을 위한 기술 면접 과정에서 주로 검증하는 핵심 개념이기도 합니다. 가령 서비스 개발자라면 비즈니스 로직을 구축하는 등, 프로그램의 구조를 만들고 문제를 해결하는 바탕이 되기 때문입니다. 이미 실무에 진출한 개발자들조차도 CS 전공 지식을 강조하는 이유가 여기에 있죠.다시 말해 CS 전공 지식은 개발자로서 필요한 문제 해결 역량을 결정하는 기본기 역할을 합니다. 대학생, 취업 준비생, 주니어 개발자 등을 막론하고 실력 있는 프로그래머가 되기 위한 든든한 뿌리가 필요하다면 CS 전공 지식에 주목해야 합니다.•••기술 면접 전, 실무 프로젝트 전 빠르게 기초를 정리하고 싶으신가요?지금 인프런 프리즘 [CS 전공 지식 로드맵]을 통해 학습해보세요. https://www.inflearn.com/roadmaps/643•••인프런 프리즘 브랜드 스토리 읽어보기 >>

개발 · 프로그래밍 기타CS전공지식컴퓨터구조알고리즘자료구조운영체제네트워크데이터베이스컴퓨터공학인프런프리즘InflearnPrism

90년대 컴퓨터 공학 이야기 (21) — 데이터베이스와 SQL

SELECT 만 알면 된다고…기억 속의 컴퓨터 공학 이야기들 중 마지막 이야기이다. 데이터베이스 과목, 그의 선수과목 개념이었던 알고리즘에 대한 기억으로 1990년대 학교에서 배웠던 전공에 대한 기억들을 마무리해 본다.알고리즘학부 2학년 때 자료구조를 배운 이후 ‘제대로’ 프로그래밍을 하기 위한 과정으로 알고리즘을 배웠더랬다. 두께가 위압감을 주는 책이었고 기억 속에는 아래의 모빌이 있다. 여느 과목처럼 앞에는 열심히 했지만, Graph정도까지는 꽤 긴장하며 보았지만, Greedy 와 NP-hard/complete 나오면서부터는 그냥 어려워 했던 기억들이다.https://en.wikipedia.org/wiki/Introduction_to_Algorithms처음에는 그냥 ‘주어진 문제를 조금 효율적으로 풀어 보는 방법’으로 접근했었지만, 이후 대학원 생활에서도, 그 후 사회 생활을 하면서도 자꾸 뒤돌아 보곤 했었고, 여러 가지 이유로 많이 쓰임이 있던 과목이라 하겠다. 실제로 졸업 후 10년 지나서 Google 의 면접을 보려 했을 때 이 악물고 보기도 했던 책이기도 한데, 지금은 역시 조각난 기억들만 남아 있다.INSERT / SELECT / DELETE학부 마지막에 database 과목을 배웠었다. 역시 어떤 책을 들고는 있었지만 어떤 교과서라는 생각이 들지는 않는데, SQL만 한 학기 내내 했던 기억이다. 그 중 정확한 뉘앙스는 모르지만 가장 강렬한 기억은, 당시 대학원생 형이 실습 조교로 들어와서 ‘니네들 앞으로 살면서 다른 거 다 필요없고, SELECT 만 알면 된다.’ 라고 했던 것이었고, 25년 넘은 작년에도 여전히 쓰이고 있는 SQL 을 다루며 새삼 그 선배의 말이 기억이 났다.SQL 을 programming language 로 놓을 거냐 아니냐의 사소한 논쟁도 있었지만, 여전히 2023년 기준 가장 많이 쓰이는 언어 중 하나임에는 틀림 없다 하겠고, 이제 어떤 툴들을 쓰더라도 자동으로 아마도 지원이 되고 있을 거다. 백엔드를 만지면 그래도 골고루 들여다 볼 기회가 있겠지만, 당시 선배의 말대로 SELECT 만 알아도 되는 상황이 된 것도 맞는 거 같다. AI 시대에는 SQL 을 잘 쓰게 하기 위해 GPT 사용법(?) 등을 배워야 하게 되면 사람 — GPT — SQL — DB — 기계 의 미래가 와 있다 싶긴 하다.https://spectrum.ieee.org/the-top-programming-languages-2023is_deleted자료구조와 알고리즘 시간에 가장 시간을 많이 들이는 것이 delete 구현이었다. 상태가 안 깨지게 하고, 메모리 반납도 잘 하고 등등에 search 가 훨씬 자주 일어날 거니까 잘 유지해야 하고 등의 사연들이 많았더랬고, 시스템을 구현하려 할 때 가장 머리가 아픈 것들이었더랬다. 하지만, DB 수업에서 가장 할애를 많이 했던 부분은 어떻게 하면 복구를 가능하게 하느냐 였고, 사회에서 만난 서비스들도 실제 지워도 복구가 필요한 경우 어떻게 할 거냐 그렇다면 그 백업 데이터는 어떻게 하고 등등… 실제 데이터를 안 지우고 지운 척 하느냐로 많이 접근했었다.한편으로 꽤 허탈했던 기억인데, 많은 경우 is_deleted 필드를 추가하면서 기능들이 구현 가능했다. 나중에 알고 보니 Kernel 내에 page memory, NAND 플래시 내에서도 같은 concept 들이 이미 널리 쓰이고 있었더랬다. 도화지에 지우개로 하나씩 지우는 게 아니라 흰색 물감을 뿌려 버리는 느낌이랄까. 탈퇴한 유저가 새로 가입하면 이전 것을 재활용하냐 마냐 등의 이슈와 함께 몇몇 법안 관련해서는 정말 지웠느냐 등을 가지고 여러 레이어에서 이슈가 있을 것이고, 그래서 “지웠느냐?” 라는 질문에 오해들이 생겼더랬다.ps.개별 서비스를 만들 때는 티가 안 나지만, 이후 scale 이라는 걸 경험할 기회가 생겨서, read-only 로 freezing 이 되면 극강의 read-performance 들을 발휘할 수 있는 것들이 생겼고, 이는 도메인이 바뀌거나 generation이 바뀌어도 비슷한 고민들이 계속 반복되는 걸 보면, 다 피가 되고 살이 된다 뭐 이런 말이 맞는 거 같긴 하다. 앞 에피소드에서 이야기했던 tradeoff 와도 맞닿아 있는 모습이라 하겠다.

교양90년대컴퓨터공학

90년대 컴퓨터 공학 이야기 (12) — WCET (최악 실행 시간) 분석

세상 일 모른다…90년대 후반 대학원 꼬꼬마 석사 과정을 진행하면서 맡았던 주제는 WCET ( Worst Case Execution Time ) analysis 였다. Wikipedia ( https://en.wikipedia.org/wiki/Worst-case_execution_time ) 에는 2008년부터 보이는데, 내가 이 과제를 연구실 선배들로부터 전해 받으면서 공부했던 게 이미 1995년이었으니.. ( https://ieeexplore.ieee.org/document/392980 ) 그 사이의 시간대가 좀 비어 있긴 하겠다. 조금 어려운 이야기가 앞쪽에 하나에 세상 일 모른다는 일 두 가지 이벤트들..대략 기억을 더듬자면, RTOS 세상에 여러 개의 task 들이 각각 함수를 기준으로 수행이 될 때 ‘잘 예측된 값’을 실행하기 전에 알 수 있으면 효율적인 scheduling 이 가능하다.. 라는 것이었고, 컴퓨터 구조를 simulator , cache emulation 등을 이용해서 ‘프로그램’을 만들고, 이론적인 방법들로 풀어 나가는데, 벤치마크로 사용된 소스코드와 그것의 compile 된 코드를 입력으로 받아 worst case scenario 를 만들어서 예측해 내는 방식이다. 마지막 비교는 workstation 에 실측 장비를 물리적으로 붙여서 하는 비교까지.Safer , Tighter , with Reasonable Cost예측하는 방법론으로서 위의 3가지 덕목을 맞추어 나가야 하는데, 1차원 적으로 code path만 보고 판단하던 시기에서 instruction / data cache 를 emulation 하고, superscalar processor 같은 다양한 pipeline을 emulation 하면서 tight 하게 만들어 가는 게 선배들의 연구. 거기에 내가 보탠 것은 loop bound, loop 내의 condition 을 더 전해 주면 특정 benchmark 에서 조금 더 tight 해 진다는 주장(?).정확히 기억나지 않지만, insertion sort 의 경우 N² 로 over bound 되는 것을 줄여준다 정도여서 몇몇 특정 benchmark 에서 효용이 있더라 정도의 적당한(?) 결말인데, 이를 위해서 컴파일러를 여러 phase 뜯어 고치고, MIPS cross compiling 등의 노하우들을 쌓았던 기억들. 이후 연구실 교수님들과 선후배님들은 NAND flash 등으로 확장해 나간다.실제 controller 들에 MIPS 등이 내려오게 될 때 쓸모 있는 scheduling 일 수 있겠지만, 학교에서의 연구는 현실과 좀 거리가 먼 걸 하기도 했으니… 석사 과정에서 배움이 짧아 고생을 많이 했었지만, 저 목표들은 아직 기억이 좋게 남아 있고, 이후에도 자주 접하게 된다. 엔지니어링스럽지 않은가…세상 일 모른다 (1) — 에너지 도메인으로방법론의 핵심은 각 instruction 별로 일어나는 behavior 들을 각종 simulation / emulation 을 통해 binary code level analysis 를 하는 것이고, 마지막 결과물의 단위는 nano second, clock 수 등이었다. CPU 가 달라질 때마다 다른 것들을 구현해야 했기에 abstract machine layer 를 구현하고 여러 시스템을 펼쳐 놓고 비교하는 일들을 많이 했는데, 고전적인 기계에서의 오차 대비해서 복잡한 시스템의 새로운 instruction 들을 다루는 데 한계가 많았고, 새로운 CPU 는 cross compile 이 잘 안 되어 거기서 오는 난이도 등등…아마도 90년대 후반에 갑자기 CPU 의 발열, 에너지 소모 등이 화두로 뜨게 되었다. 에너지 소모는 원래 있던 이슈들이었겠지만, 모바일, 임베디드가 되면서 다시 화두에 미리 돌려 보기 전에 사전 검사의 의미로 이 앱을 실행시키면 밧데리가 얼마나 소모하는지를 미리 측정하고 계획을 잡는데, 거의 같은 개념을 적용하게 된다. 컴파일된 코드를 사용하는데 있어 명령어별 에너지 소모량을 고려해서 곱하기 대신 더하기로 풀어 쓰게 하는 기법들이나 조금 느리더라도 에너지 소모가 적으면 유용하게 받아 들여 지면서 다양한 컴파일러의 기법들이 재소환되는 세상이 벌어지게 된다. timing 대신 energy 로 놓아도 쉽게 적용이 되던 걸 보면 교수님들을 비롯한 대가들의 이해 방식에는 여전히 보고 배울 점들이 많다는 생각이다.세상 일 모른다 (2) — scaling이후 회사에 다니면서 학문의 영역과는 점점 멀어지게 되었지만, 당시가 또 폭발적인 정보의 양과 함께 패러다임의 전환의 시기를 맞으며, 또 많은 깨달음과 함께 부질없음을 겪게 된다. 위의 접근들은 겨우 5% , 10% 예측을 올려서 utilization 을 그만큼 올리자 뭐 이런 노력들이었다면, 주변의 환경들은 무지막지한 방식들로 변화해 왔다. 특히 메모리가 부족하면 하나 더 붙여서 쓰면 되고 등의 접근 같은 거라 뭐 이런 것들도 나름 scaling 이라 부를 수 있겠지만…얼마전 깨어지기 전까지 무어의 법칙은 계속해서 사용량을 늘려 왔고, 다양한 병렬처리들이 가능하게 되면서 , 이제 와서는 ‘누구나’ (비용만 감당할 수 있다면) 전 세계의 문서들을 가지고 학습 시킬 수 있게 되었고, 밧데리도 신소재 리튬이온은 이전의 것들 대비 순식간에 10배 이상의 용량까지 지원하게 되면서 몇 %씩 이삭 줍듯 모으던 노력들이 머쓱하게 되는 상황이 되어 버렸다. 변화의 한복판에 여전히 있어 신기하면서도 마냥 즐겁지 않은 건 사실이지만, 다른 의미로 세상 일 모르는 것이리라 싶다. 10년쯤 후에 다시 돌아보자..

교양90년대컴퓨터공학

90년대 컴퓨터 공학 이야기 (1) — 80년대 이야기 — 퍼스널 컴퓨터

90년대 컴퓨터공학과를 다니면서 모은 에피소드들이지만, 기억은 80년대의 몇몇 단어들에서 시작한다.퍼스널 컴퓨터 경진대회1985년 국민학교에서 방과후 학습으로 산수경시반을 뽑았는데, 당시 부산에서 인근 구청에서 있던 수학경시대회가 없어지는 바람에 컴퓨터반으로 변경되어 운영이 되었고, 퍼스널 컴퓨터라는 것을 접하고 경진대회라는 것도 접하게 되었다. 지금 있는 올림피아드의 원형일 것이고, 당시 운도 좋았어서 1986년에는 부산 대표로 서울 잠실이라는 곳을 처음 올라오는 경험도 하게 되었다. 마치 과거 시험을 보듯이 넓은 공간에 각자 컴퓨터를 들고 와서 4시간인가 시험을 치르는 자리였고, 여기를 오기 위해 구 대회, 부산 시 대회 등을 거쳐야 했었다.첫 출전 당시 버그로 인한 탈락의 아픔이 있었고, 이를 극복해 보고자 지역에서 여러 번의 시도를 하며 중학교 2학년까지 여러 가지 기량을 쌓음과 동시에 컴퓨터 게임과 더 친해지게 되었다. 전국 대회와의 인연은 더이상 닿지 않았지만, 마지막 대회에서 구 1위까지는 올라갔던, 나름 해피 엔딩.삼성 SPC 1000우리 집에서의 첫 삼성 제품은 이 컴퓨터였다. 학교에서 접하고 나서 서울 전국대회 출전권을 따고 나서 부모님을 졸라서 인연이 닿은 첫 컴퓨터. 테이프를 이용한 낯선 기계음, 그것이 끝나면서 시작되는 게임들, 흑백 화면에서 펼쳐지는 dot 의 아기자기함 등… 국민학교를 함께 했고, 각종 대회에 같이 다녔으며 아쉬움과 실패를 경험하게 했던 기억들.컴퓨터학습매달 용돈을 받거나 벌어야 했던 첫번째 이유. 가끔씩 자매품인 학생과 컴퓨터 도 있어서 매 달 둘 중 어느 것을 사야 하나 고민을 했던 경험도 있고, 더 고급진 책도 있었던 기억이지만, 적당히 재미난 내용들, 신기술, 거기에 게임도 섞여 있었음. 무엇보다 이 책이 가진 의미는 소스 코드들에 있었고, 이를 타이핑하면서 인내심을 알게 모르게 키워 왔던 게 나중에 값지게 쓰였던 것 같다.Apple II+중학교 때 경진대회를 위해 졸라서 하나 새걸로 장만했던 기억인데, 이 때 제품이 정확하게 뭐였는지는 기억이 없다. IIe 였던 거 같기도 하고… 툭툭거리는 키보드가 마음에 들었었고, 플로피 디스크의 신세계를 여기서 경험하게 되었다. 경진대회를 빙자했지만, 게임 중독으로 가기 일보 직전이었던 거 같다.Lode Runner, Ultima 4, Ultima 5, Ogre나의 중학교 생활을 함께 했던 동지들. Lord British , thou art , 그리고 각종 게임용 spell , ingredient , weapon , dragon , …— -이후 나는 수험생 모드로 입시에 전념하면서 90년대를 맞이한다.

교양컴퓨터공학90년대

90년대 컴퓨터 공학 이야기 (20) — 다른 프로그래밍 언어들

이렇게 많은 언어들이 ??Java 가 주력으로 유명해진 게 1990년대 후반이었고, HTML 이라는 게 겨우 나오고, 이후에 Python, Javascript , Golang 등이 등장하기 전, 짧으면 짧은 시간 사이에 꽤 여러 가지 언어들이 스쳐 지나갔다. 먼저 전공 과목 중에 “프로그래밍 언어 개론” 이라는 과목이 있었고, 여기저기 아르바이트들을 실전으로 접하면서 지금 생각해 보면 다양한 언어들이 스쳐 지나간 기억이다.COBOL / FORTRAN당시 수업 시간에도 ‘옛날부터 쓰던 오래된 프로그래밍 언어’의 포지션에서 역사책 다루듯이 배웠던 언어들이다. 시험도 보고 과제도 있었고, 어딘가 돌려 보는 실습도 했던 어렴풋한 기억이다. 수업 시간에 교수님과 조교님들께서 열심히 가르쳐 주셨겠으나, 결과만 기억이 있다. 숙제와 실습 위주로 배움을 익히던 한창 때의 대학생이었어서 나름 바빴으리라 생각해 본다.은행권에 취업하려면 COBOL 을 알아야 한다고 했더랬고, 2000 년 되면 Y2K 버그들이 잔뜩 나타날 것이라 겁도 많이들 주셨고, 줄 맞춰 코딩하는 습관을 여기서 배웠어야 한다고 했더랬다. 사실 읽기 쉬운 코드라는 걸 처음 고민했던 시간이긴 하다. 그리고 과학 계산에서 널리 쓰인다는 설명과 함께 계산기 만드는 정도를 FORTRAN 에서 하고 있었고, 왜 이걸 써야 하지..? 라는 고민을 계속 하면서 투덜거렸던 기억이다.FoxPro / Visual Basic선배들 따라 다니며 작은 프로그램 용역을 다닌 적이 있었는데, 그 때 애용했던 프로그램들이다. 없이 살던 시절이지만, 정품을 구매해서 쓰기도 했었고, 데이터베이스에 대해 제대로 배우기 전에 이미 실전에서 이것저것 만들고 있었던 것으로 기억한다. 테이블 만들고 게시판 같은 거 만들고 하는 것을 이 툴들이 없었으면 어떻게 했을까 싶은 생각이기도 하다.진지한 의미의 프로그래밍 언어라고 하기에는 아마도 아니겠지만, MS 에서 Visual Basic 이 나왔을 때는 꽤 반가워하며 열심히 썼던 기억이 있다. Windows 용 MFC 의 투박함에 비해서 Document / View 를 이것저것 만져 볼 수 있고, Basic 이 주는 편안함이 있었더랬다. 어차피 전체 화면 다 펼쳐 놓고 볼 거 아니라면 저 조그만 블럭이 MACRO 든 function 이든 오류가 있으면 그때그때 알려 주는 게 편안했었고, 오류 없이 돌아가면 왜..? 싶었던 시기였었다. 혼자 만들던 것이기에 테스트니 readability 니 이런 것들과는 거리가 많이 멀었으리라.Pascal / Delphi / Scripts학교에서 수업 시간에 Pascal 을 다뤘는지 아닌지 기억이 없지만, 졸업 후 Delphi 는 꽤 오랫동안 썼었다. Pascal 자체의 기억은 없지만 Delphi 의 일부로 기억한다. 한편으로는 C/C++ , Java 랑 뭐 크게 다르지 않군… 배열만 잘 신경 쓰면 되겠네.. 등이었지만, Windows 용 module 을 끌어 쓰고 붙이고 하는 데서 신세계를 경험했던 기억이다. 초년 시절의 회사 생활과 겹쳐서인지 그다지 좋은 기억들이 남아 있지 않은 게 아쉽다.당시 아르바이트로 만들어야 하는 것들이 비디오 가게 회원 관리 같은, 화면 편집, 출력 등에 치우쳐져 있어서 Excel 등으로 가능한 것들이 많았었다. 당시부터 script 등을 썼더랬고, 이는 지금까지도 spreadsheet cell operation 으로 쓰이고 있다. 정품 아래아 한글도 꽤 여러 페이지를 여기에 할당했었더랬다. Basic 류의 명령들이 프로그래밍 언어냐 아니냐 정도의 논쟁(?)도 있겠으나, 지금 생각해 보면 인내심을 발휘할 수 있냐 없냐로 기억되는 다 부질없더라는 생각이랄까..ps. 이후 새로운 언어들구글에서 커리어는 지금 생각해 보면 frontend engineer 였었겠다. C/C++ 로 인터뷰를 봤지만 꽤 오랫동안 HTML / CSS을 언어로 생각하며 보게 되더니 어느새 알게 모르게 Javascript 를 쓰게 되었고, 또 언제 어떻게 배웠는지 모르지만 Python 을 쓰고 있었다. shell / PHP 등은 닥치면서 하게 되었고, Regular Expression 도 자연스럽게 구사하고 있다. 제대로 배우고 공부했던 건 Basic / C / Java 등이었겠지만, 시간의 힘이란 이런 건가 싶기도 하다. 이후 새로 만들어진 언어라기에 golang , RUST 등도 만지작 거리게 되었고, 앞으로는 또 어떤 것들을 배워야 할런지.. GPT 세상에 기대 반 걱정 반이다..

교양90년대컴퓨터공학

90년대 컴퓨터 공학 이야기 (19) — 한글 이야기

아래아 한글 이야기 아님오늘의 주제는 컴퓨터 세상에서 한글에 대한 이야기.. Windows, Mac 등에 당연히 한국어 팩이 깔려 있는 요즘에 이해하기 힘든 내용들이지만, 그래서인지 여러 개의 기억들이 떠오른다. 당연하게 첫번째 기억은한메타자교사영문 MS-DOS , Windows 도 한글이 부실하던 시절, 한글을 사용 가능할 수 있게 했던 패키지로 알려져 있었고, 한글 타이핑을 원없이 할 수 있던 프로그램으로 기억하고 있다. 누가 쓰냐 싶은 자리익힘들을 이용해서는 당시 부모님께서 컴퓨터에 입문하시게 되셨고, 백미는 배네치아. 드라마 응답하라1994에서도 본 거 같다.베네치아 스크린샹분당 타수를 가지고 경쟁도 있었고, 단문을 후다닥 치면 순간적으로 1000타까지 올라가기도 했다. 장문은 5분 동안 숨도 쉬지 않고 타이핑을 하는 것들이었고, 아마도 한컴에서 대회도 했더랬는데, 전국 3위 하던 녀석이 동기고, 전국 1위 하던 녀석이 과 후배였던…3벌식(세벌식)나는 2벌식과 3벌식을 구사한다. 더 빠른 타수를 원하던 시절에 2벌식으로 한계를 느끼고 누가 3벌식이 더 낫더라고 이야기하는데 속아서 지금까지 3벌식 390을 쓴다. 위의 전국구 친구들에 다가가려 몇 번 시도해 보았으나 참고로 시합은 거의 모든 경우 오타로 인한 벌점 혹은 백스페이스로 판가름이 나서 어차피 해당이 없었고, 3벌식의 경우 낮은 확률의 받침들이나 특히 숫자가 나오면 망하는 경우들이 있어서 전국구 선수들은 다 2벌식 사용자들이었더랬다.지금 기억으로 둘 다 분당 300타 이상이던 거 같으니 쓸모 없긴 하지만 개인기일 수도 있겠다 싶긴 하다. 대학원 때 논문은 연구실의 terminal 에서 써야 해서 당시 2벌식만 지원되어서 어쩔 수 없이 둘을 같이 썼더랬고, 여전히 차이는 모르지만 지금 맥북에서는 390 이라 설정해서 쓴다.. 꽤 오랫동안 새로운 시스템을 만날 때마다 손을 봐야 했고, 구글에 다닐 때까지도 기계에 특별한 설정을 했던 기억이긴 하다.조합형 vs 완성형유니코드가 세상을 지배하는 지금 은 아무 의미 없지만, 당시 꽤 뜨거웠던 논쟁으로 조합형과 완성형 이야기들이 있다. 실제로 번역 등의 아르바이트를 할 때, 코드로 사용해야 할 때 한 번씩 들여다 본 내용들이긴 한데, 자세한 내용들은 나무위키 조합형 완성형 논쟁 에 모여 있다. 아래는 그 논쟁 중 백미인 무려 TV 광고. ‘한글815와 쓩’https://youtu.be/ymKTvB3XPWkps. 이야기 / 하이텔 / 천리안 / 나우누리거의 모든 한글 타이핑은 여기서 이루어 졌을 것이다. 인터넷이 오기 전의 시대에 한글로 마음껏 무언가를 하다니.. 생각해 보면 MS-DOS 에서는 마우스도 없이 살았던 거 같다..이후 윈도우95, 새롬 데이터맨, 인터넷, 스타크래프트와 함께 다른 세상을 맞이하게 된다.

교양90년대컴퓨터공학

90년대 컴퓨터 공학 이야기 (18) — 비트와 버스

쥐어 짜던 기억들요새 LLM inference 관련해서 다양한 quantization 이야기들을 공부하다 보니… 실수와 정수, fixed point vs floating point 도 거대한 주제 중 하나이겠지만, 거기에 관련해서는 구현하고 손으로 계산하느라 고생했던 기억들만 있고, 조각조각난 몇몇 기억들 중에서 비트와 버스에 대한 이야기들을 모아 본다.VLB ( Vesa Local Bus ) / ISA부모님 지원으로 입학 후 구입한 컴퓨터는 486, 베사로칼 이라는 키워드를 가지고 팔리던 물건이었다. 펜티엄, 586 이라는 게 나오기 직전이었고, 빅타워라 꽤 묵직한 것을 학부 졸업할 때까지 썼던 기억이다. 바퀴도 달려서 하숙집을 여럿 옮겨 다니는 동안 그래도 꾸준히 잘 따라와 주었고, MS-DOS 부터 Windows95 까지 여러 게임들과 각종 과제들을 같이 했던 기억이 있다.부품을 사서 넣을 거 아니면 얼마나 들여다 볼 일이 있었겠냐마는, 과제 중 하나가 ISA bus 에서 I/O control 을 해서 신호등을 만들어 붙이는 과제였고, address, data bus 를 한땀한땀 들여다 본 경험을 하게 된다. 남땜 혹은 wiring 되어 있는 것들을 카드에 붙여서 address map 되어 있는 곳에 이것저것 해서 불을 껐다 켰다 하는 것을 하게 되고, 거의 반 공개 자취방에 있던, 게다가 커서 공간이 넉넉했던 내 컴퓨터는 여러 사람들의 과제에 희생되었다. 합선이 되는 경우는 빵판에서의 경쾌한 부저음 대신 살짝 타는 냄새들이 났더랬다.Bitfield , Union / bit vs bytehttps://en.wikipedia.org/wiki/Bit_fieldEmbedded 쪽을 주력으로 쥐어 짜던(?) 이 시기에 C 언어로는 char / int / long 등을 가지고 고민을 많이 했더랬다. footprint size가 민감했었고 한 푼이라도 아끼자 싶어서 unsigned / signed 가지고도 꽤나 신경 썼었다. 이후에는 Graphics 과목에서 RGB/YGrGb 등으로 찐하게 다룬 것이 과제의 마지막으로 기억되고 있다. 이후 조교 시절, 프로젝트를 진행하던 후배 녀석이 아마도 PDA 에서 돌아가는 지하철 역 안내를 해 주는 서비스를 만들었는데, “형 지하철 역이 256개가 넘어서 8bit 에 안 심어져요 어떻게 할까요?” 라며 투덜거리던 기억이 난다. short int 로 풀었는지, 몇몇 역을 소리소문없이 뺐는지 그 이후의 기억이 없다… — a이후 20+년간 서비스들을 만지면서는 어지간해서는 쓸 일이 없었더랬다. 다른 언어들도 지원하는지 아닌지 관심도 적고, Unicode 라는 게 나오면서부터는 문자당 두어바이트가 뭐 어때서… 였다. 한편으로는 다 부질 없더라 라고 생각하던 무렵, 구글에서 인프라쪽에 과제를 하면서는 ‘이미 잘’ 최선을 다해서 나눠 쓰고 있더라는 것을 보고 신기해 했던 기억이다. 했던 과제 한두개도 비트 수 모아서 packing 해서 한 바이트씩 아끼는 것들이었는데, 이게 구글 스케일에서는 무시무시한 숫자들이 되었더랬다. 요새 AI / LLM 시대에는 비슷한 문제를 꽤 여러 군데에서 이 기법들이 고민되고 있는 듯한데… quantization / 손실 압축은 quality 가 챙겨져야 하는 거니까 다른 데에서 이야기하도록 하자..Bus width스마트폰을 만지던 시절, schema 를 보면서 혹은 회로도에서 언제나 신경이 쓰이는 건 평행으로 펼쳐져 있던 bus 였다. 일단 보기 복잡하게 되어 있을 수밖에 없고, 같은 고민들이 칩 안에서도 여러 개를 쌓을 때 있었을 것이다. 특히 LCD 로 펼쳐지는 버스 필름은 언제나 최우선 보호 대상이었다. 세월이 흘러 가며 DB-25 / RS-232 시리얼은 USB 1.0, 2.0 으로 대체되었는데, 아직도 쉽게 이해가 안 가는 것이 선 두어개로 bandwidth 높아지고 양방향에 충전까지라니…게임 회사에서 전용 단말기를 만들겠다고 하던 선배랑 이런 저런 이야기 때 video 끌어 오려면 1024-bit width data 버스가 필요하다고 했었고, 그게 물리적으로 가당키나 한 거냐, 셋톱박스 정도의 폼팩터면 괜찮다. 등등… 이후 비슷한 이야기는 datacenter 에서 시리얼을 극대화 시키는 CXL 과 실제 1024-bit width를 구현한 HBM 으로 다시 만나게 되는 것으로 보면.. 지금 생각해 보면 꽤나 건전하고 생산적인 대화였던 뒤늦은 기억이다. 거의 30년이 지났지만 여전히 32bit 가 주력인 걸 보면 신기하기도 하다.ps. 다음 중 서울대학교 컴퓨터공학과/부 마스코트는 ? 바쿠스 — X 구글 검색 실패2. “알고” — ? 3. 없다. — X4. 영일이 — Ohttps://www.seoul.co.kr/news/newsView.php?id=19990224022002석사 졸업하던 즈음에 학과에서 마스코트를 만든다고 해서 잠깐 본 기억이 있는데…. 찾을 수가 없다… 마스코트 혹은 당시 사이버캐릭터라 불렸던 거 같고. 흑백의 격자 무늬 유니폼에 엄지척 기억인데… 조금 부끄러웠던 거 같은데… 다른 과 선후배들도 그럴까..? ㅎㅎ

교양90년대컴퓨터공학

90년대 컴퓨터 공학 이야기 (16) — 컴퓨터 이름 짓기 — 내 친구 sneezy

인터넷 시대에 이름 지어 주기인터넷이 아주 열심히 도입되던 격변의 시기, 당시 집에서 인터넷은 거의 안되고, 모뎀을 이용한 PC 통신은 그래도 좀 퍼졌으며, 전용선이라는 건 공공기관에나 있던 시기. 당시 대학교들은 ac.kr 의 class B network address 를 가지고 있었고, 학교는 snu.ac.kr 에 학과별 혹은 연구실 별로 address range 와 이름을 ‘찜’하던 기억들이 있다. 당시 막내 대학원생이어서 심부름을 했던 것들과 각종 카더라 루머들에 대한 이야기들.archi.snu.ac.kr우리 연구실 ‘컴퓨터 구조 및 망 연구실’은 통상 ‘아키랩’으로 불렸었고, archi.snu.ac.kr 을 썼다. 계정은 충돌이 일어날 때까지(?) 이름 그대로 id 로 가자고 해서 csjung@archi.snu.ac.kr 이 당시 쓰던 계정. 계정은 연구실 관리자에게 등록하면 되었지만, 기계 이름은 중앙에 승인 신청을 해서 받아 오는 방식이었다. 불문률로 사람 이름을 기계 이름으로 놓지는 안는다고 했었다.지도교수님이셨던 민상렬 교수님은 민들레를 좋아하셔서 방의 컴퓨터가 dandelion 이었더랬고, 지금 훑어 보니 iris , theory , davinci 등 낯익은 이름들이 아직 보인다. 그러고 보니 지금 컴퓨터 공학부가 쓰고 있는 cse 도 옆 연구실이었던 거 같기도 하고… 당연하게 전산과와 전기과와의 이름 선점 충돌들이 있던 시기였고, DB 연구실 선배들이 전산과를 이기고 db 를 가져왔다고 기뻐했던 기억도 있다. 뭘 주고 뭘 받아 왔다고 했었던 거 같은데…sneezy연구실에서 개인용 PC 가 인터넷에 연결해서 생기기 전, 몇몇 워크스테이션이 이름이 지어져 있었는데, 그 중 내가 만졌던 녀석의 이름은 sneezy 이다. 2년간 주인 잘못 만나 고생 많이 한 불쌍한 녀석인데…백설공주에 나오는 난장이의 이름 중 하나로 코를 훌쩍거리는 녀석? 분? 의 이름이라 한다. 백설 공주를 요약본으로 접하고 한 번에 일곱 난장이들을 묶음으로 보아 와서 그녀석이 그녀석 같아 보여 잘 모르지만, 원전과 애니메이션에는 나름 족보도 있는 녀석이라 한다.구글이 알려 주는 sneezymore dwarfs교수님께서 미처 다가올 폭풍 미래까지 보신 건지 아닌지 모르겠지만, 당시 4–5대 있던 비싼 기계들을 위해해 일곱 난장이 이름을 맡아 놓으셨다고 하셨다. 아래는 그 이름들.연구실 선후배동기들이 썼던 grumpy , sleepy , dopey 는 같은 사연이 있다는 것을 당시에도 알았는데, bashful 도 이제야 고개가 끄덕여 지고, 당시 뜬금 없이 연구실의 어두움과 잘 맞지 않았던 happy 도 같은 족보였구나 싶다. doc 은 이래저래 기억이 없다..이후 넘쳐나는 기계들과 이름들을 주체하지 못하고, 많은 연구실들이 연구실 이름 뒤에 숫자를 붙이는 방식 혹은 사람 이름을 따라가는 방식으로 흘러가게 된다. 낭만이 사라져가는 느낌이랄까… :)

교양90년대컴퓨터공학

90년대 컴퓨터 공학 이야기 (13) — 마이컴 — 대가를 만나다.

70살 때 뭘 하고 있을까..?전공 과목의 강렬한 기억은 2학년 때 새로 오신 하순회 교수님 과 시작한다. 회로 이론과 논리 설계 두 전공 필수 과목을 동시에 가르치셔서 수업을 잘 듣는다면 1주일에 최소 6번을 듣게 되었다. 새로운 교재여서 족보 따위는 없고, 극강의 난이도였던 시험들과 딱 나누어 떨어지지 않는(?) 소수점 가득한 정답들이 기억난다.학부 3학년 때 ‘마이컴’이라는 과목을 배우며 다시 1년을 만나게 되었는데, 이 과목도 해마다 다른 과목이라 들었고, mycom 인지, micom 인지… 심지어 이 과목의 원래 제목이 뭐였는지도 기억이 가물가물하다. 하지만, 이 때 교재의 저자들이 이미 당시부터 신급 대가인 John L. Hennessy 와 David Patterson . 두 분이 이상하게 따로 떼어 외워 지진 않고, 컴퓨터 구조 관련해서는 살아 있는 교과서에 2017년 Turing award 수상.. 이후 구글에서 살짝 스쳐 가며 먼발치에서 보며 좋아했던 기억들까지…Computer Organization and Design: the Hardware/Software Interface구글 검색 결과최근까지 기억의 왜곡이 있었어서 정리하는 데 시간이 좀 걸렸는데, 아마도 마이컴 때 책은 이것이었을 듯.. ‘주판책’이라 불렀던 기억도 있었고, 당시 책 제목에 ARM, MIPS 등은 없었던 기억인데… ARM , MIPS , RISC 가 다 있는 거 보니 이후 여러 가지 실제 시스템이 들어온 듯… 한글 번역본에 교수님 이름이 있는 거 보니, 이 책이 맞는듯.시험을 open book 으로 본 기억이 있고, 두께와 내용에 비해 상당히 잘 읽혀서, 내가 영어를 이리 잘 한다고..? 라며 착각을 꽤 오랫동안 했었다. 기계어로 번역된 하드웨어가 돌아가는 것들을 매우 가까이에서 경험하게 되어 신선하면서도 좋은 기억들이 있다.Computer Architecture : A Quantitative Approach구글 검색 결과대학원을 컴퓨터 구조 연구실로 가고, 대학원 수강 과목 때 접하게 된 교과서. 역시 위 대가들의 책. 수업 시간 뿐 아니라 생활 전체를 감당하게 만든 책이었다. 교과서란 모름지기 이렇게 만들어야 한다 라는 생각을 하게 해 준 훌륭한 책이지만, 100% 숙지하지 못해 대학원 생활을 어렵게 만든 애증의 책이기도 하다.대학원 때 교수님은 논문을 외우라고 하셨고, 시험을 매일 보았다. 마땅한 논문이 없는 경우 이 책의 중요 챕터들을 말 그대로 외우게 하셨고, 매일 한 문단의 과제를 오랫동안 주셨다. 성공하는 날보다 실패하는 날이 많아서 고생을 많이 했지만, 돌이켜 보면 영어 교재로서 더할나위없는 현명한 가르침이었던 것을 역시 뒤늦게 깨달았다. 영어로 된 논문을 쓰게 되면 더 혹독한 지도를 받았었겠지만, 훌륭한 교과서를 외우며 단어들의 쓰임을 곱씹으며 문단의 구성, 지시 대명사의 활용, 같은 뜻의 다른 단어들 사용 등에 대해 계속 수련하게 해 주셨다.구글에서 만난 대가들졸업 후 20년 지난 한참 후, 대가들이 튜링 상을 받았다는 소식들을 들으며 먼발치에서 볼 일들이 생겼고, 나름 알던 분들(?)이라 이런 저런 특강들을 접하면서 다시 한 번 충격에 접하게 되었다. 아래는 그 중 백미인 2018 년 Google I/O 중 일부. 이전까지 서비스 만들고 운영하는 데 에너지들을 들이느라 AI / ML 을 깊게 못 들여다 보고 있다는 생각이었더랬는데, 개인적으로는 이렇게 이 분의 행보들을 접하게 되면서 ‘늦었다’ 생각지 않고, Deep Learning 논문들을 따라가겠다는 결심을 하게 된다. 나도 저 나이에 저렇게 늙어 가면 좋겠다.. 정도..?https://www.youtube.com/watch?v=Azt8Nc-mtKM

교양90년대컴퓨터공학

90년대 컴퓨터 공학 이야기 (11) — 인공지능과의 만남 ?

PL & AI 연구실한참이 지나 뒤돌아 본 90년대는 이른바 인공지능의 두번째 겨울이 있던 시기였다. 당시에 인기 있었던 토픽들은 Hardware 와 Software 를 같이 엮는 co-design, embedded system 등이었고, PC 통신이 겨우 나오고 있으면서 인터넷이 폭발하기 직전의 상황들이었다. 야후, 구글, 네이버 등이 없던 시절, 한게임이나 스타크래프트와 Napster 가 나오기 이전의 세상이었다. 핸드폰이 귀해서 학부 졸업 선물로 받았던 시절이기도 했으니…PL ? AI ? NLP ?학부에서 Compiler 와 Programming Languages 과목을 맡아 주셨던 김영택 교수님께서 운영하시던 연구실의 이름에서 AI 라는 말을 처음 접해 본 거 같은 기억이다. GPT / Transformer 가 통일해 버리다시피 한 요즘과 거리가 있던 토픽이었을 테고, 당시 연구실 이름이 PL (Programming Language) 인지, AI (Artificial Intellegence) 인지, NLP ( Natural Language Processing ) 인지 정확한 기억 혹은 기록이 보이진 않는데.. 이후 부임하신 장병탁 교수님과 AI 가 조금 더 붙어 있던 기억이다. 두 연구실이 합쳐졌다 흩어졌다 했던… 그 당시 이 연구실에 조인한 동기들은 지금의 미래를 예측했었을까..?NLP 쪽 과제는 한영/영한, 한일/일한 번역에 대한 과제들과 일들이 많았고, 학과 사무실을 통해서 아래아한글에서 테스트 데이터들을 타이핑하는 아르바이트들을 열심히 했었다. 한자는 꽤 알고 있었고, 일본어가 지원되는 아래아한글을 꽤 비싼 돈 주고 샀던 기억, 일본 애니메이션을 통한 일본어 습득 노력들, A4 지로 출력된 책들을 하나하나 타이핑한 후 플로피 디스크에 담아 제출했던… 세이브 하지 않으면 큰일 나던 시절의 일들… 지금 보면 상상하기 어려운일들의 연속이었겠다.시험은 패턴매칭딥러닝과 머신러닝 등의 요즘의 컴퓨팅 리소스로 찍어 누르면서(?) 해법을 찾기 이전 시기였던 당시의 알고리즘이나 비교 로직들은 상대적으로 아기자기한 면들이 있었다. 인터넷 연결 없이 NLP 라고 부르는 것들도 형태소 분석 이후 switch / if then else / map 등으로 최선을 다하는(?) 것들이어서 한편으로는 갑갑하지만 그래도 코드들을 훝어 보게 되면 이해를 흉내낼 수 있는 정도였더랬었다.농담인지 진담인지 여전히 헷갈리지만, 교수님께서 수업 시간에 해 주셨던 말씀으로 “모든 시험은 패턴 매칭” 이라 하셨던 게 아직 기억이 난다. 비교할 대상들을 많이 새겨 놓아야 정답을 잘 만들어 놓을 수 있다는 지금의 표현으로 이른바 데이터의 중요성으로 해석할 여지도 있겠다. 아직 기억에 남아 있는 걸 보면, parser, string compare 같은 걸로 버벅거리던 시기에 꽤나 충격을 받은 내용이기도 하고, 이후 사회 생활에서 종종 쓰는 표현이 되어 버렸다.이후의 인공지능어이없을 정도로 짧은 만남 이후 2000년 정도까지는 정말 들어 보지 못한 단어들이었다가 2010년대 들어Google 에서 검색 관련 서비스들을 접하면서부터는 machine learning 부터 절반은 선수로 절반은 관중으로 접하게 되었다. 주로 서비스를 책임지는 입장에서 저 블랙박스 방법론을 왜 써야 하는지를 서로 증명하며 다투던 게 회사 일이었었다. 분명히 지표들이 나빠서 쓸 수 없는데, 대세니까 써야 한다는 둥 뭐 그런 충돌들..?이후 알파고, CNN/RNN, transformer 등으로 흐르면서 이전의 아기자기함들은 사라지고 정신없이 펼쳐지는 수많은 방법론들… 지금은 잠시 관중 역할이 크지만, 선수로 다시 뛴다면 해 보고 싶은 게 많긴 하다..ps. 시험은 아니지만 공부는 평생조금 시간을 거슬러 더 철 없던 중학교 때 국어 선생님께서 해 주셨던 말씀이다. 사춘기 시절 공부를 열심히 왜 해야 하느냐 맞으면서까지 해야 하느냐 등의 이슈로 한창 삐딱하던 시기에 선생님께서 진심으로 말씀 주셨던 내용이다. 시험은 아니겠지만, 공부는 죽을 때까지 해야 할 거고, 공부 그러니까 배움의 기쁨을 평생 가지면 좋겠다 라는 진심 어린 말씀… 나도 저런 어른이 되고 싶다 생각했었던 거 같다.

90년대컴퓨터공학

90년대 컴퓨터 공학 이야기 (10) — Compiler

오늘 주제는 Compiler 에 해당하는 몇몇 기억 조각들. Programming = Basic 인 채로 C 언어를 배우게 되었고, 인터프리터와 컴파일러가 다르다는 정도의 기본 지식과 학과 숙제, 아르바이트 등으로 다양한 연관된 경험들을 하게 되었다. C/C++ 과 교과서 위주의 기억 몇 개.The C Programming Language / Turbo C 2.0첫 기억 조각은 1학년 첫 수업 시간에 교재로 만난 원서 The C Programming Language 아마도 2nd edition. 중간에 포인터가 나오는 부분을 기준으로 앞뒤가 다른 두 개의 책인 기억이다. 강렬했던 기억들로 1) 이렇게 간단하게 표현하다니 싶었던 switch / case 문, 2) binary search 와 shell sort 를 이해하며 얻게 되었던 희열(?) 등이 있다.집에서 숙제 용으로 하기 위해 플로피 디스크에 담아 왔던 Turbo C 가 그 다음 기억이다. 아직 win95 를 구하기 전에 MS-DOS 에서 무려 .exe 를 만들어서 실행해 볼 수 있었던 기억이고, 학교에서 GDB 를 가지고 버벅대던 것과 대비해서 IDE 와 디버깅의 아름다움을 알 수 있게 해 준 도구였다. 두껍지만 한글로 된 책을 큰 맘 먹고 사서 친구들과 꽤 오랫동안 돌려 보던 기억인데.. 아마도 이 두 권 중 하나였으리라.Borland C++ / Visual C++학부 2학년 때 선배들이 C 를 공부했던 사람들은 쉽게 C++ 한다고 잘못된 정보들을 주셔서 고생을 꽤 오랫동안 했더랬다. OOP 개념을 조금 더 뒤에 배워서 그렇기도 했을 거고, 아마 내가 만든 코드들은 거의 C 에 껍질만 바꿔 놓은 모양이었을 것이다. 플로피 디스켓 한두개로 설치할 수 있던 터보 C 와는 다르게 C++ 은 아주 어렵게 접할 수 있었는데, Windows95를 플로피 디스켓 20장으로 깔던 시기에, 이 두 툴은 제대로 구해서 깔아 보기도 힘들고 비싸고 해서 꽤 늦게 인연이 닿았었다.당시 왜인지 모르는 MS 에 대한 반감에 괜히 Borland 것을 좋아했던 기억이지만, 아르바이트들을 하기 위해서 뭐 이것 저것 했었어야 했었다. 숙제들도 몇 개 했었더랬는데, 코드를 만졌던 시간보다 환경 잡고 driver 설치하고 뭐 이러는 데 노력을 들였던 기억들이 많았고, 여기서 해도 학교 컴퓨터에 플로피 디스크로 들고 가면 어차피 다시 짜야 하는 일들이 꽤 오랫동안 벌어졌다. VI 만 지금까지 써 왔지만, 이 때 과제 디버깅 용으로만 emacs 를 썼던 기억이다. 단축키들도 꽤 잘 썼던 기억인데 emacs 로 개종하기까지는 아니었다.aCC / gcc임베디드 리눅스 세상이 오게 되면서 cross compile 을 과제로 해야 하는 상황에서 다시 compiler 를 뜯어 보는 일들이 생겼다. 주로 했던 건 parser 이후의 hint 와 code generation 바꾸고 이런 저런 optimization 하는 것들.. 이 때 기억이야말로 build 가 안 되면 왜 안 되는지, 되면 왜 되는지 모른 채 여러 인내심과 versioning 으로 풀어 나갔던 시기였던 거 같다. 한참 고쳐 놓으면 mainline 이 또 바뀌어서 merge conflict 풀어 나가는…집에서는 cygwin 이라는 것을 설치해서 쓰기도 하고, 무거운 노트북에 불편한 리눅스를 설치해서 인내심 있게 써 보기도 했더랬다. 이후 대학원 때는 gcc 는 performance 쪽에서 널리 쓰이던 꽤 무거운 benchmark 로 쓰기도 했었는데, 뭔가 잘 된 기억보다는 잘 안 된 기억들이 많은 거 보니… 구글과 인터넷이 없던 시기에 뭔가 개발을 심각하게 해 보기에는 기량이 많이 모자랐던 모양이다.Compiler 수업아마도 학부 3학년 때 compiler 수업을 배웠더랬다. 교수님의 라떼는 이야기를 듣는 시간, 기말 고사 문제가 정해져 있는 과목이었고, parser 부터 다루어서 당시에도 실제로 이 과목이 도움이 되냐 안 되냐 등의 논란이 있었던 기억이다. 개인적으로는 꽤 재미난 시간이긴 했지만, 기말 고사 시간에 점수를 성적 내림차순으로 나누어 주셔서 상처가 있었던 기억도 있다.이 과목이 왜 생겼는가 혹은 이 컴파일러라는 게 왜 생겼는가 라는 게 나름 역사가 꽤 깊은데, 당시 컴퓨터를 만져야 하는 기술자들이 어셈블리어 혹은 기계어로 작업을 해야 하는데, 너무 귀찮아서 컴퓨터에게 그 작업을 대신하게 해서 만들어진 제품이라 하셨던 기억이다. 사람이 훨씬 빠른 판단을 하던 그 옛날부터 준비하던 제품이었을 테고, 나는 이 과목을 배우던 즈음부터 이미 앞으로 뭘 해야 하나 등에 대해 고민을 많이 하게 되었다.

교양90년대컴퓨터공학

90년대 컴퓨터 공학 이야기 (8)— 기억 속의 단어 — embed

embedded / embedding학부 때 몇 학기 동안 근로장학생을 할 수 있었다. 기숙사 다니지 않는 지방 학생이어 해당이 되었을 수도 있고, 주 업무는 공대 사무실에서 학과 사무실로 오는 우편물 배달과 연구실 별로 분배하는 일이었다. 하루에 30분 — 1시간 정도씩 학과 사무실에서 그밖에 잔심부름들을 했었고, 학과 사무실에 계셨던 분들과 대학원 선배, 교수님들이 어엿비 여겨 주셨던 좋은 기억들이 있다.약간의 부수입으로 학과로 들어오는 아르바이트들을 먼저 열람할 수 있는 기회들이 있었는데, 어느 journal 에 있는 기사를 한글로 번역하는 일이었다. 하숙방에서 쉽게 할 수 있는 것이기에 호기심에 하나 집었고, 그것이 ‘embedded system’ 과의 첫 만남이다.Embedded System작은 일들을 주로 하는 센서, 컨트롤러 세상에 C 언어를 이용해서 고급 프로그래밍을 할 수 있고, 더 복잡한 일을 한다.. 등의 내용이었고, 가장 큰 고민거리는 이걸 한글로 어떻게 표현할 것인가 라는 것이었다. 참고로 네이버와 인터넷이 없던 시절에 내가 가지고 있던 영한 사전은 1980년대 출판되었던 것이었을 것이다.naver 사전 — embedded도서관을 드나들며 꽤 오랫동안 고민 끝에 ‘내장형 시스템’이라 번역을 했고, 가장 큰 고민은 반대를 ‘외장형’ 이라 한다면 그것에 해당하는 영어는?? 이었더랬다. 다행히도 이후 기억은 검수하시던 선배가 흐뭇해 하셨던 것과 완성된 번역의 나름대로의 해피엔딩이다. 글 하나 읽고 번역했다고 견문이 얼마나 넓어졌겠냐마는, 그또한 새로운 경험이었고 이후 ‘임베디드 시스템’이 한 시대를 훑고 지나갈 때 든든했던 경험이다.Embedded Linux 와 그 이후2000년이 되며 CPU / RAM 붙여 가며 Linux 를 돌리는 등의 방향으로 Embedded System / Embedded Linux 등이 많은 일들이 벌어졌고, 마치 지금의 인공지능 바람들처럼(그정도는 아닐 수도…) 연구실 이름들이 ‘임베디드’라는 말이 들어갈 정도로 한동안 꽤 많은 일들이 벌어졌던 분야라 하겠다. 우리 연구실도 ‘컴퓨터 구조 및 망’에서 ‘임베디드’ 가 들어간 다른 이름으로 한동안 있었던 기억인데… 졸업 후 바뀐 연구실 이름은 아무래도 따라가기가 버겁긴 하다.나무위키 — 임베디드 시스템 에 당당하게 한 분야를 차지한 것은 물론이고, 어느순간부터 ‘내장형’이라고 부르는 것은 없어진 기억이다. 실제로 회사 다닐 때 ARM7 같은 거 만지면서는 Linux 가 올라가는데 어딜 봐서 이게 내장형… 이라며 툴툴거렸던 기억들도 있다. 이후 스마트폰 등이 나오면서 다른 시대와 다른 제품군으로 변화하며 기억 속으로 들어가게 되나보다.Embedding 이건 또 다른 녀석일세한동안 한글도 영어도 잊고 지내다가 회사에서 AI/ML 공부와 일들을 하면서 embedding 이라는 것을 만나게 되었다. 어원이 같은 현재분사와 과거분사의 차이이니 비슷할 만도 한데, 많이 달랐더랬다. 하드웨어 따위는 묻지 않은 순수한 수학과 벡터 세상의 물건이랄까… NLP 등으로 오더라도 수학에서 차원을 줄이는 노력으로 변환되고 나면, 뭐 나름의 이유가 있겠지… 이건 한글로 번역하기도 버겁고.. 굳이 안 해도… 등등..요즘에 ChatGPT 이후 LLM 을 쓰면서 다시 나타났다. embed_model 처럼 쓰이는 걸 보면 아주 잠깐 흠칫 하긴 하지만, 다행히 꼬박꼬박 embedding 이라고 쓰고 있어 익숙해 지곤 한다. Pretraining 같은 거 안 하면 쓸 일이 있을까 잠깐 생각했었다지만, fine tuning , RAG 등으로 오면서 가장 핫한 이슈들 중에 하나가 되고 있고, 제품을 만들어 다루는데서는 또한 https://deepinfra.com/models?type=embeddings 같은 데서 하나 잘 고르는 것도 경쟁력이 되기도 하겠다.

교양90년대컴퓨터공학

90년대 컴퓨터 공학 이야기 (6) — RISC vs CISC

기계어를 향한 노력들기억 속의 첫 기계어는 컴퓨터학습에서 예제로 접했던 SPC-1000 에서 돌아가는 몇몇 게임용 코드들이다. 마법 주문처럼 길게 적혀 있는 16진수로 되어 있는 값들을 하나하나 집어 넣고, 마지막에 call 을 수행시키면 뭔가 되거나 아니면 껐다 켜야 하거나 둘 중 하나의 결과로 기억하고 있다. 무슨 의미인지는 몰랐고, 모눈 종이에 색칠 해 가면서 모자이크처럼 뭔가를 만졌던 기억은 있는데, 이는 생각해 보니 font, 흑백 그림일 지언정 instruction 들은 아니었던 것 같다.MASM ( Microsoft Macro ASseMbler )제대로 된 기계어와의 첫 만남은 학부 2학년 때 시스템 프로그래밍 과목에서 기말 과제로 만난 MASM 이다. 프로그래밍 언어는 if then, for, print 등으로 어찌어찌 되던 것들만 보다가 완전 기계어도 아닌 어셈블러? 어셈블리어? 라는 것을 외계어처럼 보이는 것을 알게 되었고, 이를 구현하는 과제를 아주 오랜 시간 인내심으로, 매우 큰 switch 문으로 한땀한땀 풀어 내었던 나름 뿌듯했던 기억들이 있다.RISC ( Reduced Instruction Set Computer ) vs CISC ( Complex Instruction Set Computer )여러 기억들이 섞여 있는데, 구조 관련 수업 시간에 배운 RISC 의 태동은 매우 감동이 컸었다. 집에 있는 컴퓨터랑 다르게 저 멀리 있는 것에 대한 더 좋은 컴퓨터라는 생각과 이걸 가능하게 하기 위해 1. CPU 내에는 pipeline 이라는 것들을 집어 넣으면서 여러 개의 명령을 동시에 실행할 수 있게 자리 배치를 하고https://en.wikipedia.org/wiki/Classic_RISC_pipeline2. 각종 부작용(hazard)들에 대해서 필요한 조치들을 취하고, 3. 이를 가능하게 하는 향상된 컴파일러의 기술들. 4. 이를 maximize 해 주는 건 cache. 시험 문제들도 각종 hazard 들을 어떻게 대응할 건지 뭐 이런 것들을 어느 과목에서인가 적으면서, Synopsys VHDL 을 가지고 실제 회로들도 만들었던 기억들도 있는 거 보면…반대편 진영의 Intel 쪽의 CISC 대비해서 뭔가 아름다운 스토리라 생각했더랬지만, 이후 CISC vs RISC 는 좀 허무하게 지나갔던 기억이다. 일단 개인적인 시각으로 RISC 가 instruction 수가 절대 적지 않아서 이게 무슨 reduced ? , 인텔의 Pentium 들은 CISC 지만 RISC 들을 차용해서 쓰고, PowerPC 는 망하고.(?).. 등등.. 굳이 쟤네들이 싸울 필요도 없는 거였잖아..? 라는 면에서 부질 없더라는 기억이다..ARM / StrongARM / ARM7 / xScale이 RISC 는 이후 embedded linux 를 다루게 되면서 ARM 을 통해서 다시 만나게 된다. ARM 은 Advanced RISC Machine 혹은 Acorn RISC Machine 이었고, iPAQ 을 정점으로 추억이 된 회사인 팜팜테크에서 여러 CPU 들을 따라 다니면서 Linux Kernel , compiler , device driver 등을 계속 만졌더랬다. ARM assembly 도 꽤 했었던 거 같다. 여기의 R 이 RISC 였다는 것을 당시에 기억하고 있었더랬는데, 꽤 오랫동안 기억에서 사라졌다가 지금도 ARM 이 언급되는 거 보면서 살짝 꺼내어 본다. 이제 더이상의 R은 RISC 의 R 이 아니고, ARM 의 R 이랄까..무려 Intel 에서 xScale 이라는 새로운 CPU 를 만들어서 그걸 초기에 써 보며 CPU clock 을 동적으로 바꾸는 과제들이 기억나고, Linux 를 가지고 만들려고 했던 스마트폰, QT, 자우루스 … 이 기억들은 이후 Symbian 과 Google 에서 Android 까지 연결이 된다. 이 이야기는 2000년대 이야기이니 다른 곳에서…ps. Wikipedia 와 나무위키에 관련 내용들이 잘 정리되어 있는 것들을 보면서 당시의 정보들을 모으기 위해 했던 수많은 노력들이 다시 지나간다…. 당시의 인내심이 지금의 나를 만드는 데 긍정적인 영향을 주었을 거라는 생각을 해 본다.

교양90년대컴퓨터공학

90년대 컴퓨터 공학 이야기 (5) — cache

이전의 두 단어 ( trade-off , orthogonal ) 이후에 그 뒤로도 아마 많은 이야기를 들었겠지만, 다른 류의 대학 생활과 섞이면서 오히려 뒤의 기억들은 흐릿한데, 커리어를 관통할 것으로 소개해 주신 세번째 그리고 기억 속의 마지막 단어는 'cache'. 첫번째 단어인 trade-off 의 연장선 상에서 아주 잘 정의된 예제이기도 하고, 담당 교수님의 전공 분야이기도 했었다. 어린 마음에 computer architecture 에 대한 매력을 느끼게 되었던 결정적인 부분이기도 하다. 아래는 연관된 몇가지 기억들. Locality ( 지역성? )시간적 지역성 ( temporal locality ) 와 공간적 지역성 ( spatial locality ) 를 이용해서 시스템 전체의 실행 속도를 올리는 아주 잘 정의된 요구사항들과 software / hardware 로 구현하기. 그로 인한 극대화되는 효율. 당시 교수님께서는 '아름답다'는 말을 종종 하셨는데, benchmark 를 통한 여러 기법들까지 이해할 부분이 많았던 당시에는 아름답다는 걸 이해하지 못했더랬다.CPU 안에 만들어진 것들을 구현하기 위해서는 hardware가 logic구현하고 있다는 사실에 놀랐었고, 이후 Operating system, file system 등을 깊게 들어갈 수 있는 용기와 무모함을 얻게 되었다. 그리고 당시 compiler 에게 hint를 주는 여러 기법등의 세심함과 집요함까지.. 이를 구현해 보기 위해 GCC 같은 것을 고치고 실패하고 등등 여러 좌절을 겪기도 했었다. 조금의 인내심이 더 있었으면 다른 미래가 펼쳐졌을 수도 있었을 텐데 싶긴 하다.다른 memory들학부 때 새로운 컴퓨터로 Intel Pentium 이라는 게 나오면서 L2 cache 라는 말을 이제 이해할 수 있게 되었고, 한편으로는 뭐 무조건 많고 비싸면 좋은 거 아닌가 등의 단순한 생각이긴 했었다. 그리고 이후 SRAM 같은 다양한 형태의 RAM, NOR/NAND Flash memory, SSD 등 메모리 입장에서만 해도 폭발적으로 변화하는 세상에서 본의든 아니든 다양한 걸 알게 되어야 했었다.나야 뭐 맛보기만 경험했었지만, 민교수님과 대학원 선후배님들은 언제나 그 중심에서 여러 일들을 하셨고, compiler , OS, controller 등을 섭렵하면서 같은 개념을 그대로 혹은 개선해서 구현하는 걸 보면서, 마음 한 편에서는 이 급변하는 세상에 수년이 지나도 관통한다는 게 이런 건가 싶은 깨달음을 얻기도 하었다. 한편으로는 예전의 compiler 에게 hint를 준다거나, application-aware 등의 아기자기함은 이제 논문이나 이야기 속에서만 존재하기도 하지만 그런 것들이 아마도 기반을 닦아 나갔을 것이다..밖에서도 cache컴퓨터 구조를 배우면서 소위 '정통파'에서 시작했다지만, 밖에서 만나는 모든 개념들도 여기 닿아 있고, 이제는 너무나 다들 자연스럽게 쓰는 용어가 되어 버렸다. https://en.wikipedia.org/wiki/Cache_(computing) 에도 hardware cache, network cache, software cache 등... 실제로 buffer(혹은 memory) 가 터졌을 때의 아기자기함(?)들과 관련된 사건사고등도 기억나기도 하지만, 점점 managed service 를 쓰는 입장으로 많이 바뀌면서 어떻게 구현하는지보다는 어떻게 사용하는지에 더 관심을 두며 지내 오게 되었다.몇몇 시스템디자인 인터뷰에서는 그냥 '캐쉬 앞에 붙이면 좋아져요', '돈으로 기계 사면 되요' 등의 무지성 대답도 하거나 들을 수 있게 되었고, 한편으로는 실전에서는 또 그렇게 인정하며 쓰는 습관들도 되어 버렸다. Memoization, CDN, Cloud storage gateway 모두 같은 개념이라 하겠고, 앞으로도 계속 그러하겠다.ps. 민상렬 교수님석사까지밖에 인연이 없었지만 돌아가신 교수님은 여전히 애증의 감정으로 기억한다. 분명 졸업 때는 미운 감정도 꽤 있었던 기억인데, 부족함이 많아 많은 것들을 더 배우지 못했고, 나중에 철이 들면서 이해를 하게 된 부분도 많고, 지금은 닮고 싶은 혹은 닮고 싶었던 어른의 모습에 가장 가깝다 하겠다. 특히 선함과 아름다움을 추구하는 마음가짐 등에 대해서는 깨달음이 늦었다는 게 많이 아쉽고, 16년 전 구글에 합격했다는 인사를 드렸을 때 환하게 웃어 주셨던 게 마지막 면담이 되었던 게 지나고 보니 특히 아쉽다.아래는 과학동아에 인용된 인터뷰들 중 발췌..---민 교수는 연구원들에게 항상 전체 시스템을 이해하라고 강조한다. 그래서 학부에서 하드웨어를 공부한 사람은 소프트웨어 연구를, 소프트웨어를 다뤄본 사람은 하드웨어 연구를 할 것을 제안한다.“과거 어떤 쪽을 미리 연구했는가 보다는 전체 시스템을 잘 이해하고 문제를 적극적으로 풀어나가는 능력이 중요하기 때문입니다. 2007년에 개발한 플래시메모리의 핵심 부품도 원래 소프트웨어를 다루던 연구원이 설계했습니다. 그리고 관련 기업에서도 전체 시스템을 잘 이해하는 연구원을 높게 평가하고, 필요로 합니다.”...“99%의 완성도를 만드는 것은 쉽습니다. 하지만 100%의 완성도를 가진 아름다운 제품을 만들기 위해선 그때까지 들었던 노력의 5~10배를 들어야 합니다. 그 1%를 만들기 위한 노력이 한국 플래시메모리의 미래를 결정할 것입니다.”하지만 민 교수는 현재 우리나라의 교육 여건에서 이런 완성도 있는 제품을 만들 인재가 나오기 힘들다고 지적한다. 어렸을 때부터 아름다운 것을 본 적이 있나? 라고 묻습니다. 하지만 한 명도 대답하지 못하더군요. 다양한 분야의 책을 읽거나. 곳곳을 여행하고, 이성도 만나면서 아름다움을 경험할 시기에 입시에만 빠져 지내는 청소년들을 보면 아쉽습니다.“

교양90년대컴퓨터공학

90년대 컴퓨터 공학 이야기 (2) — 컴퓨터 공학과

다행히 수험생 시절 공부를 꽤 열심히 해서 과를 골라서 지원할 수 있는 상황이 되었고, 더 많은 운을 기대하며 자연스럽게 컴퓨터가 들어가는 과를 찾아 지원하였는데, 관련된 이야기 몇 가지…컴퓨터 공학 vs 전자계산기공학원서 접수 시 무의식적으로 다른 과 대비해서 과 이름이 멋지다는 생각을 했었다. 10대의 마음에 아마 과의 이름이 예전의 전자계산기공학이었으면 지원을 하지 않았을 것이다. 당시 한국의 입시 제도는 학교와 과를 먼저 선택하고 주어지는 경쟁률에 따라 시험 성적으로 우열을 매기는 개인적인 생각으로는 당일의 운이 매우 중요했던 기억이다.과 연혁을 보면, 1978년에 전자계산기공학과 줄여서 전산기공으로 불렸었다 한다. 당시 국립대의 학과 이름에 영어를 쓸 수 없던 규칙이 있었더랬고, 1988년 올림픽을 지나면서 조례가 바뀌어 영어 이름이 과에 허락이 되었고, 컴퓨터공학으로 바뀌었다고 한다. 당시 이 혜택을 받은 과가 컴퓨터공학과와 산업디자인학과, 두 과 모두 이름의 버프를 받아서 당분간 각 단과대의 대표주자가 되었다고 한다. 몇 년 위 선배들은 2지망으로 의대를 내려 보내기도 하고 전체 수석 선배님도 계셨더랬다.컴공 ? 전전제 ? 전산 ?당시 입시 정보로 컴퓨터를 만지려면 갈 수 있는 과는 아래의 세가지,공과대학 컴퓨터공학과 — 정원 75명공과대학 전기전자제어공학과군 — 정원 270명자연과학대학 계산통계학과 전산과학전공 — 정원 30명 소위 과 이름의 ‘간지’를 찾아서, 그리고 적당한 인원(?)이 끌려 지원을 했고, 아마도 증원 ( 60 → 75 ) 의 혜택으로 합격을 했던 거 같다. 흐릿한 정보로 소프트웨어와 하드웨어 둘을 반반씩 하려면 컴퓨터공학이 맞다고 하였고, 전전제의 경우 2:8 , 전산과의 경우 9:1 의 비율이 소프트웨어와 하드웨어의 비율이라 했었다.과 이름이 주는 오해도 나름 상당해서 게임을 만들고 싶어 했던 신입생 후배들이 여기가 아닌가 해서 실망해 하던 기억들과 각종 올림피아드에서 날고 기던 아이들이 시대에 뒤떨어진 교수님이라며 불평을 하던 시기도 금방 왔었다. 대학 생활 중에 인터넷, PC 통신, 스타크래프트까지, 삐삐에서 핸드폰까지, 지금 돌이켜 보면 아이폰 빼고 모든 일이 벌어진 세상이었으니 그 와중에 어떤 역할을 잡았어야 하나 모두가 고민 많았었던 시기였으리라.컴퓨터 공학부1999년 석사 졸업하던 해까지 나는 영향이 없었지만 이후 다양한 학부 대학원의 통폐합이 있었고, 우여곡절 끝에 지금은 자연대의 전산과와 합쳐서 컴퓨터공학부로 정리되어 왔다 ( https://cse.snu.ac.kr/greetings ). 위의 30명 전산과 동기들과 졸업 후 동문이 되었지만, 접점이 없던 탓에 사회에서 한 번씩 만나도 많이 서먹하긴 하다. 나이가 꽤 들고 멀리서 고생을 좀 하고 나서는 뭐 많이 둥글둥글해 진 것도 사실이겠다.

교양컴퓨터공학90년대

90년대 컴퓨터 공학 이야기 (17) — 실험-빵판과 용산전자상가

인내심 이야기 (3)학부 2학년 때 전공 필수 과목으로 실험이 있었고, 당시 논리설계 과목의 실습 버젼으로 하드웨어를 만지는 시간이었었다. AND / OR / NOT 등의 논리 게이트 를 전선에 연결해서 되는지 안 되는지의 실습 버젼이었고, 플립플롭 , PLA / PAL 등까지 cover 할 수 있었다. 컴퓨터 이외의 것으로 진행하는 실험이 처음이었어서 신기한 경험이었다. 선배들이 빵판이라 불렀고, 영어로 진짜 breadboard..전원장치 일체형 브레드보드요새 인터넷에서는 꽤 약식의 버젼들만 보이는데, 실험실에 있던 건 꽤 묵직한 제품이었다. 같은 조원들끼리 머리 맞대며 여러 칩들을 넣어 보고, 과제에서 지정하는 이것저것 해 보는 일들이었고, 논리설계 과목의 일환이어서 입력 스위치와 발광 다이오드까지가 출력의 끝이고, 원하는 입력에 책대로 논리가 구성이 되는지를 테스트하는 게 일반적인 수업의 구성이었다.생각보다 눈썰미와 손재주가 많이 필요했고, 전선의 피복을 너무 길거나 짧지 않게 잘 잘라서 연결하는 게 주요 이슈였다. 나중에 사회 생활 하면서는 그쪽도 공부가 필요했었더랬지만, 주로 Analog 쪽 이슈인 RLC circuit 은 고민 거리가 아니었고, 따라서 테스터도 전기가 흐르냐 아니냐의 0과 1의 상태들로만 관리했던 기억이다. 주로 합선이 일어날 때 빵판에서는 꽤 경쾌한 “삐” 소리들이 울려 퍼지기 일수였고, 처음에는 킥킥거리며 웃으며 시작하다가 복잡한 물건을 만질 수록 점점 신경질적이 되어 갔었다.기말 프로젝트학기말 과제로 스톱워치를 만드는 과제가 주어졌었다. start / stop 의 버튼 2개, 5명의 랩타임 저장, 시/분/초/0.01초까지 7자리. 설계를 같이 하고, 자리수를 나누어 분업을 하고 전선으로 연결하면 될 거 같은데 (당연히) 잘 안 된다. 외부 전원을 연결하면 경쾌한 소리와 함께 당연히(?) 합선이 어딘가에서 일어나고, 재수가 없이 오래 놓으면 기껏 구해 놓은 칩들이 타서 불량이 되기도 한다.납땜(soldering) 을 하지 않고, wire-wrap 관련 기술들이 주 스킬이 되고, 인내심의 대부분은 이것과 관련되어 있다. 전선을 너무 길지 않게 만들어 놓는 기술, 색깔을 다른 용도로 운영하는 기술, 나중에 디버깅이 수월하게 배치하는 layout 등의 일머리가 필요했고… 디버깅을 할 때는 선을 끊고, 다른 선을 추가로 연결하는 식으로 풀어 나가는데, 손을 떨지 않는 기술 등. 과제는 이틀 밤 사이에 10개의 디버깅을 통한 패치 이후에 완제품으로 제출에 성공했다. 인내심과 해피 엔딩, 새벽에 떠오르는 해를 보며 제출 후 고향으로 가는 기차를 타러 갔던 훈훈한 기억이다.용산전자상가 부품 구입지금과 아주 다르게 생긴 용산 전자상가가 있었고, 기말 과제용 부품을 구입하러 전자상가에 꽤 여러 날을 돌아다녔었다. 아마 선인상가라고 불렸던 거 같고, 지금에야 인터넷으로 주문하면 그만이지만, 당시 길을 잘못 들면 컴퓨터 대리점으로 가게 되는 등 역시 서울이란.. 이라는 생각을 하게 했던 동네들이긴 하다.실험 제출용 부품들을 sheet 에서 펼쳐 놓고, flip flop 같은 것들 살 것들을 적어 놓고, 가서 하나씩 뒤지고, 전선과 wrapping socket은 다른 친구들과 공동구매하고, 꽤 비쌌어서 가격 네고도 꽤 하고 했던 기억이다. 74AC74 — Dual D Flip-Flop 4개 사는 대신 74AC374 — Octal D-Type Flip-Flop 하나를 산다든지 등의 비용 효율화도 일어나고 있었고, 아래는 지금 봐도 여전히 비싼 소켓들이다.여전히 비싼 소켓들. 다리 하나에 100원 이상ps. 조교 생활대학원 때(1997, 1998) 이 과목의 실험 조교를 2년동안 했었다. 그래서 96, 97 학번 후배님들과 조금 더 인연이 있겠고, 학기 말에 종강 파티 명목으로 학과 예산으로 맛난 맥주를 먹었던 기억들이 있다. 몇몇 친구들은 유명인이 되어 종종 이야기 들리는데, 부디 좋은 기억의 일부였으면 하는 뒤늦은 아쉬움들이 조금 있다. 특히 마지막에 한 이름이 기억 나지 않는 후배가 했던 ‘이 노가다를 왜 하고 있는지 모르겠어요.’ 라는 질문이 아직 기억에 남는데, 중고등학교 때 미적분 배우는 게 사회 생활에 무슨 소용이 있나..? 라는 것과 같은 질문이라는 꼰대스러운 답변을 했던 기억이다.당시 제출했던 과제는 LED array 로 탁구 게임을 만드는 것이었다. 만들어 보지 않은 제품을 과제로 내서 미안… 따로 제약을 두거나 하진 않았지만, PAL/PLA 로 만들어 온 제품이 가장 깔끔하게 나와서 이후 커리큘럼을 바꾸기로 결정하면서 후배에게 인수인계를 했다..

교양90년대컴퓨터공학

90년대 컴퓨터 공학 이야기 (15) — B+ Tree

인내심 스토리 (2)학부 2학년이었는지 3학년이었는지 기억이 가물가물한데, 아마도 과목 이름이 ‘파일 시스템’ 이었고, 자료구조 과목 이후에 과목이었던 기억이다. 기말 과제로 B+ tree 를 scratch 부터 제대로 구현해서 제출하는 과제였었다. 다시 한번 이야기하지만, 넷스케이프 웹 브라우징이 가능하지 않던 시기에 외부에서의 copy.& paste 없이 구현하는 것이었다.Workstation집에 있는 PC 가 아니고 학교의 전산실 혹은 당시 38동 4층 어딘가에 모여 있는 UNIX 가 설치되어 있는 컴퓨터들을 이야기하는 것이었더랬다. 숙제 제출은 account 를 만들어서 e-mail 로 보내는 게 처음 시도되던 것이었고, 기본적으로 숙제는 학교에 있는 터미널에 줄 서서 혹은 삼삼오오 모여서 하는 것이었더랬다. 아침 8시 수업이었던 기억과 수업에 가기 위해 멀리서부터 터벅터벅 올라왔던 기억, 당시에는 젊은 객기에 자전거를 타고 다녀 보겠다고 오갔던 기억도 있다.xterm , vi 등으로 화면에 여러 개의 terminal 을 띄우는 것 자체가 신기한 경험, 주변에 고수들의 도움으로 화면이 여러 개 왔다갔다 한다든지 한글 입력이 된다든지 등이 처음 시도되었지만, 집에서 telnet 등의 도움을 받아서 할 수 있는 상황이 아직 아니어서 이 과목은 유독 늦은 밤의 기억이 많이 있다. MUD 를 만나기 전이어서 꽤 성실한 학생이었고, 순환 버스 없던 시절 신림동에서부터 터벅터벅 올라와서 퀭한 모습들의 기억은 이 때부터 시작인 듯했다.VI + GDBVI 를 처음 배웠었고, edit 를 거의 쓰지 않아서 지금도 :wq 를 하지 않으면 조마조마하다. 당시 많은 지인들이 Emacs 로 넘어갔지만, 나는 그 타이밍을 놓쳐 버렸고, 대신 이 때의 모든 인내심은 vi + 옆 창의 gdb 에 모여 있었다. 지금 이해하긴 힘들지만, 모든 시나리오를 손과 눈으로 미리 계산하고, 메모리 상태들을 노트에 적어 놓은 채로 내가 만들어 넣은 코드들이 제대로 동작하는지 하나씩 테스트하는 것이었다.unittest 의 개념을 모르던 시절이라 모든 테스트를 a.out 을 만들어서 sequence 대로 하나씩 해 보며 검증을 했었고, 이 과제의 압권은 입력으로 1000개 정도 되는 transaction 이후의 상태를 검증하기 위해 거의 모든 것을 거의 모든 노트에서 테스트했던 데 있다. 당연히(?) 처음에 1000개를 돌렸을 때 제대로 안 나왔을 거고, 디버깅이라고 해서 50개씩 끊어 손으로 만들고 내가 만든 못믿을 코드가 연습장에 적힌 대로 나오는지를 검증하는 방식… 이 때 1000개가 아니라 아예 100만개 정도 되는 입력이었으면 다른 똘똘한 방식을 고민했을까 모르겠는데, 당시는 손으로 할만한 것이었고… 인내심이 효율을 압도하던 시기였던 거 같기도 하다.2020년대 B+ Tree여전히 알고리즘에 끝판왕 느낌으로 존재하고 있고, MySQL / RDB 세상에서는 index 라는 이름으로 여전히 널리 쓰이고 있다. 코딩 인터뷰들에도 딱히 이걸 물어보거나 하진 않는 거 같고.. 실무에서는 이제 많은 경우 어떻게 돌아가는지는 더이상 궁금해 하지 않고, 의심 없이 쓰는 물건이 되어 버린 거 같다. 수십년이 지나도 계속 쓰는 무언가라면 그건 그 자체로도 대단하다 싶다.부록 : AI 들에게 물어 보았다. “B+ tree 생성하는 코드를 만들어 줘”Gemini, ChatGPT 둘 다 Python 으로 일단 보여 주는데.. 일단 Gemini는 뭔가 주루룩 내려오다가 잘렸다… — aChatGPT 는 뭔가 완성형 코드를 보여 주는 거 같은데..VsCode 에서 그대로 돌려 보니 일단 에러가 난다..아직 AI 가 따라 오기에 부족한 건가 라는 생각과 내가 뭘 잘못한 건가 라는 생각이 동시에 들기 시작하는 2024년이다. 영어로 물어봤었어야 하나…??

알고리즘 · 자료구조90년대컴퓨터공학

90년대 컴퓨터 공학 이야기 (14) — Macro ASM

인내심 스토리 (1)학교를 한창 다니던 90년대 중반은 MS-DOS , Windows-95 등으로 바뀌어 가면서 개인용 컴퓨터를 계속 포맷하고 바꿔 끼고 했던 기억들이다. 재미 삼아(?) 리눅스라는 걸 설치해 보려 하면 플로피 디스크 20장 들고 바꿔 깔다가 bad block 맞아서 다시 하는 등의 일들이 빈번했고, 과제들 중에서는 2학년 때 System programming 이라는 과목을 접하게 되고, Microsoft Assembly 를 공부하게 된다.텀프로젝트한학기를 통으로 할당하는 텀프로젝트라는 것을 처음 접하게 되고, 과제가 MASM(Macro Assembler) 을 만들어서 Intel assembly 로 만들어진 프로그램을 정상적으로 수행하는 것이었다. 수행하는 프로그램들은 터보C 가 만들어 낸 간단한 연산 혹은 소팅을 하는 프로그램들이었던 기억인데, 여튼 MASM 에서 되는 것과 같은 기능을 하는 것을 만들고, 소스코드를 다 찍어서 제출하는 것이었다.팀 프로젝트라고 하지만 일을 어떻게 나눠 진행해야 하는지 등의 경험도 없었고, 기량이 부족하지만 인내심과 노력으로 커버해서 그래도 마무리가 되었고, 50장 정도 되는 리포트를 도트 프린터로 찍어 냈던 기억이다. 학점도 꽤 좋았던 기억인데… 어딘가 왜곡이 있었을 수도 있겠다.아주 큰 if else 문과 debugger영어로 주어진 txt 파일을 parser 를 구현해서 instruction 따라서, mode 따라서 이런 저런 일들을 하는 것이어서 직관적으로 수많은 if else 문으로 풀어서 했었다. C 로 만들었다고는 하지만, 모듈화 등을 이것저것 고려했을 리가 없었을 거고, copy & paste 를 그래도 열심히 잘 했었을 것이다. 터보C 를 열심히 쓰면서, 이 때 디버거를 자유자재로 쓰는 기술과 인내심을 배우게 된다. 아이러니하지만 머리로 원하는 값들을 정해 놓고 그대로 되게 코드들의 시뮬레이터를 구현하는, 지금 생각하면 살짝 이상한 일들을 연속으로 했던 거 같다. 내 코드는 불안하니 머리를 먼저 믿는 조금 아이러니한 상황들이었겠다.커리큘럼이 아마도 꼬여서, 다음 학기에 자료구조를, 다음 학년에 컴파일러와 파일 시스템을 배우게 되는데, 이 때 구현하게 되는 과제들 역시 scratch 부터 만들어야 했던 거고, 인내심 측면에서는 상대적으로 뒤의 과제들이 할만했던 거 보면, 저 텀 프로젝트가 인생에 도움이 된 거 같다.Ctrl-Sassembly 의 경우 몇몇 코드들은 잘못 만지면 시스템이 재부팅되는 경우가 많았었다. 실제 메모리, 인터럽트 등을 건드려야 했기 때문에 껐다 키는 일들이 빈번했고, 주로 printf 를 하게 되는 경우 자주 만났던 기억이고, 디버그 모드이건 아니건 자주 껐다 켰던 기억이다..아마도 이 중 하나였겠지..지금은 상상하기 힘들지만, 당시의 에디터들은 자동 저장 기능이 없기도 했었고, ‘저장을 하지 않아 날려 먹는’ 일들이 빈번하던 시절었다. 심지어 저장을 해도 park 명령을 해 놓고 power-off 를 하지 않으면 안전이 보장되지 않던 시기이기도 해서 뭔가 해 놓고 위의 화면을 만나서 껐다 켜지는 일들이 자주 있었다. 저 인내심과 함께 ctrl-S , 날짜 별로 version / backup 등의 습관을 나름 성실하게 했던 거 같은데, 요즘 세상에 그런 거 하등 필요 없는 거 보니 새옹지마 싶기도 하다.부록 — 2000년대의 assembly손과 머리로 하는 assembly 는 꽤 잘 했던 기억이지만, 이후 기계보다 잘 할 수 없으면 맞서지 말자 뭐 이런 생각으로 멀리 있게 되었고, cross compiler 같은 것도 졸업 후에는 남들이 다 해 주니까 싶으면서 멀어지기도 했지만, 최근의 재미난 일들 3가지.1. 2023 년 popularity ranking 에서 5.43% 로 19등 ( Link ). 서로 다른 CPU 들의 연합군이면 반칙일까 싶기도 하지만, Swift, R, Scala 보다 높은 건 고무적..2. 요즘 들어 Assembly 는 Web Assembly 에서 자주 보임. 20년 전 기억과는 ISA 가 달라서 어색하고, 저 텍스트 버젼을 볼 일이 있을까 싶음.3. 최근에 각잡고 본 기억은 deepmind 가 발견한 정렬 알고리즘 ( https://deepmind.google/discover/blog/alphadev-discovers-faster-sorting-algorithms/ ). C/C++ 였으면 많이 허무했을 수도…

교양90년대컴퓨터공학

90년대 컴퓨터 공학 이야기 (9) — Java 와의 기억들

아직까지 쓰일 줄은…학부 생활을 하며 수업에서 혹은 바깥에서 별별 언어들이 생겨났고, 자의반 타의반으로 배워야 했었다. 당시 기준으로 오래전부터 있던 것들은 다른 글에서 하도록 하고, 오늘 이야기는 Java.Memory free 안 해도 된다는데..C/C++ 언어는 pointer와 malloc 이 들어가는 순간부터 다른 언어가 되어 버렸더랬고, 과제를 할 때마다 모든 시간은 segmentation fault , core 와의 싸움이었던 기억들이다. 당시 새로운 언어가 나왔는데, garbage collector 라는 게 돌고 있어서 memory new alloc 만 해서 쓰면 된다고 해서 꽤 기뻐했던 기억이다. 하지만, 여러 가지 이유로 JVM 에서 GC 가 돌면 시스템이 거의 멈추는 지경까지 이르게 되는 이슈들이 있었고, 이를 잘 피해 가는 것들이 마치 폭탄 돌리기 같은 일들로 기억이다. 여기서만 터지지 마라…이후 JVM 만지면서 꽤 투덜거렸던 기억도 있고, 한동안 performance 이슈가 있으면 C 로 전부 다 다시 만들어야 하는 일도 있었다. 물론 그 반대의 일들도 이후에는 자주 보게 되었고, 더 신기한 언어들도 나오곤 하면서 기억들은 희미해져 갔다. 이후 자연스럽게 쓰고 있었고, 메모리 관련해서는 이후 거의 20년이 흐른 뒤에 Google 에서도 여전히 꽤 오랫동안 memory 를 누가 할당받고 누가 free 할 건지를 가지고 여러 논의들이 기억이 난다. 쉬운 문제는 분명 아닌 것이리라…Applet처음 만남은 웹에서 동적 페이지를 만드는 Java Applet 에서 시작이었고, 이후 몇몇 과제에서 Java Servlets 까지 접하면서, 당시 JVM 을 만드는 쪽에서 일들을 했었더랬다. ActiveX 의 Microsoft Internet Explorer 를 배워야 하는지, Mosaic / Netscape browser 를 가지고 Java Applet 을 다뤄야하는지를 고민하던 시간이 있었고, 수박 겉할기처럼 awt , swing, 등의 못생긴(?) UI 를 가지고 투덜거리며 이것저것 구현해야 했던 기억들이었는데…졸업하고 잠깐 다른 데 보던 사이 그동안 Android, Java server, Kotlin 등으로 세상이 바뀌면서 everywhere 로 펼쳐지는 것에 대한 경외감은 여전히 있다. 예전에 안 된다고 했던 것들이 되는 세상을 보면서… “Write once, run everywhere” 는 참으로 잘 만든 문구인 듯하다.Kaffe학부, 대학원 때 과제는 Java Bytecode 를 분석하거나 실행하는 환경을 만들어서 무언가를 하는 것들이었다. 당시 Embedded Linux 에서는 여전히 C 를 가지고 어플을 만들어야 했었고, Bytecode 를 읽어서 이것저것하는 것들은 오히려 Assembly 를 만드는 과정에 가까웠더랬다. OOP 의 현란한 경험들이 오기 전의 것들이었고, Kaffe 라는 것을 다운받아 패치해 가며 썼던 기억이고, Oracle Java 와 OpenJDK 가 달라서 write once 지만 버전을 맞춰 대는 게 무한히 힘들었던 기억들이다.1990년대는 아니지만, 이후 Linux 로 Smartphone 을 만들겠다는 회사에서 병특을 하면서 힘들고 말을 잘 안 들었던 기억들이 있고, 이후 나는 더 안정적이었던 망하지 않을 것만 같던 Nokia의 Symbian, C++ 을 택하게 되었다. 당시에는 최선의 선택이었겠지만 이후 그쪽 세상은 Object-C 와 Java 로 양분되고, 이후 web 의 반격까지… 어떤 의미에선 다 부질없고.. 정신 없이 배워야 할 게 많은 업계라 하겠다..

교양90년대컴퓨터공학

90년대 컴퓨터 공학 이야기 (7) — 각종 약어들 — Very

Very 이외의 V 보신 분 ?어릴 때 서예 학원을 다녔고, 한자가 섞인 신문을 보고 자라서 라는 핑계로 영어는 꽤 늦게 시작했던 기억이다. 컴퓨터 경진대회 이론반을 준비하면서 그리고 게임들을 접하면서 제대로 된(?) 영어를 받아들였던 것으로 오늘의 주제는 각종 약어들에 대한 기억들과 그 중에 “V” 는 여지 없이 Very 였던 기억들이다. 신기하기도 하고 한편으로는 허무하기도 한 내용들…IC, LSI, VLSI컴퓨터 경진대회용 약어집에서 아주 처음 나오는 단어로 IC (Integrated Circuits) 가 있었다. 회로라는 것은 동네 형들이 만지던 라디오 키트 정도에 집적이라는 한글도 생소했었고, 직접 회로가 아니고 집적 회로였다는 기억과, 나름 한자어는 그래도 국어사전, 옥편 등을 펼쳐 놓으면 알아들을 수 있을 만 하다는 기억이 같이 있다.거의 같이 나오는 단어가 LSI ( Large Scale Integrated ) , VLSI ( Very Large Scale Integrated ) . 각각 한글로는 ‘고밀도 집적회로’, ‘초고밀도 집적회로’. ‘회로’는 어디 갔는지 모호한 기억과 Large 도 두리뭉실한데, Very Large 는 얼마나 큰 걸까 라는 생각과, 이게 더 커지면 어쩌려고.. 하며 걱정을 했던 기억이 난다. ‘집적’이라는 단어를 받아 들였을 때 난이도에 비해서 Large, Very 는 용어를 만든 사람들이 성의 없이 아무 편한 단어를 골라 든 게 아닌가 하는 걱정도 했더랬다.VHDL학부 1학년 2학기였는지, 2학년 1학기였는지 기억이 가물가물한데, 선배들로부터 악명 높은 툴을 배우게 될 거라는 이야기들과 함께 Synopsys 의 툴로 VHDL 을 다룬다 했었다. Basic 이 대부분의 경험, 이제 겨우 C 라는 신조어를 받아들이던 세계관에서도 신개념의 언어였고, 무려 하드웨어를 설계하다니 라는 신기함으로 새로운 것이었지만 꽤 재미나게 열심히 배웠던 기억이다. 이후로도 생각보다 많은 것을 만들어야 했고, 한편으로는 언어라고 불러야 하나 싶기도 하지만 생각보다 꽤 오랫동안 다루었던 툴과 언어이기도 하다.VHDL 은 VHSIC Hardware Description Language, 여기서 VHSIC 은 다시 Very High-Speed Integrated Circuit , 여기서도 V 는 Very 였던 것이다. 여기서부터는 굳이 한글로 된 번역을 찾아가진 않았지만, 앞에서와 마찬가지도 Very, High 면 되나..? 꽤 신기하게도 이후에도 초 울트라 어쩌고 하는 것들은 만화 드래곤볼에서 자주 보아 왔지만, very 이후의 용어들에서 super , ultra 등의 단어들이 기억이 나지 않는 거 보면 거기에 대한 사연들이 있나 싶기도 하다.VLIW관련된 기억 속의 super 와 very 의 싸움(?)은 컴퓨터 구조에서 보았던 superscalar 와 VLIW (Very Long Instruction Word) 가 마지막이다. 하드웨어를 통으로 새로 만들어야 한다는 점에서 놀라운 접근이라 하겠지만, super , very 라는 단어가 주는 기대에 대비해서 ‘겨우 이 정도로 이런 부사를 써도 되나??’ 하는 생각을 했더랬다. 64 ~ 1024 bits 정도로 Very ?여기까지의 전반적인 느낌은 very 라고 해도 뭐 별 거 아니네, 오버하는 거 아닌가 싶었던… 기억이고, 이후 많지는 않지만, V 가 나오는 용어는 victory 아니면 very 겠군.. 등의 성급한 결론들…LSTM / LLM / LMM시대가 바뀌면서 인공지능이 다시 들어온 후 논문들을 다시 들여다 보게 되었다. NN, CNN, RNN 등 한글로 번역해도 도무지 못 알아들을 내용들을 뒤로 하고, Long / Large 라는단어들이 보이게 되었다. 딱히 한글 번역을 찾으려 하진 않았었지만, 그래도 약자에 쓰이는 것들이면 첫인상은 얼마나 길거나 크길래 등이었고, LSTM ( Long Short Term Memory ) , LLM ( Large Language Model ) , LMM ( Large Multi-Modal ) … Long / Short 은 상대적인 개념이니까 뭐 그렇다 쳐도… LLM 의 Large 는 이정도면 많이 크군… 싶었다. 다른 단어를 선택했어야 하는 게 아닐까 ?? 정도…Very 가 끼어들 타이밍이 없이 large인 상태로 숫자들이 마구 커져서였을까, 새로운 것들이 정신 없이 지나가는 상황이어서 very 가 낄 자리가 없는 게 아닐까 싶다. Large 라고 해도 한국말로는 ‘거대 언어 모델’ 혹은 ‘초거대 언어 모델’ 이라 부르는 거는 직역보다는 잘 된 의역이라 생각할 수도 있겠다.ps.‘초거대 언어모델’은 이해가 가는 부분이지만, 개인적으로 ‘초거대 AI’ 라는 말은 매우 불편하다. AI = 모델 이라고 단순화 시켜 버리는 것도 불편하고… 아마도 얕은 영어라고 해도 일을 영어로 먼저 배워서 생기는 불편함이라 할 수 있겠다.

교양90년대컴퓨터공학

90년대 컴퓨터 공학 이야기 (4) — orthogonal

앞 주제에 말씀을 주셨던 민상렬 교수님께서 전공 수업 시간에 하나씩 단어를 이야기해 주셨는데, 기억에는 하나 더 남아 있다. 처음 듣는 단어들이어서 기억에 강렬하게 남아 있고, 서울 생활을 처음 하던 지방 출신인 나에게는 하루하루가 새로운 소식의 연속이었다. 그 단어들을 이야기하기 전에 먼저 그 즈음에 들려 주셨던 컴퓨터 세상에서 breakthrough 두가지 이야기들부터. 인터넷이 (거의) 없던 시절에 학회지와 각종 뉴스와 잡지들을 통해 정보들이 유통되던 시기였던 걸 생각하면 대단하다 싶다.Deep Thought or ChessMachine or Socrates 2?처음으로 기억나는 breakthrough 는 드디어 컴퓨터가 세계 챔피언과 대등한 수준으로 체스를 두기 시작했다는 이야기였다. Wikipedia 로 기억을 돌아 보니 Deep Blue 가 인간을 정복한 건 1996년 정도였다고 하니까 그 전에 경쟁하던 체스 프로그램이었을 것이다. 자료 상으로는 Deep Thought, ChessMachine, Socrates 2 등이 당시 선수들이었다고 한다. 교수님 말씀으로 당시 선수로 참여하던 사람의 머리가 물리적으로 터졌다고 하셔서 ‘에이… 너무하시네…’ 라는 이야기들을 수업시간에 했었더랬다.우리는 지금 알파고 이후의 다른 세대에 살지만, 당시 많이 무시했던 기억도 잠깐… 체스는 모르지만, 이후 금방 장기 세상에서 바다장기라는 것을 접하게 되었고, 동네에서 장기 좀 둔다 했던 나도 바다장기에게 한 번도 제대로 이겨 본 적이 없었고, 그래도 바둑은 아직 하며 1단 정도 되었던 걸로 은별이라는 프로그램과 잘 지내다가 알파고 이후의 허탈해 하며 씁쓸한 기억들도 있다.Whole body image scan미국에서 사형수들의 동의를 받아 조밀한 body scan image 를 처음으로 모으는 일이 벌어졌다 했다. ( bard와 chatgpt가 소개를 해 주는데… 원본이 없어 믿을 수가 없긴 하다.. ) 개인적으로는 의학에 연결될 수 있다는 것을 꽤 뒤늦게 알게 된 별별 곳에 쓰이는군의 깨달음을 얻게 해 준 뉴스였다.ChatGPT가 알려 주는 이야기… 뉴스 링크라도 걸려 있으면…— -친구 덕에 업데이트 되는 기억..— -orthogonal원래의 주제로 돌아와서, 교수님께서 말씀 주셨던 이후 커리어를 관통할 두번째 단어는 orthogonal . 한국어 번역은 ‘직교하는’ 의 의미이고, 당연하게도 처음 들어 본 단어였다. 직설적인 번역은 서로 상관 없는, 독립적인 등의 것이었는데, 이후 선형대수, ML/AI 등에서 벡터를 심각하게 보게 될 때 또 등장하게 되는 개념이었다. 앞의 trade-off 는 engineering 을 나타내는 대표 단어라고 한다고 하면 이 단어는 이론적인 접근을 하게 될 때 증명과 설득을 쉽게 해 주는 연구자로서의 방법론이라 이해하고 있다.최근에는 AI/ML 관련 강의 준비하면서 행렬과 vector 를 만났을 때 불편함과 Matrix Factorization 같은 걸로 잘려 나간 이후의 것들에 대한 정리들을 하면서 다시 기억을 더듬게 되었다. 구체적인 사례들로 아직 100% 마음 깊이 받아들이지 못해서 계속 배워 나가고 있는 개념이고, 주로 연구와 논문 그곳에서 일어나는 가설, 검증, 믿을만한 방법론 등을 풀어 나갈 때 연관이 없는 것을 끊어 내게 만드는 데 많이 필요했었다.삼라만상 별별 데이터들이 실전에서 칼같이 나눠지겠냐마는, 그걸 증명해 가면서 차원을 낮추어 가는 방법으로, 서로 관련 없는 것들을 떼어 낼 때 많이 썼던 방법론이겠고, 잘라낸 이후의 것들이 2–3차원이면 그래도 눈과 머리로도 이해가 될 수 있었다. 3차원으로 나타낼 수 있는 무언가들을 생각할 때 작은 우주가 그려지는 그림에서 orthogonal 이 증명되어 1,2차원으로 뭔가 잘려 나갈 때 희열이 있었던 기억이다.

교양컴퓨터공학90년대

90년대 컴퓨터 공학 이야기 (3) — Trade-off

입학 전의 공학?중학교 때는 남학생들은 “기술”이라는 과목이 있었고, 고등학교 때 선택과목으로 “공업”이라는 게 있었다. 다니던 고등학교는 공업 대신 “상업”을 가르쳤던 학교였기에 대학 입학 전의 공업에 대한 이미지는 스크류드라이버+못질과 납땜을 해서 만들어 보았던 AM라디오키트 정도이겠다. 레고는 기억이 없고, 지금보다 훨씬 덜 화려했던 과학상자를 만졌던 기억도 있겠고, 용돈이 생기면 아카데미 프라모델을 만들며 놀았던 어린 기억들이 있다.고등학교까지의 엔지니어링검갈빨주노초파보회백 저항값을 읽는 정도가 선행학습이었고, 하드웨어의 아주 기초를 접했다면 접한 거라 할 수도 있겠다. 컴퓨터 과를 들어왔지만, 공학이라는 게 뭔지에 대한 깊은 고민을 한 것도 아니었고, 단지 자연대보다 남녀 성비가 좀 더 치우쳐져 있는 곳이라는 정도, 그 와중에 컴퓨터공학은 10% 의 여학우들이 있어 신기해 했으며, 남중남고를 나온 나에게는 누나들이 생겼다는 것도 신선한 충격이었다.Trade-off어린 병아리 시절, 1학년에 전공 과목은 ‘컴퓨터 공학 개론’ 이라고 하면서 C 언어를 배우는 과목이라고 했다. 학교에 오면 컴퓨터를 만질 수 있었고, 터보C 같은 걸로 숙제를 해서 디스켓으로 제출하면 된다고 하셨다.지도교수님이신 학과 2회 졸업생이셨던 민상렬 교수님을 잊을 수 없고, 기억 속에 여러 부분의 지분이 있으신데, 첫번째 에피소드가 이 trade-off 라는 단어이다. 중간에 하이픈이 있는 게 맞는 건지 없는 게 맞는 건지도 모르겠지만… 엔지니어로 평생 필요하게 될 근본적인 개념의 단어를 몇 개 알려 주마… 라고 하시면서 알려 주신 첫번째 단어였다. 모범생은 아니었고, 수업 시간에 다른 내용들이 많아서 단어들을 많이 알려 주시진 않았지만, 이 첫 단어의 임팩트가 강하게 남아 있다.인터넷 사전이 없이 영한사전을 뒤져가며 익히던 시절의 나에게는 신조어였고, 이 세상에 공짜는 없다는 것, 공학이 과학과 다른 점에서 중요한 개념이라는 것, 수학과 비교가 앞으로 왜 계속 필요한 지 등을 알게 되었고, 아이러니하게 회사 생활 하면서 결정을 내리는 일들이 많아지게 되면서 계속 되뇌어지는 단어이다.이후 알고리즘 시간에 시간 공간 복잡도를 다루면서 열심히 쓰이고, 이후 논문이라는 것들을 읽게 되면서 세상을 이해하는 데 많은 쓰임이 있었고, 지금도 많은 깨우침이 여기서 나온다 하겠다. 지금의 나에게 누군가가 엔지니어링이란 무엇인가 라고 묻거나 혹은 단어 하나만 고르라면 이 단어를 주저없이 이야기할 것이다.작년에 비전공자들이 전공자들을 이해하고자 할 때 필요한 내용들을 가지고 온라인 강의를 만들어 보고자 하는 게 있어(https://fastcampus.co.kr/dev_online_newcomputer) 작은 역할을 맡았는데, 그 때 처음으로 맴돌았던 키워드가 이것이었고, 이것을 시작으로 코스를 구성할 수 있었다. 

교양90년대컴퓨터공학

채널톡 아이콘