# 커뮤니티 CS 논쟁 커뮤니티에서 반복적으로 일어나는 컴퓨터과학/프로그래밍 관련 논쟁. 순환 떡밥이라고도 한다. ## PHP 논쟁 PHP가 정말 잘못 만들어진 언어인지, 더 이상 PHP를 사용해서는 안 되는지에 대한 논쟁. 내 의견은 [PHP: 잘못된 디자인의 프랙탈](https://saschanaz.github.io/PHP-a-fractal-of-bad-design-kr/)로 갈음한다. > 심지어 저는 PHP의 뭐가 잘못되었는지조차 말할 수가 없어요. 왜냐 하면... 음.... 공구상자가 있다고 해 봐요. 각종 공구가 들어있는. 뭐 그런대로 괜찮아 보이겠죠. 표준적인 것들이 들어 있을거구요. > > 그런데 거기서 드라이버를 꺼냈는데 끝이 이상한 삼각형 모양인 거예요. 뭐 좋아, 나한테 유용하진 않겠지만 언젠간 쓸만할 때도 있겠지. > > 이제 망치를 꺼냈는데 경악스럽게도 양쪽 끝에 못뽑이가 달려 있네요. 뭐 어쨌든 쓸 수야 있겠죠. 옆으로 잡고 망치의 가운데 부분으로 못을 박는다거나 하는 식으로. > > 이제 펜치를 꺼냈는데 톱니 무늬가 없어요. 평평하고 매끈하네요. 유용하진 않지만 어쨌든 볼트를 돌릴 수야 있을테니 뭐 어때요. > > 그리고 계속 봅시다. 공구상자 안의 모든 것들이 괴상하지만 완전히 쓸모없진 않을 거예요. 그리고 전체적으로 보면 문제가 아니예요. 왜냐하면 일단 공구가 있긴 하니까. > > 이제 그 공구상자를 쓰면서 "이봐 대체 이 공구상자에 무슨 문제가 있다고? 난 지금까지 이것들을 써 왔고 이것들은 쓸만하다고!"라고 하는 말하는 수백만명의 목수들을 보게 됩니다. 그리고 목수들이 자기가 지은 집을 보여주는데, 방들은 죄다 오각형 모양이고 지붕은 거꾸로 뒤집혀 있군요. 그리고 정문을 두드리면 집이 폭삭 무너져 내리고 안에서 그 사람들이 왜 문을 부수냐고 소리를 지릅니다. > >이게 PHP의 문제점이예요. ## 자바스크립트 논쟁 주로 자바스크립트의 '이상한 동작'을 비판하는 것으로 시작되는 논쟁. ```js 123.toString() // Uncaught SyntaxError: identifier starts immediately after numeric literal ``` `123.`이 하나의 숫자 리터럴로 취급되기 때문에 문법 에러가 발생한다. ```js NaN != NaN // true ``` IEEE 754 부동소수점 표기법 스펙상 옳은 동작이다. '숫자가 아닌 것'을 비교하는 것이기 때문에 두 `NaN`은 서로 같지 않다. `NaN`에 대한 덧셈, 곱셈 결과는 모두 `NaN`이고, `NaN != NaN`을 제외한 모든 `NaN` 관련 비교 연산의 결과는 `false`다. ## C언어로 프로그래밍 입문 ## 함수형 프로그래밍 언어의 기준 함수형 프로그래밍 언어에 대한 명확한 정의와 그에 대한 합의가 없어서 무한반복되는 논쟁. 함수를 first-class로 취급하면 함수형 프로그래밍 언어이다. [[functional-programming]] 참고. 다만, 표준 라이브러리를 비롯한 생태계 전반이 부수효과를 일으키도록 만들어진 언어로 함수형 프로그래밍을 하는 것이 여간 까다로운 일인 것은 사실이다. ## 정적타입 vs 동적타입 [[dynamic-language-vs-static-language]] 참고. ## 마이크로벤치마킹 ## C언어 토론 아리송한 C언어 코드를 놓고 그 동작이나 실행 결과를 토론하는 떡밥. 대부분은 UB, UsB, IdB이다. ### 증감 연산자 ```c i++ + ++i ``` ```c i = ++i + 1 ``` 시퀀스 포인트 없는 두 개의 사이드 이펙트. UB다. ```c i = ++i && 0 ``` 이 경우 `i`는 0이 된다. `&&`가 시퀀스 포인트를 만들기 때문. ### 배열과 포인터 사실 포인터와 배열이 같다는 주장. 사실 둘은 다르고, 배열이 포인터로 암시적 형변환될 뿐이다. ```c int arr[3]; arr[2] = 1; int* ptr; ptr = arr; // ptr = &arr[0] ``` 위와 같은 코드 때문에 포인터가 배열과 같다고 생각하게 된다. 정확히는 `ptr = arr`에서 `arr`이 `&arr[0]`으로 암시적 형변환되는 것이다. ## 개발자의 CS 학부 교육 ## 진정한 개발자 '진정한 개발자라면 어때야 한다'라는 조건을 제시하는 논쟁. 주니어 개발자를 가스라이팅할 때 비슷한 논리가 동원되기 때문에 '진개라이팅'이라고도 한다. 관련 메모는 [[developer-chauvinism]] 참고. ### 코더 vs 프로그래머 ### 프론트엔드 vs 백엔드 ### 물경력, 기능 공장, JSON 상하차 ## GOTO