내 생각에 총 다섯가지 진영이 있음.

1번 진영

운영체제

컴퓨터 공학. 엔지니어링의 정수
메인도구는 C와 러스트, 리눅스, 그리고 하드웨어특수성을 활용한 어셈블리어 활용.

컴구 시프 운체 멀티코어(병렬 프로세서)

그리고 이것을 바탕으로 최신 현대 수준으로 가면 CUDA와 GPU까지 도달한다.

헤테로 시스템. 하이퍼포먼스 컴퓨팅과 관련된 클러스터링까지도 발전할 수 있음.

아니면 아예 리눅스 커널 자체를 들어갈수도 있고
GPU에서 더 나가면 FPGA까지도 건드리게 될 수 있음.

한국의 성골들은 거진 이쪽계열이고

한국에서 고급프로그래머라하면 이쪽 진영임.


2번 진영

네트워크

이건 전공과목을 놓고보면 5가지 진영중 작은 편이다.
하지만 비즈니스세계 그 자체.

구글 페북. 네카라 죄다 이 진영의 소속이고,
다른의미의 고급개발자.
대기업개발자들의 진영이다.

컴퓨터과학쪽보다는 비즈니스쪽에 더 가깝지만.

로드밸런싱.
쿠버네티스(내가 자꾸 쿠버를 운체쪽에 안넣고 네트워크쪽에 넣는건 다 이유가 있다.)
프록시서버
스케일아웃
스케일 업
클라우드
인프라

그 외 웹 통신
grpc
소켓통신

서버라는것 자체가 일종의 네트워크 애플리케이션계층과 전송계층을 아우르는 플레이어로서 활동한다는 것.

이쪽의 메인언어로는
자바 와 Go가 있다.

자바는 아파치 하둡시스템 특히 카프카의 본고장이고
Go는 grpc도 있고 고루틴을 위시한 2번진영 전용 언어로서
2번진영 캡틴인 구글이 고안한 언어라서

정통파 자바계열이냐 신세대 Go계열이냐.

여기에 파썬 js가 낄만도 한데, 얘들은 이 분야 간편한 도구지 최고의 도구는 아니다.

최고의 도구는 jvm과 Go.


3번 진영.

데이터베이스

데이터베이스는 생각보다 정통파 컴퓨터과학이라고도 볼 수 있는데,
일단 4번진영으로 소개할 자료구조 알고리즘 측과의 접점도 많고

디비 자체가 파일시스템 및 메모리계층의 일부라서
운영체제 중에서 데이터의 영속화관련된 부분만 특수하게 떨어져 나왔다고 봐도 된다.

실무적으로는 사실상
디비관리와
쿼리최적화
샤딩 인덱싱
알고적으로도 빠른 쿼리와 빠른 쿼리가 가능한 구조 설계
스케일 아웃과 스케일 업

도구는 언어가 도구라기보단
디비ms가 도구다

내가 추천하는것은
Postgres mongo redis 그리고 hdfs와 hive.
글고 하나 더 눈여겨보고있는것이 xtdb인데 불변 데이터베이스라는 함수형 디비라는 이상한 새끼들이 좀 보여서 살펴보는중이다.
일단 정석은

포스트그레스 몽고 레디스 하이브 네가지 도구를 맥가이버로 사용하는것.
이쪽은 최고의도구가 있다기보단 다다익선이고 맥가이버가 되자.

4번 진영

알고리즘

자료구조 ㅡ 알고리즘 진화트리

어떻게보면 가장 직관적인 컴퓨터과학이다.

1번부터 3번진영은 컴퓨터 공학인데
4번진영과 5번진영은 컴퓨터 과학.

흔히 컴과를 생각하면 타과생들은 알고리즘을 떠올리고 그만큼 대표적이다.

하지만 분야만으로 따지면 작은편.

컴퓨터 공학의 근본이

컴구 ㅡ 시프 ㅡ 운체 ㅡ 멀티코어 ㅡ GPU

로 이어지는 초근본라인이었다면

컴퓨터과학의 근본은 후술할 5번 진영이다.

알고리즘진영은 약간 이론이 개별적인 최적화라서 막 전체적인 의의를 설명하긴 어렵고

