들어가는 말

 

회사 업무를 끝내고 쉬고 있을 때, 친구에게서 연락이 왔다. 이번에 어셈블리 강의가 나왔는데 같이 듣지 않겠냐고 말이다. C언어 강의나, 개체지향 강의는 “당연하지”라는 말과 함께 수강신청을 했지만, 어셈블리어는 선뜻 수강신청을 하기 어려웠다. 지금도 배워야 할 게 너무나 많고, 공부하는 게 힘들고 귀찮은데, 어셈블리어까지 배우라고? 나는 그럼 언제 쉬지?

쉬는시간을 달라!!!!!!

어셈블리 공부하면 너무 느려서 비추한다는데.. 굳이 공부해야 할까? 코드 한 줄 짜는데 이렇게 오래 걸린다고? 

 

이런 무서운 개발자 되기 싫어..

 

그렇기에 저는 이 과목을 듣기전에 저에게 질문을 던졌습니다.

  • 어셈블리가 나에게 도움이 되는 것일까? 내가 회사에서 개발하는 앱 특성상, 어셈블리를 배운다고 해서 사용할 일이 너무 적기 때문에 과연 활용할 일이 있는 것일까? 만약 배운다면, 어셈블리의 개념이 도움이 될까?
  • 저수준은 c언어까지만 알면 되는거 아닐까? c언어가 저수준 언어라고 생각한 이유는, 포인터를 직접 다룰 수 있고, 이를 통해서 프로그래머가 C#이나 JAVA에서 할 수 없는 메모리 직접접근 등을 할 수 있어서 저수준 언어이니, c언어를 배우는 것까지가 저수준이지 않을까?

 

어셈블리를 왜 배워야 할까?

교육적인 이유

어셈블리어를 배워야 하는 이유를 설명해주시는 동영상

어셈블리를 많이 사용할 일은 없을 수 있지만, 그럼에도 컴퓨터 내부를 이해하는데 중요하기 때문에 배워둔다면 좋을 것이다라고 말씀해 주신다. 

 

https://www.udemy.com/course/assembly-programming-by-pocu/

포프 님도 이렇게 설명해 주시는데 배워두면 좋지 않을까? 

 

https://www.udemy.com/course/assembly-programming-by-pocu/
https://www.udemy.com/course/assembly-programming-by-pocu/

오오 어셈블리어가 기계어와 1:1로 대응된다니 배우면 재미있긴 할 것 같다!!라는 생각이 들었습니다.

 

 

 

어셈블리어를 배워야 하는 다른 이유들

chat - gpt의 의견은 무엇일까? 

일단 님이 배우시는거 긍정적 입니다

나를 이해하고 싶으면 휴먼 이해해봐라 라는 식의 chat-gpt의 의견은 아주 잘 들었습니다. 

 

그렇다면 MIT 교수님의 의견은?

들으면 버그 잡고, 리버스 엔지니어링 할 수 있음!

나름 설득도 되는 의견이었습니다. 

 

 

실제 사용할 수 있을만한 곳은?

하지만 실제로 자바 개발자인 저는 어디에 사용할 수 있을까 고민을 해보았고, 포프 님이 말씀해 주신 부분에서 조금 더 관심을 가질 수 있었습니다. 

https://www.udemy.com/course/assembly-programming-by-pocu/

실제로 자바 바이트코드를 보는데 도움이 될수 있을 거라고 생각했고, WASM 또한 금방 이해하면 나중에 경쟁력이 될 것이라고 생각했습니다. 요즘 WASM도 요즘 잘 나간다는데.. 나중에 웹 프로그래머 해도 어셈블리어는 좀 배워두면 괜찮을 것 같기도 한데?

WASM - 나무위키

 

목차

포큐 어셈블리 강의를 소개하는 란에 파트 3개를 구분해 두셔서. 저 또한 3개의 파트를 각각 나누어 말씀드리고자 합니다.

- 파트 1 강의와 느낀 점

- 파트 2 강의와 느낀 점

- 파트 3 강의와 느낀 점

- 개인적으로 느낀 점

- 후기

 

어셈블리 강의 파트 1

'Part 1: 8 비트 어셈블리 프로그래밍'에서는 MOS 6502 CPU를 사용해 기초적인 8 비트 컴퓨터를 제작하고, 그 컴퓨터에서 동작하는 기계어 및 어셈블리어 코드를 작성합니다. 이 부분에서는 CPU의 구조와 동작원리를 이해하고, 어셈블리어를 활용해 하드웨어를 직접 제어하는 제어기기 프로그래밍 패턴을 배울 수 있습니다.

