시스템 과 프로그래밍 기법??

kws4679의 이미지

안녕하세요 아직 많이 미숙한 초보입니다

다름이 아니라 공부 방향과 관련해서 질문드릴께 있는데요

제목이 제가 말하고자 하는바를 다 표현했는지 모르겠지만;

시스템 프로그래밍을 공부하다보면 대게 C 정도수준에서 끝나고 그외에

특별한 기법이 많이 쓰이지는 않는것 같습니다

그런데 반면에 C++ 만 해도 여러가지 기법이 있고 또 이를 응용한 여러가지 방법론??들(STL, refactoring, 디자인 패턴등)

이 있는데요 만일 시스템쪽으로 나간다면 이런쪽은 공부를 안해도 되는건가요??

그리고 어떤 공부를 할때 원리나 근본부터 시작하자는 주의여서 저급 레벨의 프로그래밍을 많이 공부하자는 주의라

basic 보다는 C 그리고 C보다는 어셈블리랑 기타 커널을 공부하자는 생각을 가지고 있는데요

이게 과연 옳은 생각인지 궁금합니다... 사실 제가 가고자 하는 방향과 관련이 있을것 같지만

아직 제가 어떤 길로 가야할지 명확히 모르겠습니다. 심지어 시스템쪽을 할껀지 웹쪽을 할껀지... 저는 그냥 프로그래밍이 좋아서

공부하는 학생이거든요 ^^

rexos33의 이미지

요즘은 시스템 프로그래밍 하나만해서 먹고 살기 힘듭니다.

많은 후배들을 보면서 느낀점은 표준 C++이나 JAVA와 같이 객체지향 언어를 먼저 배우고 저수준 시스템 프로그램 시간 나면 부가적으로 배우는것이 더 좋을 수 있겠다 생각되더군요.

모두들 행복하세요~

kaeri17의 이미지

시스템 프로그래밍은 거의 기본기라고 볼 수 있습니다. 보통 시스템 프로그래밍은 C는 기본이고, 쓰레드, IPC, RPC 그리고 OS API를 포함하는 엄청 광범위한 개념입니다. C++에서 STL, 리팩토링 디자인 패턴 등은 구현을 어떻게 할 것인지에 대한 사항이고요, 시스템프로그래밍을 C++로 한다면 둘다 알아야 하는 겁니다. C나 어셈블리, 커널을 공부한다면 시스템 프로그래밍쪽 공부를 한다는 것 같습니다. 웹쪽을 할거면 근데 앞의 내용은 거의 필요 없게 됩니다. 결국 웹쪽이 아닌 그냥 일반적인 프로그램을 만들고 싶으시다면 다 공부하는 것이 맞습니다.

haze11의 이미지

좋아하는 것 하세요. ^^
그러다 보면 잘하게 됨.

kws4679의 이미지

저는 그냥 메모리 구조가 좋습니다. 본문에도 썼지만... 처음에 메모리를 보아서 그런지 뭐랄까
일렬로 죽 늘어져 있는 데이터에서 체계적으로 위치가 정해져있고 구조가 정해져있다는것이
저말 신기했었습니다. 그것을 계기로 컴퓨터 공부를 시작했고 또 지금도 왠지 저수준으로
공부하고싶다는 생각이 듭니다. 그런데 살다보니 전망이나 비전을 무시할수 없을것 같습니다
그래서 어떤쪽이 좀 비전이 있고 한지도 조언 받고싶습니다... 물론 모두다 자기 하기 나름이지만요

rexos33의 이미지

자신이 "좋아하는 일"과 "잘하는 일" 그리고 "잘 하고픈 일" 중에 최선의 선택이 뭔지 자신만이 알고 또 책임질 수 있지 않을까요?
타인이 이게 좋다 저게 좋다 해줄 수 없는 문제에요...

그리고 추가로... "메모리 구조"가 혹시 커널의 "메모리 관리"를 의미합니까? 아니면 "데이터 구조"를 의미하는 건가요?

모두들 행복하세요~

kws4679의 이미지

맞습니다 사실 제 안에서 답은 어느정도 가지고 있는데..

그리고 메모리 구조에 대해서는 아마도 데이터 구조를 의미한다고 생각합니다

jw8704의 이미지

