안녕 퇴물이 왔다.
오늘의 주요 떡밥은 CS군아..

내 썰 보따리에서 CS관련해서는 잘 없는데.. 뒤적뒤적..

나는 텍스트 머드게임부터 시작한 쉰내나는 세대인데,
한때 거기 소스코드를 본적이 있음.

C로 짜저 있엇고
기억에 남는 부분은,
통신파트에 주석에 70년대 날짜가 박힌 제록스 코드엿다.

거기서 처음으로 링크드 리스트 구조를 사용한걸 봄.
어레이 같은던데 대충 헤드가 있고 next 라는 포인터에
다음 헤드를 가르키는 그런구조.

가변 어레이를 쓰면 될텐데 왜그랫을까?
추측해보기로 머드게임이 개발될 그당시
당시 컴파일러가 가변어레이 따위 지원 안했을 수도 있고,
당시 컴퓨터가 펜티엄이면 고사양이었기때문에
PC 메모리가 16~32메가 이런시절이라 아끼고 아껴야 했기때문일거다.

16메가에 리눅스 커널 올라가고, 남는 용량에 게임컨텐츠를 올려야지.
게다가 파일IO는 디지게 느렸을테지.

게임맵이 있고 이 맵공간안에 아이템과 몹이 있는데
아이템과 몹은 있다가도 없어지고 없디가도 다시 생긴다.
현대인들은 remove나 insert를 쓰면 끝이지만,
alloc 자체의 시간도 문제되던 시기라 그냥
링크드 리스트에서 체인을 끊고 다시 연결하는
next 포인트 변수만 바꿔주는 정도로 빠르게 리스트를
재구성할수 있으니 당시에는 최적화된 기법이었겠다.

그때는 CS를 모르면 프로그램이 안돌아가는 수준이었겟지만
지금은 하드웨어가 사람보다 한참 더 싸기때문에
CS를 몰라도 자동화 된 부분이 많아서 몰라도 되는 수준까지옴

다만 CS를 모르면 문제해결능력과 성능최적화를 할수가 없음.
구조를 알아야 뭐가 문젠지 고치거나 튜닝할테니 말임.

가끔 주니어들이 코드좀 봐달라고 할때
로직 문제라기 보다는
어떤 부분이 구조상 느리게 만들어져 있어서
터치반응이 굼뜨거나 하는 현상이 나타나곤 한다.

그게 왜 느릴수밖에 없는가. 이건 씨에스를 알아야한다고 봄
가장쉽게 On 뭐시기 문제,
벨류와 레퍼런스 차이 이런거부터가 시작임.

CS다음엔 네트워크 지식이라 생각함.
DNS TTL 같은거 잘 모르는 친구들 종종 있음.
당연히 모를수도 있거니와 그냥 배우면 됨.

CS는 당장은  몰라도 됨
다만 문제해결을 못해서 존내 낭패 볼수 있으니
시니어에게 필요한 덕목이다.

얼마전에 문의온건은
어떤 프로그램에 캡쳐된 영상을 보여주는데 16프레임정도밖에 안나와서 뚝뚝 끊긴단다.
증상만 듣고 가정이 나오고, 채크해야할 포인트가 나오고, 대안이 나와야 멋진 씨니어가 될수 있음.
상세한건 구현을 봐여겟지만, 본인이 만들었으면 30초내에는 답이 나와야하는게 정상이고, 이렇게 해야하는게 이상적인데 그렇게할려면 다른일정을 못맞춘다 라는 답변이 자동으로 나와야하는 거임.
자신이 만들었는데 자신이 그 문제의 원인을 모르는 경우는
CS 기본기 부족이라 생각함.