커뮤니티 CS 논쟁

커뮤니티에서 반복적으로 일어나는 컴퓨터과학/프로그래밍 관련 논쟁. 순환 떡밥이라고도 한다.

PHP 논쟁

PHP가 정말 잘못 만들어진 언어인지, 더 이상 PHP를 사용해서는 안 되는지에 대한 논쟁. 내 의견은 PHP: 잘못된 디자인의 프랙탈로 갈음한다.

심지어 저는 PHP의 뭐가 잘못되었는지조차 말할 수가 없어요. 왜냐 하면… 음… 공구상자가 있다고 해 봐요. 각종 공구가 들어있는. 뭐 그런대로 괜찮아 보이겠죠. 표준적인 것들이 들어 있을거구요.

그런데 거기서 드라이버를 꺼냈는데 끝이 이상한 삼각형 모양인 거예요. 뭐 좋아, 나한테 유용하진 않겠지만 언젠간 쓸만할 때도 있겠지.

이제 망치를 꺼냈는데 경악스럽게도 양쪽 끝에 못뽑이가 달려 있네요. 뭐 어쨌든 쓸 수야 있겠죠. 옆으로 잡고 망치의 가운데 부분으로 못을 박는다거나 하는 식으로.

이제 펜치를 꺼냈는데 톱니 무늬가 없어요. 평평하고 매끈하네요. 유용하진 않지만 어쨌든 볼트를 돌릴 수야 있을테니 뭐 어때요.

그리고 계속 봅시다. 공구상자 안의 모든 것들이 괴상하지만 완전히 쓸모없진 않을 거예요. 그리고 전체적으로 보면 문제가 아니예요. 왜냐하면 일단 공구가 있긴 하니까.

이제 그 공구상자를 쓰면서 "이봐 대체 이 공구상자에 무슨 문제가 있다고? 난 지금까지 이것들을 써 왔고 이것들은 쓸만하다고!"라고 하는 말하는 수백만명의 목수들을 보게 됩니다. 그리고 목수들이 자기가 지은 집을 보여주는데, 방들은 죄다 오각형 모양이고 지붕은 거꾸로 뒤집혀 있군요. 그리고 정문을 두드리면 집이 폭삭 무너져 내리고 안에서 그 사람들이 왜 문을 부수냐고 소리를 지릅니다.

이게 PHP의 문제점이예요.

자바스크립트 논쟁

주로 자바스크립트의 '이상한 동작’을 비판하는 것으로 시작되는 논쟁.

123.toString() // Uncaught SyntaxError: identifier starts immediately after numeric literal

123.이 하나의 숫자 리터럴로 취급되기 때문에 문법 에러가 발생한다.

NaN != NaN // true

IEEE 754 부동소수점 표기법 스펙상 옳은 동작이다. '숫자가 아닌 것’을 비교하는 것이기 때문에 두 NaN은 서로 같지 않다. NaN에 대한 덧셈, 곱셈 결과는 모두 NaN이고, NaN != NaN을 제외한 모든 NaN 관련 비교 연산의 결과는 false다.

C언어로 프로그래밍 입문

함수형 프로그래밍 언어의 기준

함수형 프로그래밍 언어에 대한 명확한 정의와 그에 대한 합의가 없어서 무한반복되는 논쟁. 함수를 first-class로 취급하면 함수형 프로그래밍 언어이다. 함수형 프로그래밍 참고.

다만, 표준 라이브러리를 비롯한 생태계 전반이 부수효과를 일으키도록 만들어진 언어로 함수형 프로그래밍을 하는 것이 여간 까다로운 일인 것은 사실이다.

정적타입 vs 동적타입

정적타입 vs 동적타입 참고.

마이크로벤치마킹

C언어 토론

아리송한 C언어 코드를 놓고 그 동작이나 실행 결과를 토론하는 떡밥. 대부분은 UB, UsB, IdB이다.

증감 연산자

i++ + ++i
i = ++i + 1

시퀀스 포인트 없는 두 개의 사이드 이펙트. UB다.

i = ++i && 0

이 경우 i는 0이 된다. &&가 시퀀스 포인트를 만들기 때문.

배열과 포인터

사실 포인터와 배열이 같다는 주장. 사실 둘은 다르고, 배열이 포인터로 암시적 형변환될 뿐이다.

int arr[3];
arr[2] = 1;

int* ptr;
ptr = arr; // ptr = &arr[0]

위와 같은 코드 때문에 포인터가 배열과 같다고 생각하게 된다. 정확히는 ptr = arr에서 arr&arr[0]으로 암시적 형변환되는 것이다.

개발자의 CS 학부 교육

진정한 개발자

'진정한 개발자라면 어때야 한다’라는 조건을 제시하는 논쟁. 주니어 개발자를 가스라이팅할 때 비슷한 논리가 동원되기 때문에 '진개라이팅’이라고도 한다. 관련 메모는 개발자 순혈주의 참고.

코더 vs 프로그래머

프론트엔드 vs 백엔드

물경력, 기능 공장, JSON 상하차

GOTO

이 문서를 인용한 문서