파트원에서 가장 흥미로우면서 재미있었던 부분이 다음 3가지입니다.

  1. 컴퓨터 구조 및 CPU 동작법
  2. 산술 논리 연산 기초
  3. CMP (비교연산 니모닉)

 

컴퓨터 구조

갑자기 컴퓨터를 만들어야 한다는 실습, 과제는 정말 혼란스러웠습니다. 사실 어셈블리를 공부하는 것과 컴퓨터를 만드는 것이 무슨 상관관계가 있는지 궁금했습니다. 컴퓨터를 만들고 여기에서 무엇을 배울 수 있을지 궁금했으니까요.

 

그래도 저는 착한 학생이니, 준비물을 준비하고, 만들어 보겠습니다.

공구로 같이 구매했던 8비트 컴퓨터 부품,보이는건 빵보드와, 전선, 스파이더, 램, cpu등등..

강의로 돌아오면 준비물을 하나씩 말씀해 주시면서 컴퓨터를 만들 수 있도록 도와주십니다.

CPU에서 롬과 램에서 어떤 식으로 데이터를 가져오는지 또한 잘 몰랐는데, 강의를 들으면서 예전 컴퓨터에서는 이런 식으로 연결했었구나라는 것을 알게 되었습니다. 

cpu가 직접 ram에 연결되었을 때 어떤 식으로 신호가 갈지 알려주십니다. rom과 ram을 설치해 보면서 여러 장치들을 같이 연결할 때 고려할 것들이 많겠구나라는 것을 알게 되었습니다.

 

이해하기 어려웠던 부분 중 하나입니다. 이 슬라이드에서는, 실제로 cpu가 동작할 때 ram과 rom에서 어떤 식으로 값을 가져올지 전기적 신호 발생을 통해서 어떤 타이밍에 통신이 되어야 할지 알려주십니다.

 

실제로 만들어본 빵보드 (지운님이 만드신 8bit 컴퓨터) 너무 깔끔하게 잘 만들어서 사진을 가져왔습니다.
포큐에서 제공한 POBS를 통해 만든 8비트 컴퓨터

하드웨어를 만져보면서, 컴퓨터가 정말 전기적 신호로 이루어져 있고, 이 전기 신호를 잘 이해하고, 프로그래밍 환경을 만들어주신 많은 하드웨어, 소프트웨어 개발자들에게 존경심이 들었습니다.

 

그리고, 직접 만들어 보면서, 어떻게 장치들을 연결을 해야 하고, CPU에서는 어떤 곳에 전기적 신호를 보내야 하는지 하나씩 알아가면서 나중에 임베디드 시스템을 구성할 때도, 뭐든 만들 수 있겠다는 자신감을 가지게 되었습니다.

 

 

CPU가 동작하는 방법

이후 실제 CPU에서는 어떤 식으로 동작하는지 nemonic들을 통해 8086 CPU동작을 가르쳐 주십니다. 

 

간단하게 CPU파이프라인을 설명해 주시면서 이를 통해서 명령어들이 어떤 식으로 들어가는지 사이클이 어떻게 되는지 하나씩 알려주시고, 이를 공부해 나가면서 어떤 니모닉들이 비싼 연산인지 어떤 게 저렴한 연산인지 알 수 있는 좋은 기회가 되었습니다.  이를 통해서 실습중에 누가 더 싸이클수가 적은지 서로의 코드를 비교하는것도 재미있는 일중 하나였습니다 

 

간단하게 CPU 동작에 대해서 추가 영상을 보고 싶으시다면 이 영상을 추천드립니다 

 

 

산술 논리 연산

논리연산을 하는 게 컴퓨터 내부에서는 어떻게 될지 COMP1000에서 가볍게 본 적이 있습니다. 2의 보수를 취하고 덧셈을 하는 방법 등을요. 하지만, 실제 CPU에서는 내부 동작을 어떻게 하는지 가르쳐주시고, 이를 배우니 포프 님이 말씀하신

 

컴퓨터는 덧셈을 하는 장치 

라는 말씀을 깊이 이해할 수 있었습니다. 결국 덧셈, 뺼셈, 곱셈, 나눗셈 모두 동일한 원리로 돌아가는 것이라고 할 수 있으니까요. 

 

