Harvard CS50 (2023) – Full Computer Science University Course-1 (C)
전공이 뭐길래 이렇게 차이가 나나 싶어서
CS 수업을 들어보기로 했다. 긴 시간 투자한만큼 도움이 되는 시간이었으면 한다.
소스 코드 -> 컴파일러 -> 바이너리 (머신코드)
소스코드를 머신코드로 바꿔주는게 컴파일러고, 문법적 에러가 생기면 컴파일러에서 체크해준다.
복잡한 코드에서는 알아내기 어렵지만 기본적인건 확인해줌
중요한 세가지 포인트
1. 올바른 문법으로 올바르게 사용하는가
2. 코드의 디자인을 잘 활용하는가 -> 협약된 내용의 구조를 짜는건 좋은 아이디어를 다른 사람들과 나누는것과 같다.
3. 컴퓨터는 띄어쓰기라던가 줄바꿈을 신경쓰지 않지만, 일하는 사람들 끼리는 가독성이 좋아야해서 중요함
헤더 파일 -> 필요한 기능만을 담은 헤더파일을 include 해야함.
라이브러리 -> 함수 기능이 있는 헤더파일이고, 헤더파일을 include 하면 라이브러리에 있는 함수 기능을 사용할 수 있다.
리눅스 -> 서버에서 많이 씀. CLI (Command line Interface) 키보드와 글자만 나와있는 터미널이여서, 이걸쓰는 매크로도 따로 있음.
ls -> 경로에 나와있는 파일들 다 보여줌
mv-> (바꿀 파일 -> 바뀐파일)
cd-> 디렉토리로 들어가기
mkdir-> 디렉토리 만들기
cp -> 복사하기
rmdir -> 디렉토리 지우기
????
?
?
?
?
???
???
???
를 구현하는 for문을 구현함으로써 좀더 프로그래밍에 쉽게 다가가도록 접근했음.
const -> 변하지 않는. 보호의 개념으로 봐도 됨
cs50.h 라는 헤더를 쓰는데, 나는 그냥 C++로 하고 있었다.
처음엔 스크레치로 작동 방식을 설명하고, C 코드를 보여주며 절차지향까지 설명은 했다.
추가적으로) 메모리에 대한 설명을 좀 더 해줬다. 메모리의 최대치가 있어서 그걸 항상 넘어가면 올바른 값이 안나올 수 있다. int32 -> 4 billion ( 음수 까지 포함하면 2 billion) 까지만 적용 가능 그 이후에는 오버플로가 발생하는거까지 설명해줬다.
바이너리(이진수) 내가 제일 싫어하는거....
truncation? 이게 뭘까 -> 나머지가 잘림. 1/3 한 경우에 0.3333 되어야 하지만 int형이라 값이 잘리게 된다. 이는 정확한 계산을 요구하는 컴퓨터 연산에서 잘못된 결과를 내놓기도 하기에 정확한 float 형으로 해서 정확한 값을 구해야 한다.
->그래서 Type Casting을 해야함.
명시적으로 (float)이라고 선언해주면 가능함
floating -point imprescision ->
C의 경우에는 printf("%.2f\n,x) 를 한다면
.2 만큼 float 값을 보여준다. ( 3.14)
C++의 경우에는
#include <iomanip>
헤더를 include 해주고
cout << fixed << setprecision(5) << x << endl; (3.14152)
을 하게 되면 원하는 숫자만큼의 소수점이 출력된다.
제일 인상깊었던 건데, comment 설명해주면서
pseudo-code 에 대한 설명이였다.
알고리즘 풀때도 그렇고 내가 부족했던건데, 거대한 로직을 어떻게 구현할까 막막해서 항상 시작이 어려웠는데, 이 강의에서 말한 내용듣고 좀 인상깊었다.
pseudo-code를 comment로써 작성한 다음 그 부분들을 구현하면서 점진적인 완성을 이루는것.
내가 간과했던 부분이라 더욱 크게 다가왔다. 굉장히 기초적인 내용이지만 정말로 중요한 내용이라 감명받았다.
pseudo-code쓰는걸 적용해야겠다.
https://youtu.be/LfaMVlDaQ24?si=mI462qAlYWflT5r_