요즘 코딩의 재미에 빠져 살고 있는 40대중반의 가장입니다. 코딩이 뭐가 뭔지도 모르고 하고있습니다. 간단한 함수를 만들어서 값이 나오면 신기해 합니다. 하지만 "어떻게 컴퓨터가 함수를 이해하고 계산하지?" 라는 근본적인 의문이 들더군요. 어릴적 '자판기 안에 사람이 커피를 타서 주나?' 라고 생각한것처럼 지금은 컴퓨터 안에 소인국 나라 국민들이 계산해서 값을 주는건 아닌지 상상을 해봅니다. 컴퓨터라는 하드웨어 위에서 결국 소프트웨어가 돌아갑니다. 포프님의 경주차 드라이버는 차 엔진의 이해가 필수라는 말에 공감합니다. c언어도 시작해봐야 겠습니다.
밥 먹을때 숟가락 가지고 먹던 젓가락 갖고 먹던 포크로 먹던~ 밥을 먹을 수 있는건 같지만 먹기 편한걸 골라서 먹는게 편하다~ 언어도 마찬가지라 봐요~ 취업용 언어 나에게 맞지 않은 언어 배우겠다 머리 아파 말고 내가 관심 있는거 부터 시작 하는게 좋습니다~ 그러다 보면 나중에 로우레벨쪽에도 관심을 갖게 됩니다~
백번 옳은 말씀들이네요. C++ 모르고 자바만 배운 사람들은 솔직히 자바도 제대로 못합니다. 파라미터 던져서 처리할 것도 부담스러워하죠.. 리턴 받아와야 되는 거 아니냐 따집니다.. 프로그래머가 쉬운 직업이 아닌데 쉽다고 뜬소문이 퍼져서 그것만 믿고 막 덤비지는 마시고..
진짜 programming language를 공부하고 싶다면 C -> C++ 순서로 공부하세요. language와 컴퓨터 구조 동시에 공부가 됩니다. java, c#, python은 language가 아니고 사실상 스크립트라고 보는게 맞습니다. C/C++만 잘 이해하면 나머지 언어들은 최대 일주일이면 다 이해할 수 있습니다.
저는 중하위권 대학에 다니지만 공대가 참 심각합니다. 20년 전에 머물러 있는 강의자료와. 그 마저도 최악의 강의력으로 족보와, 원래 잘하는 학생들, 몇몇 빼고는 4년동안 학원 속성 1년 보다 못한 지식을 배워갑니다. 교수님들은 학생 가르치는 일엔 관심이 없지요. 워낙 바쁘시기도하고, 자신의 지식의 양이 강의력을 담보하는 것은 아니니까요. 초기 프로그래밍 랭귀지는 그럭저럭 다들해도 3,4학년 심화과정은 더하지요. 저는 차라리 학원강사가 가르치거나 포프선생님의 인강을 듣고 시험봤으면 좋겠습니다. 다가오는 이때에 현재 시스템의 대학은 확실히 개정되야 한다고 생각합니다.
동감!!!, 개인적으로 순서를 정한다면 unmanaged 먼져 (자료구조가 핵심), 그다음 managed. 그리고, 하나더 하자면 영어, 인터넷이 없으면 개발을 못하는 세상에서 빠른 정보습득을 위해 영어는 필수. 만약 회화까지 가능하면 전세계에 resume 를 낼 수 있으니 조금이라도 시간이 있는 젊은 분들은 unmanged 와 영어에 투자하면 큰 후회가 없다고 생각합니다.
제가 08학번이니 이제 딱 10년전 이야기네요지방대 다니긴 했는데 대학교 1학년때 항상 나이 제일많고 입김 센 교수님 두분이서 C랑 C++ 무조건 그 강의 안들으면 내꺼 수강할 생각 말아라 해서 참 트렌드 모르는 구식 사람들이다 생각했는데 그 교수님들 은퇴하기전 그 어거지로 C/C++ 세대들까지가 참 취업 잘했었어요. 네이버랑 하이닉스 삼성 LG간사람도 있고 적어도 최저임금 받으면서 코딩하는 사람은 없었죠. 물론 지방대라 아싸리 컴퓨터쪽이랑 떨어져서 사는 사람이 절반은 넘지만, 어떻게든 붙잡은 사람들은 계속 잘 살아요.그땐 왜 컴파일러까지 씹어먹어야 되는건지, 왜 도대체 내가 야크랑 싸워야 되는건지,왜 Memset 했다가 메모리 터지는거에 내가 열불을 내야되는지 Destroy 설정하면 어디는 알아서 되던데사실 그시절부터 안드로이드가 이미 혜성같이 나타난 시절이, 사실 저는 3학년때까진 두분중 한분의 연구실에 있다가, 4학년때 저거 돈 안된다고 혼자 안드로이드 하겠다고 요즘말로 빤쓰런? 했었죠. 배울거 다 배웠고 더 볼거없다고 생각했습니다.오만했죠.저 졸업하던 시기에 두분 은퇴하고 2012년경부터 학교에서 나서 신나서 자바/C#만 되고 돈되는것부터 가르켰는데 어느날부터인가 취업율도 급감하더라고요. 그냥 대학교도 졸업장 따러 다니는곳이 됬고 컴공학과가 저희학교의 나름 자존심이었는데 지잡에 걸맞는 수준(?)으로 떨어지게 되니 보기 좀 안좋더군요JAVA, C#을 매도하는게 절대 아닙니다. 그만큼 잘 만들어진 언어이니 누구나 사용하기 편하고 좋은 결과물을 낼수있죠. 예를들면 포토샵 냅두고 그림판으로 디자인작업할 이유가 전혀 없잖아요. (사실 그림판은 너무 기초만 있기에 C의 비유는 좀 그렇지만, 차이의 갭을 설명하기엔 이게 적절합니다.)하지만 그림이 걸작이 나온다고 포토샵만 쓰면 뭐합니까. 나중에 포토샵쓰시는분이 픽셀에 대해 전혀 모르면 언젠가 한번 부닥칠때가 옵니다. 그걸 알고넘어가냐 모르고 아 이렇게 땜빵하자 차이는 커집니다.사실 저는 잘하는 축은 아닙니다. 연구실다니다가 빤쓰런 했었어요. 그래서 사실 지금하는일에 예전에 배웠던걸 응용도 거의 못하고, 나중엔 그저그런 사람이 되다가 치킨만 튀기겠죠. 이런 평을 내릴만한 사람은 아닙니다.하지만 저같은 사람들도 하다보면 아 이부분에서는 이렇게 하는게 더 이거는 비효율인데.... 라는 생각정도는 떠오릅니다. 한발은 더 가요. 그리고 그게 일반 동기랑 조금의 연봉차이는 나게 하더라고요.그 쇠심줄같은 고집의 방망이 깎던 노인들같던 그 교수님들에게 지금은 다시한번 제대로 배우고 싶습니다.
저도 매우 공감합니다. 저도 javascript로 입문을 했지만 지금은 c/c++을 공부했고 게임 개발을 지망하고 있습니다. 사실 javascript를 사용할 때는 call by value니 call by reference니 , 일급 객체니 이런거 피상적으로 알고 넘어갔고... 메모리적인 생각은 전혀 하지 않았는데. c/c++을 공부하고 나니까 이제서야 궁금해지기 시작했고 그러한 방식이 이해가 가기 시작했습니다. 무슨 언어를 주력으로 하느냐는 별로 중요하지 않은 것 같습니다. 그러나 c/c++을 꼭 알고 메모리 수준부터 각 체계에 맞는 지식들을 섭렵하고 주력언어를 다시 다루면 새로운게 보인다고 말씀드리고 싶습니다.
제가 다닌 학교에서는 1학년때 python으로 어지간한 알고리즘 구현이나 oop 개념을 가르치고, 1학년 말때쯤 cpp 로 자료구조 구현, c로 시스템 프로그래밍을 배우고 2학년때 심화, 그 이후의 클래스들에선 언어는 선택에 맡기거나 이론 수업이나 운영체제 수업에선 c를 사용하는 프로젝트들을 했습니다. 개인적으론 학위를 가졌다 한다면 추상적인 언어와 c 모두 잘 다룰 줄 알아야 하고 사실 둘을 잘 안다면 직장을 위해서 다른 언어를 익힌다고 해도 정말 어렵지 않게 배워 적응할 수 있죠. 사실 문법만 조금씩 다르지, 핵심적인 개념들은 대부분 공유하니까요. 언어는 그 프로젝트에 맞는 것을 선택해야 한다는 것이 제 생각입니다. 제가 한국 프로그래머들의 커뮤니티에서 조금 충격을 받았던 점은 그들의 언어에 대한 자부심 등이었습니다. 물론 선호하는 언어가 있을 순 있지만, 추상화 단계가 높은 언어는 프로그래밍도 아니라는 식으로 이야기를 하는데 솔직히 그분들이 하는 소리 들어보면 로우레벨 언어를 잘할 것 같지도 않고 하이레벨을 쓴다고 고생산성을 낼 수 있을 거 같지도 않더군요.
제가 전부를 아는건 아닙니다. 다만 경험을 바탕으로 이야기 하자면, Programming language를 가르치는 강사 혹은 교수들의 대부분 Language를 왜 사용하는지 모르고 가르칩니다. 보다 근본적인 사실을 생각하지 않고 그냥 책의 흐름대로 읽어줄 뿐입니다. (8:45) #include
void bubble_sort (int* a, int size); void swapping (int* a, int* b);
int main (void) {
int a[10] = { 8, 4, 2, 5, 3, 7, 10, 1, 6, 9 }; int i = 0;
bubble_sort (a, sizeof (a) / sizeof (int));
for (i = 0; i < sizeof (a) / sizeof (int); i++) {
printf("%d ", a[i]); } printf(" ");
return 0; }
void bubble_sort (int* a, int size) {
int i = 0, j = 0;
for (i = 0; i < size; i++) { for (j = 0; j < size - 1; j++) { if (a[j] > a[j + 1]) {
swapping (a + j, a + j + 1); } } j++; } } void swapping (int* a, int* b) {
int tmp = 0;
tmp = *a; *a = *b; *b = tmp; } 이러한 종류의 코드를 매우 많이 봐왔을 것입니다. (기본적인 Bubble sort Algorithm 입니다.) 보통 반복문을 사용할 때 절대적으로 i, j를 사용합니다. 그리고 쓸데없이 변수를 생략하거나 줄입니다. 상황에 맞지 않게 사용하는 경우도 매우 빈번하게 있습니다. 심지어 소스코드를 재대로 설명해주지도 않습니다. 여기서 i는 무엇이고, j는 무엇이며 Algorithm의 흐름조차 언급하지 않습니다. 더 문제인 것은 위의 코드는 그나마 모듈화가 재대로 되어있지만, main()내에 섞어 설명하는 경우도 매우 많습니다.(모듈화를 하지 않고 설명합니다.) 아래 코드를 봐주세요. #include
return; } 위의 조금 익숙치 않는 형태의 코드를 볼 것입니다. (일반 학생 기준) 변수는 저의 주관대로 씌여졌고, 의미하나하나 제가 부여한 것입니다. 위의 Algorithm과 다른 것 처럼 보이지만 동일한 Algorighm 입니다. 보통 수업을 들을때 위와같이 생략되지 않은 형태의 소스를 기반으로 수업을 듣나요? 대부분 전자의 코드를 보고 수업을 받을 것입니다. 이것이 왜 문제가 되는가? 에 대한 물음을 한다면 한편의 시를 예로 들어보겠습니다. (비슷한 맥락) 김소월에 을 예로 들어보겠습니다. (고등학교 과정을 거친사람들이라면 아실꺼라 믿습니다.) 이 시에 모든 단어 하나하나를 a,b,c.. 와 같이 바꿔주세요. 그리고 한번 읽어보길 바랍니다. 이미 아는 내용임에도 불구하고 매우 이상하게 느껴질 것입니다. (오히려 가독성이 떨어질 것입니다.) Programming Language도 마찬가지입니다. 변수 하나하나에 적절한 의미가 있고, 적절한 단어를 사용해줘야 합니다. (이유는 가독성 및 이해의 차원에서 효율이 좋기 때문입니다.) 이러한 기본적인 맥락도 모른체 엉터리로 수업하고 학점을 부여합니다. 저는 이 부분이 매우 잘못되었다고 생각합니다. 마치 이런거죠. 프로그램을 못하는 사람이 프로그램을 가르치고 있는 상황인 것입니다. 기본조차 재대로 알고 있지 않는 사람들이 수업을 하고 있습니다. 더큰 문제는 젊은 강사들이 더 심하다는 것입니다. 그저 암기한 내용을 기반으로 떠들기 바쁘죠. 이 글을 핵심을 이해하고 공감할지 모르겠지만 조금이라도 알아줬으면 하는 차원에서 이 글을 씁니다.
안녕하세요, 지나가던 비전공자 입니다. 이제 입문을 해보려고 검색하다가 이 영상을 보게 되었고, 댓글을 보다가 궁금한 점이 있어서 글을 남겨요. 저는 swift를 배우고 싶어서 찾아보는 중인데, 아무 기반도 없이 배우려니 막막합니다. 그런데 C를 먼저 배우라고 하시니, 바로 swift를 배우면 안되는 것인가 의문이 생깁니다. 입문자가 바로 뛰어들어 공부하면 안되는 부분인가요 ㅠㅠ 정말 몰라서 질문 남겨요...
소프트웨어쪽으로 마음을 잡고 있는 전자과 학생입니다. 이렇게 좋은 채널을 너무 늦게 알게되어 아쉽네요. 좋은 영상 감사하고 아직까지도 댓글 피드백 주시는 것을 보니 더욱 신뢰가 갑니다(물론 포프님의 커리어만 해도 의심할 여지는 없지만요). 발음이 또랑또랑하셔서 공부 틈틈히 라디오처럼 틀고 듣습니다. 항상 감사해요
C#으로 포인터와 참조에 대해서 이해하게 되고 JS로 App설계를 배우게 된 이후로는 C와 C++를 처음 배웠을 때와 다르게 모든 개념이 쉬워졌고 CPU와 RAM이 제 머릿속에 얹혀진 느낌을 받게 되었습니다. 이때부터 컴퓨팅에 대해 이론적 추상화가 가능해졌고 마치 모든 코드를 부처님 손바닥 위에서 보는 뜻한 느낌을 받게 되었습니다. 이 과정이 속이 뒤틀리고 머리가 뜨거웠지만 지나가고 보니 모든 코딩이 쉬워지고 재밌어지게 되었습니다. 그리고 지금은 아키텍처에 가장 많은 관심이 가고 모든 언어나 코드는 아키텍처가 전부란 생각이 듭니다.
unmanaged language를 알아야 한다는 점에는 정말 공감합니다. Heap이나 Call stack을 있다고만 알고 정확히 어떻게 동작하는지 모르는 있는 사람들이 몇몇 있더군요. value type의 variable은 함수를 벗어나면 사라진다던가 재귀함수를 계속 부르면 스택오버플로우가 난다던가 진짜 제 생각으로는 상식이라 생각했던 사실을 모르는 사람들을 종종 많이 봤습니다.
전적으로 동의합니다. 현재는 C sharp 을 주로 개발하는데 영상쪽을 전공하다보니 unsafe한 데이터를 많이 다룹니다. C를 충분히 해본 사람과 아닌 사람의 메모리에대한 이해는 꽤나 크게 차이나더군요. 다행히도 저는 전자과임에도 C, C++를 주로 다뤘고, 펌웨어단 공부하면서 어셈블리도 조금 알고 있습니다. 항상 많은 것을 배워갑니다.
작은회사에서 3년 일하고 이직준비중에 포프님 영상을 접했습니다. 제가 정말 3년 전보다 나아졌을까 라는생각이 들게끔해주시네요.. 저도C언어들은 학습안하고 바로 JAVA, 파이썬 등등을 배워서 취업을 했거든요. 지금이라도 공부(C++) 부터해서 기본을 더 다져보려고합니다. 좋은 영상감사드립니다.
좋은 내용 잘 봤습니다. 대학때 경엉전공이었고, 전산, 컴공의 수업을 들으며 C, 포트란, 자바 등등을 배웠고 현재는 데이터베이스 관리업무를 하고 있는데 메모리에 대한 이해가 없으면 데이터베이스의 작동원리 뿐 아니라, 대부분의 컴퓨터와 관련된 작동원리를 쉽게 이해하기 어렵다고 봅니다.
네 동의합니다. 다만 unmanaged언어에 너무 빠지지않고 현재 흐르는 페러다임을 놓치지않고 잘 따라간다면 완벽한 개발자라할 수 있겠네요. 요즘은 예전과 달리 미래에 대한 불확실성과 성장속도가 기하급수적으로 빨라져 너무 하나에 꽂혀 살게된다면 나중에 세상이 변했을때 대응하기 힘들것 같습니다.
프로그래머로 진지하게 나갈 거면 C/C++ 베이스가 좋긴 한 것 같아요. 전 cs 전공했는데 학부 때 메인 언어는 c 로 4년 + java로 oop 개념 1-2년 같이 배우고 c++로 석사 2년 했어요.(지금은 아닌데 당시에는 oop 너무 싫어서 c++보다 c를 더 선호했죠ㅋ) 근데 cs에서는 비주얼적인 걸 하나도 안 배우니까 너무 재미가 없었어요. 몇 시간 코딩했는데 고작 터미널 창이나 텍스트 파일로 결과물 보는 게 너무 demotivating 한 거에요ㅋ 항상 비주얼적인 것에 대한 굶주림이 있다가 석사 졸업 후 취업을 했는데 그 때 막 UX라는 개념이 떠오르던 시기라 회사 내에서 UX 부서에서 일할 사람들을 모집했어요. 뭔가 비주얼적인 걸 할 수 있을 것 같아 거기 지원했는데 운좋게 붙었어요. 그래서 UX 디자이너로 거의 8년을 일했죠. 코딩 완전 손놓고. 그러다 해외 유학 나왔는데 학교가 디자인이랑 코딩을 같이 가르치는 곳이라 코딩 수업 수준이 딱 수박 겉햝기로 트렌디한 툴과 기술들 엄청 많이 가르쳐주는 식이었어요. 그래도 비주얼적인 거 코딩하니까 그제서야 코딩이 재미있더라구요. cs 졸업한지 너무 오래돼서 다 까먹었을 줄 알았는데 그래도 다시 하니까 꽤 기억 나더라고요. 자료구조나 알고리즘 시간에 왜 배우는지도 모르고 배웠던 것들이 진짜 실용적인 상황에 적용할 일이 생기니까 아 이래서 그런 개념이 필요하구나 이해가 돼서 넘 짜릿했어요. 포인터 개념도 신기하게 아직까지 기억하고 있어서 자바스크립트 디버깅 할 때 아 클래스 이거 뒤에서 포인터처럼 돌아가는구나 이해하고 고치기도 하고 그랬어요. 그리고 c언어를 베이스로 해놔서 그런지 다른 언어 배울 때는 웬만하면 다 쉽게 느껴진다는 장점도 있어요ㅎㅎ 포인터 따로 안써줘도 돼? 어레이 크기 미리 지정 안해줘도 돼? 동적 메모리 할당 같은 거 안해줘도 돼? 개꿀. 이런 느낌? ㅋㅋㅋ
일차적으로 포프님의 영상을 보고 많은것을 느끼지만, 댓글들을 보면서 다른분들의 생각과 견해, 경험을 볼 수 있어서 많이 참고하는편입니다. @yeonie8889님이 이야기가 나만 그렇게 느꼈던게 아니구나하는 생각과, 몇시간 고민 끝에 콘솔로 결과를 나타내면 항상 문제는 해결해서 뿌듯함은 있어도 크게 동기부여가 안된 스스로를 보며 내가 추구하는게 뭔지를 항상 갈팡질팡했는데 이 글을 보면서 조금은 답답했던 것을 해소하게 되지 않나 싶습니다. 좋은 경험 들려주셔서, 공유해주셔서 감사드립니다. 해와 같이 빛나는 하루 되세요 :)
프로그래머로서 기초와 근원을 깊이 튼튼히 다지려면 unmanaged를 깊이 공부해야하고, 몇몇사용자가아닌 광범위한다수도 좀더쉽게 사용할수있는 프로그래밍을 이해하기 위해서 managed를 알 필요가 있는것이군요. 이제 막 c언어 공부를 시작했는데 포프님 말씀덕분에 동기부여와 와닿는 필요성을 얻고 갑니다 감사합니다
제가 다녔던 학교도 저번에 보니까 1학년부터 시작하는 기초프로그래밍 교과목과 객체 지향 등의 교과목에서 C,C++을 빼버리고 자바로 교체했습니다. 아는 후배는 C,C++언어를 배우고 군대 다녀왔더니 모든 커리큘럼 자바와 파이썬 중신으로 바뀌어 있어서 복학 첫학기부터 고생했다고 제게 말해줬던 기억이 있네요. 처음 프로그래밍을 접하는 신입생들에게 C나 C++은 너무 어렵게 느껴져 포기하는 애들이 많아졌다며 커리큘럼을 말씀하신 manged 언어로 바꾸는 학교들이 늘고 있는데 개인적으로는 정말 아쉽습니다...
현직 1년차 개발자입니다. 현재 회사와서 c#으로 1개 프로젝트 완성하고 2번째 대형 프로젝트 c++과 리눅스를 이용하여 서버개설완료후 클라이언트 개발중입니다. 정말 제가 겪은 모든게 들어맞는 영상이네요. 처음 왔을때 뭣모르고 c#에서 contains함수 남발하다가 발적화된 경험에 특히 매니지먼트에서 메모리릭이 일어나면 환장하겠더군요.. 찾는데 하루걸린적도 ... 어휴 그리고 리눅스로 서버 개설해서 CentOs에서 요 망할놈의 posix 멀티 쓰레드에서 동기화 문제때문에 뮤택스 세마포어 다 걸어가보고 나중에 상황에 따라 멀티쓰레드와 멀티프로세스와 입출력다중화는 상황에 따라 사용처가 많이 갈린다는 경험들.. 학교에서나 학원에서 배운거 돌이켜보니... 언어 하나만 잘해도 평생 밥벌어먹고 산다는 얘기도 들엇는데 다 개소리입니다.이게 언어 하나만 잘해도 밥벌어먹고 산다는 급이 어느정도인지도 모르고 학생들은 망연하게 그냥 언어 하나만 파는경우도 허다하죠. 데이터 베이스 서버 클라 모든게 다 모여서 하나의 프로그램 서비스를 만드는데 저는 개인적으로 자신의 전공 1순위 기술은 지키며 부로 나머지 전반적인 기술은 깔려야 된다고 생각합니다.
저는 중상위권 정도되는 학교를 재학중인데 총 5학기 동안 unmanaged language를 교육하는데 주력합니다. 물론 중간에 managed language를 교육하긴 합니다만 커리큘럼상에서 주력하고 있는 것은 unmanaged language네요. 교수님들도 평소에 컴퓨터가 어떻게 동작하는지에 대한 것을 많이 이야기하시는데 이게 정말 바람직하다는 것을 몸소 체험해보고 포프님 영상보면서 다시 한번 환기하게 됩니다. 겨우 학부생 과정을 공부하고 있지만 프로그래머가 컴퓨터 하부구조를 모르고서 코딩을 한다는건 말이 안된다고 친구들끼리 많이 이야기를 했었는데 맞는 말이었네요.
저도 숭실대학교인데,, 학부때는 빵판에 회로를 설계 하면서까지, 어셈블리 언어를 직접 만들면서까지, 리눅스 커널 코드도 짜고, 네트워크 프로토콜도 손수 설계시키며 가르치는 학교 커리큘럼에 학을 뗐었는데, 현업에 나와보니 저희 학교의 커리큘럼이 얼마나 좋았던 것인지 새삼 느낍니다! 진짜 생각의 출발점부터가 다릅니다. 다른 학교출신(비하하는 의미는 아니지만) 동료들의 이야기를 들어보면 진짜 컴퓨터가 마법을 부리는줄 알더군요... 다 누군가가 직접 만든 코드인 것인데... 포프님의 생각에 깊이 공감하게되네요
오랜 경험으로 알게된 것 중 하나. 어떤 프로그래밍 언어를 아는가가 중요하지 않다. 수많은 과제를 하면서 깨닫게 된 것임. 말을 논리적으로 잘하는 사람이 프로그래밍도 잘한다. 왜냐고? 결국 실제 언어나 프로그래밍 언어나 논리를 표현하는 방법의 차일뿐이더라. 글을 잘 쓰거나 말을 논리적으로 잘하는 사람이 프로그래밍도 잘한다. 말 많고 많이 안다고 시끄러운 사람의 코딩을 보면 그 사람의 사고가 얼마나 엉망인지 알겠더라는....
우선, 포프님의 주제들은 대부분 게임과 같이 성능에 비중이 큰 개발 분야... 가끔은 그중에서도 그저 엔진에만 의지 하지 않는 수준을 아우르는 개발자를 '목표'에 두고서 이야기 하는 경향도 있습니다, 문제는 이러한 전제를 못 박고 이야기하지 않다 보니 영상에서 다뤄지는 이야기들이 인구 차원에서 사실상 대부분의 개발자들이 일하고 있는 분야에도 함께 적용될 것처럼 보입니다. 아무튼, managed language 와 unmanaged language 를 나름 열심히 배우고 현장을 경험해 온 '일반적인 수준의 개발자'로써 의견을 조금 꺼내 보자면... 영상 내용을 간단히 줄이자면, '소수의 최상급 개발자들은 고도의 테크닉을 지녔다, 그들은 unmanaged 언에 매우 능하다. 개발자로서 그래야 할 필요가 있다' 는 의견이라고 볼 수 있겠습니다. 저도 이 의견에 공감은 합니다. 다만, 현실(현장의 실전)을 반영하면 '이제는 굳이 그럴 필요까지는 없어진 거 같다.' 라는 생각으로 머리가 좀 복잡해 질 일이 된다는 생각입니다. 물론, 앞으로 취업하고 그런대로 잘 살아보겠다는 보편적 의지를 가진 대다수에게만 해당 될 이야기죠. 제가 외국은 잘 모르니 그저 국내 실정만으로 이야기 하자면, 국내 대다수의 개발자들이 일하고 있는 개발분야는 managed 언어가 낼 수 있는 성능 범위 이상을 요구하지도 않거니와 실무적으로는 거론도 하지 않는 게 사실입니다. 이런 분위기는 대략 20여 년 특히 십 수년 사이에 급속도로 변해 왔죠. 그저 어쨌든 에러 없이 돌아가기만 하면 되고, 성능은 해당 툴이나 언어가 보편적으로 제공하는 수준에서 사용에 그다지 문제만 없으면 오직 '납품!' 이 관건입니다. 튜닝은 나중의 일이고 이것도 특별히 전문가가 배치되기보다는 그 파트를 담당했던 개발자가 수습하듯 날림으로 해결하며 이 역시 사용된 언어와 툴의 영역에 갇혀 있습니다. 이쯤 돼서 아마 다음과 같은 의견이 나옵니다. "그 중에서도 unmanaged language 등급의 기술에 능한 사람들이 결국 인정 받고 좋은 위치에 남게 된다" 라고 말이죠. 이 의견에는 다시 다음과 같은 긴 설명이 필요할 겁니다. "영상에서도 언급하듯 결국 그런 사람들은 어차피 특화된 분야의 극소수이다. 자기 생활 없이 삶에 급급해 살다보면 그냥 보편적으로 일하며 버티는 직장인이 돼 있는 것이 경험적 통계로 98%는 될 것이며, 이들에게 있어 unmanaged language 등급의 지식들은 어쩌다 가끔 신입들 앞에서 '이건 이렇게 해결될 문제가 아니고 에... 사실...'라는 멘트로 슬쩍 꺼내 들었다가 '야 일단 밥이나 먹으러 가자' 라는 마무리로 이제는 학창시절의 추억이 돼 버린 기억 정도의 역할이 고작인... 배워서 도움이 된 거 같긴 한데 뭐 하나 나열하기도 힘든... 느낌적인 느낌 같은 것이 돼 버린 게 국내 프로그램 개발 산업 전반의 현실이다." 라는 긴 설명 말이죠. 결국, 배워서 나쁠 것 없지만 자신이 추구하는 목표에 따라 집중할 가치는 매우 크게 다르다는 생각 입니다. 이상, 앞으로 변할 가능성이 거의 없는 현 실태 차원에서 보는, '이상적으로는 바람직하지만, 대다수의 개발자들에게는 더 이상/그다지 실용적이지도 않다' 라는 의견이었습니다.
업계를 바라보는 눈은 저와 크게 다르지 않으시며 저도 많은 부분 동의합니다. 저랑 의견 차이가 있는 것은 두개 정도 인거 같은데요. 1) 게임 등 성능에만 국한된 이야기라서 98프로에겐 의미없는 이야기다. 일단 98프로라는게 매우 과장인 거 같고요. (현재 프로그래밍 언어 점유율만 봐도 C/C++을 합치면 30프로가 넘는 부분에서 그리 생각. 그리고 현재 웹 프로그래밍을 주로 하는 저로써는 아키텍트급의 엔지니어도 염두에 두고 한 이야기 입니다. 그 결과 저는 분야 막론하고 상위 20프로안에 들어가려는 사람들에게 적용되는 이야기라고 봅니다. 2) 살아남는다는 의미에 대한 인식차이 제목에서도 그리고 비디오에서도 말했듯이 전 프로그래머로 10년뒤에도 떳떳이 살아남기위해 필요한 언어라고 말했습니다. 하지만 들어주신 예는 제 기준에서는 그냥 일반 직장인으로 일단 봉급 받으며 다소 주먹구구식으로 일해보자. 먼미래(즉 한 10년 15년 뒤에도)에 내가 경쟁력이 있을지는 모르겠다. 인듯 합니다. 전 이 때 여전히 눈치보며 짤리면 갈때 없다는 걱정하고 있는게 살아남는 길은 아니라고 봅니다. 그리고 업계상황은 변할거라고 봅니다. 단 이상적이지 않은 방향으로요. 저임금의 프로그래머가 더 양산되면서 그저그런 일반 프로그래머들의 경쟁이 더 치열해질 것이고 결국 나이먹은 프로그래머는 점점 설 곳이 더 적어질 거라고 생각하죠. 하지만 이런 걸 깨닫는 순간이 보통 경력 10년이후라 생각합니다. 따라서 너무 늦기전에 새로 업계에 들어오는 사람들이 방향을 잘 잡아서 대비를 했으면 하는 바람에 만든 비디오 입니다. 즉 상위 20프로 이상으로 올라가서 살아남을거냐 아니면 하위 80프로에서 머무르며 늙어서 맘편히 못살거냐..
c/c++ 로 FFI만들어서 브라우저/js런타임에서 돌리게 하거나 Node-API로 rust/c를 wasm으로 컴파일해서 사용하거나 emscripten을 사용하거나.. 등 이미 웹환경에서 최적화를 위해 이루어지고 있는 시도들이고 상당히 많은 라이브러리들이 개발이 되고 있죠.. (wasmtime, wasi, wasm3) 왜 모질라재단에서 적자까지 내며 rust기반으로 새로운 브라우저 엔진 servo와 webrenderer를 만들고 있을까요? 왜 새로운 Js 런타임 deno, bun과 같은 게 등장했으며 사람들은 열광을 하고 있을까요? 왜 swc와 같은 js/ts컴파일러에 사람들은 열광하고 있을까요? 이런 움직임들을 보시면 한번쯤 멈추고 생각해볼 필요가 있습니다. 10년, 20년 뒤로 갈수록, AR과 webxr이 시간이 지나면서 safari, chrome, firefox등의 메인스트림 브라우저에서 보편화될수록, 더더욱 웹생태계는 unmanaged lang에 대한 요구가 높아지게 됩니다. 30년정도 가면 vr도 원하게 될거구요.. 그때가면 web생태계에서 진정한 메타버스를 요구하고자 하는 움직임이 일어나겠죠. 지금과 같은 수준의 최적화는 얼척이 없는 높은 수준의 엔지니어링이 반드시 요구되는 사회가 될거라 이 말입니다. elixir와 같은 erlang기반 언어들이 백엔드에 점차 도입되는 게 늘어나는 이유도 위와 같은 배경에서 입니다. 지금도 번들링된 js파일 크기가 커지면서 spa체계에서는 로드시간이 길어져 lodash같은 라이브러리들로 해결하고 있죠. 하지만 webxr, webaudio같은 기술들을 점차 유저들이 원하게 되고 글래스가 보급될 수록 지금과 같이 react니 vue니 이런 라이브러리 아는 수준의 웹 생태계와는 달라질 겁니다. 애초에 웹에서 요구되는 UX가 upside down하게 바뀌게 된다구요.. 또한 그즈음되면 ethereum뿐만 아니라 다른 블록체인 프로토콜들이 많이 개발되고 사이드체인, 롤업들이 충분히 준비되어서 지금보다 훨씬 web3에 가까운 모습이 만들어져있을 겁니다. 이를 위해서 노력하는 천재개발자들이 정말 많다는 걸 github에서 좀만 살펴봐도 다 알 수 있습니다. 지금 비단 웹 클라이언트 생태계에서 말했는데도 이정도인데 하물며 게임씬에서는 어떻겠습니까? 백엔드 씬에서는요? 제발 미래를 생각하고 시니어이상급으로 성장하고자 하는 개발자라면 반박할 것도없이 unmanaged의 중요성을 느낌과 동시에 computer science를 철저히 공부해야 하는 겁니다. 특히 컴공 대학생이면 축복받았다고 생각하시고 부모님께 감사드리면서 대학공부 열심히 하시면 되고요. 이런 이유가 바로 학원에서 되지도 않는 이상한 강의 팔아제끼면서 돈빨아먹는 부트캠프들이 나쁜이유입니다. 전혀 미래가 없는 방식으로 가르치거든요..
오늘 처음 포츠TV 와서 Subscirbe 했습니다.. 전 37살 먹은 아들 아빠이며 아일랜드 리머릭에 거주하고 현재 Limerick Institude Technology에서 3학년 재학중이네요. 처음부터 지금까지 C++가 항상 모듈이 있으며 저희 교수이 정말 여기서 유명하신 분이십니다. Unmaged Langauge를 아주 강조합니다. 2학년때 서서히 알고리즘들과 소트들을 배우는데 정말 배우는 입장에서 아주 중요다고 생각합니다. Managed Language 2학년부터 C샵 3학년 현재는 JAVA와 C샵을 현재 깁숙히 배우고 있고요... 정말 유용한 정보 감사드리고, 공감이 가서 이렇게 글 남깁니다..
@@chaidle 예. 늦각이 대학생입니다. 현내 아일랜드 거주중이고 limerick Institute Technology 3학년입니다. 일년 더남았구요. 곧 인턴쉽을 Kemp technology에 Reserch and development 에서 stack developer로 일할 예정이구요
오래된 글이지만 좀 잘못된게 있어 적습니다 안드로이드는 커널은 리눅스 런타임인 가상머신은 달빅이라는 C로 구현된 런타임 위에 자바로 구현된 프레임워크로 돌았습니다 이게 2015년 이후로 런타임이 C++호 구현된 아트 런타임으로 바꾸기 가비지 컬렉션과 JIT그리고 점진적인 AOT등 인터프리터의 한계를 벗어나 점점 속도가 개선되었습니다 이런 기술들이 댓글 다신 것처럼 언어가 달라진게 주된 요소는 아닙니다
로우레벨도 디테일도 정말 중요하지만 하이레벨 언어를 말하면서 몇몇 분들이 "쉬운언어" 운운하는 것은 좀 황당하네요. 사람이 하는 일이 쉬울 수는 있어도 어떻게 언어 자체가 쉬울 수 있겠습니까😂 스몰토크, 리습 이런 퓨어한 하이레벨 랭귀지를 제대로 접해보셨다면 생각이 많이 바뀌실 수 있을 텐데.... 또 어떤분들은 무슨 파이썬이라고 쉽게 생각하시는 것 같은데, 이탈리아의 대표적인 프로그래머 Alex Martelli의 경우 젊은 시절 C++전문가로 명성을 날렸지만, 파이썬으로 넘어오고 부터는 몇십년을 해도 계속 배울 점이 있어 참으로 고마운 언어라고 말한답니다. 로우/하이 두개를 잘 한다면 정말 좋겠지만 사실 하나를 잘하는 것만으로도 정말 대단한 거지요. 평범한 프로그래머가 한쪽을 택한다고해서 뭐라 할 필요는 없다고 생각해요. 미국에서는 리습으로 만드는 운영체제 수업같은 것이 매우 중요하게 여겨지는데 우리나라에서는 그런 랭귀지가 있다는 것도 잘 모르지요. 우리나라에서는 잘한다는 프로그래머들이 하이레벨 랭귀지에 대한 관심이 별로 없는게 훨씬 큰 문제라고 생각합니다.
지금 들어주신 논거에 몇 가지 오류(혹은 모르는 사람이 보면 잘못 이해할 부분)이 있는 거 같아 몇가지 첨언합니다. 1. 쉬운 언어라는 표현은 보다 쉬운 언어를 의미하는 겁니다. 그 언어가 무조건 쉽다라는 의미가 아니구요. 언매니지드 언어가 매니지드 언어보다 어렵다는 것은 많은 분들이 동의한다고 생각하고요. 2. 미국에서 오에스 가르칠 때 리스프보다 C를 더 많이 씁니다. 제가 미국에서 컴공 석사 받을 때도 C로 오에스 개념들을 만들어야 했습니다. 메이저한 거의 모든 운영체제가 C로 만들었기 때문이죠. 참고로 미국에서도 스몰토크, 리스프란 언어가 있는 거 모르는 프로그래머들 많습니다. 그게 문제라면 한국만의 문제는 아닙니다. 3. 잘하는 프로그래머들이 매니지드 언어(퓨어한 하이레벨 언어라고 표현하신게 매니지드 언어라 생각해서 그렇게 표현하겠습니다. 씨, 씨뿔뿔도 하이레벨 언어라서요. 그게 아니라 함수형 언어를 말씀하시는 거라면 댓글 달아주세요.)에 관심을 안 가지는게 문제라고 하셨는데 그거에 대한 논거를 제시하셨으면 좋겠습니다. 그 반대 논거를 드라자면 현재 널리 쓰이는 매니지드 언어를 만들고 발전시켜 나가는 주요 멤버들이 그 잘하는 프로그래머들입니다. (특히 C#진영) 그럴 수 밖에 없는 게 매니지드 언어의 기능 등을 만드려면 그 언어자체(컴파일러 및 인터프리터)에서 하드웨어 제어를 해줘야하기 때문에 언매니지드 언어를 잘 아는 사람이 아니면 그런 일을 하기 어렵습니다.
@@포프티비 안녕하세요. 우선 친히 답변을 해주셔서 정말 감사하게 생각합니다. 포프님보다는 여기에 달린 다른 댓글들을 겨냥하여 쓴 말이긴 한데요. 포프님께서 해주신 말씀에 대해서도 답변을 드리겠습니다. 1. 그 보다 쉽다라는 내용에 대해서도 동의하지 않습니다. malloc, epoll등 함수등을 깊게 이해하는 것 만큼이나, 클로져, 메타프로그래밍, 신택스트리 자체를 동적으로 변경하는 리스프의 매크로 같은 기능을 이해하는 것이 어렵고 동시에 프로그래머에게 큰 자산이 된다고 봅니다. 로우레벨 랭귀지에는 로우레벨 전용 기능이 있듯이 하이레벨 랭귀지에는 하이레벨 전용 기능이 있다고 보셔야 하지 않을까요. 제가 평소 자주 인용하는 블럽패래독스라는 말을 링크합니다(wiki.c2.com/?BlubParadox). 2. 오해의 소지가 있게 말씀드린 점은 죄송합니다. 저도 미국에서 C가 대학과정에서 운영체제를 가르치는데 주류 언어라는 점은 잘 인지를 하고 있습니다. 다만 소위 상위권 대학으로 갈수록 오히려 하이레벨 랭귀지로 운영체제를 가르치는 경우가 많습니다. 리스프와 과 같은 하이레벨 랭귀지가 정말 '쉬운' 언어 였다면 설명하기 힘든 현상이지요. 대표적으로 MIT의 SICP라는 리스프로 구현하는 운영체제 교과서/강의가 있는데요, 컴퓨터과학을 통틀어 가장 권위있는 강의중 하나입니다. 3. 제 논지는 우리나라 고급프로그래머들이 너무 로우레벨쪽에 편중되어 있다는 것이었고 말씀해 주신 내용은 오히려 제가 말한 논지를 강화시키는 것으로 보입니다. GNU의 창시자 리처드 스톨만 같은 분은 로우레벨 랭귀지에 벗어나지 못하는 세태를 비판하고 하이레벨 랭귀지를 정말로 많이 강조를 했습니다. gcc, bash, emacs 등 굵직굵직한 작품을 보면 이런 철학이 잘 녹아있지요. 현재 우리나라 토양에서는 이런 분이 나오기 힘들다고 생각했습니다.
1. 하이레벨의 개념부터 잠시 잡아주시고 논의를 진행하는게 좋을 듯 합니다. 정확히 무슨 기준으로 하에레벨 로우레벨을 나누시는 지요. 제가 지금 느끼기에는 함수형 언어의 특징들을 하이레벨 언어라고 말씀하시는 것 같아 묻습니다. 시샵, 자바. 심지어 씨와 씨뿔뿔도 하에레벨 언어인데 지금 말씀하시는 부분이 적용되지 않는 거 같아서요. 패러다임이 다른 언어를 말씀하시려는 데 로우/하이레벨 언어라고 표현하는 건 아닌가 생각이 들지만 그건 대답해주시리라 생각합니다. 2. 미국의 상위권 대학에서도 C로 운영체제를 가르치는 일이 더 많습니다. (그리고 씨도 하이레벨입니다) 그리고 어떤 과목을 특정 언어로 가르친다고 해서 그 언어가 더 쉽지 않다는 이유가 되진 않습니다. 오히려 더 쉽기에 그 언어로 가르치면서 프로그래밍이 아닌 개념을 이해시키려는 시도도 많이 합니다. 로우레벨 전용 하이레벨 전용 기능이란 말도 잘 이해가 되지 않는 말인게.. 하이레벨 언어의 기능은 로우레벨 언어로 구현이 가능하지만 로우레벨 언어의 기능은 하이레벨 언어로 구현이 불가능한 경우가 많습니다. 그게 바로 로우레벨 하이레벨의 차이고요. 결과적으로 로우레벨 언어는 하이레벨 언어를 쌓아올리는데 기반입니다. (근데 다시 한 번 말씀드리지만 하이레벨 언어의 정의부터 내려주시는게 가장 필요할듯 싶습니다. 하이레벨이 중요하단 말씀을 하시는 게 아닌거 같아서요) 3. 로우레벨 프로그래머가 숫적으로 많다는 말도 사실과 다른 이야기 같습니다. 하이레벨 프로그래머가 수로 압도적으로 많습니다 현재 프로그래밍 언어통계만 보셔도 로우레벨보다 하에레벨 언어가 압도적으로 높습니다. 허나 이 논의도 하에레벨에 대한 정의를 다르게 내리셔서 그럴수도 있다고 생각합니다.
@@포프티비 예 진작 명확하게 얘기를 드리지 못한 것 같아 죄송합니다! 수십년전에는 씨와 같은 랭귀지가 하이레벨 랭귀지라고 불렸던 것이 사실이지만, 단어에 대한 정의는 시간에 따라 많이 변할 수 있다고 생각합니다(en.wikipedia.org/wiki/High-level_programming_language "Relative meaning"항 참고). 애초에 하이레벨 랭귀지라는 것이 명확한 학술적 정의가 없고 상대적일 수 밖에 없기 때문에 제가 생각하는 정의를 말씀드리겠습니다. 저는 clean & terse한 랭귀지가 하이레벨이라고 받아들입니다. 구체적인 특징으로는 말씀해주신 함수형 언어의 특징도 들 수 있겠지만 거기에 더해 객체지향 / 다이나믹타이핑 / 동적코드 수정 능력등을 꼽을 수 있을 것 같습니다. C++같은 경우에는 명목적으로는 앞서 말씀드린 기능을 어느정도 제공하긴 합니다만 실제로 그것이 (상대적으로) 짧고 간결한 코드로 이어지지는 않기 때문에 하이레벨 랭귀지로 분류하기는 힘들다고 봅니다. 명목적으로는 C++과 Ruby모두 람다식을 지원하는 랭귀지지만 실제로 그 둘에서 경험하는 람다식은 확연히 다를 수 밖에 없다고 생각합니다. 소위 주류언어로 불리는 것들 중에서 하이레벨랭귀지로 꼽을 수 있는 것은 파이썬, 루비, 펄 정도라고 생각하고 있습니다. 그럼에도 하이레벨 랭귀지라는 구분 자체가 싫으시다면, 위 랭귀지를 Very 하이 레벨 랭귀지로 받아들여주셨으면 감사하겠습니다.
@@포프티비 2.번에 대해서는 몇가지로 나누어서 답변을 드릴 수 있을 것 같은데요 우선 상위권 대학에서 조차 C로 운영체제를 더 많이 가르친다는 것은 저도 인정을 하고, 오해하실 수 있게끔 말씀을 드린 점은 사과합니다.(하지만 여전히 SICP가 미국 컴퓨터과학에서 가지는 입지는 대단한 것이라고 생각합니다...). 다음으로, "로우레벨 언어는 하이레벨 언어를 쌓아올리는데 기반입니다"라는 말에 대해서는 동의하지 않습니다. 애초에 랭귀지 디자이너 입장에서 하이레벨 랭귀지를 정의하고 머리속으로 프로그래밍을 하는데에는 로우레벨 랭귀지의 도움을 받을 필요가 없습니다. 때문에 C라는 랭귀지가 나오기 이미 수십년전에 lisp이란 언어가 발명 될 수 있었던 것이지요. 하지만 현실적으로는 메모리나 연산속도의 제약이 있고 그 제약속에서 최고의 성능을 끌어내기 위해 로우레벨 랭귀지의 도움이 필요한 것으로 저는 이해하고 있습니다. 그리고 저도 "지금 이시점"의 "현업"에서 파이썬 프로그래머들이 CPython 구현을 제대로 이해하고 레퍼런스 카운팅이나 바이트코드를 제대로 이해하는 것은 매우 중요하다고 받아들이고 있습니다. 때문에 2번에서 어떤 의미에서 말씀을 주셨는지는 백번 이해합니다. 그리고 전용 피쳐에 관한 문제에 대해서는.. 애초에 어떤 랭귀지든 다른 모든 랭귀지의 피쳐를 지원하는 것이 가능하고 이건 사실 수학적으로 증명도 가능합니다(물론 구체적으로 운영체제의 도움을 받기 위해서는 ffi를 통해 특정 언어의 특정 함수를 호출할 필요가 있을 수 있겠습니다만 이것은 제가 말씀드리는 것과는 다른 측면의 이야기입니다). 때문에 사실 진정한 의미에서 전용피쳐는 없다고 보는 것이 맞겠지요. 다만 현실에서 하이레벨 랭귀지에서는 하이레벨 랭귀지에서 일반적으로 쓰는 기능이 있고 로우레벨 랭귀지에서는 로우레벨 랭귀지에서 주로 쓰는 기능이 있다고 생각합니다. C/C++ 유저들이 리습에서 매크로와 같이 고도로 추상화된 기능을 사용하는 것은 현실적으로 보기 힘든 광경이라고 봅니다.
저는 서울 상위권 대학 분교에 다녔는데 커리큘럼이 졸업 떄까지 unmanaged language를 다뤘고 managed language는 한 학기정도만 다뤘던 것 같네요. 정말 학교 다닐 때는 왜 이걸 4년 내내 들어야하고 써야하는지 몰랐는데 지금 제가 원하는 직무를 잡고 포프님 영상을 보니 제가 배웠던 교수님들께서 커리큘럼을 왜 잡으셨는지 이해가 되네요. 그땐 정말 소홀히 했었는데 지금은 열심히 리뷰하며 취업준비 중입니다 ^^
공감합니다 저는 무작정 c, c++부터 시작했었는데 어느정도 프로그램도 만들고 했는데 뭔가 작업을 하는 시간보다 눈에 보이는 결과물은 항상 보잘것 없어보여서 다른 프로그램은 어떻게 만드는것일까 궁금하더라구요 그리고 지긋지긋한 메모리 관리도 자동으로 할 수 있게끔 c로 구현해보고 싶었고 그래서 다른 언어들은 어떻게 할까 궁금해서 찾아보다가 자바나 파이썬을 입문하게 되고 사용해보면서 이렇게 편리하다고? 그때는 c++에서 stl 사용해보고 정말 편하다고 생각했던 시점이라 저한테는 다른언어가 주는 장점이 엄청나게 신선했었죠 그러면서 점점 견문이 넓어지더군요 근데 c를 이해한 상태에서 다른언어를 바라 보니깐 다 쉬워보이더라구요 물론 알고리즘부분이 아닌 외적인 부분 그래서 한언어만으로는 절대로 뭔가 할 수 없다는 생각이 들더라구요 그래서 자연스럽게 웹쪽 html이나 css 자바스크립트까지 그쪽도 관심이 생기고 하게되었고 자료를 저장하고 검색하는 효율적인 데이타베이스 설계도 관심이 가게되고 그래서 젤 중요한건 low 레벨에서 놀 수 있어야 된다는것 다만 c++ c 로 시작하는건 좀 생각해봐야될듯 제가 머리가 안좋아서 그럴지도 모르겠지만 하루에도 수십번 좌절했던때라 진짜 포기하고싶다는 생각을 몇번했는지 ㅎㅎ 지금 컴퓨터 공학이나 관련학과에 있다면 수업에서 뭔가 얻을 수 있다는 생각은 버리시는게 좋습니다. 일단 자기가 최대한 많은 프로그램을 기획하고 많이 만들어보는게 중요함 코딩은 결국 회사가면 다시배워야되는건 매한가지라 많이 만들어보면서 기초를 다지는것이 도움이 됨.. 학교에서 배웠던 학교다니면서 짯던 코드들은 흑역사일뿐.. 솔직히 말하면 대학교에서 가서 인맥을 넓혀서 창업할거 아니라면 그냥 고졸로 회사 입사해서 배워가는게 더 빠르다고 생각되네요 저같은 경우만해도 입사하고 인턴생활 6개월한것이 이미 대학4년과정보다 더 많은것을 배울수 있었다고 생각합니다.. 저는 그시간이 엄청 후회되더라구요 물론 제생각임
언젠가 저도 포프님처럼 인정받는 프로그래머가 되고 싶습니다.. 꿈이 없어서 몇년을 혼자서 괴로워 만하다 코딩을 접하고 꿈이 생기고, 목표가 생기고, 소망이 생겼네요.. 코딩을 접한지 2개월밖에 안된 침팬치이지만.. 비전공자 이기에 앞길이 매우 절망적이고 힘들거라고 각오하고 꾸준히 달려볼려고 합니다.. 사실 그냥 포프님의 영상이 우매한 저에게 등대같이 방향을 알려주는거 같아 너무 감사하다는 말을 드리고 싶었습니다.
포프님, 언매니지드 언어로 C++를 공부해보고 싶지만..문제는..웹개발 쪽인데 쓸 일이 거의 없을거 같아서요. 이런 경우는 어떻게 해야할까요? 실제로 안쓰면 공부해도 금방 다 잊어버릴까 걱정입니다ㅠㅠ p.s. 파이썬을 공부하는데 파이썬 내부가 C로 돈다니 파이썬 내부를 공부하면서 C 지식을 활용해보는 방법 정도가 생각났읍니다. C++까진 아니더라도 C로도 괜찮을까요?
ㅋㅋㅋㅋ솔직히 여기서 은근 c언어 부심 있는 사람들 좀 보이는데 학생여러분은 잘 생각하셔야돼요. c언어가 중요한 언어는 맞지만 개발분야에따라 도구를 다르게 씁니다. C언어 안배워도 매니지드언어를 주력으로 쓰더라도 관심만 가지면 포프님이 말씀하시는거 이해할 수 있어요 단지 c언어 공부하면 좀 더 도움이 된다 정도로만 받아들이면 적당할 듯 하네요 그리고 파이썬 공부하라고 하시는 분들도 많은데 이것도 같은 맥락에서 잘 생각해보셔야하는게 본인이 데이터과학이나 인공지능같은 연구에 관심이 없다!? 라면 파이썬은 필수 공부대상이 아니에요. 분야마다 적절한 언어가 있습니다. 제발 잘 생각해보셔야 합니다. 그렇다고 비주얼베이직같은거 하시면 안되구요ㅜㅜ
결국 자기가 어떤 일을 하느냐에 따라 적절한 언어를 선택할 수 있다면 된다고 생각합니다. 다재다능한 프로그래머라면 항상 많은 연장을 들고 골고루 쓸 수 있겠죠. 개중에는 스패너의 장인도 있을거고, 심지어 도구를 만들어내는 사람도 있을 겁니다. 근데 확실한건 도구를 써보고 만져봐야 도구를 알고 접근할 수 있다는 거겠죠
언매니지드 언어을 이해하려면 결국 컴퓨터 구조와 그 위에 있는 운영체제 지식도 알아야 하고… 그걸 기반으로 동작하는 네크워크, 웹 프레임우크, 디비 등등 결국 1년 동안은 컴퓨터 공학의 기초를 다져야 하는군요.. 돌고 돌아 결국 기초가 중요한 것을 알게 되었습니다. ㅠㅠ
프로그래밍을 로직구현을 목표로하느냐 시스템구동을 목표로하느냐의 차이가 아닌가 싶네요. 프로그래밍이 주력인 사람은 아니고 영상 알고리즘 개발하는터라 내 코드가 그대로 상용으로 가진 않는데요. HAL과 접하는 코드들은 대부분 C/C++을 쓰고 꽤 잘해야 되죠. 물론 회사니까 잘하는 사람이 기틀을 잡아놓고 대부분은 그 코드를 갖다쓰고 프로그래밍보단 영상이라는 도메인의 지식을 가지고 일을 충분히 할 수는 있습니다. 그렇지만 역시나 코드가 몇년지나면 한번 갈아엎을때가 올수밖에 없는데 그일을 할 수 있는 사람은 몇 안되죠. 그때는 정말 HW(컴터만이 아니라 DSP나 영상 전용 칩등을 모두포함)와 시스템을 잘 알면서 C++잘하는 사람이 그 일을 해낼수 있죠
포프님, 면접에서 'unmanaged 언어가 갖는 장점이 뭐냐'는 질문을 받았습니다. 저는 '메모리를 직접 관리하면 더 효과적으로 쓸 수 있다. 예를 들어서 반복적으로 할당/해제가 필요한 경우 미리 heap영역에 할당하면 할당/해제이 필요한 비용이 줄어든다'라고 답변했는데 사실 확신이 안 서더라구요. 좀 더 구체적인 사례가 있을까요? 지금 좀 더 생각해보기로는... Java에서는 함수에서 처음 정의된 인스턴스들은 함수가 종료되기 전까지 메모리를 유지하기 때문에, 해당 함수에서 인스턴스의 사용이 끝났더라도 함수의 종료 없이 stack 메모리에 함수 콜이 쌓여간다면 메모리가 허비됩니다. Java에서 GC를 이해한다면 인스턴스의 사용 범위를 파악하여 중괄호로 scope 를 지정해주거나 함수 단위로 쪼갤 수 있을 것 같고요. 좀 더 구체적인 사례가 있을까요? 레이서 사례도 그렇고 추상적으로 이해하지만 와 닿는 사례가 없는 것 같습니다. 아래에서도 동의하지 않는 분들이 보이구요. okky.kr/article/724956?note=1997798
일단 제가 답변하기 조금 애매한 질문을 주셨는데요. 그래도 솔직히 답변드리겠습니다. (상처받지 마세요) 1. 질문자의 실제 의도 질문자의 의도는 단순히 언메니지드 언어를 잘 이해하냐가 아닌 것 같습니다. 그 보다는 매니지드/언매니지드 하에서의 메모리 관리 원리를 잘 알고 있느냐 같습니다. 그런 질문을 물어보는 이유는 코드를 작성할 때 그 코드가 도는 원리가 뭔지를 고민하는 사람을 뽑고 싶어서겠죠. 왜냐면 원리를 고민하면 코드를 작성하는 사람들은 하나를 가르쳐줘도 그와 비슷한 10개의 문제를 스스로 해결하지만, 그렇지 않은 사람들은 그 10개의 문제를 다 다른 문제로 인식해서 그 10개를 다 가르쳐줘야 하거든요. (okky의 댓글에서 동의하지 않는 분들은 면접관이 이런 질문을 하는 이유를 파악하려도 하지 않은 채 '매니지드 언어도 충분히 좋다'라는 말만 하고 있는 거 같습니다. 결국 문제의 본질을 보려고 고민하는 사람들은 아니라는 거죠. 이런 글들을 보는 건 본인에게 별로 도움이 되지 않는다고 생각합니다. 뭐 그 외에 fact하고 다른 이상한 이야기도 섞여 있으나 그거 하나하나 제가 지적하진 않겠습니다. 커뮤니티가 제대로 돈다면 그런건 자정작용으로 해결되야 하거든요. 따라서 okky 와 관련된 이야긴 여기서 마치겠습니다) 2. 잘못 대답하신 부분 면접에서 하신 답변으로 미루어볼 때, 언매니지드/매니지드 언어에서 메모리 관리가 어떻게 이뤄지는지 확실히 이해하고 계신 것은 아닌듯 합니다. 아래 몇 가지 예를 들겠습니다. a) 범위(scope)_가 넘어간다고 Java에서 그 메모리를 곧바로 지우지 않습니다. 실제 GC가 간간히 깨어나서 작동하기 전까지는 그 메모리는 유지됩니다. b) 언매니지드 언어에서 다른 함수를 호출하기 전에 메모리를 지울 수 있는 경우라면 java에서도 그 함수 호출전에 null을 대입하는 방법으로 동일한 일을 할 수 있습니다. c) 언매니지드 언어의 할당 비용이 매니지드 언어보다 작을리는 없다고 합니다. 그 보다는 해제의 비용만 작습니다 (GC의 작동 원리를 알면 대답 가능한 부분) 3. 언매니지드 언어의 장점 언매니지드 언어의 장점 결국 예측가능성이라고 봅니다. 언매니지드에서는 정확히 메모리 할당/해제가 일어나는 시점을 프로그래머가 control할 수 있습니다. 매니지드에서는 물가능하고요 한 프레임(update() 함수 한번 호출마다)에 메모리 해제를 1000번씩 하는 프로그램을 작성해봅시다. 그러면 언매니지드 언어에서는 한 프레임마다 정확히 1000번의 메모리 해제가 일어나며 해제에 그만큼의 시간이 들어갑니다. 이게 한 0.01초가 걸린다고 해보죠. 그에 비해 매니지드 언어에서는 사용하지 않는 개체가 매 프레임마다 1000개씩 나옵니다. 하지만 실제 메모리 해제는 안하기 때문에 전혀 시간이 들지 않습니다. 그러다가 갑자기 100번째 프레임에 GC가 작동을 하며 모든 개체를 지운다고 해봅시다. 그러면 못해도 1초(0.01초 x 100 프레임)의 시간이 걸리겠죠. 이게 의미하는 바는 언매니지드 언어에서는 언제나 모든 프레임이 동일하게 작동하며 스무스한 애니메이션을 보여주지만 매니지드 언어에서는 100프레임마다 1초씩 멈칫~ 하는 현상이 나온다는 거죠. (안드로이드 게임을 하다보면 가끔씩 멈칫 하는 프레임이 나오는 이유가 이 때문이기도 합니다) 따라서 매니지드 언어는 실시간 응용프로그램에서는 제약이 있습니다. 이런 걸 해결하는 최적화 기법 등이 여러개 들어왔지만 완벽한 것은 없습니다. 몇가지 키워드를 드리겠습니다. a) seasonal GC b) 멀티스레드 에서 도는 GC: 단 이미 응용프로그램이 모든 스레드를 사용하고 있을 경우, 역시 멈칫 현상은 발생할 가능성이 큽니다. 4. 매니지드 언어에서의 누수 문제 매니지드 언어도 메모리 누수가 납니다. 언매니지드 언어하고 다른 방식으로 날 뿐 여전히 있습니다. 언매니지드 언어에서 발생한 메모리 누수는 매니지드 언어에서 발생한 매모리 누수보다 훨씬 찾기가 쉽습니다. (언매니지드 언어이기에 그걸 막기위한 베스트 프랙티스가 존재하고 그걸 따르라고 조언을 하니까요. 즉 패턴이 정형화 되어 있음) 그에 비해 매니지드 언어에서의 메모리 누수는 찾기도 어렵고, 해당 커뮤니티에서 GC의 작동법을 제대로 아는 프로그래머들의 비율도 적어서 '그냥 서버 재부팅하세요', '서버 수를 늘리세요' 등의 답을 내놓으면서 그게 해법이라고 말하죠. 참고로 서버 재부팅이나 서버 수를 늘리는 것은 뭐든간에 회사의 운영비를 높이는 방법입니다. (실제 꽤 규모큰 전자상거래 서버 개발을 한 경험에서 드리는 말씀). 따라서 꼼수지 올바른 해법은 아니죠. 5. VM의 문제점 매니지드 언어는 VM에서 실행될 수 밖에 없습니다. 그리고 그 VM은 특정 운영체제마다 설치하는 프로그램 입니다. (이 프로그램 위에서 내가 작성한 코드를 실행하는 게 전부죠. 잘 이해 안되신다면 게임 에뮬레이터와 비슷한거라 생각해주세요). 일반 데스크탑 OS 용 VM은 큰 문제가 없습니다. 하지만 데스크탑이 아닌 다른 기기 (예: 임베디드, IOT 등)용 VM은 지원 안되는 기능들도 툭하면 있고 GC도 매우 느린 경우도 많습니다. 지원 안되는 기능이 있을 경우 데스크탑에서는 제대로 작동하던 코드가 어떤 기기에서는 작동을 안하며(컴파일은 다 된 코드), GC가 느리면 데스크탑에서는 프레임속도의 0.1%만 걸리던 메모리 해제 속도가 여기서는 200%가 들 수도 있습니다. 6. 기타 위에서 드린 장/단점은 지금 제가 생각나는 현상들을 말씀드린 겁니다. 그러나 시작은 결국 GC가 작동하는 법에서 기반하며 다 필요할때마다 논리적으로 도출해낼수 있는 결론입니다. GC란 결국 C/C++에 있는 기능들로 누군가가 만든 기능이죠(실제 C++에서 작동하는 GC를 구현한 라이브러리도 있습니다.) 그 내부가 어떻게 도는지 아는 사람들은 제가 위에서 말씀드린 부분을 쉽게 생각해낼 거고요. 아닌 사람들은 그게 안 되면 여러가지 방향으로 답을 내놓을 것입니다. 몇 가지 예를 다시 들어드립니다. 어떤 사람들이 정직하게 올바르게 개발자로 살고 있는지는 본인이 스스로 판단해보시면 좋겠습니다. a) '이건 제가 정말 모르는 분야네요. 더 잘 아는 사람에게 물어보세요' b) '이런 건 개발자에게 필요 없는 거에요..' (그러나 실제 더 잘하는 다른 개발자가 해결함) c) '언어는 도구일 뿐입니다. 모든 언어는 똑같아요' (그러면서 굳이 자기가 사용하는 언어만 두둔함) d) '언매니지드 언어는 과거의 산물이고 죽어가고 있습니다.' (20년 넘게 반복된 말. 하지만 프로그래밍 언어 1위는 현재 C. Tiobe 기준)
좋은 영상 감사합니다. 저희 학교에선 C언어로 기초프로그래밍/시스템프로그래밍/네트워크프로그래밍을 배웁니다. 이정도면 따로 공부할 필요없이 학업에만 충실해도 될까요? "unmanaged language를 1년간 충분히 써보라"고 하셨는데 어느 정도 수준을 말하시는지 잘 모르겠어서 질문드립니다.
4:00
5:15
8:45
10:50 못해도 1년은 언매니지드 언어를 파는걸 추천
11:40
12:50 성장속도의 차이가 매우 크게 벌려진다
14:38
17:13 하나 이상의 언어를 깊게 파자
17:26 그러니까 얼른 공부해 새끼야
감사합니다
감사해요ㅎ
ㄷㅉㅈㅁ
얼른 공부해라 맨이야
4:00 부터 두 가지 나옴
말씀안해주셨으면 초반에 끌뻔했네요 ㅋㅋ 근데, 4분부터 보다가,그나마도 중간에 종료했네요 ㅋ
역시 한국인! 감사합니다 ㅋㅋ
감사합니다!
제일 좋은 댓글임
정말감사합니다
1.managed language : java, python
2.unmanaged language : c, c++
manage - memory manage
기본적으로 자바와 c를 하죠 ㅎㅎ
@@seyirin 미래를 생가하면 python은 필수죠 ㅋㅋ
미래를 생각하면 코틀린과 스위프트 자바스크립트죠 ㄷㄷ
왜 C#은 없?
1. 영어
2. C/C++
c++을 배워야 하는 또하나의 이유는, 로우단의 라이브러리는 대부분 c, c++이기 때문이죠. c#이나 자바에 c++라이브러리 추가했다가 문제 생기면, c++ 모르는 사람은 디버깅 자체가 어렵죠
내부 동작원리의 이해를 통해서 플랫폼을 배우고 그것을 통해 프로그래밍 능력을 키우라는 말씀이라고 개인적으로 생각합니다. 강의 잘들었습니다
일하면서 아침에 지하철에 공부하고. 집에 와서 밥먹구 운동하구 공부하고. 코딩 남은 작업 있으면 잔업하고. 공부 한 시간하고. 잠자고. 무한 반복의 삶이 지루할때도 있고 외로울 때도 있지만 재밌습니다.
올~ 대단한데~
대학원생인줄...
와 매일..?대단하네요 저도 노력하겠습니다
아주 중요한 이야기 입니다... 20년 경력자이자... 관련 분야 기업가로써...
14:43 이 부분 ㄹㅇ
C언어, 자바...이렇게 두개 일단 깔고 시작하면 좋음.
C언어는.메모리나 포인터 개념을 배우고
자바는 클래스나 디자인패턴 커다란프로젝트 개발론을 배움
개인적으로 자바를 극히 혐오하긴 하는데 거기서 사용되는 디자인 패턴 철학이나 유지 보수가 쉬운 코드 작성은 배울 점이 많다고 생각함. 그거의 정수가 현재 스프링이고
자바 대신 코틀린을 배워도 될까요? 파이썬은 어느정도 하는데..
@@junyongpark137 자바 ㄱ 자료찾기 더 편함
요즘 코딩의 재미에 빠져 살고 있는 40대중반의 가장입니다.
코딩이 뭐가 뭔지도 모르고 하고있습니다. 간단한 함수를 만들어서 값이 나오면 신기해 합니다.
하지만 "어떻게 컴퓨터가 함수를 이해하고 계산하지?" 라는 근본적인 의문이 들더군요.
어릴적 '자판기 안에 사람이 커피를 타서 주나?' 라고 생각한것처럼
지금은 컴퓨터 안에 소인국 나라 국민들이 계산해서 값을 주는건 아닌지 상상을 해봅니다.
컴퓨터라는 하드웨어 위에서 결국 소프트웨어가 돌아갑니다.
포프님의 경주차 드라이버는 차 엔진의 이해가 필수라는 말에 공감합니다.
c언어도 시작해봐야 겠습니다.
근데 사실 C언어를 배운다고 해서 컴퓨터구조에 대한 이해가 높아지지는 않는 것 같아요. C언어를 쓰는게 문제가 아니라 하드웨어를 직접적으로 제어하는 코딩을 해야되는데 그런 코딩을 보통 c언어로 많이하죠.
아.. 그런 식이라면 어셈블리 추천드리구요. 논리회로 같은거 좀 보시면 컴퓨터를 머리속으로 만드실 수 있을거 같은데요? 예를 들면 전기회로에서 직렬은 AND, 병렬은 OR인데 이걸 기반으로 해서 온갖 함수들을 만들어내거든요.
씨 언어같은 언매니지드 언어를 해야하는 이유 -> 날 것 그대로의 언어를 이해하는 사람이야 말로 본질적인 프로그램을 설계할 수 있기에 언매니지드를 알아야 한다
밥 먹을때 숟가락 가지고 먹던 젓가락 갖고 먹던 포크로 먹던~ 밥을 먹을 수 있는건 같지만 먹기 편한걸 골라서 먹는게 편하다~ 언어도 마찬가지라 봐요~ 취업용 언어 나에게 맞지 않은 언어 배우겠다 머리 아파 말고 내가 관심 있는거 부터 시작 하는게 좋습니다~ 그러다 보면 나중에 로우레벨쪽에도 관심을 갖게 됩니다~
백번 옳은 말씀들이네요. C++ 모르고 자바만 배운 사람들은 솔직히 자바도 제대로 못합니다. 파라미터 던져서 처리할 것도 부담스러워하죠.. 리턴 받아와야 되는 거 아니냐 따집니다.. 프로그래머가 쉬운 직업이 아닌데 쉽다고 뜬소문이 퍼져서 그것만 믿고 막 덤비지는 마시고..
진짜 programming language를 공부하고 싶다면 C -> C++ 순서로 공부하세요. language와 컴퓨터 구조 동시에 공부가 됩니다. java, c#, python은 language가 아니고 사실상 스크립트라고 보는게 맞습니다. C/C++만 잘 이해하면 나머지 언어들은 최대 일주일이면 다 이해할 수 있습니다.
정말 그친구들은 스크립트라고 보는게 맞긴하죠 ㅋㅋ 저순서대로 배우면 나머지 일주일이면 이해는 가능하지만 C 에서 포기할가능성이 높긴합니다 워낙 어려워서
그렇게 해봐야겠네요!!
진짜 프로그래밍 언어가 있고 가짜 프로그래밍 언어가 있는지 모르겠군요.
저는 중하위권 대학에 다니지만 공대가 참 심각합니다.
20년 전에 머물러 있는 강의자료와. 그 마저도 최악의 강의력으로
족보와, 원래 잘하는 학생들, 몇몇 빼고는 4년동안 학원 속성 1년 보다 못한 지식을 배워갑니다.
교수님들은 학생 가르치는 일엔 관심이 없지요.
워낙 바쁘시기도하고, 자신의 지식의 양이 강의력을 담보하는 것은 아니니까요.
초기 프로그래밍 랭귀지는 그럭저럭 다들해도 3,4학년 심화과정은 더하지요.
저는 차라리 학원강사가 가르치거나
포프선생님의 인강을 듣고 시험봤으면 좋겠습니다.
다가오는 이때에 현재 시스템의 대학은 확실히 개정되야 한다고 생각합니다.
+deja vu _ 초특급학교 아니곤 비슷한 현상이 있는거 같아요. 그만큼 학교의 목적이 많이 변해서 겠죠. 씨뿔뿔 연말주터 계획 들어갑니다 :)
맞아요. 이런 학교를 다니면 혼자 스스로 해야된다는...
공감이가서 슬프네요
포프TV 안녕하세요. C++ 연말부터 계획 들어간다는 말씀을 하셨는데요. 무슨 계획이 있으신거예요??
월레가 아니고 원래
포프 TV를 본게 어언 5년이 넘어가네요.
갓 졸업해서 구독해서 벌써 5년차 개발자가 되어가는데요.
항상 길라잡이 역할을 해주셔서 감사합니다.
저도 전공은 임베디드 쪽이어서 하드웨어와 소프트웨어를 같이 배웠던게
많은 도움이 되고 있습니다.
5년간 꾸준히 봐주셔서 제가 더 고맙습니다. :)
저희 학교 교수님이 포프님의 이 영상 알려주셔서 보게되었습니다. 다행이도 저희 학교는 C C++ 강좌가 되어있어서 나름 위안?을 얻고 가는거 같아요. 혼자서도 더 열심히 공부하기 위한 동기부여도 됐고, 여튼 좋은 영상 감사합니다
좋은 학교네요.. 포프티비도 알려주고.. (응?)
1년 된 영상 댓글까지도 신경써주는 포프님의 인성 bb
@@포프티비 멋쩍.. 헿
빞ㅂ7ㅣㅣ7ㅣㄱㅂㄱ비비ㄱㅂㄱ피ㅂㄱ7ㅣ비ㅣ빅ㄱ빕ㄱㄱ비ㄱㅍㅍㄱㅂㅂ비빅비ㅍㄱㅂㄱㅣ비ㄱㅂㄱ비빅1ㅂㄱㅣㅂㄱㅂㄱ비ㅣㅍㅋㅂㄱ핍ㅂㅂㄱㅣㄱ7ㅣㅣ비기비빅ㅍ기빕ㄱㅂㄱ피빅빅삑ㅍㅣㅣ7ㄱ비ㄱㅂㅣㄱ빕ㅍㄱㅂㄱ비ㅣㅂ7ㅣㄱ비빅ㅂㄱ비ㅣㄱㅂㅋㄱㅂㄱㅃㄱ삐핖ㄱㅂ비빕ㄱㅍㄱㅂㄱ빕ㅂ비ㅣㅣㅣㅣ빅빅비비 7ㅣㅂ4비ㅣㅣㅣ빅빅비ㅣㄱㅂ4ㅣ비4ㅣ비4ㅂ
@@포프티비c언어나 c++로 하드웨어를 이해하기 위해 서적이나 강의 좀 추전해주세요.
동감!!!, 개인적으로 순서를 정한다면 unmanaged 먼져 (자료구조가 핵심), 그다음 managed. 그리고, 하나더 하자면 영어, 인터넷이 없으면 개발을 못하는 세상에서 빠른 정보습득을 위해 영어는 필수. 만약 회화까지 가능하면 전세계에 resume 를 낼 수 있으니 조금이라도 시간이 있는 젊은 분들은 unmanged 와 영어에 투자하면 큰 후회가 없다고 생각합니다.
제가 08학번이니 이제 딱 10년전 이야기네요지방대 다니긴 했는데 대학교 1학년때 항상 나이 제일많고 입김 센 교수님 두분이서 C랑 C++ 무조건 그 강의 안들으면 내꺼 수강할 생각 말아라 해서 참 트렌드 모르는 구식 사람들이다 생각했는데 그 교수님들 은퇴하기전 그 어거지로 C/C++ 세대들까지가 참 취업 잘했었어요. 네이버랑 하이닉스 삼성 LG간사람도 있고 적어도 최저임금 받으면서 코딩하는 사람은 없었죠. 물론 지방대라 아싸리 컴퓨터쪽이랑 떨어져서 사는 사람이 절반은 넘지만, 어떻게든 붙잡은 사람들은 계속 잘 살아요.그땐 왜 컴파일러까지 씹어먹어야 되는건지, 왜 도대체 내가 야크랑 싸워야 되는건지,왜 Memset 했다가 메모리 터지는거에 내가 열불을 내야되는지 Destroy 설정하면 어디는 알아서 되던데사실 그시절부터 안드로이드가 이미 혜성같이 나타난 시절이, 사실 저는 3학년때까진 두분중 한분의 연구실에 있다가, 4학년때 저거 돈 안된다고 혼자 안드로이드 하겠다고 요즘말로 빤쓰런? 했었죠. 배울거 다 배웠고 더 볼거없다고 생각했습니다.오만했죠.저 졸업하던 시기에 두분 은퇴하고 2012년경부터 학교에서 나서 신나서 자바/C#만 되고 돈되는것부터 가르켰는데 어느날부터인가 취업율도 급감하더라고요. 그냥 대학교도 졸업장 따러 다니는곳이 됬고 컴공학과가 저희학교의 나름 자존심이었는데 지잡에 걸맞는 수준(?)으로 떨어지게 되니 보기 좀 안좋더군요JAVA, C#을 매도하는게 절대 아닙니다. 그만큼 잘 만들어진 언어이니 누구나 사용하기 편하고 좋은 결과물을 낼수있죠. 예를들면 포토샵 냅두고 그림판으로 디자인작업할 이유가 전혀 없잖아요. (사실 그림판은 너무 기초만 있기에 C의 비유는 좀 그렇지만, 차이의 갭을 설명하기엔 이게 적절합니다.)하지만 그림이 걸작이 나온다고 포토샵만 쓰면 뭐합니까. 나중에 포토샵쓰시는분이 픽셀에 대해 전혀 모르면 언젠가 한번 부닥칠때가 옵니다. 그걸 알고넘어가냐 모르고 아 이렇게 땜빵하자 차이는 커집니다.사실 저는 잘하는 축은 아닙니다. 연구실다니다가 빤쓰런 했었어요. 그래서 사실 지금하는일에 예전에 배웠던걸 응용도 거의 못하고, 나중엔 그저그런 사람이 되다가 치킨만 튀기겠죠. 이런 평을 내릴만한 사람은 아닙니다.하지만 저같은 사람들도 하다보면 아 이부분에서는 이렇게 하는게 더 이거는 비효율인데.... 라는 생각정도는 떠오릅니다. 한발은 더 가요. 그리고 그게 일반 동기랑 조금의 연봉차이는 나게 하더라고요.그 쇠심줄같은 고집의 방망이 깎던 노인들같던 그 교수님들에게 지금은 다시한번 제대로 배우고 싶습니다.
그게 아니고 원래 그땐 취업률이 좋았어요. 지방대도 노력좀하면 대기업가고 그랬어요 그땐. 교수가 안바뀌었어도 지금은 좋은데 가기 힘듭니다. 딱히 가르치는 교수의 차이가 아닙니다.
글쎄요
저도 매우 공감합니다. 저도 javascript로 입문을 했지만 지금은 c/c++을 공부했고 게임 개발을 지망하고 있습니다.
사실 javascript를 사용할 때는 call by value니 call by reference니 , 일급 객체니 이런거 피상적으로 알고 넘어갔고... 메모리적인 생각은 전혀 하지 않았는데. c/c++을 공부하고 나니까 이제서야 궁금해지기 시작했고 그러한 방식이 이해가 가기 시작했습니다. 무슨 언어를 주력으로 하느냐는 별로 중요하지 않은 것 같습니다. 그러나 c/c++을 꼭 알고 메모리 수준부터 각 체계에 맞는 지식들을 섭렵하고 주력언어를 다시 다루면 새로운게 보인다고 말씀드리고 싶습니다.
제가 다닌 학교에서는 1학년때 python으로 어지간한 알고리즘 구현이나 oop 개념을 가르치고, 1학년 말때쯤 cpp 로 자료구조 구현, c로 시스템 프로그래밍을 배우고 2학년때 심화, 그 이후의 클래스들에선 언어는 선택에 맡기거나 이론 수업이나 운영체제 수업에선 c를 사용하는 프로젝트들을 했습니다.
개인적으론 학위를 가졌다 한다면 추상적인 언어와 c 모두 잘 다룰 줄 알아야 하고 사실 둘을 잘 안다면 직장을 위해서 다른 언어를 익힌다고 해도 정말 어렵지 않게 배워 적응할 수 있죠. 사실 문법만 조금씩 다르지, 핵심적인 개념들은 대부분 공유하니까요. 언어는 그 프로젝트에 맞는 것을 선택해야 한다는 것이 제 생각입니다.
제가 한국 프로그래머들의 커뮤니티에서 조금 충격을 받았던 점은 그들의 언어에 대한 자부심 등이었습니다. 물론 선호하는 언어가 있을 순 있지만, 추상화 단계가 높은 언어는 프로그래밍도 아니라는 식으로 이야기를 하는데 솔직히 그분들이 하는 소리 들어보면 로우레벨 언어를 잘할 것 같지도 않고 하이레벨을 쓴다고 고생산성을 낼 수 있을 거 같지도 않더군요.
제가 전부를 아는건 아닙니다. 다만 경험을 바탕으로 이야기 하자면, Programming language를 가르치는 강사 혹은 교수들의 대부분 Language를 왜 사용하는지 모르고 가르칩니다. 보다 근본적인 사실을 생각하지 않고 그냥 책의 흐름대로 읽어줄 뿐입니다. (8:45)
#include
void bubble_sort (int* a, int size);
void swapping (int* a, int* b);
int main (void) {
int a[10] = { 8, 4, 2, 5, 3, 7, 10, 1, 6, 9 };
int i = 0;
bubble_sort (a, sizeof (a) / sizeof (int));
for (i = 0; i < sizeof (a) / sizeof (int); i++) {
printf("%d ", a[i]);
}
printf("
");
return 0;
}
void bubble_sort (int* a, int size) {
int i = 0, j = 0;
for (i = 0; i < size; i++) {
for (j = 0; j < size - 1; j++) {
if (a[j] > a[j + 1]) {
swapping (a + j, a + j + 1);
}
}
j++;
}
}
void swapping (int* a, int* b) {
int tmp = 0;
tmp = *a;
*a = *b;
*b = tmp;
}
이러한 종류의 코드를 매우 많이 봐왔을 것입니다. (기본적인 Bubble sort Algorithm 입니다.) 보통 반복문을 사용할 때 절대적으로 i, j를 사용합니다. 그리고 쓸데없이 변수를 생략하거나 줄입니다. 상황에 맞지 않게 사용하는 경우도 매우 빈번하게 있습니다. 심지어 소스코드를 재대로 설명해주지도 않습니다. 여기서 i는 무엇이고, j는 무엇이며 Algorithm의 흐름조차 언급하지 않습니다. 더 문제인 것은 위의 코드는 그나마 모듈화가 재대로 되어있지만, main()내에 섞어 설명하는 경우도 매우 많습니다.(모듈화를 하지 않고 설명합니다.) 아래 코드를 봐주세요.
#include
void bubble_sort (int* array, int size);
void swapping (int* current, int* next);
int main (void) {
int Array[10] = { 8, 4, 2, 5, 3, 7, 10, 1, 6, 9 };
int index = 0;
bubble_sort (Array, sizeof (Array) / sizeof (int));
for (index = 0; index < sizeof (Array) / sizeof (int); index++) {
printf("%d ", Array[index]);
}
printf("
");
return 0;
}
void bubble_sort (int* array, int size) {
int allElement = 0, partialElement = 0;
for (allElement = 0; allElement < size; allElement++) {
for (partialElement = 0; partialElement < size- 1; partialElement++) {
if (array[partialElement] > array[partialElement + 1]) {
swapping (array + partialElement, array + partialElement + 1);
}
}
partialElement++;
}
return;
}
void swapping (int* current, int* next) {
int temporary = 0;
temporary = *current;
*current = *next;
*next = temporary;
return;
}
위의 조금 익숙치 않는 형태의 코드를 볼 것입니다. (일반 학생 기준) 변수는 저의 주관대로 씌여졌고, 의미하나하나 제가 부여한 것입니다. 위의 Algorithm과 다른 것 처럼 보이지만 동일한 Algorighm 입니다. 보통 수업을 들을때 위와같이 생략되지 않은 형태의 소스를 기반으로 수업을 듣나요? 대부분 전자의 코드를 보고 수업을 받을 것입니다. 이것이 왜 문제가 되는가? 에 대한 물음을 한다면 한편의 시를 예로 들어보겠습니다. (비슷한 맥락)
김소월에 을 예로 들어보겠습니다. (고등학교 과정을 거친사람들이라면 아실꺼라 믿습니다.) 이 시에 모든 단어 하나하나를 a,b,c.. 와 같이 바꿔주세요. 그리고 한번 읽어보길 바랍니다. 이미 아는 내용임에도 불구하고 매우 이상하게 느껴질 것입니다. (오히려 가독성이 떨어질 것입니다.) Programming Language도 마찬가지입니다. 변수 하나하나에 적절한 의미가 있고, 적절한 단어를 사용해줘야 합니다. (이유는 가독성 및 이해의 차원에서 효율이 좋기 때문입니다.)
이러한 기본적인 맥락도 모른체 엉터리로 수업하고 학점을 부여합니다. 저는 이 부분이 매우 잘못되었다고 생각합니다. 마치 이런거죠. 프로그램을 못하는 사람이 프로그램을 가르치고 있는 상황인 것입니다. 기본조차 재대로 알고 있지 않는 사람들이 수업을 하고 있습니다. 더큰 문제는 젊은 강사들이 더 심하다는 것입니다. 그저 암기한 내용을 기반으로 떠들기 바쁘죠.
이 글을 핵심을 이해하고 공감할지 모르겠지만 조금이라도 알아줬으면 하는 차원에서 이 글을 씁니다.
(홍보) 그래서 포큐 아카데미레 오셔야 하는 겁니다. 최대한 훌륭한 회사에서 쓸법한 코딩표준으로 모든 코드를 제공하려하고 있습니다.
pocu.academy
C언어는 먼저 꼭 배우고 자바를 하든 스위프트를 하든 웹 쪽으로가든 하세요. C언어 마스터까지 바라는 건 아님. 스터디만 하세요. 그럼 다른 언어는 쉽게? 이해하고 사용할수 있어요.
안녕하세요, 지나가던 비전공자 입니다. 이제 입문을 해보려고 검색하다가 이 영상을 보게 되었고, 댓글을 보다가 궁금한 점이 있어서 글을 남겨요.
저는 swift를 배우고 싶어서 찾아보는 중인데, 아무 기반도 없이 배우려니 막막합니다. 그런데 C를 먼저 배우라고 하시니, 바로 swift를 배우면 안되는 것인가 의문이 생깁니다. 입문자가 바로 뛰어들어 공부하면 안되는 부분인가요 ㅠㅠ 정말 몰라서 질문 남겨요...
안녕하세요! 현재 컴공 학부생인데 일단 자료구조는 씨쁠로 배웠는데 알고리즘은 자바로 배울지 씨쁠로 배울지 고민중입니다. 혹시 씨쁠로 알고리즘 배우는게 날까요?? 감사합니다!
@@clairejgj8393 어디까지나 제가 그동안 업무에 관련된 이야기 입니다만 c 를 먼저 어느정도 사이즈가 되는 프로젝트를 한번 해보세요. 어느정도 레벨이 올라가면 c++, java, python 등등등 어렵지 않게 쉽게 넘어갈수 있을꺼에요.
소프트웨어쪽으로 마음을 잡고 있는 전자과 학생입니다. 이렇게 좋은 채널을 너무 늦게 알게되어 아쉽네요. 좋은 영상 감사하고 아직까지도 댓글 피드백 주시는 것을 보니 더욱 신뢰가 갑니다(물론 포프님의 커리어만 해도 의심할 여지는 없지만요). 발음이 또랑또랑하셔서 공부 틈틈히 라디오처럼 틀고 듣습니다. 항상 감사해요
진짜 선배로서의 조언임 이거 정말 좋은 영상임 님들 꼭 새겨두세요ㅠㅠ
감사합니다. 저도 진심어린 마음에서 하는건데 은근 기득권 층에서 맘에 안들어하는 사람들이 있더라구요
C#으로 포인터와 참조에 대해서 이해하게 되고 JS로 App설계를 배우게 된 이후로는 C와 C++를 처음 배웠을 때와 다르게 모든 개념이 쉬워졌고 CPU와 RAM이 제 머릿속에 얹혀진 느낌을 받게 되었습니다. 이때부터 컴퓨팅에 대해 이론적 추상화가 가능해졌고 마치 모든 코드를 부처님 손바닥 위에서 보는 뜻한 느낌을 받게 되었습니다. 이 과정이 속이 뒤틀리고 머리가 뜨거웠지만 지나가고 보니 모든 코딩이 쉬워지고 재밌어지게 되었습니다. 그리고 지금은 아키텍처에 가장 많은 관심이 가고 모든 언어나 코드는 아키텍처가 전부란 생각이 듭니다.
나하고 똑같은 말을 하는 분이 있군요, 저도 자바나 웹 따위만 하자는 교수들하고 많이 싸웠습니다. 문자열 변수가 진짜 변수라고 진짜 생각하는 그분들은 하드웨어가 좋아져서 C C++같은건 필요없다고 단체로 덤벼들어 참 난감했지요 ㅎㅎ
코볼도 unmanaged 로 알고 있는데요. 코볼을 대신 파도 될까요…? 회사에서 사용하고 있어서요…
+추가: 결국 메모리 관리 및 가비지 컬렉션이 메인 이슈이니만큼, 코볼도 그런 기능이 없기에 C나 C++ 처럼 코볼을 파도 될까요…?
제가 코볼은 잘 모르지만... 말씀해주신대로 메모리 관리를 직접해야 한다면 C++대신 해도 무방해 보입니다!
뼈때리는 말씀 듣고 덧글 남겨요! 저도 managed 프로그래밍을 하고 있지만, 살아 남기 위해서는 Unmanaged 프로그래밍을 알아야 되더라구요.
저도 시작은 C++ 로 시작을 하고 지금은 C# 을 하고 있는 프로그래머 였습니다.
다시 스터디 하러 가러 가겠습니다~
그래도 좋은 언어들만 공부/사용하고 계시네요 ^_^/
우리 다들 즐겁게 코딩 합시당~
unmanaged language를 알아야 한다는 점에는 정말 공감합니다.
Heap이나 Call stack을 있다고만 알고 정확히 어떻게 동작하는지 모르는 있는 사람들이 몇몇 있더군요.
value type의 variable은 함수를 벗어나면 사라진다던가 재귀함수를 계속 부르면 스택오버플로우가 난다던가 진짜 제 생각으로는 상식이라 생각했던 사실을 모르는 사람들을 종종 많이 봤습니다.
앵? 진짜요? 전 독학으로 C를 공부하다 보니까 이런 것들은 당연히 배우는 줄 알았는데..
모르는 사람이 있다는게 신기하군요..
1-2년 전에 이 영상을보고나서 학과 커리큘럼보고 대학을 정했었는데 아직 시작이지만 덕분에 방향을 잘잡은 것 같습니다
전적으로 동의합니다. 현재는 C sharp 을 주로 개발하는데 영상쪽을 전공하다보니 unsafe한 데이터를 많이 다룹니다. C를 충분히 해본 사람과 아닌 사람의 메모리에대한 이해는 꽤나 크게 차이나더군요. 다행히도 저는 전자과임에도 C, C++를 주로 다뤘고, 펌웨어단 공부하면서 어셈블리도 조금 알고 있습니다. 항상 많은 것을 배워갑니다.
작은회사에서 3년 일하고 이직준비중에 포프님 영상을 접했습니다. 제가 정말 3년 전보다 나아졌을까 라는생각이 들게끔해주시네요..
저도C언어들은 학습안하고 바로 JAVA, 파이썬 등등을 배워서 취업을 했거든요. 지금이라도 공부(C++) 부터해서 기본을 더 다져보려고합니다.
좋은 영상감사드립니다.
당연히 나아지셨을 겁니다! 하지만 더 크게 도약하면 좋은 시기죠!
좋은 내용 잘 봤습니다.
대학때 경엉전공이었고, 전산, 컴공의 수업을 들으며 C, 포트란, 자바 등등을 배웠고
현재는 데이터베이스 관리업무를 하고 있는데
메모리에 대한 이해가 없으면 데이터베이스의 작동원리 뿐 아니라, 대부분의 컴퓨터와 관련된 작동원리를 쉽게 이해하기 어렵다고 봅니다.
네 동의합니다. 다만 unmanaged언어에 너무 빠지지않고 현재 흐르는 페러다임을 놓치지않고 잘 따라간다면 완벽한 개발자라할 수 있겠네요. 요즘은 예전과 달리 미래에 대한 불확실성과 성장속도가 기하급수적으로 빨라져 너무 하나에 꽂혀 살게된다면 나중에 세상이 변했을때 대응하기 힘들것 같습니다.
절차지향인 c를 배우고 나서 객체지향인 c++를 공부하니 너무 편했고 unmanaged 언어인 c++를 배우고 나서 managed 언어인 자바를 공부하니깐 너무 편해요.
가비지 컬렉션하고 레퍼런스 카운트도 개념도 이해하기 빠름
맞습니다
프로그래머로 진지하게 나갈 거면 C/C++ 베이스가 좋긴 한 것 같아요.
전 cs 전공했는데 학부 때 메인 언어는 c 로 4년 + java로 oop 개념 1-2년 같이 배우고 c++로 석사 2년 했어요.(지금은 아닌데 당시에는 oop 너무 싫어서 c++보다 c를 더 선호했죠ㅋ) 근데 cs에서는 비주얼적인 걸 하나도 안 배우니까 너무 재미가 없었어요. 몇 시간 코딩했는데 고작 터미널 창이나 텍스트 파일로 결과물 보는 게 너무 demotivating 한 거에요ㅋ
항상 비주얼적인 것에 대한 굶주림이 있다가 석사 졸업 후 취업을 했는데 그 때 막 UX라는 개념이 떠오르던 시기라 회사 내에서 UX 부서에서 일할 사람들을 모집했어요. 뭔가 비주얼적인 걸 할 수 있을 것 같아 거기 지원했는데 운좋게 붙었어요. 그래서 UX 디자이너로 거의 8년을 일했죠. 코딩 완전 손놓고. 그러다 해외 유학 나왔는데 학교가 디자인이랑 코딩을 같이 가르치는 곳이라 코딩 수업 수준이 딱 수박 겉햝기로 트렌디한 툴과 기술들 엄청 많이 가르쳐주는 식이었어요. 그래도 비주얼적인 거 코딩하니까 그제서야 코딩이 재미있더라구요.
cs 졸업한지 너무 오래돼서 다 까먹었을 줄 알았는데 그래도 다시 하니까 꽤 기억 나더라고요. 자료구조나 알고리즘 시간에 왜 배우는지도 모르고 배웠던 것들이 진짜 실용적인 상황에 적용할 일이 생기니까 아 이래서 그런 개념이 필요하구나 이해가 돼서 넘 짜릿했어요. 포인터 개념도 신기하게 아직까지 기억하고 있어서 자바스크립트 디버깅 할 때 아 클래스 이거 뒤에서 포인터처럼 돌아가는구나 이해하고 고치기도 하고 그랬어요.
그리고 c언어를 베이스로 해놔서 그런지 다른 언어 배울 때는 웬만하면 다 쉽게 느껴진다는 장점도 있어요ㅎㅎ 포인터 따로 안써줘도 돼? 어레이 크기 미리 지정 안해줘도 돼? 동적 메모리 할당 같은 거 안해줘도 돼? 개꿀. 이런 느낌? ㅋㅋㅋ
일차적으로 포프님의 영상을 보고 많은것을 느끼지만, 댓글들을 보면서 다른분들의 생각과 견해, 경험을 볼 수 있어서 많이 참고하는편입니다.
@yeonie8889님이 이야기가 나만 그렇게 느꼈던게 아니구나하는 생각과,
몇시간 고민 끝에 콘솔로 결과를 나타내면 항상 문제는 해결해서 뿌듯함은 있어도 크게 동기부여가 안된 스스로를 보며 내가 추구하는게 뭔지를 항상 갈팡질팡했는데 이 글을 보면서 조금은 답답했던 것을 해소하게 되지 않나 싶습니다.
좋은 경험 들려주셔서, 공유해주셔서 감사드립니다. 해와 같이 빛나는 하루 되세요 :)
프로그래머로서 기초와 근원을 깊이 튼튼히 다지려면 unmanaged를 깊이 공부해야하고, 몇몇사용자가아닌 광범위한다수도 좀더쉽게 사용할수있는 프로그래밍을 이해하기 위해서 managed를 알 필요가 있는것이군요. 이제 막 c언어 공부를 시작했는데 포프님 말씀덕분에 동기부여와 와닿는 필요성을 얻고 갑니다 감사합니다
제가 다녔던 학교도 저번에 보니까 1학년부터 시작하는 기초프로그래밍 교과목과 객체 지향 등의 교과목에서 C,C++을 빼버리고 자바로 교체했습니다. 아는 후배는 C,C++언어를 배우고 군대 다녀왔더니 모든 커리큘럼 자바와 파이썬 중신으로 바뀌어 있어서 복학 첫학기부터 고생했다고 제게 말해줬던 기억이 있네요. 처음 프로그래밍을 접하는 신입생들에게 C나 C++은 너무 어렵게 느껴져 포기하는 애들이 많아졌다며 커리큘럼을 말씀하신 manged 언어로 바꾸는 학교들이 늘고 있는데 개인적으로는 정말 아쉽습니다...
좋은말씀 감사합니다.
C/C++ 공부에 박차를 가하도록 하겠습니다.
포큐 아카데미에서 최고의 씨/씨뿔뿔 상의사 있다던데... (광고 중...)
@@포프티비 pocu.academy/ko/Courses/COMP3200
이거 맞나요 ㅎㅎ
학부생이라...금전적 여유가 있다면 듣고싶네요 ㅜㅜ
@@박재현-t6e 맞습니다 호호호 ^_^
두가지 언어 (c/c++) (c# or Java) 여기에 파이썬이나 자바스크립트같은 빠르게 코딩 and 컴파일 수 있는 스크립트 언어 하나 더 배워도 좋을거 같아요.
현직 1년차 개발자입니다.
현재 회사와서 c#으로 1개 프로젝트 완성하고 2번째 대형 프로젝트 c++과
리눅스를 이용하여 서버개설완료후 클라이언트 개발중입니다.
정말 제가 겪은 모든게 들어맞는 영상이네요. 처음 왔을때 뭣모르고 c#에서 contains함수 남발하다가 발적화된 경험에 특히 매니지먼트에서 메모리릭이 일어나면 환장하겠더군요..
찾는데 하루걸린적도 ... 어휴
그리고 리눅스로 서버 개설해서 CentOs에서 요 망할놈의 posix 멀티 쓰레드에서 동기화 문제때문에 뮤택스 세마포어 다 걸어가보고 나중에 상황에 따라 멀티쓰레드와 멀티프로세스와 입출력다중화는 상황에 따라 사용처가 많이 갈린다는 경험들.. 학교에서나 학원에서 배운거 돌이켜보니...
언어 하나만 잘해도 평생 밥벌어먹고
산다는 얘기도 들엇는데 다 개소리입니다.이게 언어 하나만 잘해도 밥벌어먹고 산다는 급이 어느정도인지도 모르고 학생들은 망연하게 그냥 언어 하나만 파는경우도 허다하죠. 데이터 베이스 서버 클라
모든게 다 모여서 하나의 프로그램 서비스를 만드는데 저는 개인적으로 자신의 전공 1순위 기술은 지키며
부로 나머지 전반적인 기술은 깔려야 된다고 생각합니다.
그래도 겪으시면서 발전을 꾸준히 하시고 계시는 것 같아 보기 좋습니다. 한 1년~2년정도만 그렇게 노력하시면 그 뒤부터는 그나마 조금은 더 심장이 쫄깃하는 일이 적게 개발하실 수 있지 않을까요? 우리 모두 힘냅시다!
😀
포프님 만나서 다행이에요 ㅎ
+swifty Kang 반가워요 흔들~
Unmanaged로 시작해서 지금 Managed를 즐겨쓰고 있는 졸업반 학생입니다. 현업에 나가야 하니 초심에 대하여 생각해보는 찰나, 때 마침 유투브가 1년 전에 봤던 본 영상을 다시 보여주며 뭐가 중요한지 알려주시네요. 다시 한 번 잘 보고 갑니다. 꾸벅.
피와 살이 되는 말씀 감사드립니다. 종종 올바른 길로 가는게 맞는지, 스스로 맞는건지 항상 의문이 들때마다 찾아오게 되는 영상이라..
감사합니다.
좋은 말씀 감사합니다.
현재 졸업 예정인 대학생인데 학교에서 배우는 C, C++, 어셈블리를 배우면서
'다른 학교들은 앱 개발이나 프로젝트같이 실용적인걸 가르쳐주는데, 왜 우리학교는 이런것만 가르쳐줄까' 생각했었는데 이런 깊은 뜻이 있었구나 생각이 드네요.
프로그래밍 아무리 잘하고나서도 드는 생각이 살아남기 위해서 중요한 언어중 하나는 다름 아닌 우리가 일상 대화하는데 쓰는 언어인것 같습니다. 버스 타고 가는 길에 요즘같은 세상에 아주 흔치않은 어여쁜 표준어 어법의 대화가 들렸는데 이건 정말 ㅠㅠ 잊을 수 가! 없쪙!
c 하고 c++ 배우고 java 배웠는데 java 자체가 앞에 두 언어 영향을 많이 받아서 그래도 비슷해서 배우기 편했던거같에요
8비트 부터 컴퓨터를 만져놓으니 그때 배운 것들 기초가 쌓이고 쌓여서 40대가 된 지금에도 도움이 많이 됩니다.
저도 40대 화이팅
좋은영상감사합니다. 다음에도 좋은영상기대합니다.
포프님 항상 감사합니다. 이런영상들을 올려주신 것 덕분에 제 진로를 찾아가는 것 같습니다. 정말 감사합니다 :)
다행이네요. 이런 이야기 하면 그냥 무시하시는 분들도 계셔서 걱정이었거든요
맞습니다. 학교에서는 언매니지드를 해서 기초를 좀 해두시는게 낫고 사회에서는 그냥 회사서 시키는거 하는게 좋아요. 굳이 지금 웹에이전시 같은 곳 들어갔는데 C++배우실 필욘 없습니다. 월급은 어차피 거기서 거기에요.
저는 중상위권 정도되는 학교를 재학중인데 총 5학기 동안 unmanaged language를 교육하는데 주력합니다. 물론 중간에 managed language를 교육하긴 합니다만 커리큘럼상에서 주력하고 있는 것은 unmanaged language네요. 교수님들도 평소에 컴퓨터가 어떻게 동작하는지에 대한 것을 많이 이야기하시는데 이게 정말 바람직하다는 것을 몸소 체험해보고 포프님 영상보면서 다시 한번 환기하게 됩니다. 겨우 학부생 과정을 공부하고 있지만 프로그래머가 컴퓨터 하부구조를 모르고서 코딩을 한다는건 말이 안된다고 친구들끼리 많이 이야기를 했었는데 맞는 말이었네요.
+퍼퍼퍼펑 좋은학교네요. 어느학교인지 이름이라도 듣고 싶은데 개인정보 노출때문에 좀 꺼리실려나요?
저도 궁금하네요
퍼퍼퍼펑 저도듣고싶습니다
저는 10학번 숭실대 인데 거의 모든 강의와 과제가 C, C++이였습니다.
저도 숭실대학교인데,, 학부때는 빵판에 회로를 설계 하면서까지, 어셈블리 언어를 직접 만들면서까지, 리눅스 커널 코드도 짜고, 네트워크 프로토콜도 손수 설계시키며 가르치는 학교 커리큘럼에 학을 뗐었는데, 현업에 나와보니 저희 학교의 커리큘럼이 얼마나 좋았던 것인지 새삼 느낍니다!
진짜 생각의 출발점부터가 다릅니다. 다른 학교출신(비하하는 의미는 아니지만) 동료들의 이야기를 들어보면 진짜 컴퓨터가 마법을 부리는줄 알더군요... 다 누군가가 직접 만든 코드인 것인데...
포프님의 생각에 깊이 공감하게되네요
영상 항상 잘보고 있습니다.
비전공에 이십대중반에 접어들면서 프로그래밍에 관심을가져서 지금이나마 열심히 공부중인 1인입니다ㅎㅎ..
공부하다가 가끔 멘붕오면 포프님 영상보러온다는 - -
생각정리.. 또는 정신적지주가 되어 줄때도 있엇네요
늘 좋은 영상 감사합니다.^^/
이분은 볼때마다 느끼는건데 개발자로서의 낭만을 추구하시는 것 같아요. 부럽습니다. 치이고 치여서 살다가 뒤돌아보니 어느새 개발자로서 꿨던 꿈은 사라졌네요.. 의욕도 안나고..
말씀하시는 내용의 깊이가 정말 대단하신것 같아요 ㅎㅎ
오랜 경험으로 알게된 것 중 하나. 어떤 프로그래밍 언어를 아는가가 중요하지 않다. 수많은 과제를 하면서 깨닫게 된 것임. 말을 논리적으로 잘하는 사람이 프로그래밍도 잘한다. 왜냐고? 결국 실제 언어나 프로그래밍 언어나 논리를 표현하는 방법의 차일뿐이더라. 글을 잘 쓰거나 말을 논리적으로 잘하는 사람이 프로그래밍도 잘한다. 말 많고 많이 안다고 시끄러운 사람의 코딩을 보면 그 사람의 사고가 얼마나 엉망인지 알겠더라는....
저는 TTL과 ATMEL HW설계와 어셈블리언어로 정년을 채우고 지금은 그걸 강조하고있는데 . . .
내용이 격하게 정말 대단하십니다..
교수님 건강하시고 젊은이를 위해 좋은기사 계속응원하겠습니다.
아울러 요즘시작한 제 유튜브도 응원바라겠습니다. 감사합니다.
이번에 대학 입학하고 한 학기 다녀보면서 고민, 걱정이 많이 생겼었는데 이 영상 덕분에 공부의 방향성을 잡은 것 같고 학교 커리큘럼에 대한 신뢰가 생겼네요
저도 C부터 시작해서 C#... 지금은 java를 주로 하고있는데
C에서 배운 메모리를 다루는 개념, 정말 도움이 되고있습니다 ㅎㅎ
어쩌다 봤는데 끝까지 봤네요. 중간에 레이서로 설명해주신 부분은 정말 좋은 비유 같아요.
프로그래밍뿐만 아니라 모든 '것'을 사용함에 그 것을 이해하고 사용하는 것과 안하고 하는것은 큰 차이가 있다고 생각해요
포프님 영상 보면서 불혹 다 되어 프로그래머 생활을 시작하려 합니다. 포프님 책 보는데 궁금했던 것 들이 많이 써 있어 좋네요. 저도 포프님처럼 멋진 엔지니어가 되는 게 목표입니다.^^
대학 자체가 취업을 위한 수단이 된 마당이다보니 깊이 있는 학문 보다는 빠른 사회 진출을 통한 일종의 학교 실적 채우기에만
급급해서 생기는 자연스런 부조리라고 생각해요.
우선, 포프님의 주제들은 대부분 게임과 같이 성능에 비중이 큰 개발 분야... 가끔은 그중에서도 그저 엔진에만 의지 하지 않는 수준을 아우르는 개발자를 '목표'에 두고서 이야기 하는 경향도 있습니다, 문제는 이러한 전제를 못 박고 이야기하지 않다 보니 영상에서 다뤄지는 이야기들이 인구 차원에서 사실상 대부분의 개발자들이 일하고 있는 분야에도 함께 적용될 것처럼 보입니다.
아무튼, managed language 와 unmanaged language 를 나름 열심히 배우고 현장을 경험해 온 '일반적인 수준의 개발자'로써 의견을 조금 꺼내 보자면...
영상 내용을 간단히 줄이자면, '소수의 최상급 개발자들은 고도의 테크닉을 지녔다, 그들은 unmanaged 언에 매우 능하다. 개발자로서 그래야 할 필요가 있다' 는 의견이라고 볼 수 있겠습니다. 저도 이 의견에 공감은 합니다. 다만, 현실(현장의 실전)을 반영하면 '이제는 굳이 그럴 필요까지는 없어진 거 같다.' 라는 생각으로 머리가 좀 복잡해 질 일이 된다는 생각입니다. 물론, 앞으로 취업하고 그런대로 잘 살아보겠다는 보편적 의지를 가진 대다수에게만 해당 될 이야기죠.
제가 외국은 잘 모르니 그저 국내 실정만으로 이야기 하자면, 국내 대다수의 개발자들이 일하고 있는 개발분야는 managed 언어가 낼 수 있는 성능 범위 이상을 요구하지도 않거니와 실무적으로는 거론도 하지 않는 게 사실입니다. 이런 분위기는 대략 20여 년 특히 십 수년 사이에 급속도로 변해 왔죠. 그저 어쨌든 에러 없이 돌아가기만 하면 되고, 성능은 해당 툴이나 언어가 보편적으로 제공하는 수준에서 사용에 그다지 문제만 없으면 오직 '납품!' 이 관건입니다. 튜닝은 나중의 일이고 이것도 특별히 전문가가 배치되기보다는 그 파트를 담당했던 개발자가 수습하듯 날림으로 해결하며 이 역시 사용된 언어와 툴의 영역에 갇혀 있습니다.
이쯤 돼서 아마 다음과 같은 의견이 나옵니다.
"그 중에서도 unmanaged language 등급의 기술에 능한 사람들이 결국 인정 받고 좋은 위치에 남게 된다" 라고 말이죠.
이 의견에는 다시 다음과 같은 긴 설명이 필요할 겁니다.
"영상에서도 언급하듯 결국 그런 사람들은 어차피 특화된 분야의 극소수이다. 자기 생활 없이 삶에 급급해 살다보면 그냥 보편적으로 일하며 버티는 직장인이 돼 있는 것이 경험적 통계로 98%는 될 것이며, 이들에게 있어 unmanaged language 등급의 지식들은 어쩌다 가끔 신입들 앞에서 '이건 이렇게 해결될 문제가 아니고 에... 사실...'라는 멘트로 슬쩍 꺼내 들었다가 '야 일단 밥이나 먹으러 가자' 라는 마무리로 이제는 학창시절의 추억이 돼 버린 기억 정도의 역할이 고작인... 배워서 도움이 된 거 같긴 한데 뭐 하나 나열하기도 힘든... 느낌적인 느낌 같은 것이 돼 버린 게 국내 프로그램 개발 산업 전반의 현실이다." 라는 긴 설명 말이죠.
결국, 배워서 나쁠 것 없지만 자신이 추구하는 목표에 따라 집중할 가치는 매우 크게 다르다는 생각 입니다.
이상, 앞으로 변할 가능성이 거의 없는 현 실태 차원에서 보는, '이상적으로는 바람직하지만, 대다수의 개발자들에게는 더 이상/그다지 실용적이지도 않다' 라는 의견이었습니다.
업계를 바라보는 눈은 저와 크게 다르지 않으시며 저도 많은 부분 동의합니다.
저랑 의견 차이가 있는 것은 두개 정도 인거 같은데요.
1) 게임 등 성능에만 국한된 이야기라서 98프로에겐 의미없는 이야기다.
일단 98프로라는게 매우 과장인 거 같고요. (현재 프로그래밍 언어 점유율만 봐도 C/C++을 합치면 30프로가 넘는 부분에서 그리 생각.
그리고 현재 웹 프로그래밍을 주로 하는 저로써는 아키텍트급의 엔지니어도 염두에 두고 한 이야기 입니다.
그 결과 저는 분야 막론하고 상위 20프로안에 들어가려는 사람들에게 적용되는 이야기라고 봅니다.
2) 살아남는다는 의미에 대한 인식차이
제목에서도 그리고 비디오에서도 말했듯이 전 프로그래머로 10년뒤에도 떳떳이 살아남기위해 필요한 언어라고 말했습니다. 하지만 들어주신 예는 제 기준에서는 그냥 일반 직장인으로 일단 봉급 받으며 다소 주먹구구식으로 일해보자. 먼미래(즉 한 10년 15년 뒤에도)에 내가 경쟁력이 있을지는 모르겠다. 인듯 합니다. 전 이 때 여전히 눈치보며 짤리면 갈때 없다는 걱정하고 있는게 살아남는 길은 아니라고 봅니다.
그리고 업계상황은 변할거라고 봅니다. 단 이상적이지 않은 방향으로요. 저임금의 프로그래머가 더 양산되면서 그저그런 일반 프로그래머들의 경쟁이 더 치열해질 것이고 결국 나이먹은 프로그래머는 점점 설 곳이 더 적어질 거라고 생각하죠. 하지만 이런 걸 깨닫는 순간이 보통 경력 10년이후라 생각합니다. 따라서 너무 늦기전에 새로 업계에 들어오는 사람들이 방향을 잘 잡아서 대비를 했으면 하는 바람에 만든 비디오 입니다. 즉 상위 20프로 이상으로 올라가서 살아남을거냐 아니면 하위 80프로에서 머무르며 늙어서 맘편히 못살거냐..
결국 취업은 첫단추
c/c++ 로 FFI만들어서 브라우저/js런타임에서 돌리게 하거나
Node-API로 rust/c를 wasm으로 컴파일해서 사용하거나
emscripten을 사용하거나.. 등
이미 웹환경에서 최적화를 위해 이루어지고 있는 시도들이고
상당히 많은 라이브러리들이 개발이 되고 있죠..
(wasmtime, wasi, wasm3)
왜 모질라재단에서 적자까지 내며
rust기반으로 새로운 브라우저 엔진 servo와
webrenderer를 만들고 있을까요?
왜 새로운 Js 런타임 deno, bun과 같은 게 등장했으며
사람들은 열광을 하고 있을까요?
왜 swc와 같은 js/ts컴파일러에 사람들은
열광하고 있을까요?
이런 움직임들을 보시면
한번쯤 멈추고 생각해볼 필요가 있습니다.
10년, 20년 뒤로 갈수록,
AR과 webxr이 시간이 지나면서
safari, chrome, firefox등의 메인스트림 브라우저에서 보편화될수록,
더더욱 웹생태계는 unmanaged lang에 대한 요구가 높아지게 됩니다.
30년정도 가면 vr도 원하게 될거구요..
그때가면 web생태계에서 진정한 메타버스를 요구하고자 하는
움직임이 일어나겠죠.
지금과 같은 수준의 최적화는 얼척이 없는
높은 수준의 엔지니어링이 반드시 요구되는 사회가 될거라 이 말입니다.
elixir와 같은 erlang기반 언어들이 백엔드에 점차 도입되는 게
늘어나는 이유도 위와 같은 배경에서 입니다.
지금도 번들링된 js파일 크기가 커지면서 spa체계에서는
로드시간이 길어져 lodash같은 라이브러리들로 해결하고 있죠.
하지만 webxr, webaudio같은 기술들을 점차 유저들이 원하게 되고
글래스가 보급될 수록 지금과 같이 react니 vue니 이런
라이브러리 아는 수준의 웹 생태계와는 달라질 겁니다.
애초에 웹에서 요구되는 UX가 upside down하게 바뀌게 된다구요..
또한 그즈음되면 ethereum뿐만 아니라
다른 블록체인 프로토콜들이 많이 개발되고
사이드체인, 롤업들이 충분히 준비되어서
지금보다 훨씬 web3에 가까운 모습이 만들어져있을 겁니다.
이를 위해서 노력하는 천재개발자들이 정말 많다는 걸
github에서 좀만 살펴봐도 다 알 수 있습니다.
지금 비단 웹 클라이언트 생태계에서 말했는데도 이정도인데
하물며 게임씬에서는 어떻겠습니까?
백엔드 씬에서는요?
제발 미래를 생각하고 시니어이상급으로 성장하고자 하는 개발자라면
반박할 것도없이 unmanaged의 중요성을 느낌과 동시에
computer science를 철저히 공부해야 하는 겁니다.
특히 컴공 대학생이면 축복받았다고 생각하시고
부모님께 감사드리면서 대학공부 열심히 하시면 되고요.
이런 이유가 바로
학원에서 되지도 않는 이상한 강의 팔아제끼면서
돈빨아먹는 부트캠프들이 나쁜이유입니다.
전혀 미래가 없는 방식으로 가르치거든요..
지나가던 컴공학부생입니다 잘들었습니당
오늘 처음 포츠TV 와서 Subscirbe 했습니다.. 전 37살 먹은 아들 아빠이며 아일랜드 리머릭에 거주하고 현재 Limerick Institude Technology에서 3학년 재학중이네요. 처음부터 지금까지 C++가 항상 모듈이 있으며 저희 교수이 정말 여기서 유명하신 분이십니다. Unmaged Langauge를 아주 강조합니다. 2학년때 서서히 알고리즘들과 소트들을 배우는데 정말 배우는 입장에서 아주 중요다고 생각합니다. Managed Language 2학년부터 C샵 3학년 현재는 JAVA와 C샵을 현재 깁숙히 배우고 있고요... 정말 유용한 정보 감사드리고, 공감이 가서 이렇게 글 남깁니다..
먼말이지... 아니 37인데 학생???
@@chaidle 예. 늦각이 대학생입니다. 현내 아일랜드 거주중이고 limerick Institute Technology 3학년입니다. 일년 더남았구요. 곧 인턴쉽을 Kemp technology에 Reserch and development 에서 stack developer로 일할 예정이구요
@@chaidle 한국 나이로는 80년 생이니 39살 입니다..
오빠~ 😍
@@포프티비 왜 그러세요.. ㅎㅎ. Happy Christmas and Happy New year.
많이 공감하고 있습니다.예를들어 안드로이드가 처음에 자바로 개발되었는데..커널이 5.0버젼부터(?) c언어 계열 언어로 개발되면서 os가 빨라졌다는 소문을 들었던 것 같네요.언어별로 장단점이 있으니까 적재적소에 잘쓰는게 중요하다는 생각이 듭니다.
성능상의 문제가 되는 부분을 조금씩 Native (C++) 로 옮겨간 사례입니다. Native 언어로도 성능 확보가 안되면 HW IP 를 이용하는 식이 되는거죠... 모든 플랫폼에서 최적화 단계에 일어나는 자연스러운 현상입니다.
오래된 글이지만 좀 잘못된게 있어 적습니다
안드로이드는 커널은 리눅스
런타임인 가상머신은 달빅이라는
C로 구현된 런타임 위에
자바로 구현된 프레임워크로 돌았습니다
이게 2015년 이후로
런타임이 C++호 구현된 아트 런타임으로 바꾸기
가비지 컬렉션과 JIT그리고 점진적인 AOT등
인터프리터의 한계를 벗어나 점점 속도가 개선되었습니다
이런 기술들이 댓글 다신 것처럼
언어가 달라진게 주된 요소는 아닙니다
로우레벨도 디테일도 정말 중요하지만 하이레벨 언어를 말하면서 몇몇 분들이 "쉬운언어" 운운하는 것은 좀 황당하네요. 사람이 하는 일이 쉬울 수는 있어도 어떻게 언어 자체가 쉬울 수 있겠습니까😂 스몰토크, 리습 이런 퓨어한 하이레벨 랭귀지를 제대로 접해보셨다면 생각이 많이 바뀌실 수 있을 텐데.... 또 어떤분들은 무슨 파이썬이라고 쉽게 생각하시는 것 같은데, 이탈리아의 대표적인 프로그래머 Alex Martelli의 경우 젊은 시절 C++전문가로 명성을 날렸지만, 파이썬으로 넘어오고 부터는 몇십년을 해도 계속 배울 점이 있어 참으로 고마운 언어라고 말한답니다. 로우/하이 두개를 잘 한다면 정말 좋겠지만 사실 하나를 잘하는 것만으로도 정말 대단한 거지요. 평범한 프로그래머가 한쪽을 택한다고해서 뭐라 할 필요는 없다고 생각해요. 미국에서는 리습으로 만드는 운영체제 수업같은 것이 매우 중요하게 여겨지는데 우리나라에서는 그런 랭귀지가 있다는 것도 잘 모르지요. 우리나라에서는 잘한다는 프로그래머들이 하이레벨 랭귀지에 대한 관심이 별로 없는게 훨씬 큰 문제라고 생각합니다.
지금 들어주신 논거에 몇 가지 오류(혹은 모르는 사람이 보면 잘못 이해할 부분)이 있는 거 같아 몇가지 첨언합니다.
1. 쉬운 언어라는 표현은 보다 쉬운 언어를 의미하는 겁니다. 그 언어가 무조건 쉽다라는 의미가 아니구요. 언매니지드 언어가 매니지드 언어보다 어렵다는 것은 많은 분들이 동의한다고 생각하고요.
2. 미국에서 오에스 가르칠 때 리스프보다 C를 더 많이 씁니다. 제가 미국에서 컴공 석사 받을 때도 C로 오에스 개념들을 만들어야 했습니다. 메이저한 거의 모든 운영체제가 C로 만들었기 때문이죠. 참고로 미국에서도 스몰토크, 리스프란 언어가 있는 거 모르는 프로그래머들 많습니다. 그게 문제라면 한국만의 문제는 아닙니다.
3. 잘하는 프로그래머들이 매니지드 언어(퓨어한 하이레벨 언어라고 표현하신게 매니지드 언어라 생각해서 그렇게 표현하겠습니다. 씨, 씨뿔뿔도 하이레벨 언어라서요. 그게 아니라 함수형 언어를 말씀하시는 거라면 댓글 달아주세요.)에 관심을 안 가지는게 문제라고 하셨는데 그거에 대한 논거를 제시하셨으면 좋겠습니다. 그 반대 논거를 드라자면 현재 널리 쓰이는 매니지드 언어를 만들고 발전시켜 나가는 주요 멤버들이 그 잘하는 프로그래머들입니다. (특히 C#진영) 그럴 수 밖에 없는 게 매니지드 언어의 기능 등을 만드려면 그 언어자체(컴파일러 및 인터프리터)에서 하드웨어 제어를 해줘야하기 때문에 언매니지드 언어를 잘 아는 사람이 아니면 그런 일을 하기 어렵습니다.
@@포프티비 안녕하세요. 우선 친히 답변을 해주셔서 정말 감사하게 생각합니다. 포프님보다는 여기에 달린 다른 댓글들을 겨냥하여 쓴 말이긴 한데요. 포프님께서 해주신 말씀에 대해서도 답변을 드리겠습니다.
1. 그 보다 쉽다라는 내용에 대해서도 동의하지 않습니다. malloc, epoll등 함수등을 깊게 이해하는 것 만큼이나, 클로져, 메타프로그래밍, 신택스트리 자체를 동적으로 변경하는 리스프의 매크로 같은 기능을 이해하는 것이 어렵고 동시에 프로그래머에게 큰 자산이 된다고 봅니다. 로우레벨 랭귀지에는 로우레벨 전용 기능이 있듯이 하이레벨 랭귀지에는 하이레벨 전용 기능이 있다고 보셔야 하지 않을까요. 제가 평소 자주 인용하는 블럽패래독스라는 말을 링크합니다(wiki.c2.com/?BlubParadox).
2. 오해의 소지가 있게 말씀드린 점은 죄송합니다. 저도 미국에서 C가 대학과정에서 운영체제를 가르치는데 주류 언어라는 점은 잘 인지를 하고 있습니다. 다만 소위 상위권 대학으로 갈수록 오히려 하이레벨 랭귀지로 운영체제를 가르치는 경우가 많습니다. 리스프와 과 같은 하이레벨 랭귀지가 정말 '쉬운' 언어 였다면 설명하기 힘든 현상이지요. 대표적으로 MIT의 SICP라는 리스프로 구현하는 운영체제 교과서/강의가 있는데요, 컴퓨터과학을 통틀어 가장 권위있는 강의중 하나입니다.
3. 제 논지는 우리나라 고급프로그래머들이 너무 로우레벨쪽에 편중되어 있다는 것이었고 말씀해 주신 내용은 오히려 제가 말한 논지를 강화시키는 것으로 보입니다. GNU의 창시자 리처드 스톨만 같은 분은 로우레벨 랭귀지에 벗어나지 못하는 세태를 비판하고 하이레벨 랭귀지를 정말로 많이 강조를 했습니다. gcc, bash, emacs 등 굵직굵직한 작품을 보면 이런 철학이 잘 녹아있지요. 현재 우리나라 토양에서는 이런 분이 나오기 힘들다고 생각했습니다.
1. 하이레벨의 개념부터 잠시 잡아주시고 논의를 진행하는게 좋을 듯 합니다. 정확히 무슨 기준으로 하에레벨 로우레벨을 나누시는 지요. 제가 지금 느끼기에는 함수형 언어의 특징들을 하이레벨 언어라고 말씀하시는 것 같아 묻습니다. 시샵, 자바. 심지어 씨와 씨뿔뿔도 하에레벨 언어인데 지금 말씀하시는 부분이 적용되지 않는 거 같아서요. 패러다임이 다른 언어를 말씀하시려는 데 로우/하이레벨 언어라고 표현하는 건 아닌가 생각이 들지만 그건 대답해주시리라 생각합니다.
2. 미국의 상위권 대학에서도 C로 운영체제를 가르치는 일이 더 많습니다. (그리고 씨도 하이레벨입니다) 그리고 어떤 과목을 특정 언어로 가르친다고 해서 그 언어가 더 쉽지 않다는 이유가 되진 않습니다. 오히려 더 쉽기에 그 언어로 가르치면서 프로그래밍이 아닌 개념을 이해시키려는 시도도 많이 합니다.
로우레벨 전용 하이레벨 전용 기능이란 말도 잘 이해가 되지 않는 말인게.. 하이레벨 언어의 기능은 로우레벨 언어로 구현이 가능하지만 로우레벨 언어의 기능은 하이레벨 언어로 구현이 불가능한 경우가 많습니다. 그게 바로 로우레벨 하이레벨의 차이고요. 결과적으로 로우레벨 언어는 하이레벨 언어를 쌓아올리는데 기반입니다. (근데 다시 한 번 말씀드리지만 하이레벨 언어의 정의부터 내려주시는게 가장 필요할듯 싶습니다. 하이레벨이 중요하단 말씀을 하시는 게 아닌거 같아서요)
3. 로우레벨 프로그래머가 숫적으로 많다는 말도 사실과 다른 이야기 같습니다. 하이레벨 프로그래머가 수로 압도적으로 많습니다 현재 프로그래밍 언어통계만 보셔도 로우레벨보다 하에레벨 언어가 압도적으로 높습니다. 허나 이 논의도 하에레벨에 대한 정의를 다르게 내리셔서 그럴수도 있다고 생각합니다.
@@포프티비 예 진작 명확하게 얘기를 드리지 못한 것 같아 죄송합니다! 수십년전에는 씨와 같은 랭귀지가 하이레벨 랭귀지라고 불렸던 것이 사실이지만, 단어에 대한 정의는 시간에 따라 많이 변할 수 있다고 생각합니다(en.wikipedia.org/wiki/High-level_programming_language "Relative meaning"항 참고). 애초에 하이레벨 랭귀지라는 것이 명확한 학술적 정의가 없고 상대적일 수 밖에 없기 때문에 제가 생각하는 정의를 말씀드리겠습니다. 저는 clean & terse한 랭귀지가 하이레벨이라고 받아들입니다. 구체적인 특징으로는 말씀해주신 함수형 언어의 특징도 들 수 있겠지만 거기에 더해 객체지향 / 다이나믹타이핑 / 동적코드 수정 능력등을 꼽을 수 있을 것 같습니다. C++같은 경우에는 명목적으로는 앞서 말씀드린 기능을 어느정도 제공하긴 합니다만 실제로 그것이 (상대적으로) 짧고 간결한 코드로 이어지지는 않기 때문에 하이레벨 랭귀지로 분류하기는 힘들다고 봅니다. 명목적으로는 C++과 Ruby모두 람다식을 지원하는 랭귀지지만 실제로 그 둘에서 경험하는 람다식은 확연히 다를 수 밖에 없다고 생각합니다. 소위 주류언어로 불리는 것들 중에서 하이레벨랭귀지로 꼽을 수 있는 것은 파이썬, 루비, 펄 정도라고 생각하고 있습니다. 그럼에도 하이레벨 랭귀지라는 구분 자체가 싫으시다면, 위 랭귀지를 Very 하이 레벨 랭귀지로 받아들여주셨으면 감사하겠습니다.
@@포프티비 2.번에 대해서는 몇가지로 나누어서 답변을 드릴 수 있을 것 같은데요 우선 상위권 대학에서 조차 C로 운영체제를 더 많이 가르친다는 것은 저도 인정을 하고, 오해하실 수 있게끔 말씀을 드린 점은 사과합니다.(하지만 여전히 SICP가 미국 컴퓨터과학에서 가지는 입지는 대단한 것이라고 생각합니다...).
다음으로, "로우레벨 언어는 하이레벨 언어를 쌓아올리는데 기반입니다"라는 말에 대해서는 동의하지 않습니다. 애초에 랭귀지 디자이너 입장에서 하이레벨 랭귀지를 정의하고 머리속으로 프로그래밍을 하는데에는 로우레벨 랭귀지의 도움을 받을 필요가 없습니다. 때문에 C라는 랭귀지가 나오기 이미 수십년전에 lisp이란 언어가 발명 될 수 있었던 것이지요.
하지만 현실적으로는 메모리나 연산속도의 제약이 있고 그 제약속에서 최고의 성능을 끌어내기 위해 로우레벨 랭귀지의 도움이 필요한 것으로 저는 이해하고 있습니다. 그리고 저도 "지금 이시점"의 "현업"에서 파이썬 프로그래머들이 CPython 구현을 제대로 이해하고 레퍼런스 카운팅이나 바이트코드를 제대로 이해하는 것은 매우 중요하다고 받아들이고 있습니다. 때문에 2번에서 어떤 의미에서 말씀을 주셨는지는 백번 이해합니다.
그리고 전용 피쳐에 관한 문제에 대해서는.. 애초에 어떤 랭귀지든 다른 모든 랭귀지의 피쳐를 지원하는 것이 가능하고 이건 사실 수학적으로 증명도 가능합니다(물론 구체적으로 운영체제의 도움을 받기 위해서는 ffi를 통해 특정 언어의 특정 함수를 호출할 필요가 있을 수 있겠습니다만 이것은 제가 말씀드리는 것과는 다른 측면의 이야기입니다). 때문에 사실 진정한 의미에서 전용피쳐는 없다고 보는 것이 맞겠지요. 다만 현실에서 하이레벨 랭귀지에서는 하이레벨 랭귀지에서 일반적으로 쓰는 기능이 있고 로우레벨 랭귀지에서는 로우레벨 랭귀지에서 주로 쓰는 기능이 있다고 생각합니다. C/C++ 유저들이 리습에서 매크로와 같이 고도로 추상화된 기능을 사용하는 것은 현실적으로 보기 힘든 광경이라고 봅니다.
언어도 언어지만.. 그 외에 중간중간에 공감가는게 너무 많네요.. 특히 13분쯤 성장속도 얘기..ㄷㄷㄷ
논리 적인생각>수학 >영어 >알고리즘 >노력 >천재 >여자 >남자
주 언어는 있을 수 있지만 모두 다뤄야하죠 어쩔수없이..
언어를 무엇을 배울지 어떻게 배울지 보다는 문제를 파악하고 해결해나가는 방법이 중요한것같아요
항상 궁금하고, 알아야 겠다고 생각 되는 부분에 대해서 얘기해 주셨네요. 감사합니다.
경험해본 사람은 알겠지만.. 메모리관리가 어려운 언어는 자동으로 메모리관리를 해주는 언어들입니다. 자바 개발로 먹고 살게되면 한번씩은 다들 넘어야하는 고비인 듯 해요
내가 느낀거랑 똑같네요.. C/C++의 메모리 모델이 더 심플한데.. ㅋㅋ 요즘 입문용 언어로.. 파이썬, 자바스크립트 추천하는거보고.. 아니? 코딩 입문자들이 저거부터 배우면.. 이해가 됨? 라는 생각이..
저는 서울 상위권 대학 분교에 다녔는데 커리큘럼이 졸업 떄까지 unmanaged language를 다뤘고 managed language는 한 학기정도만 다뤘던 것 같네요. 정말 학교 다닐 때는 왜 이걸 4년 내내 들어야하고 써야하는지 몰랐는데 지금 제가 원하는 직무를 잡고 포프님 영상을 보니 제가 배웠던 교수님들께서 커리큘럼을 왜 잡으셨는지 이해가 되네요. 그땐 정말 소홀히 했었는데 지금은 열심히 리뷰하며 취업준비 중입니다 ^^
한양대 erica일것 같네요 ㅎ
C언어로 임베디드 업무를 하다가 파이썬을 배우니까
파이썬이라는 언어자체보다 파이썬 프로그램을 어떻게 만들었을까가 궁금해지더군요.
예를 들면 리스트 자료형을 링크드리스트 처럼 쓸수있던데 밑단에서 이거 구현하는 코드 어떻게 짜놨을까 라든지..
전자공학과로서 극동의 합니다 ㅋㅋㅋㅋ
인공지능은 더 알고 싶음
전자공학을 공부하다가 아무래도 맞지 않는 것 같아 평소 관심을 가지고 있던 컴퓨터공학으로 전과를 준비하면서 고민하고 있었는데 이런 좋은 영상이 있었네요. 덕분에 공부에 집중할 언어를 선택하는데 도움이 되었습니다. 이런 좋은 영상 올려주셔서 정말 감사합니다.
좋은 영상 감사드립니다. 덕분에 프로그래머로 해야할 다른 새로운 기준이 생긴것 같습니다.
무슨 언어든...일반 사람들에게 얼마나 쓸만한지, 어떠한 가치가 나오는지가 더 중요한듯요..물론 그다음 전문가끼리 싸워야하는 레벨에서는 디테일이 중요하지만요
항상 좋은 말씀 해주셔서 잘 보고있습니다~^^
지나가다 우연하게 봤는데
공감되는 이야기이네요.
공감합니다 저는 무작정 c, c++부터 시작했었는데 어느정도 프로그램도 만들고 했는데 뭔가 작업을 하는 시간보다 눈에 보이는 결과물은 항상 보잘것 없어보여서 다른 프로그램은 어떻게 만드는것일까 궁금하더라구요 그리고 지긋지긋한 메모리 관리도 자동으로 할 수 있게끔 c로 구현해보고 싶었고 그래서 다른 언어들은 어떻게 할까 궁금해서 찾아보다가 자바나 파이썬을 입문하게 되고 사용해보면서 이렇게 편리하다고? 그때는 c++에서 stl 사용해보고 정말 편하다고 생각했던 시점이라 저한테는 다른언어가 주는 장점이 엄청나게 신선했었죠 그러면서 점점 견문이 넓어지더군요 근데 c를 이해한 상태에서 다른언어를 바라 보니깐 다 쉬워보이더라구요 물론 알고리즘부분이 아닌 외적인 부분 그래서 한언어만으로는 절대로 뭔가 할 수 없다는 생각이 들더라구요 그래서 자연스럽게 웹쪽 html이나 css 자바스크립트까지 그쪽도 관심이 생기고 하게되었고 자료를 저장하고 검색하는 효율적인 데이타베이스 설계도 관심이 가게되고 그래서 젤 중요한건 low 레벨에서 놀 수 있어야 된다는것 다만 c++ c 로 시작하는건 좀 생각해봐야될듯 제가 머리가 안좋아서 그럴지도 모르겠지만 하루에도 수십번 좌절했던때라 진짜 포기하고싶다는 생각을 몇번했는지 ㅎㅎ 지금 컴퓨터 공학이나 관련학과에 있다면 수업에서 뭔가 얻을 수 있다는 생각은 버리시는게 좋습니다. 일단 자기가 최대한 많은 프로그램을 기획하고 많이 만들어보는게 중요함 코딩은 결국 회사가면 다시배워야되는건 매한가지라 많이 만들어보면서 기초를 다지는것이 도움이 됨.. 학교에서 배웠던 학교다니면서 짯던 코드들은 흑역사일뿐.. 솔직히 말하면 대학교에서 가서 인맥을 넓혀서 창업할거 아니라면 그냥 고졸로 회사 입사해서 배워가는게 더 빠르다고 생각되네요 저같은 경우만해도 입사하고 인턴생활 6개월한것이 이미 대학4년과정보다 더 많은것을 배울수 있었다고 생각합니다.. 저는 그시간이 엄청 후회되더라구요 물론 제생각임
좋은 의견 감사합니다.
언젠가 저도 포프님처럼 인정받는 프로그래머가 되고 싶습니다.. 꿈이 없어서 몇년을 혼자서 괴로워 만하다 코딩을 접하고 꿈이 생기고, 목표가 생기고, 소망이 생겼네요.. 코딩을 접한지 2개월밖에 안된 침팬치이지만.. 비전공자 이기에 앞길이 매우 절망적이고 힘들거라고 각오하고 꾸준히 달려볼려고 합니다..
사실 그냥 포프님의 영상이 우매한 저에게 등대같이 방향을 알려주는거 같아 너무 감사하다는 말을 드리고 싶었습니다.
포프님! unmanaged 언어를 공부하기 위해 rust는 괜찮은 선택일까요?
러스트는 참조카운터 기반 메모리 관리였다고 기억헤요. 따라서 메모리 관리 기법을 제대로 못 배울 우려가 있습니다. 가능하면 C를 먼저 해보시길 추천..
포프님, 언매니지드 언어로 C++를 공부해보고 싶지만..문제는..웹개발 쪽인데 쓸 일이 거의 없을거 같아서요. 이런 경우는 어떻게 해야할까요? 실제로 안쓰면 공부해도 금방 다 잊어버릴까 걱정입니다ㅠㅠ
p.s. 파이썬을 공부하는데 파이썬 내부가 C로 돈다니 파이썬 내부를 공부하면서 C 지식을 활용해보는 방법 정도가 생각났읍니다. C++까진 아니더라도 C로도 괜찮을까요?
씨부터 배우고 좀 쓰다가 씨뿔뿔을 배우면 좀더 쉽긴 하죠. 전 나쁘지 않은 생각 같습니다
채용하는 입장이되고나니 더 와닿습니다... 요세는 너무 하드웨어 스펙이 좋아져서 누수가 조금생겨도 눈에 안뛰게되면서 그런지 모르겠지만. 많이들 메모리에 대한 이해가 부족한것같더군요..
ㅋㅋㅋㅋ솔직히 여기서 은근 c언어 부심 있는 사람들 좀 보이는데 학생여러분은 잘 생각하셔야돼요. c언어가 중요한 언어는 맞지만 개발분야에따라 도구를 다르게 씁니다. C언어 안배워도 매니지드언어를 주력으로 쓰더라도 관심만 가지면 포프님이 말씀하시는거 이해할 수 있어요 단지 c언어 공부하면 좀 더 도움이 된다 정도로만 받아들이면 적당할 듯 하네요
그리고 파이썬 공부하라고 하시는 분들도 많은데 이것도 같은 맥락에서 잘 생각해보셔야하는게 본인이 데이터과학이나 인공지능같은 연구에 관심이 없다!? 라면 파이썬은 필수 공부대상이 아니에요. 분야마다 적절한 언어가 있습니다. 제발 잘 생각해보셔야 합니다. 그렇다고 비주얼베이직같은거 하시면 안되구요ㅜㅜ
비주얼베이직은 왜요?
학교 다닐때 C 나 C++ 을 이용한 배열처리나, 구조체, 함수이용법, 컴퓨터, 데이터베이스 구조등 기본적으로 배워서 이것을 이용한 프로젝트를 한번 해보는 것이 중요한것 같아요
결국 자기가 어떤 일을 하느냐에 따라 적절한 언어를 선택할 수 있다면 된다고 생각합니다. 다재다능한 프로그래머라면 항상 많은 연장을 들고 골고루 쓸 수 있겠죠. 개중에는 스패너의 장인도 있을거고, 심지어 도구를 만들어내는 사람도 있을 겁니다. 근데 확실한건 도구를 써보고 만져봐야 도구를 알고 접근할 수 있다는 거겠죠
정말 맞는 말이지만 말씀하신 0.1% 는 학교 커리큘럼에서 나오는것 같진 않습니다. 보통 이분야에서 살아남는 사람들 보면 다 비슷한 루트를 가더라고요. 😅
학교 커리큘럼에 준하는 지식을 다 갖추고 그 외 엑스트라를 가지고 있죠.
학교에서 가르치는 분들이 일단 A급 인재가 아닌 경우가 대부분이라 그런 거 같습니다
항상 좋은 말씀 감사합니다
언매니지드 언어을 이해하려면 결국 컴퓨터 구조와 그 위에 있는 운영체제 지식도 알아야 하고… 그걸 기반으로 동작하는 네크워크, 웹 프레임우크, 디비 등등 결국 1년 동안은 컴퓨터 공학의 기초를 다져야 하는군요.. 돌고 돌아 결국 기초가 중요한 것을 알게 되었습니다. ㅠㅠ
기계와 대화하는 게 즐거운 사람들이 있답니다. 타고나죠
다른종목 프로그래머 입니다.
1. 인성
2. 실력 (기초에 충실)
3. 성실성 (지각하지 않기, 프로젝트 마감시간지키기)
요즘은 이거 갗추어도 살아남기 힘들어요.
그럼 더더욱 기본적으로 다들 갖춰야하는 것들이 된 거군요.
아키텍트급으로 올라가기 위해서는 언어가 대신해주는 추상성까지 알아야 한다.
프로그래밍을 로직구현을 목표로하느냐 시스템구동을 목표로하느냐의 차이가 아닌가 싶네요. 프로그래밍이 주력인 사람은 아니고 영상 알고리즘 개발하는터라 내 코드가 그대로 상용으로 가진 않는데요. HAL과 접하는 코드들은 대부분 C/C++을 쓰고 꽤 잘해야 되죠. 물론 회사니까 잘하는 사람이 기틀을 잡아놓고 대부분은 그 코드를 갖다쓰고 프로그래밍보단 영상이라는 도메인의 지식을 가지고 일을 충분히 할 수는 있습니다. 그렇지만 역시나 코드가 몇년지나면 한번 갈아엎을때가 올수밖에 없는데 그일을 할 수 있는 사람은 몇 안되죠. 그때는 정말 HW(컴터만이 아니라 DSP나 영상 전용 칩등을 모두포함)와 시스템을 잘 알면서 C++잘하는 사람이 그 일을 해낼수 있죠
이제 3학년대학생인데 방향성을 잡는데 정말 좋은 말씀이었습니다. 항상 잘 보고있습니다!
포프님, 면접에서 'unmanaged 언어가 갖는 장점이 뭐냐'는 질문을 받았습니다.
저는 '메모리를 직접 관리하면 더 효과적으로 쓸 수 있다. 예를 들어서 반복적으로 할당/해제가 필요한 경우 미리 heap영역에 할당하면 할당/해제이 필요한 비용이 줄어든다'라고 답변했는데 사실 확신이 안 서더라구요. 좀 더 구체적인 사례가 있을까요?
지금 좀 더 생각해보기로는...
Java에서는 함수에서 처음 정의된 인스턴스들은 함수가 종료되기 전까지 메모리를 유지하기 때문에,
해당 함수에서 인스턴스의 사용이 끝났더라도 함수의 종료 없이 stack 메모리에 함수 콜이 쌓여간다면 메모리가 허비됩니다.
Java에서 GC를 이해한다면 인스턴스의 사용 범위를 파악하여 중괄호로 scope 를 지정해주거나 함수 단위로 쪼갤 수 있을 것 같고요.
좀 더 구체적인 사례가 있을까요?
레이서 사례도 그렇고 추상적으로 이해하지만 와 닿는 사례가 없는 것 같습니다. 아래에서도 동의하지 않는 분들이 보이구요.
okky.kr/article/724956?note=1997798
일단 제가 답변하기 조금 애매한 질문을 주셨는데요. 그래도 솔직히 답변드리겠습니다. (상처받지 마세요)
1. 질문자의 실제 의도
질문자의 의도는 단순히 언메니지드 언어를 잘 이해하냐가 아닌 것 같습니다. 그 보다는 매니지드/언매니지드 하에서의 메모리 관리 원리를 잘 알고 있느냐 같습니다. 그런 질문을 물어보는 이유는 코드를 작성할 때 그 코드가 도는 원리가 뭔지를 고민하는 사람을 뽑고 싶어서겠죠. 왜냐면 원리를 고민하면 코드를 작성하는 사람들은 하나를 가르쳐줘도 그와 비슷한 10개의 문제를 스스로 해결하지만, 그렇지 않은 사람들은 그 10개의 문제를 다 다른 문제로 인식해서 그 10개를 다 가르쳐줘야 하거든요.
(okky의 댓글에서 동의하지 않는 분들은 면접관이 이런 질문을 하는 이유를 파악하려도 하지 않은 채 '매니지드 언어도 충분히 좋다'라는 말만 하고 있는 거 같습니다. 결국 문제의 본질을 보려고 고민하는 사람들은 아니라는 거죠. 이런 글들을 보는 건 본인에게 별로 도움이 되지 않는다고 생각합니다. 뭐 그 외에 fact하고 다른 이상한 이야기도 섞여 있으나 그거 하나하나 제가 지적하진 않겠습니다. 커뮤니티가 제대로 돈다면 그런건 자정작용으로 해결되야 하거든요. 따라서 okky 와 관련된 이야긴 여기서 마치겠습니다)
2. 잘못 대답하신 부분
면접에서 하신 답변으로 미루어볼 때, 언매니지드/매니지드 언어에서 메모리 관리가 어떻게 이뤄지는지 확실히 이해하고 계신 것은 아닌듯 합니다. 아래 몇 가지 예를 들겠습니다.
a) 범위(scope)_가 넘어간다고 Java에서 그 메모리를 곧바로 지우지 않습니다. 실제 GC가 간간히 깨어나서 작동하기 전까지는 그 메모리는 유지됩니다.
b) 언매니지드 언어에서 다른 함수를 호출하기 전에 메모리를 지울 수 있는 경우라면 java에서도 그 함수 호출전에 null을 대입하는 방법으로 동일한 일을 할 수 있습니다.
c) 언매니지드 언어의 할당 비용이 매니지드 언어보다 작을리는 없다고 합니다. 그 보다는 해제의 비용만 작습니다 (GC의 작동 원리를 알면 대답 가능한 부분)
3. 언매니지드 언어의 장점
언매니지드 언어의 장점 결국 예측가능성이라고 봅니다. 언매니지드에서는 정확히 메모리 할당/해제가 일어나는 시점을 프로그래머가 control할 수 있습니다. 매니지드에서는 물가능하고요
한 프레임(update() 함수 한번 호출마다)에 메모리 해제를 1000번씩 하는 프로그램을 작성해봅시다. 그러면 언매니지드 언어에서는 한 프레임마다 정확히 1000번의 메모리 해제가 일어나며 해제에 그만큼의 시간이 들어갑니다. 이게 한 0.01초가 걸린다고 해보죠. 그에 비해 매니지드 언어에서는 사용하지 않는 개체가 매 프레임마다 1000개씩 나옵니다. 하지만 실제 메모리 해제는 안하기 때문에 전혀 시간이 들지 않습니다. 그러다가 갑자기 100번째 프레임에 GC가 작동을 하며 모든 개체를 지운다고 해봅시다. 그러면 못해도 1초(0.01초 x 100 프레임)의 시간이 걸리겠죠. 이게 의미하는 바는 언매니지드 언어에서는 언제나 모든 프레임이 동일하게 작동하며 스무스한 애니메이션을 보여주지만 매니지드 언어에서는 100프레임마다 1초씩 멈칫~ 하는 현상이 나온다는 거죠. (안드로이드 게임을 하다보면 가끔씩 멈칫 하는 프레임이 나오는 이유가 이 때문이기도 합니다)
따라서 매니지드 언어는 실시간 응용프로그램에서는 제약이 있습니다. 이런 걸 해결하는 최적화 기법 등이 여러개 들어왔지만 완벽한 것은 없습니다. 몇가지 키워드를 드리겠습니다.
a) seasonal GC
b) 멀티스레드 에서 도는 GC: 단 이미 응용프로그램이 모든 스레드를 사용하고 있을 경우, 역시 멈칫 현상은 발생할 가능성이 큽니다.
4. 매니지드 언어에서의 누수 문제
매니지드 언어도 메모리 누수가 납니다. 언매니지드 언어하고 다른 방식으로 날 뿐 여전히 있습니다. 언매니지드 언어에서 발생한 메모리 누수는 매니지드 언어에서 발생한 매모리 누수보다 훨씬 찾기가 쉽습니다. (언매니지드 언어이기에 그걸 막기위한 베스트 프랙티스가 존재하고 그걸 따르라고 조언을 하니까요. 즉 패턴이 정형화 되어 있음) 그에 비해 매니지드 언어에서의 메모리 누수는 찾기도 어렵고, 해당 커뮤니티에서 GC의 작동법을 제대로 아는 프로그래머들의 비율도 적어서 '그냥 서버 재부팅하세요', '서버 수를 늘리세요' 등의 답을 내놓으면서 그게 해법이라고 말하죠. 참고로 서버 재부팅이나 서버 수를 늘리는 것은 뭐든간에 회사의 운영비를 높이는 방법입니다. (실제 꽤 규모큰 전자상거래 서버 개발을 한 경험에서 드리는 말씀). 따라서 꼼수지 올바른 해법은 아니죠.
5. VM의 문제점
매니지드 언어는 VM에서 실행될 수 밖에 없습니다. 그리고 그 VM은 특정 운영체제마다 설치하는 프로그램 입니다. (이 프로그램 위에서 내가 작성한 코드를 실행하는 게 전부죠. 잘 이해 안되신다면 게임 에뮬레이터와 비슷한거라 생각해주세요). 일반 데스크탑 OS 용 VM은 큰 문제가 없습니다. 하지만 데스크탑이 아닌 다른 기기 (예: 임베디드, IOT 등)용 VM은 지원 안되는 기능들도 툭하면 있고 GC도 매우 느린 경우도 많습니다. 지원 안되는 기능이 있을 경우 데스크탑에서는 제대로 작동하던 코드가 어떤 기기에서는 작동을 안하며(컴파일은 다 된 코드), GC가 느리면 데스크탑에서는 프레임속도의 0.1%만 걸리던 메모리 해제 속도가 여기서는 200%가 들 수도 있습니다.
6. 기타
위에서 드린 장/단점은 지금 제가 생각나는 현상들을 말씀드린 겁니다. 그러나 시작은 결국 GC가 작동하는 법에서 기반하며 다 필요할때마다 논리적으로 도출해낼수 있는 결론입니다. GC란 결국 C/C++에 있는 기능들로 누군가가 만든 기능이죠(실제 C++에서 작동하는 GC를 구현한 라이브러리도 있습니다.) 그 내부가 어떻게 도는지 아는 사람들은 제가 위에서 말씀드린 부분을 쉽게 생각해낼 거고요. 아닌 사람들은 그게 안 되면 여러가지 방향으로 답을 내놓을 것입니다. 몇 가지 예를 다시 들어드립니다. 어떤 사람들이 정직하게 올바르게 개발자로 살고 있는지는 본인이 스스로 판단해보시면 좋겠습니다.
a) '이건 제가 정말 모르는 분야네요. 더 잘 아는 사람에게 물어보세요'
b) '이런 건 개발자에게 필요 없는 거에요..' (그러나 실제 더 잘하는 다른 개발자가 해결함)
c) '언어는 도구일 뿐입니다. 모든 언어는 똑같아요' (그러면서 굳이 자기가 사용하는 언어만 두둔함)
d) '언매니지드 언어는 과거의 산물이고 죽어가고 있습니다.' (20년 넘게 반복된 말. 하지만 프로그래밍 언어 1위는 현재 C. Tiobe 기준)
@@포프티비 😀
그러고 보니 요즘은 과고에서 C언어 뿐만 아니라 파이썬도 같이 다루기 시작하더군요
거기에다가 아두이노까지 합쳐서 실생활에 활용 할 수 있도록 추진하고 있네요
좋은 영상 감사합니다. 저희 학교에선 C언어로 기초프로그래밍/시스템프로그래밍/네트워크프로그래밍을 배웁니다. 이정도면 따로 공부할 필요없이 학업에만 충실해도 될까요? "unmanaged language를 1년간 충분히 써보라"고 하셨는데 어느 정도 수준을 말하시는지 잘 모르겠어서 질문드립니다.
학교 과제 수준에 따라 다르죠
@@포프티비 스스로도 많이 해봐야겠네요. 답변해주셔서 감사합니다.
언매니지드 언어를 배워야 실력이 빨리 늘어난다.
한 언어를 깊게 파야하는데
적어도 언매니지드 언어 하나는 파봐야한다.
언어를 깊게 판 사람이 다른 언어로 갈아타도 더 잘 탄다.