캐리비트를 통해서 뺼셈을 구현하는 아주 멋진 예를 보여주십니다.

캐리비트를 너무나 멋지게 사용할 수 있는 방법이었고, 이를 통해서 뺄셈 또한 2의 보수를 취해서 캐리비트를 똑똑하게 사용하는 방법을 구현한 것에 참으로 감탄을 자아낼 수밖에 없었습니다. 

 

 

CMP (비교연산 니모닉)

IF문을 열심히 쓰지만, 항상 내부에서는 어떻게 동작하는지 알 수 없었는데, 

 

if (a == m)

과 같은 조건문이 단순히 두 개의 숫자를 빼는 연산이라는 것에 충격을 받았습니다. 비교연산이 컴퓨터 안에서는 뺄셈 이라니.. 추상화가 높은 프로그램만 알았다면 절대 알 수 없었겠지만, 조건문이 내부적으로는 이렇게 동작하는 것을 알게 되었고, 이 부분을 배우면서 결국 컴퓨터는 0과 1로 계산하는 도구이구나, 이걸 추상화시켜서 사용하고 있었다는 사실을 다시금 깨닫는 순간이었습니다.

 

뺄셈 결과를 통해 조건문을 실행

실제 뺄셈 결과는 저장되지 않지만, 플래그 값들이 변경되고, 이 플래그 값을 통해서 분기문을 처리하게 됩니다. 

 

 

파트 2 x86 어셈블리

'Part 2: 16 비트 어셈블리 프로그래밍'에서는 현재 데스크톱 CPU 점유율 1위인 x86 계열 CPU의 시초인 Intel 8086/8088 CPU에서 x86-16 어셈블리어 코드를 작성합니다. 이 부분에서는 많은 프로그램에 공통적인 연산(예: 콘솔 출력)을 운영체제의 도움을 받아 처리하는 법을 배우며, 이는 시스템 프로그래밍 패턴을 익히는 좋은 계기가 될 것입니다.

 

파트 2에서 흥미로웠던 부분은

 

실제 x86에서 코딩하는 부분이었습니다. 

 

x86어셈블리는 DOS 환경에서 작업하게 되었습니다. 어셈블리어 작성을 통해. com파일이나. exe파일을 만들어 dos에서 프로그램을 실행시켜 보면서 운영체제 역할과, 메모리 세그멘테이션 등 컴퓨터 프로그래밍이 변해온 역사를 느끼면서 코딩을 하게 됩니다.

또한 x86 어셈블리로 코딩하는 실습이나 과제는 처음 겪어보는 것들이어서 처음부터 많은 어려움을 겪었고, 이를 해결하기 위해서 한 줄씩 코딩을 해보고 테스트를 하는 저만의 디버깅 방법을 사용하게 되었습니다.

 

맥북에서 dosbox-x를 환경설정 해주는 부분이 어려웠습니다..

 

다음 소개하는 실습과 과제는 감명 깊게 배웠던 실습과 과제입니다. 

 

실습 9 중에서

메모리에 저장되어 있는 float형태의 숫자들을 읽은 뒤 평균을 내고, 이를 소수점 3자리까지만 출력하는 예제였는데 굉장히 어려웠습니다. 실수형태의 데이터를 읽는 방법부터, 이를 어떻게 평균으로 나눌 것인지에 대한 부분들, 그리고 사용자에게 정제된 문자로 숫자를 보여주는 게 얼마나 어려운지 알 수 있었습니다.

msr파일에 있는 float들을 읽어야 하는 부분
값들을 읽고 평균을 사용자에게 표시해줘야 하는 부분

코딩을 조금 해보신 분이라면, printf() 함수로 쉽게 할 수 있기에, 에이 이정도 가지고 뭘 그렇게 호들갑을 떠나 하실수도 있지만, 꽤나 고민을 해봐야 하고, 실제로 printf가 어떤 식으로 작동하는지 알 수 있었던 아주 중요한 실습이었습니다. 

 

 

과제 3 중에서

정말 어려웠던 과제 3 int3 인터럽트 대신 커스텀 인터럽트를 만드는 과제였는데요.

 

interrupt vector 테이블을 어떻게 접근할지, 파일은 어떻게 열고 닫을지, 그리고 기존에 있는 벡터 테이블을 어떻게 유지할지, 메모리 세그멘테이션 위치 변경 등.. 생각해 볼 만한 주제들이 많았던 과제입니다.

 

