로우 레벨 언어를 배워야 하는 이유

gurugio의 이미지


요즘 임베디드 C라는 강의가 재직자를 대상으로 생기는것 같습니다.
왜 임베디드 C인가 하는 생각이 들어서
강좌에 대한 소개를 들었더니 임베디드 시장이나 로우레벨 프로그래밍에 대한
테크 트리와 연관이 있는것 같습니다.

step 1. 어셈블리 학습 -> HW 동작 원리 이해 : 프로세서 구조, 메모리 동작 방식, 컴퓨터 아키텍처 이해

어셈블리를 배우면서 자연스럽게 하드웨어가 실제로 어떻게 동작하는지
직접 제어해보면서 이해할 수 있고 컴퓨터 아키텍처에 대해
자엽스럽게 체득할 수 있습니다.
PC던 임베디드 환경이던 결국 사용하는 칩은 비슷하고 폰노이만 방식이기 때문에
핵심 줄기는 비슷하고 어셈블리를 배우는 것이 곧 하드웨어 기본을 이해하는 것이지요.

step 2. C 언어 이해 -> 운영체제 동작 이해: 라이브러리 동작, 메모리멥, 링커/로더, 프로세스 동작 이해

C언어 코딩이 아니라 C 언어로 만든 프로그램이 어떻게 컴파일되고 링크되고
어느 주소에서 실행되는지 ELF 포맷이 어떻게 왜 이렇게 구성되는지 등등
라이브러리를 뭘 쓰고 운영체제의 역할은 뭐고~~~ 이렇게 배경 지식이 확장되면
결국 운영체제로 귀결되는것 같습니다.

step 3. C <-> 어셈블리 -> 컴파일러 이해

EABI가 뭔지 스택 동작, 최적화, 리버싱, 디버깅 등등 컴파일러 제품 군의 역할과 원리를 알게 됩니다.

step 4. 커널/드라이버
step 5. ???

뭐 그냥 이런 방향성과 의미를 이해하면서 공부를 해야 좋지 않을까 생각해봤습니다.
늘 공부를 할 때마다 어떤 주제에 대해서 배경 지식이나 원리를 찾아서 조사하면서 공부를 하면
책 한권을 보더라도 참고 자료가 몇배 더 커지지요.
요즘 이렇게 적극적인 공부를 하는 학생들이 없다고 어떤 교수님이 한탄을 하시던데...

댓글

bookgekgom의 이미지

프로그램을 짜기도 바쁜데 저급언어 까지 배우라니이ㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣㅣ

---------------------------------------------------------------------------------------------------------------
루비 온 레일즈로 만들고 있는 홈페이지 입니다.

http://jihwankim.co.nr

여러 프로그램 소스들이 있습니다.

필요하신분은 받아가세요.

SangWook의 이미지

완벽한듯 추상화된 고급언어들과 누군가가 만든 프레임워크들을 "사용"할 줄만 아는 사람들이 많더군요. 대학에서 만큼은 로우레벨을 갈고 닦아야 한다고 생각하는데, 요즘 후배들의 커리큘럼을 보니 컴퓨터구조나 어셈블리같은 과목들이 외면되는 것 같아 걱정입니다.

-상욱

-상욱

gamdora의 이미지

저도 저수준과 고수준을 넘나드는 사람이 되고 싶어요.

그런데 쉽지 않군요.

select99의 이미지

옳은말씀입니다.

어찌 기초없이 기둥이 세워지고 건물이 올라갈까요..

튼튼하지 못한기초위에 선 건물은 오래가지 못하죠..

bookgekgom의 이미지

튼튼한 기둥이 있어야 집이 튼튼하죠.

그러니까 저는 설계를 할테니

코딩하시는 분들이 로우 레벨쪽을 좀더 튼튼하게

삽질해 주셨으면 합니다. 하하하하

---------------------------------------------------------------------------------------------------------------
루비 온 레일즈로 만들고 있는 홈페이지 입니다.

http://jihwankim.co.nr

여러 프로그램 소스들이 있습니다.

필요하신분은 받아가세요.

kyiimn의 이미지

저희 학교도... 제가 학교다닐때까지만해도...
로우레벨(?)한 수업은 거의 없어서...(XML, ASP.NET 같은 수업만 있었음...)
컴파일러론, 어셈블리 같은건 독학으로 때웠어야 했는데...
최근들어 그런 과목들이 부활하는거 같더군요,..

로우레벨(?)에 관한 지식없이 일반적인 프로그래밍이나 프레임워크 등만 익힌다면...
비트학원같은곳을 3~4개월 다니고 프로그래머 명함을 들이미는 비전공인들과 다를바가 없다고 봅니다.

drinkme의 이미지

님의 의견에 동감합니다.

최근에.. 한편으로는 그런 생각도 듭니다.
(아, 저는 모바일시스템소프트웨어 엔지니어입니다.)

최근에 나오는 고급 개발환경, 우수한 프레임워크... 이런것들이
개발자를 반맹인으로 만드냐 하는 관점이 아니라,
자잘한 코딩(?)에 신경쓰지 말고(코딩이 자잘하다는 뜻이 아닙니다),
한편으로는 design에 나머지 여력을 쏟아야 하는 시대가 되지 않았나 생각이 듭니다.

불과 15년전쯤만 해도,
자그마한 업무용 프로그램 하나 만들려면, 윤년계산함수부터 만들기 시작했어야 했었습니다.
배열과 링크드 리스트를 마구 쓰면서, 보람을 느꼇던 사람도 많았습니다.
지금은 (일부 분야는) 그런거를 신경쓰고 있을 시대는 조금 지나지 않았나 생각됩니다.
가령, STL에 있는 거 쓴다거나... 하면 되겠죠?