대충 공학이 해결하지 않는, 수학 계산과학적인 방법으로 퍼포먼스를 미친듯이 최적화시키는

아주 똑똑하고 영리한 과목이다.


최고의 도구는 C++이다.
학습도구로는 파이썬 좋을수 있고 코테용으론 파이썬좋을수 있다.

근데 코테말고

진정한 알고리즘 영역의 파워플레이어는 C/C++을 써서
디비같은 CPU Bound 프로그래밍을 구현하도록 하자
내 뇌피셜로는 러스트도 괜찮을것 같은데
일단 정석은 씨플플.

5번진영

컴퓨터과학.

이름을 그냥 컴퓨터과학이라고 지어버렸다.
튜링머신과 람다칼큘러스라는 철학을 가지고 있고

람다대수 ㅡ 형식언어와 오토마타 ㅡ 컴파일러론 ㅡ 메타프로그래밍 ㅡ 타입이론

솔직히 형식언어 컴파일러론 그리고 PL까진 확실히 설컴공에 존재하는데
컴퓨터 공학측에 비해서 특히 한국에서 비주류의 입장이라
정확한 진화트리를 알수가 없다.

그리고 내가 아직 공부가 미완성이라서 진화트리를 아직 정확히 말하기 힘듦.

사실 이 얘기 하려고 했는데

우리 운체 왜배워?

뭐 cs필요없다는애들도 있는데 흠... 맞말이다.

근데 내가 운체쪽은 컴구부터 커널, gpu 등 끝까지 정식커리 다 밟은 입장에서 확실히 말할수 있는데

공학적인 투명함이 가져다주는 이점은 상당하다.

불가능을 가능하게 만들어주는것은 공학이다.


여튼 운체는 배워두면 장애물이 생길때 터널을 뚫어버리는 무력을 얻는다.

그러면 컴퓨터과학은 무엇인가?

컴퓨터과학적인 투명함을 얻으면?

솔직히 내가 아직 얻어나가는 과정이므로 미리 말할수는 없다.

근데 터널을 뚫다보면 느낀다.

공학적인 가능성은 ㅇㅋ.

이 방향으로 가면 된단건 알겠음.

근데 어떻게? 가 중요함.

프로젝트를 하다가 중간에 코드꼬여서 엉망되면 프로젝트 중단돼버릴수도 있는데
그래선 안됨.

메타프로그래밍과 타입이론

그리고 불변데이터를 스트리밍하듯 계산해나가는,

프로그래밍의 근본,

폰노이만 아키텍처. 그 구현체에 의존하지않는

프로그래밍의 대원칙.

씹 고수

플밍도사

그게 필요하다.

그걸 알려주는게 이 5진영.

근데 이 5진영이 사실 1진영이 우선시되지않으면 학계밖에 갈수가 없다.

구현체가 없으면 신선놀음은학계밖에 갈곳이 없기 때문.

그리고 다들 알다싶이

1진영은 사치고
2진영만 잘하라는 사회적 압박.

네카라취준을 하려면 2진영을 해야한다고
혹은 3진영.

그리고 코테는 4진영

그러다보니

1진영도 딸딸이행인데
5진영은 그거보다 한참 더 딸딸이짓.


이러다보니 흠... 애매...

여튼 근데 나같은 경우는 공부순서를 오히려

1진영 5진영 4진영 2진영 3진영 순서로 가고 있다.


글구 1, 5가 딸딸이인만큼

설컴공 1학년 학부생새끼들아

학창시절엔 1진영이랑 5진영 존나 파라

나머지 진영은 졸업하고 파서 대기업들가면 됨.

근데 너를 플밍계의 슈퍼스타로 만들어줄 학습은
1진영과 5진영임

오직 학생때만 가능한 투자임.

특히 설컴공가면 1진영은 학교서 갈쳐줘.

그래서 한국 고급개발자가 거진 C++진영인것임.

근데

내가 강조하는건

5진영 꼭해라.

독학을 해서라도 5진영하고

컴파일러론 깊게 파라.

컴파일러론이 내 생각에 존나 GOAT고.

컴공애들 컴파일러론 대부분 이해못한채로 졸업한다고 알고있음.

5진영 챙겨.

재능있는애가 5진영 좀만 챙기면 재능에 날개가 달린다.