이 과제를 하면서 dos-api가 어떤 식으로 구성되어 있는지 문서들을 계속 찾아보고 이를 하나씩 사용해 보면서 과제를 진행하였는데, 문서만으로는 정보가 충분하지 않아 많은 삽질을 거듭하여 하나씩 문제를 해결해 나가야만 했습니다. 문서를 직접 찾고 응용해야 하는 부분이 정말 어려웠지만, 그래도 점차 문서를 보고 이해하고, 프로그램의 기능들을 하나씩 구현했기 때문에 애증이 담긴 과제라고 할 수 있습니다.

이 과제는 특히, 다른 분들의 슬랙 의견을 나누는 과정이 없었다면 진행하기 어려웠었습니다.

포프님이 말씀해주신 어려운 과제 ...
168개의 댓글이 달린 쓰레드.. 이런걸 본적이 처음이에요.

과제를 진행하면서 아래와 같은 DOS관련된 문서를 찾아가며 읽어야 하는 게 정말 힘들었고, 읽었다고 해도 과제에 적용시키는 부분은 또 디버깅을 해보며 봐야 했기에 힘들었습니다.

https://en.wikipedia.org/wiki/DOS_API

 

파트 3 인라인 어셈블리 & SIMD 프로그래밍

'Part 3: 32/64비트 인라인 어셈블리 프로그래밍'에서는 고수준 언어인 C에서 성능에 중요한 일부 코드만 어셈블리어로 작성하는 인라인 어셈블리 프로그래밍 패턴에 대해 배워봅니다. 또한 한 번의 명령으로 다수의 데이터를 한 번에 처리하는 SIMD(Single Instruction Multiple Data)에 대한 지식도 함께 습득하게 됩니다.

정말 재미있었던 인라인 어셈블리와, SIMD 프로그래밍입니다.

여기서부터는 다행히 비주얼 스튜디오를 쓸 수 있었고, 이는 구세주중에 하나였습니다. IDE가 이렇게 좋은 툴이라는 것에 감사함을 느꼈습니다.

 

지운님이 올리신 짤

 

실습 11과 과제 4 중

visual studio를 이용하면서 실제로 코드가 어떻게 어떻게 어셈블리어로 바뀌는지 볼 수 있는 실습이 있었고, 인라인을 통해서 코드를 짜보면서, 어셈블러들이 어떤 식으로 동작하는지 볼 수 있었습니다. 특히 함수를 만들 때마다 스택을 만들어 주는 부분이 인상 깊었고, 여러 가지 규약들 cdecl, fastcall, thiscall 등등을 알 수 있는 귀중한 시간이었습니다.

 

실제 인라인 어셈블리로 작성한 함수
디버거 툴로 보여주는 어셈블리어

위처럼 함수를 어셈블리어로 파악하면서 인라인 어셈블러를 쓰다 보니, 어셈블리어를 작성하더라도 인라인으로 많이 활용하겠구나라는 것을 알게 되었고, 많이 익숙한 C언어 사용도 정말 행복한 순간이었습니다.

 

SIMD를 통해서 할 수 있는 멋진 과제!

실제로 그래픽스 작업을 하게 될 때, 공간변환에 들어가는 행렬 연산을 더욱 빠르게 할 수 있도록 SIMD프로그래밍을 하게 되고, 이를 통해서 위와 같이 도형의 좌표를 구해 움직일 수 있는 로직을 만들어 볼 수 있는 귀중한 경험을 할 수 있었습니다.

 

그리고 포프 님이 강의에서 말씀해 주셨듯, 머신러닝 또한 SIMD프로그래밍을 사용한다고 하시니, SIMD프로그래밍을 열심히 배우다 보면, 언젠가 AI도 만들 수 있지 않을까 라는 생각이 들었습니다. 

 

꽃미남 프로그래머이신 포프님을 여자로 바꿔준 AI.. 이게 미래?..

베타 버전에서의 아쉬웠던 점

베타버전이어서 그런지 빌드봇의 동작을 예측하고 공유하는 일들이 종종 있었습니다. 빌드봇을 설계하실 때 많은 예외케이스를 두셨겠지만, 학생들이 빌드봇을 통해 채점해 보고 만들어본 코드들 중 막아야 하는 케이스들이 빌드봇에서 돌아가는 것들이 있었고, 약간의 추측을 통해 빌드봇의 감점 사유등을 공유하곤 했습니다. 