문제는
이게 low냐 high냐가 아니라,
양족 어느쪽도 제대로 이해 못하면서, 아직도 언어문법에 치중한다거나
10년전 책을 보면서 개발하시는 분들이 있다는 거 같습니다.

그냥 제 생각입니다.
딴지 말아 주세요.

bookgekgom의 이미지

이거슨 진리.

---------------------------------------------------------------------------------------------------------------
루비 온 레일즈로 만들고 있는 홈페이지 입니다.

http://jihwankim.co.nr

여러 프로그램 소스들이 있습니다.

필요하신분은 받아가세요.

tomahawk28의 이미지

공감합니다. 학교에서 로우레벨을 자세하게 가르쳐 주길바라는 것 보다 자기가 찾아서 하는게 옳은거겠지요.
하지만 요즘 대학교 프로그래밍 실습은 .. 그런게 없습니다.
처음시작 부터 종강때까지 for dummies 시리즈인 것 같은 느낌도 들고요..

음.. 커널강좌 업데이트.. 기다리고 있습니다. ㅎㅎ


Do you hear the people sing?

gurugio의 이미지


짬짬히 쓰고 있습니다. 아마 전체를 다 쓰려면 두세달 걸릴것 같습니다.
혼자서 하려다보니 역시 오래 걸릴것 같습니다.

가장 큰 문제는 이게 과연 누군가 읽을 만한 가치가 있는 작업인가하는 회의가 들어서요
쓰다보니 역시 짜집기 문서인데 하는 생각이 듭니다.

----
섬기며 사랑하면 더 행복해집니다.
개인 홈페이지가 생겼습니다 http://caoskernel.org
어셈러브를 개편중입니다 http://www.asmlove.co.kr

rgbi3307의 이미지

모든 분야가 그렇듯이
컴퓨터,IT쪽도 기초와 기본원리에 충실해야 한다고 봅니다.

1. 수학
2. 물리화학
3. 논리회로
4. 마이크로프로세서
5. 어셈블리,기계어
6. C언어
7. 개발도구들(SDK)
8. 응용프로그램
9. 상업화,사회공헌

그동안 우리나라는 8번,9번에만 매달리다 보니 IT소비강국이 되었습니다.
세계에 자랑할만하죠~ 쯥.
그런데, 기업은 이윤창출이 주목적이기 때문에 1번~7번 교육은 하지 않습니다.
바로 8번으로 개발자들을 내몰고 있죠.
그럼, 1번~7번을 대학교육에서 해주어야 한다고 봅니다.
선진국은 이러한 체계가 잘 갖추어져 있죠.
우리나라 학생들은 고등학교때 입시교육에 매달리다, 대학오면 확~ 풀어짐니다.
(저 또한 그랬고요...)
대학공부에 충실하여 기초를 튼튼히 하면, 창조적인 일을 할 수 있다 봅니다.

From:
*알지비 (메신저: rgbi3307@nate.com)
*학창시절 마이크로마우스를 만들었고, 10년동안 IT관련 개발자로 일하고 있음.
*틈틈히 커널연구회(http://www.kernel.kr/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))

From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))

나는오리의 이미지

하지만 회사에서는 1~7을 배우고 입사한 애들을보고
"왜 학교는 당장 써먹을 수 있는걸 안가르치고 구닥다리만 교육시키는지 모르겠다."고 말하지요.

breadncup의 이미지

수학/물리학/화학의 기초가 정말 튼튼하게 있어야 한다고 생각합니다.

그리고, 덧붙여서 좀 더 0순위를 주고 싶은 것이 있다면,

철학(종교)->수학->물리학/화학->...

~~~ Signature from here

  1. http://kblog.breadncup.com/about/
  2. http://kblog.breadncup.com/
~~~ Signature to here
owlet의 이미지

주제에서 좀 벗어난 딴지입니다만 모두가 폰노이만 아키텍쳐는 아닙니다. 리눅스나 CE가 올라가는 환경으로 제한해서 얘기하는게 아니라면 8051같은 프로세서가 하버드 아키텍쳐를 사용하고 있구요 최신 CPU들에서 i-cache, d-cache를 구분하는 형태역시 하버드 아키텍쳐에서 차용되었다고 볼수있겠네요.

gurugio의 이미지


아..죄송합니다.
저는 하바드 아키텍처가 폰 노이만 구조를 보완한 방식이라고 알고있었습니다.
다르다고 표현해야 정확한거군요.

----
섬기며 사랑하면 더 행복해집니다.
개인 홈페이지가 생겼습니다 http://caoskernel.org
어셈러브를 개편중입니다 http://www.asmlove.co.kr

kite7의 이미지

avr 도 하버드였던거로.. 기억합니다.

요즘 PC 씨피유들은..
CISC 껍때기에 RISC 를 쓰지 않나.
하버드아키텍처 개념도 가지고 있고

정말 씨피유를 개발할때 왠만한 방법들은 다 써진 상태라서
1% 성능 증가 내지 0.5% 성능 증가를 위해 무진 애를 쓰고 그러한 것들 여러개가 모여서
겨우겨우 10% 성능 증가를 이뤄낸다고 하던데.

여러 컨셉이 몽창 들어가 있는거 같네요. 비빔밥..?

Fe.head의 이미지

제가 대학 입학당시에는 기초에 많은 투자를하던데..

두번째 입학할때는(자퇴후 다른곳에 입학) 초기에는 그나마 하던데..
점점 사라지더군요.

졸업후에는 기초과목을 아예 없애버렸더군요.

마지막으로 방통대에 편입해서 2년간 다녀봤는데
오히려 방통대가 기초 수업을 충실히 하더군요.

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.