본문 바로가기
728x90
반응형

전체 글194

자료구조 이 글은 Crash Course의 Computer Science를 보고 정리한 글입니다. 알고리즘이 실행되는 데 데이터가 어떻게 컴퓨터 메모리에 저장되는지에 대해서 얘기해 보자. 데이터는 일고 불러오기 쉽게 구조가 탄탄하고 잘 정리되어 있어야 한다. 이것을 위해서 컴퓨터 과학자들은 자료 구조라는 것을 사용한다. 배열(Arrays), 리스트(Lists), 벡터(Vectors) 이것들은 메모리에 연속적으로 저장되어 있는 값이다. 그래서 'j=5'와 같이 한 개의 변수에 한 개의 값을 저장하는 대신, 여러 개의 숫자를 지정한 다음 배열에 저장할 수 있다. 'j=[1,26,73,94,65,36,17]' 배열에 있는 특정한 값을 찾으려면 인덱스(index ; 목록)를 지정해 줘야 한다. 거의 모든 프로그래밍 언어.. 2022. 8. 9.
알고리즘 소개 이 글은 Crash Course의 Computer Science를 보고 정리한 글입니다. 알고리즘(ALGORITHM)은 계산을 완성하는데 사용되는 특정 단계이다. 알고리즘은 같은 결과를 생산해낼 지라도 다른 알고리즘이 보다 우수할 수 있다. 일반적으로 계산에 소요되는 단계가 줄어들수록 더 좋은 결과를 얻을 수 있지만, 때로는 사용하는 메모리 양과 같은 다른 요인들을 고려해야 한다. 알고리즘이라는 용어는 페르시아의 천재였던 Muhammad ibn Musa al-Khwarizmi라는 천년 전에 대수학의 아버지라 불리던 한 사람에게서 비롯된 것이다. 현대 컴퓨터 이전에 존재했던 효율적인 알고리즘의 제작 문제는 현재 과학 분야로 진화한 컴퓨팅을 둘러싼 전체 과학을 이끌어 냈다. 바로 컴퓨터 과학이다. 컴퓨터 과.. 2022. 8. 8.
교육 후기 2월 28일 시작했던 교육과정이 드디어 끝이 났다. 처음에는 AI라는 꿈같이 멀게만 느껴졌던 기술이라 크게 기대하지 않았는데, git과 python을 다시 배우면서 글로 정리할 정도로 쉽게 시작해서 나중에는 글로 정리하지 못할 정도로 학습해야 할 것들이 기하급수적으로 늘어나 마지막에는 받아들이기도 벅찼던 것 같다. 특히 자연어 처리... 트랜스포머는.... orz 하지만 프로젝트를 진행하면서 확실히 내가 많은 것들을 배우긴 했구나 느꼈던 게, 처음 교육과정을 발견하고 AI에 대해서 구글링 하며 찾아볼 때는 AI의 기초도 이해하기 어려웠는데... 프로젝트를 하면서 AI에 대해서 찾아볼 때는 여러 모델을 찾아서 비교하고 선택하고 데이터를 구해서 학습시키고 하고 있더라...ㅎㅎ 첫 팀 프로젝트로 아키에이지를 .. 2022. 8. 6.
프로그래밍의 기본 : 문장과 함수 이 글은 Crash Course의 Computer Science를 보고 정리한 글입니다. 많은 낮은 수준의 세부 사항은 복잡한 프로그램을 만드는 데 장애가 된다. 이러한 낮은 수준의 세부 사항을 추상화하기 위해 프로그래밍 언어는 프로그래머가 계산 문제 해결에 집중하고 하드웨어적인 핵심들은 줄이도록 개발되었다. 우리가 말하는 언어(구어)와 마찬가지로, 프로그래밍 언어에도 문장(statements)이 존재한다. 이 문장들은 개별적인 완전한 생각을 나타낸다. 그리고 다른 단어를 사용하여 의미를 바꿀 수 있다. 그러나 문법적으로 옳지 않게 바꿀 수는 없다. 이러한 언어의 문장 구성 요소와 구조들을 다루는 규칙 세트를 구문이라고 한다. 모든 프로그래밍 언어도 구문(syntax)이 있다. "a = 5"는 프로그래밍.. 2022. 8. 5.
최초의 프로그래밍 언어 이 글은 Crash Course의 Computer Science를 보고 정리한 글입니다. 하드웨어 수준에서의 프로그래밍은 번거롭고 융통성이 떨어지기 때문에 프로그래머는 컴퓨터를 프로그래밍할 수 있는 다양한 방법은 원했다. 바로 소프트웨어이다. 앞서 보았듯이, 컴퓨터 하드웨어는 원시 이진 명령어를 처리한다. 이것은 컴퓨터 프로세서가 말할 수 있는 "언어"이다. 이 언어를 기계어(Machine Language 또는 Machine Code)라고 한다. 컴퓨팅 초기에는 사람들이 전체 프로그램을 기계어로 작성해야 했다. 더 구체적으로 말하자면, 먼저 영어로 종이에 높은 수준의 프로그램을 작성했다. 예를 들면, "다음 판매를 메모리에서 검색한 다음, 하루, 주, 연도의 누적 합계를 더하고, 추가할 세금을 계산하시오.. 2022. 8. 3.
초기의 프로그래밍 이 글은 Crash Course의 Computer Science를 보고 정리한 글입니다. 프로그램된 기계에 대한 필요성은 컴퓨터를 개발하기 전에도 존재해 왔다. 가장 유명한 예는 섬유 제조에 있었다. 만약 크고 붉은 식탁보를 짜고 싶다면, 단순히 베틀에 붉은 실을 넣고 작동시키면 되었다. 하지만 만약 줄무늬나 격자무늬와 같은 패턴을 옷에 넣고 싶다면 어떨까? 근로자들은 주기적으로 방직기를 패턴의 모양에 따라 변경을 해야 했고, 상당히 노동집약적이어서 패턴이 들어간 섬유를 비싸게 만들었다. 이에 대응하여 Joseph Marie Jacquard는 프로그래밍이 가능한 방직기를 개발하였으며, 1801년에 처음 시연되었다. 펀치카드에 의해 옷감에 패턴이 들어가야 할 열이 지정되었다. 구멍의 유무에 따라 특정한 실.. 2022. 8. 3.
고급 CPU 설계 이 글은 Crash Course의 Computer Science를 보고 정리한 글입니다. 컴퓨터는 1초에 1개 정도 계산할 수 있는 기계적인 장치에서부터 킬로 헤르츠나 메가헤르츠의 속도로 동작하는 CPU에 이르기까지 오랜 시간 동안 발전해왔다. 현대의 CPU장치는 거의 다 기가헤르츠의 속도로 동작하고 있다. 매 초 수십억 개의 명령어가 실행된다는 것이다. 전자식 컴퓨터의 초기에는 칩 내부의 트랜지스터의 스위칭 시간을 개선함으로써 프로세서의 속도를 빠르게 했다. 이전에 배운 논리 게이트와 ALU를 포함한 모든 부품들이 트랜지스터들로 구성되어 있다. 그런데 트랜지스터를 빠르고 효율적으로 만드는 것만이 다가 아니다. 프로세서 개발자들은 단순히 명령어를 빠르게 처리하는 것뿐만 아니라, 훨씬 더 복잡한 동작을 통.. 2022. 8. 2.
명령어와 프로그램 이 글은 Crash Course의 Computer Science를 보고 정리한 글입니다. CPU를 강력하게 만드는 점은 programmable 하다는 점이다. 명령어의 순서를 바꾸면, CPU는 다른 일을 수행한다. 그래서 CPU는 변경하기 쉬운 소프트웨어로 제어가 가능한 하드웨어 조각이다. 이전 명령어에서 몇 가지 명령어를 추가해보겠다. SUB는 두 개의 레지스터 값을 빼기 연산하는 기능이다. JUMP는 프로그램을 새 위치로 점프시키는 것이다. 이것은 명령어 처리 순서를 바꾸거나, 명령어 몇 개를 건너뛰고 싶을 때 유용하게 사용된다. 예를 들어 "JUMP 0"는 프로그램을 처음으로 되돌아가게 할 수 있다. 자세하게 설명하자면 명령어의 뒤 4비트가 가리키는 값을 명령어 주소 (instruction addr.. 2022. 7. 31.
중앙 처리 장치 (CPU) 이 글은 Crash Course의 Computer Science를 보고 정리한 글입니다. 컴퓨터에서 중앙 처리 장치(Central Processing Unit; CPU)는 인간의 심장과 같다. CPU의 일은 프로그램을 실행하는 것이다. 프로그램은 instruction(명령어)라고 하는 개별적인 동작의 연속으로 구성되어 있다. 컴퓨터가 무엇을 해야 하는지 instruct(명령)하는 것이기 때문에, instruction(명령어)하고 부른다. 더하기(add)나 빼기(subtract)와 같은 수학 명령어라면, CPU는 ALU가 수학 연산을 하도록 설정할 것이다. 메모리 관련 명령어라면, CPU는 메모리에 read와 write동작을 하도록 설정할 것이다. 마이크로아키텍처(microarchitecture)라고 하는.. 2022. 7. 30.
레지스터와 RAM 이 글은 Crash Course의 Computer Science를 보고 정리한 글입니다. 컴퓨터가 계산한 결과가 버려진다면 계산을 해도 아무 소용이 없다. 계산 결과가 어떻게든 저장되어야지 유용하게 쓰일 수 있고, 여러 연산이 연속해서 수행될 수도 있다. 그래서 컴퓨터 메모리가 필요하다. 우리가 작업을 하다가 갑자기 컴퓨터가 꺼지면 작업하던 것이 사라지는데 이것은 컴퓨터가 Random Access Memory(RAM)을 사용하기 때문이다. RAM은 전원이 켜져 있을 때만 작업 상태 같은 것을 저장할 수 있다.(지속성 메모리(Persistent Memory)라고 불리는 다른 유형의 메모리는 전력 공급 없이도 살아남을 수 있다.) 한 비트 정보를 저장할 수 있는 회로를 구성해 보자. 우리는 다음과 같은 스스.. 2022. 7. 30.
컴퓨터는 어떻게 계산할까?-ALU편 이 글은 Crash Course의 Computer Science를 보고 정리한 글입니다. 컴퓨터 기능의 진정한 목적인 숫자를 구조화하고 목적에 맞는 방식으로 다루는 것이다. 이러한 작용은 컴퓨터의 산술적(Arithmetic)이고 논리적(Logic)인 부분(Unit)에서 다루어지는 데 통상적으로 이걸 ALU라고 칭한다. ALU는 컴퓨터의 수학적인 두뇌를 일컫는다. 이것은 컴퓨터에서 모든 계산을 한다. 아마 가장 유명한 ALU는 Intel 74181일 것이다. 이것이 1970년에 출시되었을 당시에 하나의 칩 안에 완전히 딱 들어맞는 완벽한 ALU였다. 부울 논리 게이트를 사용해서 74181과 같은 기능을 할 수 있는 단순한 ALU회로를 만들 수 있다. ALU는 두 개의 구성 단위를 가지고 있는데, 그것은 산.. 2022. 7. 28.
이진수로 숫자와 문자 나타내기 이 글은 Crash Course의 Computer Science를 보고 정리한 글입니다. 두 가지 상태는 참과 거짓 대신에 0과 1을 사용하여 나타낼 수 있다. 이것은 숫자를 나타낼 때 매우 유용하다. 만약 큰 수를 나타내고 싶다면 단순히 이진 숫자들을 더하기만 하면 되기 때문이다. 이것은 우리가 잘 알고 있는 십진법과 동일한 방식으로 작동한다. 10진수는 오직 10가지(0~9)의 한 자리의 숫자가 있다. 9보다 큰 수를 만들기 위해서는 그 앞쪽에 하나의 숫자를 추가하기만 하면 된다. 이진수에서도 똑같은 방법으로 작동한다. 예를 들어 234는 2*100, 3*10, 4*1을 합하여 얻을 수 있는데 이것은 각각의 자릿수에 곱하는 수의 차이(승수)를 주목해야 한다. 100과 10과 1, 각각의 곱하는 수는 .. 2022. 7. 28.
728x90
반응형