[programming-languages] 가장 좋아하는 언어에 대해 싫어하는 다섯 가지는 무엇입니까? [닫은]

최근 Stack Overflow에 Perl-hate 클러스터가 있었기 때문에 ” 좋아하는 언어에 대해 싫어하는 5 가지 “질문을 Stack Overflow 가져 오겠다고 생각했습니다 . 당신이 가장 좋아하는 언어를 가지고 당신이 싫어하는 다섯 가지를 말해주세요. 문제가 될 수도 있고, 디자인 결함을 인정하거나, 성능 문제를 인정하거나, 기타 범주 일 수도 있습니다. 당신은 그것을 미워해야하며, 가장 좋아하는 언어 여야합니다.

다른 언어와 비교하지 말고 이미 싫어하는 언어에 대해서는 이야기하지 마십시오. 좋아하는 언어로 좋아하는 것에 대해 이야기하지 마십시오. 나는 당신이 싫어하지만 용납하는 것들을 듣고 싶어서 다른 것들을 모두 사용할 수 있고, 다른 사람들이 사용하기를 원하는 언어에 대해 듣고 싶습니다.

나는 누군가가 나에게 가장 좋아하는 언어를 강요하려 할 때마다, 때로는 인터뷰 질문으로 이것을 요구합니다. 누군가가 자신이 좋아하는 도구에 대해 미워할 다섯 가지를 찾을 수 없다면, 도구를 옹호하거나 그것을 사용하여 큰 돈을 끌어들일만큼 잘 알지 못합니다. 그는 그것을 완전히 탐구하기에 충분히 다른 상황에서 그것을 사용하지 않았습니다. 그는 그것을 문화 나 종교로 옹호하고 있습니다. 즉, 제가 좋아하는 기술을 선택하지 않으면 잘못되었습니다.

나는 당신이 사용하는 언어를별로 신경 쓰지 않습니다. 특정 언어를 사용하고 싶지 않습니까? 그럼 하지마 당신은 현명한 선택을하기 위해 실사를 겪고 여전히 그것을 사용하지 않습니까? 좋아. 때로는 정답은 “좋은 연습과 Bar에 대한 경험이 많은 강력한 프로그래밍 팀이 있습니다. Foo로 변경하는 것은 어리석은 일입니다.”


이것은 코드 검토에도 좋은 질문입니다. 실제로 코드베이스를 아는 사람들은 그것에 대한 모든 종류의 제안을 할 것이며, 그것을 잘 모르는 사람들은 비 특정 불만을 가지고 있습니다. “이 프로젝트에서 다시 시작할 수 있다면 어떻게 다르게 할 것입니까?” 이 환상의 땅에서 사용자와 프로그래머는 자신이 싫어하는 모든 것에 대해 불평합니다. “더 나은 인터페이스를 원합니다”, “모델과 뷰를 분리하고 싶습니다”, “이 모듈 대신이 모듈을 사용하겠습니다”, “이 메소드 세트의 이름을 바꿉니다”또는 실제로 그들이하는 모든 것 현재 상황이 마음에 들지 않습니다. 이것이 특정 개발자가 코드베이스에 대해 얼마나 많이 알고 있는지를 다루는 방법입니다. 또한 프로그래머가 얼마나 많은지에 대한 단서이기도합니다.

증오 만이 사람들이 얼마나 많이 알고 있는지 알아내는 유일한 차원은 아니지만 꽤 좋은 것으로 나타났습니다. 그들이 싫어하는 것들은 또한 그들이 주제에 대해 얼마나 잘 생각하고 있는지에 대한 단서를 제공합니다.



답변

Java에 대해 싫어하는 5 가지 :

  • 일류 기능이 없습니다.
  • 형식 유추가 없습니다.
  • 예를 들어 그래픽과 같은 기본 설정이 부족합니다.
  • NullPointerException에 null에 대한 추가 정보가 포함되어 있지 않습니다.
  • 무의식적으로 “구성 가능한”프레임 워크 / 서비스 제공자 인터페이스 / 팩토리 클래스 / 종속성 주입 시스템의 확산. 구성 가능성은 거의 사용되지 않으며 DRY는 엄중하게 위반되며 크기는 4 배, 가독성은 절반으로 줄어 듭니다.

스칼라를 확인해야합니다.


답변

와우, SQL 이 아직 여기에 있지 않은 것에 놀랐 습니다. 아무도 그것을 사랑한다는 것을 의미하는 것 같아요 🙂

  • 여러 구현에서 일관되지 않은 구문
  • 미묘한 코드 차이로 인해 모호한 이유 때문에 성능이 크게 저하 될 수 있습니다.
  • 텍스트 조작에 대한 지원 부족
  • 쉬운 입학 비용이지만 언어 숙달을위한 가파른 학습 곡선
  • 모범 사례를위한 커뮤니티 전체의 최소 표준화에는 구문 스타일이 포함됩니다.

