cs석사에서 compile을 공부한다는게 구체적으로 뭘 한다는 건가요..? 실제 현업에서 하게되는 일은 뭘까요?

  • #3016733
    applepie 220.***.255.18 6336

    저번에도 비슷한 질문을 올렸는데요. 좀 구체적으로 진로를 잡고 미리 학교도 알아보고,
    그 쪽 학교 교수님께 메일로 질문을 보내기 전에 뭘 하려는건지 확실하게 알고 해야 할 것 같아서..

    학교는 그냥 평범한 학교입니다. (명문대는 아니고..)
    이제 2학년 커리를 들으면서 공학인증을 하고있는 전자과 학생인데요.
    저번에 누군가 답변으로 미국에 computer science 중 compile 분야 공부나 연구를 하는게 좋을 것 같다고 답변을 해 주셨는데,
    저번에도 그랬지만,;
    전자과에 온게 사실 하드웨어가 어떻게 구동되는지, 컴퓨터 아키텍쳐에 관심도 있고 해서 관련 분야로 북미에 취업을 하면 좋겠지만 솔직히 취업을 생각해서 어느정도 소프트웨어 분야를 걸쳐놓고 싶은 마음이 있습니다..

    그래도 저는 전자과 특성을 죽이고 싶지 않다고 생각 해서 프로세서 설계나 , 소프트웨어면 시스템 로직, 임베디드 분야로 가고 싶다고 생각은 하구 있구요,

    cs로 석사 진학을 하되, 아키텍쳐 관련 중 컴파일 분야 공부나 연구를 한다면, 구체적으로 무엇무엇을 위주로 배우고 나중에 현업에서 어떻게 쓰이는 건지 아니면 그냥 랭귀지를 만드는? 아카데믹한 분야가 아닌건지.. 그냥 쉽게 까놓고 말해서,..석사로 컴파일을 연구 한다는게 이후 잡 커리어에서 뭘 염두 한다고 볼 수 있을까요?

    저는 일단 naive한 생각으로(실제로 멘토링 교수님도 제가 상당히 naive 하다더군요…게다가 우리 학부의 이단아라고..; 정작 돈 되는 디스플레이는 안하고 다른 과 전공이나 듣고 왠 미국?) 프로세서 반도체가 목표라 학부때 전공 커리큘럼은 VLSI나 디지털 디자인, 임베디드, 컴퓨터 아키텍쳐 위주로 수업을 듣고, cs 진학을 생각해서 옆 건물 컴공과 or 소프트웨어 공학과 알고리즘이나 자료구조 교과목도 수강 할 생각인데 (여유가 생기면 4학년 complie 수업도.) 또 어떤 과목을 들어놓을 필요가 있을까요.?

    인텔까지는 사실 바라지도 않고 외국의 프로세서 칩 company에 들어가는게 목표라면 목표인데, 현실적으론 그냥 소프트웨어 엔지니어가 되는 걸 감안하고 그냥 소프트웨어 only로 가는게 좋을지, 아니면 약간(?) 도박성이 있지만 지금 제 생각대로 가도 될지, 어떻게 보시나요..? 2학년이라 딱히 의미는 없겠지만 학점은 4.1/4.5
    교환학생 가려고 토플은 이제 한 90점 되네요..

    아, 참고로 외국 나가려는 이유가 메모리 반도체 이외의 분야로 진출하고 싶어서 이기도 합니다..
    졸업생이 만약 반도체 분야로 간다고 하면 거의 다 메모리 반도체 or 반도체 공정이라…

    다른 교수님들 한테도 상담을 받아보겠지만… 여기가 뭐랄까 두서 없이 질문을 올려놔도 답변을 잘 해주셔서 또 질문을 올려볼게요…

    • -.- 116.***.162.209

      반도체도 CS 하던 사람들이 SW 컴파일러처럼 설계자동화를 해놓기는 하였으나…. 순수SW나 반도체나 compile 자체에 대한 수요는 거의 없습니다. 임베디드SW 같은 경우는 적당히 남들 하는 만큼 해도 되는데 compiler 관련 분야는 진짜고수 (https://www.microsoft.com/about/technicalrecognition/anders-hejlsberg.aspx)라서 실제 컴파일러 만드는 사람을 제외하면 대부분 취미로 하는 사람들입니다. 그래도 굳이 compile을 해야겠다면 vlsi design automation 을 찾아보세요. http://cadlab.cs.ucla.edu/nsf09/NSF_Workshop_Report_v2.pdf Synopsys나 Cadence 같은회사들이 이런 일을 하고요.

      • applepie 220.***.255.18

        그.. 일단 랭귀지 컴파일러가 진로는 아닙니다… 임베디드나 디지털 디자인을 하고 싶은데, cs에서 컴파일을 공부 할 필요성은 크게 없다는 말인건가요? 제가 생각한건 cs 에 진학해서 between 하드웨어 레벨 & 로우 레벨 소프트웨어를 배워야 하겠구나 하고 생각한건데 말이죠.

    • 판교 Life 70.***.165.204

      컴파일러 전문적으로 배우면 확실히 좋습니다.

      유사 직군에 근무하는 상황에서 보자면
      1) 본인이 임베디드, 로직, 프로세서 분야에 대한 관심/욕심이 있으시다면 절대 그냥 소프트웨어 only 분야로 방향전환 하지 마세요. 그냥 소프트웨어 분야도 절대 만만하진 않아요. 코딩 스킬이나 개발환경들이 상당히 전문적이기도 합니다. 하지만 제가 같이 코웍 해보고, 후배들 멘토링 해보니, 소프트웨어 개발자가 임베디드 분야로 진입하는 진입장벽이 굉장히 큽니다. 로직내의 게이트 병렬 처리 개념이나, 하드웨어 디펜던트 한 환경을 굉장히 어려워 합니다.

      2) 컴파일러 전문적으로 하시면, 생각하시는 데로 프로세서 칩셋쪽 인텔이나, TI 및 기타 CPU, DSP, MCU 제조 회사에 직접적으로 업무 해볼수도 있고, 그게 아니더라도 임베디드 관련 제조업이나 R&D 쪽 업무로 충분히 전문화 할 수 있습니다. 단 컴파일러의 성격이 프로세서들과 FPGA와는 성격이 확연히 다르구요. 요즘엔 HDL 조차도 트렌드에 민감한 회사들은 SystemVerilog 같은 객체지향 언어로 전향하고 있어서, 오히려 어셈블리 같은 로우 레벨의 언어를 전문화 하는건 나름 블루오션 전략일거라 생각됩니다.
      왜냐면 임베디드쪽 코딩 언어조차도 점점 객체지향으로(Perl, SystemVerilog, 등등) 옮겨가고 있어요. 그 말은 코딩기법 자체가 점점더 라이브러리화 되어 가고 있고, 점점 하이레벨의 언어를 사용하는 환경이 된다는거죠. 이럴수록 로우레벨 분야 전문성 갖추면 본인에게 충분히 무기가 될수 있죠.

      임베디드는 공부 많이 해야되요. 프로세서 데이터 시트도 열심히 봐야되고, 내부 메모리 구조도 이해해야되고, 인터페이스나 프로토콜 공부도 많이 해야 되고, 메모리들도 필요에 따라 필요한 것들 공부해서 직접 핸들링 다 해봐야되고, 아날로그/디지털 회로 열심히 설계하고 디버깅 해야되고, 오실로스코프나 펑션 제너레이터 같은 툴들도 잘 다뤄야 하고… 임베디드 아무나 하는거 아님. 임베디드 전문가 되면 진정한 올라운드 플레이어됨! 소프트웨어, 하드웨어 둘다 뚝딱뚝딱 경지에 오르면 돈은 자동으로 따라 옴.

      화이팅

    • applepie 58.***.254.218

      아하., 이제 좀 밑그림이 그려지는 느낌이네요. 예전부터 주변에 보이던 기기들, 컴퓨터 등이 뭔가 내가 이해 할 수 없는 마법이 깃들어서 작동한다고 생각하긴 싫어서 계속 근원 시스템을 쫓다가 로직, pcb 납땜 오실로스코프 찍어보고, 심지어 VLSI 내 트렌지스터의 물성 물리 까지 들어갔다가 뭘 해야될까 헤메고 있었습니다.

    • 64.***.242.249

      요즘도 컴파일러 일이 있죠. 애플에서 최근 몇년간 엄청나게 했고… 컴파일러가 일단 자리를 잡으면 경험이 중요해서 오래 엔지니어로 일 할 수 있는 분야라고 하더군요. 그런데 컴파일러만 해서는 좀 niche이긴 합니다. 그런데 컴파일러 전공했다고 앞으로 계속 컴파일러만 해야하는 건 아니니까요. 예를 들면 구글의 유명한 엔지니어인 제프 딘도 박사과정 연구는 컴파일러였죠. 데이터베이스 쿼리 최적화 쪽으로 일하시는 분들도 많이 봤어요. 최적화 원리/기법은 비슷하니까요.

      미국가서 공부하려면… 토플은 적어도 읽기/듣기는 거의 만점 받을 수준이 되어야 수업 듣는데 큰 지장이 없을 겁니다.

    • A4 32.***.135.184

      님은 EE와 CS에 대한 이해가 부족합니다.
      님의 교수가 님을 나이브하다고 말하는 이유가 있습니다.
      컴파일러 (디자인)는 EE로 가는 사람이 그냥 CS에 걸쳐놓으려고 하는 과목이 아닙니다.
      컴파일러에 관한 과목을 한두개 들었다고 님이 그 방면으로 나갈수 있는지는 부정적입니다.
      그러니 우선 님이 어떤걸로 진로를 정할건가에 대해 확신하도록 (아직 시간은 있습니다)
      그런 다음 앞으로 택할 과목을 확실하게 정하길 바랍니다.

    • dddd 66.***.19.40

      제가 컴파일러 개발자인데, 한마디로 교양으로 배우는건 몰라도 업으로는 절대 하면 안됩니다.

      일자리? 없습니다.

      CPU나 MCU 만드는 업체에서 자기들 인스트럭션 셋에 최적화를 위해 백엔드 뒷단 만드는것 빼고 일자리 없다고 보시면 됩니다.

      회사에 컴파일러만 수십년 한 사람들이 안나가고 박혀 있어서 일자리가 안생깁니다.
      게다가 그마져도 요즘엔 오픈소스 gcc, llvm 같은 것들 때문에 자체개발 하는 회사는 거의 씨가 말랐습니다.

      그리고 컴파일러는 정말 정말 지루해서 이분야에 큰 열정 없으면 오래 못합니다. 언어스펙과 검증 싸움 입니다.
      미묘한 문법문제들에 대한 동작 검증부터 어셈블리 코드까서 제대로 컴파일 됐는지 확인 하는 일련의 과정들이 정말정말 고통 스럽고 디버깅의 구루가 아니면 뭐가 잘못됐는지 찾기 너무 힘듭니다.

      궁금하면 llvm이나 gcc소스 까보고 이해되면 그때 시작해도 늦지 않습니다.

      여하튼 컴파일러 하지 마세요.

    • dddd 66.***.19.40

      그리고 일단 컴파일러를 전공으로 시작하면 석사로는 아무것도 아니고 박사로 한 7-8년 해야 합니다.

      컴파일러는 프론트엔드가 3이고 백엔드가 7인데 컴파일러를 전공하면 대부분 벡엔드의 인스럭션 최적화를 하게 됩니다.

      그런데 이 분야가 컴싸에서 가장 오래된 분야중 하나이다 보니 논문 쓰기가 정말 어렵습니다. 이미 인간 수준의 머리에서 생각할수 있는 최적화는 다 개발되어 있습니다.

      이보다 더 높은 수준은 초인공지능이 나오지 않는한 불가능이라고 할까요?ㅎㅎ

      gcc나 llvm에 적용된 최적화 패스 수를 보면 몇백개입니다. ㅎㅎ

    • 저도 컴파일러 박사 하려고 했는데, 76.***.88.187

      지도 교수님이 막았습니다. 왠만한거 다 개발되서 할거 없다고.

    • 73.***.82.108

      1. 석사는 모르겠는데 그분야로 박사하는건 비추입니다. 논문 쓰기 힘듭니다.

      2. 임베디드 쪽과 컴파일러는 좀 다른 분야입니다. 컴파일러를 기반지식으로 알아서 나쁠 건 없지만요.

      3. 컴파일러쪽 일자리는 많지 않습니다. Niche market이고요. 인텔/퀄컴/nVidia/… 등의 칩회사에 들어가서 프로세서용 컴파일러 개발하든지 아니면 구글/애플/MS 등의 대기업 가서 좀 하이레벨 컴파일러/VM쪽 개발하는 일이 있겠습니다만 이 두 분류에 못 가면 그닥 관련 일자리가 없습니다. 사람이 많이 필요하지도 않고요.

      4. 꼭 박사를 해야 이 분야에서 일할 수 있는건 전혀 아닙니다. 근데 박사의 비율이 높긴 합니다.

      5. 근데 학부 2학년이시라고요? 게다가 나중에 유학을 오신다고요? 아직 취직 멀었으니 일단 그냥 이거저거 많이 들으시는걸 추천합니다. CS쪽에 관심 있으면 그쪽도 다양하게 들어보시고요. 아직 세부전공을 콕 찝어서 고민하지 않으셔도. 지금정도의 뜬구름잡는 정보를 가지고 고민하는건 별 의미가 없습니다. 컴파일러는 그쪽으로 가든 안 가든 컴퓨터 기반지식으로서 알아둬서 나쁠 건 없습니다.

    • 아름다운구속 198.***.56.5

      간략히 컴파일러 백엔드에서 무슨 연구를 하는지 풀어서 말씀드리죠. 그렇게 다 연구가 saturate 되어서 할게 없고, 수학천재들만 하고 그런 분야는 전혀 아닙니다.

      어떤 일을 하고자 하는 시스템 요구사항이 있다고 하면, 대부분의 소프트웨어 전공자들은, 어떠한 프로그래밍 언어를 사용해서, 그 요구사항을 잘 구현하는 프로그램을 작성하는데에서 끝나지요. 그 프로그램은 컴파일러를 통해 어떤 아키텍쳐를 가진 시스템 위에서 돌아갈 수 있도록 변환되어 실행되게 되구요. 여기에 OS가 함께 돌아가기도 하고, 아니기도 하지요.

      지난 십수년 이상 cs, ee, 더 나아가서 재료공학, 화학/기계 공학등 컴퓨터를 다루는 거의 모든 연구의 최종 목표는 대~체로 이 중 하나입니다: 성능 향상 (프로그램 수행시간 단축), 단가 절감 (간략한 코드, 또는 간단하고 싼 하드웨어), 온도 저하, 배터리 성능 향상, 내구성 향상 (수명 연장 또는 에러 저항성 향상) 등등.
      여기서 아키텍쳐 연구와 컴파일러 백엔드는 밀접히 연관되어 있는데요. 주로 아키텍쳐를 조금 바꾸거나, 새로운 기능을 하드웨어에 집어넣어서, 배터리가 좀 더 오래가면서도 핸드폰은덜 뜨거워지고, 성능은 더 향상되는 방법을 찾았다고 합시다. 이런 연구는 cs, ce, ee에서 모두 할 수 있구요. 문제는 그 기능을 소프트웨어가 얼마나 잘 사용하느냐이지요. 프로그래머들이 프로그램 짜기도 바쁜데, 언제 발전하는 하드웨어 스펙까지 다 공부하고 따로 최적화를 하겠습니까. 그래서 컴파일러가 중간에서 알아서 최적화를 하는거에요. 아~ 이런 일을 하고자 하는 프로그램이로구나 (이건 대체로 프론트엔드가 해주는 일이고요) 아~ 프로세서가 이런 구조를 가지고 있네? 그럼 이 기능을 잘 사용해서 변환해보자 (이건 백엔드지요). 이렇게요. 컴파일러 프론트 엔드는 대체로 꽤 수학적이거나 이론적인 반면, 백엔드는 좀 intuitive하고 아이디어 중심인 경우도 많습니다.

      보통 우리가 쓰는 하드웨어는 x86, x86_64등의 인스트럭션 셋을 가진 인텔 또는 amd의 cpu들이거나, 아니면 arm 인스트럭션 셋을 사용하는 모바일 SoC들 정도겠지요? 이런 제품들만 보면 아키텍쳐의 큰 변화는 거의 없겠지만, 임베디드 환경의 마이크로프로세서나, 수퍼컴퓨터 환경의 프로세서들을 보면, 상당히 다양한 시도들이 가능하고, 컴파일러가 해줄 부분이 꽤 많다고 보시면 되요. 학교에서의 연구도 주로 이런 부분입니다…만,

      현실은 이렇습니다. 칩 만드는 회사는 이런이런 기능을 사용하면 xx% 빨라져! 하고 제품 발표를 하지만, 정작 그 기능을 잘 사용하는 것은 사용자 몫이지요. 그 기능을 잘 사용하게끔 회사가 도와줄 의무는 없고, 위에 쓴 것 같은 역할을 컴파일러가 기가 막히게 잘 하게 만드는데는 시간과 노력이 많이 들기에, 작은 마이크로프로세서 만드는 회사들에서 컴파일러 개발에 큰 노력을 들일 역량이 많지 않습니다. 컴파일러 개발자들을 많이 고용할 만한 큰 회사에서는 칩의 변화나, 컴파일러의 성숙도 모두 어느 정도 saturate되어 있는게 맞구요.

      아키텍쳐를 떼어내고, 컴파일러만 보면 프론트엔드 연구에서는, 요즘 주로 소스코드 정적 분석을 해서 보안 취약점을 미리 파악하거나, 버그를 미리 발견해내는 일 등을 많이 하는 것 같네요. 실제로 돌려보기도 전에 문제를 파악할 수 있으니, 당연히 굉장히 의미 있고 가치가 있는 일이고, 사람도 꽤 뽑습니다만, 어렵고 한계가 있고, 좀 더 이론적/수학적 이고, 원글님이 생각하시는 분야와는 많이 다른 쪽입니다.

      컴퓨터가 어떻게 동작하는지 abstraction level 을 전체적으로 이해하시면 큰 도움이 될 겁니다. 요구사항에서부터, 프로그램, os, 컴파일러, 아키텍쳐, rtl, 로직, 회로, 배선, 배치, 반도체, 물질 등 쭉 내려가는 추상화 단계를 이해하고 있으면 여러모로 큰 도움이 될 겁니다.

    • cs 208.***.35.178

      컴파일러는 프로그래머가 만든 텍스트 프로그램을 프로세서가 이해하는 기계어로 바꾸는 일종의 소프트웨어입니다.
      따라서 프로세서가 바뀌면 인스트럭션 셋이 바뀌고 그에따라 바뀐 인스트럭션을 이해할수 있는 전용 컴파일러가 필요한것입니다.

      일반적인 인텔 계열의 칩셋은 워낙 대중화 되어서 왠만한 컴파일러는 대부분 작동하는데 문제가 없습니다.
      그러나 임베디드 프로그래밍으로 들어가면 이야기가 달라지죠. 임베디드의 BSP를 설치하면 반드시 전용 컴파일러가 따라옵니다. 왜냐면 보드에 탑재된 프로세서가 일반 피씨용이 아니라 용도에 맞는 다른 종류의 프로세서기 때문입니다. 따라서 인터넷에서 쉽게 다운받는 인텔 프로세서용 컴파일러는 안되고 보드에 탑재된 프로세서를 이해할수 있는 전용 컴파일러가 필요한것입니다.

      처음 질문으로 돌아가서 그럼 컴파일러를 전공해야하느냐 마느냐인데요.
      전 추천하고 싶지 않습니다. 컴파일러가 가장 기본적인 분야는 맞지만 너무 어렵고 수요가 많지 않습니다. 누군가는 반드시 해야하는 분야이지만 누구나 할수 있는 분야도 아닙니다. 대부분 박사학위 정도 해야 그나마 컴파일러를 제대로 이해합니다. 그만큼 복잡한 기술입니다. 졸업후 진로도 응용 소프트웨어보다는 운영체제 개발쪽으로 갈 확률이 높습니다. 아니면 하드웨어에 직접적인 영향을 받는 로우레벨 임베디드같은거죠.

    • 질문 173.***.112.190

      임베디드 시스템을 하려면, 어떤 걸 공부해야 되는지 관련분야일 하시는 분 계시면 한말씀 부탁드립니다.