빌드봇 오류 메세지 길이로 점수 향상?

힘들었던 부분

실제로 힘들었던 부분은 기말고사였습니다. x86 어셈블리어 프로그래밍부터 시작된 MMX, AVX SIMD 프로그래밍까지의 엄청나게 많은 개념들과 니모닉들이 공부를 하기 힘들게 만들었습니다. 과연 어디에서 문제가 나올지 계속 의심하고 고민하고, 공부를 미루게 되는 나쁜 습관이 나오게 되었습니다. 

 

덧셈 명령어만 x86-16, mmx, sse, avx....

 

이 과목을 들으시는 분들은, 중간고사와 기말고사를 위해서, 배운 것을 하나씩 천천히 정리하고, 포큐에서 제공해 준 연습문제 및 다른 분들이 만들어주신 연습문제 또한 연습해 본다면, 시험에서 좋은 성적을 거둘 수 있으리라 믿습니다.

소년D 님이 만들어주신 연습문제.

이 과목을 들을때 주의할점

이 과목을 들을때는 꼭 풀코스로 듣기를 추천드립니다. 강좌만들으면 어셈블리어를 다 알겠지 라고 생각할 수도 있지만, 강좌만을 듣게 된다면 강의에서 수강하는 내용의 10%정도도 자신의 지식으로 습득하지 못할 가능성이 다분합니다. 그렇기에 꼭 풀코스로 들으면서 실습과 과제를 체험해 보시기를 당부하며, 금액이 비싸다면 3개월간 30만원씩 낸다고 생각하고 꼭 들어보시기 바랍니다. 

 

깨달은 점

처음에 스스로에게 했던 질문들.. 이걸 굳이 배워야 할까 와 같은 의문들이 이 과목을 들으면서 다 풀리게 되었습니다. 마치 네오가 빨간약을 먹고 나서 진실을 보게 되듯이. 어셈블러 언어를 통해서 코딩을 해보게 되니 왜 메모리에 데이터가 어떤 식으로 들어가고, 스택이 어떤 식으로 구현되는지, 조건문은 어떻게 동작하는지, 함수는 어떤식으로 작동하는지 등등 아주 많은 것을 배우게 되었습니다.

 

물론, 초록색 약을 먹고 현실에 안주하는 것도, 어쩌면 그것 또한 살아가는데 문제는 없을 것입니다. 하지만, 진실을 마주할 용기가 없었을 뿐. 컴퓨터가 어떻게 돌아가는지 진실을 마주하니, 개발자로서 코딩을 어떻게 대해야 할지, 새로운 개발 신기술이 나온다고 하더라도 결국엔 지금까지 했던 것들을 조금씩 더 효율적으로 바꾸고, 개선해 나간 것임을 알게 되었습니다. 또한, 고수준 언어로 작성하던 모든 것들이 실제 컴퓨터에서는 어떤 식으로 동작할지 조금씩 이해하게 되니, 고수준언어가 프로그래머를 위해 얼마나 많은 부분을 케어해주고 있었는지 알 수 있는 좋은 시간이 되었습니다.

 

그리고 정말 중요한, 새로운 기술을 배울 때는 역사를 따라가면서 어떤 식으로 바뀌었는지 알아가는 것이 새로운 기술을 빠르게 습득하는데 도움이 되는 것을 알게 되었고, 또한 문서를 보면서 개발할 수 있는 능력을 키운 것이 가장 주요한 배움이 되었습니다.

 

 

프로그래밍 전문가가 될 수 있을까?

최근, 친한 개발자분과 대화할 수 있는 기회가 있었습니다. 이분과 대화화다 보면, 하나의 플랫폼에서 오래 개발한다고 해서 전문가가 되는 것은 아님을 느끼게 되었고, 살아남기 위해서 정말 많은 노력을 기울이고 계시는 것을 보고 알 수 있었습니다. 

저 또한, 하나의 플랫폼에 종속된 개발자로서, 단순히 이곳에 저의 모든 것을 바치기보다는 기술자로서 대우받으면서 살고 싶다는 생각이 아주 컸습니다. 하지만, 신기술은 매년 나오고, 이걸 적용하는 것에 지쳐가는 저에게 어셈블리어는 정말 한줄기의 빛과 같았습니다. 

 