… 추가 비용없이 증오해야 할 몇 가지 보너스 이유

  • WHERE 절이 마지막에 오기 때문에 UPDATE 또는 DELETE를 조기에 쉽게 실행하여 전체 테이블을 파괴 할 수 있습니다. 대신, 어디로 가야합니까?
  • 관계 분할을 구현하기가 어렵습니다.
  • 값을 NULL로 설정할 수 있지만 NULL과 같은지 테스트 할 수 없습니다. IS NULL을 확인할 수는 있지만 필자의 의견으로는 코드가 복잡해집니다.
  • 열에 별칭을 설정 한 다음 별칭으로 GROUP BY 별칭 (또는 SORT에서와 같이 열 인덱스)을 설정하지 않고 GROUPed 열에 대한 공식을 완전히 다시 지정해야하는 이유는 무엇입니까?

답변

자바 스크립트 :

  1. 가장 멋진 것들은 모두 복잡하지만, 그 차가움은 너무 적은 양의 코드로 싸여있어 그것을 따르려고 애쓰는 것에 대해 어리석은 느낌입니다.

  2. ‘+’는 약한 유형의 언어로 연결하기 위해 조작자가 잘못 선택했습니다. 그들은 멍청한 놈들 을 놀라게 하려고 했습니까?

  3. 브라우저 간 호환성 마인 필드입니다 (켜져 있어도 상관 없습니다)

  4. 일반적으로 신뢰할 수 없습니다-뒤로 버튼 차단, 절대 죽지 않는 팝업 등과 같은 쓰레기와 관련이 있습니다.

  5. 몇 가지 다른 오류 메시지와 몇 가지 다른 유형 (Number, String, Object 등)이 있기 때문에 디버깅이 거의 불가능합니다.

jQuery가 아니었다면 아마도 내가 사용했던 것만 큼 미워했을 것입니다 🙂


답변

PHP :

1) 불필요한 변수를 만들도록합니다.

$parts = explode('|', $string);
$first = $parts[0];

2) 람다의 구현은 그것을 사용하는 것과 거의 동등 eval()하며 너무 끔찍하게 잘못 사용하지 않았습니다 ( http://www.php.net/create_function 참조 ).

3) 발생할 수있는 오류의 약 80 % 만 잡을 수있는 try / catch 시스템.

4) 정규 표현식은 람다 지원만큼 절름발이입니다. 정규 문자열 안에 작성해야하기 때문에 배우기 가장 어려운 프로그래밍 도구 중 하나를 3 배 정도 어렵게 만듭니다. 그리고 PHP는 “쉬운”언어로되어 있습니까?!?!?

5) $ _POST에서 두 번 쓰거나 자신의 함수를 작성하거나 ‘@’연산자를 사용하지 않고 안전하게 물건을 꺼내는 방법은 없습니다.

$x = isset($_POST['foo']['bar']) ? $_POST['foo']['bar'] : null;

6) 보너스 답변 : ‘@’. 코드를 올바르게 작성하는 데 방해가되지 않으면 ‘@’만 추가하면 나중에 코드를 디버깅해야하는 사람에게는 너무 나빠질 수 있습니다.


답변

C ++

  • 무작위로 메모리를 손상시키고 찾기가 거의 불가능한 버그를 만들기에는 너무 쉽습니다 ( Valgrind 는이를 해결하기 위해 먼 길을 갔지만 ).
  • 템플릿 오류 메시지
  • 템플릿을 사용할 때는 모든 것을 하나의 파일에 포함시킨 다음 어리석은 컴파일 시간을 가져야합니다.
  • 표준 라이브러리는 현대에 농담입니다 (기본적으로 스레드 또는 네트워크가 없습니까?)
  • 많은 불쾌한 C 비트가 파고 들었습니다 (특히 short / int / signed / etc 사이의 모든 변환).

답변

C # / .NET :

  • 클래스는 기본적으로 봉인되어야합니다
  • lock명령문 이 없어야합니다 . 대신 특정 잠금 오브젝트가 있어야하고 Acquire일회용 잠금 토큰을 리턴하는 메소드가 있어야합니다 . 결론 : 모든 개체에 대한 모니터가있는 것은 아닙니다.
  • GetHashCode()Equals()에 안 System.Object모든 것이의 적절한 해시 -. 대신,이 IdentityComparer같은 일을하는을하고, 유지 IComparer<T>, IComparable<T>, IEqualityComparer<T>IEquatable<T>사용자 정의 비교를위한 인터페이스를.
  • 불변성에 대한 빈약 한 지원
  • 확장 방법을 발견하는 잘못된 방법-네임 스페이스를 사용한다는 사실보다 훨씬 더 의식적인 결정이어야합니다.

그것들은 내 머리 꼭대기에서 벗어났습니다. 내일 묻고 다른 5를 생각해 낼 것입니다. 🙂


답변

  • 문자열 조작.

문자열 버퍼를 수동으로 처리해야하는 것은 오류가 발생하기 쉽습니다. 너무 많은 컴퓨팅이 실제로 문자열을 이동하고 수정하기 때문에 (컴퓨터는 사람들이 과거로 돌아갈 것이라고 생각했던 것처럼 많은 수의 크 런칭 작업에 많이 사용되지 않으므로) 관리되는 언어 또는 C ++의 문자열을 사용할 수 있다는 것이 정말 좋습니다 이것들을 다루는 객체. 똑바로 C로해야 할 때, 빠른 모래에서 수영하는 것처럼 느껴집니다.