우선 제가 예전에.. 그런 생각을 갖고 있었다는 표현을 쓰는것에 대해서는 기분 나쁘게 생각하지 않아주셨으면 좋겠습니다..^^;

저또한 예전에 그러한 생각을 갖고있었습니다. 시간이 지나서 지금 그러한 생각에 대해서 말을 해보자면요..

정말 단도진입적으로 "어떤 공부를 시작할때 원리나 근본부터 시작하자는 주의여서.." 혹은 "저수준의 개념 , 프로그래밍이 관심분야여서" 등 이유가 어찌되었든간에 , 그래서 저수준만 공부한다 하면 이건 날로 먹겠다는 겁니다. ㅡㅡ;

저수준이 좋아서, 혹은 저수준을 잘하고싶으면 우선 상위수준도 해야합니다. 윈도우 응용프로그래밍(MFC,WIN32API,SOCKET) 등등 PHP , JAVA , 웹프로그래밍등,, 이런걸 다 좀 잘해야합니다.

사실, 어셈블리어나 기계어는 컴퓨터공학에서 굉장히 기본 뼈대를 이룬다고 해도되기때문에 이런것을 배우면 컴퓨터 상위 계층에서 나타나는 대부분의 현상들을 설명할수있고 그렇기 때문에 공부가 어려워도 도움이되는 공부라고는 할수있으나, 저도 아이러니 하게 생각하는게, 이런걸 할려면 현재 나와있는 컴퓨터 기술들을 같이 병행해서 공부해야합니다. ㅡㅡ; 저도 아이러니 하게 생각하는 점 중 하나 입니다.

굳이 표현을 하자면, 수영장가면요 자유형을 배우는데 처음에 자유영 마스터 하는게 아닙니다. 자유영,배영,평영,접영 배운다음 좀더 고급기술인 자유영,배영,평영,배영을 배우고 또 다시 자유형,배형,평형,접영 이렇게 배우더라구요.

서울도 한지역만 발전하면 다른지역에서 뭐라합니다.

시소도 한쪽만 올라가면 다른쪽이 가라앉아 , 한곳에 구슬을 올려놓으면 가라앉은 쪽으로 굴러내리죠.

전체가 어느정도 평형을 이룬다음에 또 한계단 올라가고 또 한계단 올라가고 하는것 같습니다.

님과 같은 그러한 마음가짐을 , 굳이 컴퓨터공학에만 국한시키지 않고 일반과학으로도 연관시켜본다면 지구상에 존재하는 모든 물질은 분자수준에서 설명이 가능하기 때문에 화학 부분에서 그것 관련된 부분만 공부하면 될것같지만 사실 그런것을 하기위해서는 기본적인 물리지식및 현대에 사용되고있는 양자역학등.. 그러한 많은것을 알때, 가능한것같습니다.

아마,, 님이 가장 먼저 느낄 생각은 어쩌면,, 앞으로 응용프로그래밍을 공부하다가, 특정 작업을 처리하는 부분에서 아 , 이부분을 시스템 프로그래밍을 공부해서 좀더 최적화 시키거나 , 효율적으로 작동시키자.. 가 될수도있겠네요..

아무튼 저수준을 하던 상위를 하던 상위레벨 프로그래밍을 잘할려면 저수준도 할줄알아야하고 저수준도 마찬가지로 상위 잘해야 합니다.

참 아이러니하지만, 저수준을 공부하는 과정에는 반드시 상위 과정에 대한 공부가 이뤄져야한다는게 제 생각의 결론 입니다.