코어가 잡히면 잔기술은 금방 배울 수 있다

라고 말씀해 주시는 포프 님의 영상에서 어셈블리 과목은 저에게 큰 울림을 주는 강의였기 때문이었습니다.

 

그리고 포프 님의 철학이 담긴 강의임을 알 수 있었습니다. 

훌륭한 개발자 (전문가)는 하드웨어 수준부터 이해하고 사용할 수 있는 사람

어쩌면 저는 지금껏 프로그래밍을 잘못 이해하고 배워왔을지도 모르겠습니다. 진짜 전문가가 되기 위해서 하드웨어 또한 잘 알아야 한다는 것을 말입니다.

 

마지막으로 - 생선뼈 같은 강의

https://health.chosun.com/site/data/html_dir/2020/06/09/2020060901783.html

예전에 법학 수업을 들을 때 선생님께서 해주시던 말씀이 생각이 납니다.

지식을 쌓을 때는 기본이 되는 뼈대를 세우고 이위에 다른 지식들을 뻗어 나가 그려야 한다면서, 항상 생선뼈를 그려 공부법을 설명해 주셨습니다. 그리고 이 (어셈블리) 강의는 정말 생선뼈 같은 강의입니다. 말 그대로 어셈블리어로 코딩하고 디버깅하는 것은, 지금껏 배운 코딩의 근간이 되는 지식들이고, 이를 받아들임으로써 모든 언어들이 어떤 식으로 동작할지 아주 구체적으로 알 수 있게 근간을 만들어 주었기 때문입니다. 고수준 언어들이 다른 식으로 동작하는 것이 아닌 결국 어셈블리어로 치환되는 과정을 거치는 것을 이해하고 받아들이게 되면, 모든 것은 하나의 뿌리에서 나왔다는 것을 깨닫게 되는 것처럼 말입니다.

 

이 강의는 제가 프로그래밍 전문가가 되고자 하는 저의 바람을 만족시켜 줄 수 있었던 강의였습니다. 인프런이나 유데미에 널린 고급 스킬을 표방한 개발 강의들이 차고 넘치는 시대에, 정말 살이 되고 뼈가 될 수 있는 강의였고, 이 강의를 내주신 포프 님과 POCU 개발자님들께 존경을 표하고 싶습니다. 

 

자랑하고 싶은것

친구와 함께 어셈블리어 과목을 듣고 나서, 실제 c++함수가 final 키워드를 붙였을때 얼마나 더 빠르게 동작할지에 대한 논의를 어셈블리어로 해보면서, 컴파일러가 그동안 어떤일을 해주었고, 최적화를 위해서 무엇을 하였는지 코드를 읽을 수 있게 되었을때 그 기쁨을 자랑하고 싶었습니다. 

https://devblogs.microsoft.com/cppblog/the-performance-benefits-of-final-classes/

공식 문서에서 어셈블리 코드로 설명을 해도, 이젠 아 어떤내용이구나 무슨 말이구나 라고 읽히는게 정말 스스로 대견하달까요. 이 강의를 들은것에 자신감을 가져도 되지 않을까 하고 스스로를 칭찬해 주었습니다. 그리고 다른 분들도 이러한 기쁨을 같이 누렸으면 좋겠습니다. 

 

앞으로 하고자 하는 것

현재 안드로이드 앱을 개발하면서 RenderScript대신 Vulkan으로 이미지 라이브러리를 교체하라는 권고가 내려왔습니다.

 

RenderScript에서 이전하기  |  Android 개발자  |  Android Developers

RenderScript에서 이전하기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. RenderScript API는 Android 12부터 지원 중단됩니다. 당분간은 계속 사용할 수 있지만 기기

developer.android.com

 

Vulkan을 c++로 작성해야 한다고 하니, 벌써부터 막막하지만, 어셈블리어도 배웠기에 c++을 새로 배우고, 새로운 이미지 라이브러리를 교체하면서, 그래픽스도 조금씩 공부하면 재미있겠다고 생각했습니다. 특히, 라이브러리 내부에서 병목현상이 생기는 부분에서는 SIMD 프로그래밍을 응용해 볼 생각을 하니 벌써부터 설레기도 합니다. 앞으로는 고수준뿐만 아니라 저수준 언어들도 열심히 공부해 나가고자 합니다. 그리고 여러 방향으로 성장을 할 수 있도록 노력해 보고자 합니다. 

728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기