참, 그리고 님이 말씀하시는 메모리구조 라는것은 제가 봤을때 보통사람이 말하는 데이터 구조, 자료구조랑은 다른걸 말씀하시는것같은데요
보통 사람이 말하는 데이터 구조 , 자료구조는 연결리스트,스택,큐,트리 등 프로그래밍 알고리즘에 관련된 그런 자료구조를 말하는것으로
서점가서 자료구조 관련 책보면 나와있는 그런 내용이구요, 님께서 말씀하시는 메모리구조는 물리적 하드웨어인 RAM 을 말씀하시는것같고
거기에 순차적으로 번지가 지정되어있고 거기에 데이터가 저장되고 그러는걸 말씀하시는것같은데요, 사실 이건 아직 굉장히 작은 범위를 보신것같고,
아주다양한 저수준 분야중에 한부분이며 그 메모리분야 자체에도 공부할분야가 다양합니다.
아마 막연히 커널이나 그런곳을 공부하다보면 저걸 관련지어 공부하게될것같다 하시지만, 실제로 메모리 제작은 전자공학 관련에서 하드웨어로 만들어지고
거기에 전기적신호를 줘서 데이터를 저장하는 인터페이스가 만들어져있고 커널에서는 이제, 세월이 지나면서 OS 에서 해야할일들이 다양해지고 복잡해
짐에따라서 그런것을 효율적으로 처리하는알고리즘및 스케쥴링을 다루는 그러한 내용이 주 이슈가 되는것같습니다.
메모리에 데이터가 어떻게 저장되고 꺼내오는지는 아마 예전이나 지금이나 크게 변한게 없을껄요?
그런걸 다루는 알고리즘이 아마 많이 변했을것같네요.

아, 그리고 제가 저수준 분야를 공부하고싶으시단 거에대해서 이렇게 규격화 해서 말씀드리는이유는,, 저도 예전에 저수준공부하고싶을때 다른사람들이 이렇게 규격화해서 저수준에는 어떤분야가있고 어떤분야가있고 이렇다 이렇게 얘기하면..나는 그냥 프로그래밍이 좋구 저수준분야를 공부하고싶은건데 ㅠ
하고 생각했던적이있는데요,, 하다보니 막연한 저수준 분야라는건 없는것같더라구요.. 아니면 다른분야및 저수준 분야를 다 공부한뒤에 총체적으로
저수준분야에 대해서 공부하던가.. 그렇더라구요.. 그래서 이렇게 규격화? 해서 말씀드렸습니다.

안녕히계세요.

tj의 이미지

네, 그냥 c랑 어셈만 겁나 잘 해도 잘 먹고 살아요. 재밌어야 오래할 수 있으니까 재밌는 거 열심히 파는게 최선 아닐까요?

gurugio의 이미지

2001년에 어셈블리 스터디를 시작으로
C와 어셈블리로 하드웨어 펌웨어부터 시스템 프로그래밍을 공부하고
졸업후 4년간 C로 시스템 레벨만 개발해왔습니다.
아마 저와 비슷한 생각을 가지고 계신것 같습니다.

그래서 말씀드리는건데 절대로 저레벨 프로그래밍만 하시면 안됩니다.
그러다보면 코드나 생각이 일정하게 굳어져버릴 수 있습니다.
파이썬이나 php, 자바 등등 다양하게 공부하시기 바랍니다.
요즘 유행하는 것들은 다 해보시는걸 추천합니다.

아직 학생이시라면 두루두루 요즘 유행하는 객체지향이나 패턴,
함수형 스크립트 웹 등등 다 경험해보시길 권해드립니다.
저는 한살이라도 어리고 머리가 잘 돌아갈때 여러가지를 해보는게 얼마나 중요한지 요즘 알아갑니다.

특히 너무 저레벨만 공부하시다보면 일할 곳이 별로 없을 수도 있습니다.
프로그래밍을 주력으로 한다기보다는
DB나 컴파일러등 이론적인 배경이 중심이되야 합니다.
그 다음에 프로그래밍 실력이 있어야한다고 생각합니다.
특히 국내는 운영체제관련 회사가 전무하므로
굳이 커널이나 운영체제 이론을 깊게 보시기보다는 책 한두권 통독한다는 생각으로 공부하시는걸 추천합니다.

그리고 졸업때쯤이나 졸업후 주력 분야 (DB,컴파일러,알고리즘 등등)를 잡고
커리어를 만들어나가길 권합니다.

그냥 제가 학생일때 생각과 비슷한 생각을 가지신것 같아서
좀 걱정되서 길게 씁니다.
열심히 하시면 길이 있겠지요.
하지만 절대 편협하게 공부하지 마시고 넓게 공부하시고 그중에서 주력을 찾으세요.
절대로 국내 현실을 같이 고려하셔서 적당히 먹고살 수 있도록 하는 것도 중요합니다.
현실을 잘 알고 거기에 맞추는 것도 정말 중요합니다. 제가 그렇게 못한게 많이 후회되서.. :'-(