공유 코딩 패러다임을 사용하는 관점에서 언어 Y로 프로그램을 작성하는 것처럼 언어 X로 무언가를 작성하는 것이 왜 나쁜가?


25

얼마 전에 나는 C ++로 작성된 것에 대해 SO에 대한 질문을했지만 현재 문제에 대한 답변을 얻는 대신 WIP 코드 임을 나타내는 경우에도 주석은 코딩 스타일에 열중했습니다. 기본 케이스를 실행했을 때 나중에 정리해야했습니다. (SO에 대한 내 담당자는 이미 거의 비열한 것처럼 질문을 풀기로 결정한 다운 투표가 너무 많았습니다.)

사람들이 왜 그렇게 어려운 선을 "당신은 멍청한 놈이야, 너 자신을 go 하겠어"라는 태도를 취하는 지 궁금해했다. 나는 마치 Java 인 것처럼 C ++을 작성했다고 비난 받고있었습니다. 내가 이해할 수없고 여전히 나를 방해하는 것.

나는 간격을두고도 수년 동안 꽤 많은 OOP 언어로 프로그래밍 해왔다. 사용 가능한 라이브러리 및 현재 작업에 대한 최적의 실행 환경 측면에서 사용할 언어를 선택합니다. 나는 OOP 코드에서 디자인 패턴을 채택하고 패턴 사용이 건전하고 OO 현명한 것으로 내 자신을 유지할 수 있다고 확신합니다. OOP 툴박스를 이해하고 있지만 실제로 필요한 것으로 판단 될 때에 만 툴을 사용하기로 선택합니다. (내가 아는 것은 최고 수준은 아니지만 n00b 수준도 아니라고 생각한다).

한 줄을 작성하기 전에 코드를 디자인합니다. 테스트를 정의하기 위해 특정 클래스의 목표와 준수해야 할 테스트 기준을 나열합니다. 시퀀스 다이어그램을 작성하고 코드를 작성하는 것이 더 쉽기 때문에 인터페이스가 명확 해지면 테스트를 작성하기로 결정했습니다.

질문에 게시 한 코드에서 스마트 포인터를 사용하는 대신 여전히 포인터를 사용하고 있음을 인정해야합니다. 가능하면 RAII를 사용합니다. 적절한 RAII는 nullpointer로부터 보호하는 것을 의미하지만 점진적으로 일합니다. 진행중인 작업이었고 나중에 정리하려고했습니다. 이 일하는 방식은 강력하게 정죄되었습니다.

In my view, I should have a working example first so I can see if the base case is a viable way of thought. I also happen to think that cleaning up the code is something that is typical of the refactoring phase of agile, after the base case has been proven. I must admit that although I'm slowly getting the Cxx standard, I prefer to use what I understand, instead of taking the risk of using concepts that I have yet to master in production code. I do try new stuff once in a while, but usually in play projects that I have on the side, just for that purpose.

[편집] 나는 gnat의 제안 [1]이 내가 질문을하기 전에 한 검색에 나타나지 않았다는 것을 분명히하고 싶습니다. 그러나 그의 제안은 질문의 한 측면을 다루고 있지만, 그가 연결 한 질문은 내 질문의 핵심이 아니라 그 일부에 대한 답변입니다. 내 질문은 코딩 스타일에 대한 응답과 다양한 코딩 스타일 및 (명백한) 기술 수준을 다루는 전문적인 측면에 관한 것입니다. SO에 대한 이전 질문과 함께 적절한 경우의 답변입니다. [/편집하다]

그렇다면 질문은 코딩 스타일을 사용하지 않는 사람을 비웃는 이유는 무엇입니까?

나를 위해 당면한 문제 / 세분은 다음과 같습니다.

  • 리팩토링이 나중에 더 강력 해지면 프로토 타입 상황에서 더 많은 오류가 발생하기 쉬운 코드를 사용하는 것이 왜 나쁜 프로그래밍 관행입니까?
  • C ++로 작성된 프로그램은 Java로 작성된 것과 어떻게 비슷합니까? 나쁜 프로그램은 무엇입니까? (현재 스타일의 의도와 개선하려는 계획된 작업을 고려한 것을 고려하면)
  • 특정 프로그래밍 패러다임 (예 : OOP / DP)에 사용되는 구문을 사용하기로 선택한 경우 어떻게 나쁜 전문가가 되나요?

[1] 빠르고 버그가 많은 코드를 개발 한 다음 각 코드 줄에 대해 오류를 수정하거나 느리게 처리 하시겠습니까?


5
The C ++ Lounge의 사람들 에게이 질문을하는 것이 좋습니다. 방염 복을 먼저 착용하십시오.
Robert Harvey

48
C ++ 사람들은 프로그래머들 사이에서 특이한 품종입니다. Java 툴킷은 모든 도구 상점에서 사용할 수있는 패딩 처리 된 가죽 케이스에 친숙한 도구가 포함 된 현명하고 이해하기 쉬운 도구 상자입니다. C ++는 립쏘, 파워 드릴 및 아무도 모르는 일부 도구로 구성되어 있으며 C ++ 군중이 닌자처럼 다룰 수 있습니다. 누군가 들어 와서 도구를 잘못된 곳에 선반에 놓으면 고통을 겪습니다. 그것들은 프로그래머의 "두 번 측정하고 한 번 자릅니다"입니다.
Robert Harvey

13
어쩌면 FORTRAN과 같이 작성된 Java 코드와 동일한 반응 일 것입니다. 단일 클래스의 모든 코드, 컬렉션 없음, 고정 크기 배열, int실제 길이를 추적 하는 별도의 변수 포함.
케빈 클라인

14
Java와 같은 C ++를 작성하면 힙 할당이 너무 많아 프로그램의 성능이 저하 될 수 있습니다. 언어는 특정 패턴을 홍보하도록 디자인되고 최적화되는 경향이 있으며, 이러한 패턴을 깨 뜨리면 상황이 더 나빠지는 경향이 있습니다.
로봇 고트

5
도움을 얻기 위해 온라인으로 코드를 게시했습니다. 스타일에 대한 모든 피드백을 원치 않았거나 기대하지는 않았지만 전혀 도움이 필요하지 않습니까? 당신은 나쁜 일을 잘합니다. 프로그래머는 코드에서 결함을 찾아야합니다. 우리가하는 일입니다.
JeffO

답변:


26

문제의 코드를 보지 않으면 서 C ++로 Java 코드를 작성하는 몇 가지 방법이 있습니다.

  1. 극단적으로 Java와 같은 소스를 배치합니다. 하나의 파일에있는 모든 것, 클래스 정의 내의 모든 것 등 :
    class HelloWorldApp {
    public:
        void main() {
            cout << "Hello World!" << endl;
        }
    };
    
    이것이 Java 소스를 배치하는 방법입니다. C ++에서는 기술적으로 합법적이지만 모든 것을 헤더 파일에 넣고 인라인 (클래스 선언에 정의하여)하는 것은 끔찍한 스타일이며 컴파일 성능을 저하시킵니다. 하지마
  2. 지나치게 OO-Java에서 지나치게 단순화하기 위해 모든 것이 객체 인 명사 왕국입니다 . 좋은 (즉, 관용적) C ++ 코드는 모든 것을 객체에 넣는 대신 무료 함수, 템플릿 등을 사용할 가능성이 높습니다.
  3. RAII 없음 – 스마트 포인터 대신 포인터와 수동 정리를 사용하여 이미 언급했습니다. C ++은 RAII 및 스마트 포인터와 같은 도구를 제공하므로 좋은 (예 : 관용적) C ++ 코드는 이러한 도구를 사용합니다.
  4. 고급 C ++ 없음-Java 및 C ++의 기본 사항은 충분히 비슷하지만 고급 기능 (템플릿, C ++의 알고리즘 라이브러리 등)에 들어가면 분기되기 시작합니다.

# 1을 제외하고는 C ++ 프로그램을 나쁜 프로그램으로 만들지는 않지만 C ++ 프로그래머로 작업하기를 선호하는 코드는 아닙니다. (또한 비 이디 오마 틱 또는 C 스타일 Perl, 비 이디 오마 틱 파이썬 등을 사용하는 것을 좋아하지 않습니다.) 언어에는 자체 도구와 관용구 및 철학이 있으며 올바른 코드는 사용하려고 시도하는 대신 해당 도구와 관용구를 사용합니다 최저 공통 분모 또는 다른 언어의 접근 방식을 재현하려고합니다. 특정 언어 / 문제 도메인 / 비이성적 인 코드를 작성하여 누군가를 나쁜 프로그래머로 만들지 않는다면, 그 언어 / 문제 도메인 / 무엇에 대해 더 많이 배울 수 있음을 의미합니다. 그리고 아무 문제가 없습니다. 내가 배우고 싶은 것들이 매우 길고, 특히 C ++에는 배울 것들이 많습니다.

나중에 정리하려는 의도로 오류가 발생하기 쉬운 코드를 작성하는 특정 질문에 관해서는 흑백이 아닙니다.

  • 일부 프로토 타입 코드가 모든 가능한 예외와 가능한 모든 경우를 처리하지 못하면 예상됩니다. 작동시키고 강력하게 작동 시키십시오. 문제 없어.
  • 일부 프로토 타입 코드가 단순히 나쁜 스타일 이나 나쁜 디자인 (주어진 언어와 그 관용어, 문제에 대한 근본적으로 나쁜 디자인 등)으로 작성된 경우, 버리기로 작성하지 않는 한 개념 증명, 당신은 아무것도 얻지 못하고 있습니다.

원시 포인터와 스마트 포인터를 예로 사용하려면 C ++로 작업하려는 경우 RAII와 스마트 포인터를 사용하는 것이 기본적 으로 나중에 돌아가서 정리하는 것보다 코드를 작성하는 것이 더 빠를 정도로 기본적 입니다. 다시 말하지만, 이것이 실패한다고해서 누군가가 나쁜 프로그래머, 비전문가 등을 의미하는 것은 아니지만 배울 것이 더 많다는 것을 의미합니다.


11
관용 펄이 있습니까?
래칫 괴물

21
@Onno "이 나사를 구부리지 않고 벽에 망치는 방법은 무엇입니까?" 모두 망치를 쓰지 말라고 알려줄 것입니다.
Sjoerd

9
@Onno C ++에서 포인터 new는 powertools로 간주됩니다. 자동 보관은 수공구입니다.
Sjoerd

9
@Onno : C ++ 프로그래밍 과정이 현대적인 관용구 채택에 뒤쳐지는 경향이 있으며 C ++가 발명 된 이후로 좋은 C ++로 간주되는 것도 엄청나게 발전했습니다.
Bart van Ingen Schenau

7
C ++의 역사와 언어의 고급 기능이 많이 나오기 전에 언어를 배운 수많은 코더 때문에 10 년 전과 같이 글을 쓰는 사람들이 여전히 엉뚱한 C ++이 많이 있습니다. RAII와 같은 것에 대한 식견은 모든 사람이 현대적인 방법을 사용하여 동일한 예측 가능한 실패를 더 이상 볼 수 없도록하는 것입니다.
로봇 고트

42

각 프로그래밍 언어에는 일련의 숙어 및 모범 사례가 있으며 일반적으로 우아하고 정확하며 성능이 뛰어난 코드로 이어집니다. 다음은 다른 언어로 완벽하게 작동하는 몇 가지 최악의 방법입니다.

  • 당신이 쓰는 경우 나는 소리 것 for ($i = 0; $i < 42; $i++) { … }Perl로하지만, PHP에서하지
    (Perl로, 변수는 선언되어야하며, 이러한 루프는 범위를 반복한다)
  • new Foo()타당한 이유없이 C ++로 작성 하지만 Java
    에서는 작성하지 않으면 울 것입니다 (C ++에는 가비지 콜렉션이 없으므로 RAII를 사용해야합니다. 그렇지 않으면 메모리가 누수됩니다)
  • C89, Pascal 또는 JavaScript를 제외하고 함수 상단에 모든 변수를 선언하면 울부 짖습니다.
  • 모든 함수를 파이썬의 클래스에 넣으면 Java가 아닌 페이스 팜이 될 것
    입니다.
  • return null스칼라에서는 울지 만 C와 같은 언어는 아닙니다
    (스칼라에는 Option유형 이 있기 때문에 )
  • Java에서 재귀 알고리즘을 작성하지만 OCaml에서는 재귀 알고리즘을 작성하지 않을 경우 불만을 제기합니다
    (Java의 스택은 빠르게 오버플로되기 때문에 OCaml은 테일 콜 최적화 기능이 있습니다)

마치 당신이 아는 것처럼 새로운 언어를 사용하는 것이 쉽고, 운이 좋으면 작동합니다. “모든 언어로 포트란을 작성할 수 있습니다”. 그러나 X가 제공하는 특정 기능을 무시하고 싶지는 않습니다. X가 U보다 이점을 제공 할 가능성이 높기 때문입니다.

사용 가능한 라이브러리 및 현재 실행중인 작업에 대한 최적의 실행 환경에서 사용할 언어를 선택합니다. ”–이 언어 X가 실제로 해당 작업에 대한 언어 U보다 나은지 여부는 해당 언어에 익숙한 정도에 따라 달라집니다. 잘 사용하려면 충분히 익숙해지는 데 얼마나 걸릴까요? 오래된 펜 나이프가 손에 완벽하게 맞기 때문에 실제로 나무를 가장 빨리 자르기 때문에 무거운 전기 톱을 생산하지 않습니다. 실제로 나무를 쓰러 뜨리고 싶지 않다면.

그러나 귀하의 질문은 문화적 문제에 관한 것입니다 . 모든 모범 사례를 배우는 데 많은 시간이 걸리고 초보자는 가장 많은 질문을하는 반면 전문가는 대답합니다. 그러나 전문가에게 분명한 것은 초보자에게는 분명하지 않으며 때로는 전문가를 잊어 버립니다. 초보자로서 해결책은 질문하는 것을 멈추지 않는 것입니다. 그러나 모범 사례를 배우고 적용 할 수있는 개방성을 보여줄 수 있습니다 (예 : 다른 사람 에게 코드를 보여주기 전에 코드를 최대한 정리 하려고 함) . 대부분의 언어에는 전체 학습 곡선이 실제로 매우 길더라도 배우기 쉬운 몇 가지 핵심 모범 사례가 있습니다.

일반적인 문제는 프로그래밍에 익숙하지 않은 사람들은 들여 쓰기 나 다른 서식을 무시하고 프로그램이 작동하지 않아 혼란스러워한다는 것입니다. 혼란 스러울 것입니다. 프로그램을 이해하는 첫 번째 단계는 프로그램이 완벽하게 배치되었는지 확인하는 것입니다. 그런 다음 잊어 버린 닫는 따옴표 나 누락 된 쉼표와 같은 간단한 오류가 갑자기 분명해집니다. 모범 사례는 오류 방지, 모범 사례는 오류를 더 쉽게 발견하고 모범 사례를 적용 하면 문제 발견 하기 전에 오는 다른 모범 사례에 대한 은유입니다 .

"나중에 고칠 것"이라고 말하기에는 너무 싸다. 지금 고칠 때 문제가 해결되었을 것이다 (또한 "정리 된"정리 단계 "는 결코 올 수 없을 것이다.) 처음으로). 최소한 다른 사람에게 도움을 요청하기 전에 코드를 가능한 한 좋게 만들려고하면 코드에 대한 추론이 쉬워 지므로 예의 바르게해야합니다.


당신은 당신이 한 몇 가지 요점에 대해 옳습니다. 그러나 결국 나는 당신이 마크를 치고 있다고 생각하지 않습니다. 지식을 얻을 수있는 경험을 갖기 전에 지식을 얻는 것으로 가정합니다.
Onno

4
@Onno 나의 주요 요점 (당신이 묻는 질문에 대답하는 것)은 한 언어에서 습관을 넘길 수 없으며 다른 언어에서는 모범 사례라고 가정하고 처음부터 깨끗한 코드를 작성하는 것이 청소보다 선호된다는 것입니다 나중에. 다른 사람에게 도움을 요청하기 전에 코드를 정리하는 것이 가장 중요 합니다 ( 좋은 코드 스 니펫에 대한 팁 은 sscce.org 참조 ). "이 문제를 해결하십시오"로 SO에 쓰레기 코드를 덤핑하는 것은 특히 더 잘 알고 있으면 용납 할 수 없습니다.
amon

2
그러나 당신이 암시하는 질문에 관해 : jm666의 대답 은 핵심 요점을 포함합니다. 전문가는“X- 구루가되고 싶지 않다면 X에 대해 왜 물어 보겠습니까?”라고 생각합니다. . 이를 막을 수있는 가능한 방법은 여전히 ​​학습 곡선의 시작에 있고 나중에 살펴볼 것이지만 지금 당장 더 즉각적인 의문을 갖게 될 것입니다. 그러나 이것은 프로그래밍 문제가 아니라 통신 문제입니다.
amon

6
모두 C ++와 C #을 가지고 optional<T>Nullable<T>각각. 또한 실제로 모든 사람은 RAII없이 ++에서 C ++로 메모리를 유출합니다.
DeadMG

블록 시작 부분에 변수를 선언하면 일반적으로 대부분의 언어에서 코드를 쉽게 읽을 수 있습니다. 이런 식으로 모든 변수의 유형과 유형을 기억하는 데 도움이 필요할 때 정확히 어디를보아야하는지 알 수 있습니다.
양념

12

저는 하드 코어 C ++ 개발자는 아니지만 ...

리팩토링이 나중에 더 강력 해지면 프로토 타입 상황에서 더 많은 오류가 발생하기 쉬운 코드를 사용하는 것이 왜 나쁜 프로그래밍 관행입니까?

명심해야 할 것은 C ++의 오류는 일반적으로 "정의되지 않은 동작"을 의미한다는 것입니다. 안전한 언어로 발생할 수있는 최악의 상황은 프로그램을 즉시 종료하는 예외입니다. C ++에서 segfault를 얻는다면 운이 좋다. 프로그램이 미묘하게 잘못하고있는 것이 전적으로 가능합니다. 또한 일정 기간 동안 올바르게 동작하고 훨씬 나중에 버그를 나타내거나 항상 올바르게 동작하지만 결국 모든 메모리를 소모 할 수 있습니다.

어쨌든 프로그램 실행을 완전히 벗어나 미지의 영역으로 옮기는 것은 단 한 번의 실수입니다. 풀 타임 C ++ 개발자에게 "기본 사례"는 "정의되지 않은 동작 또는 메모리 누수 가능성 없음"을 의미 할 수 있습니다.

C ++로 작성된 프로그램은 Java로 작성된 것과 어떻게 비슷합니까? 무엇이 나쁜 프로그램입니까?

나는 이것에 대한 답이 크게 추측되고 의견이 없다고 생각하지 않습니다. 그래도 내 견해를 원한다면 Java에는 모든 것이 객체 여야한다는 사실과 같은 몇 가지 반 패턴이있는 경향이 있습니다. 다른 언어는 포인터, 펑 또는 기능을 건네 줄 경우, 자바 당신은 일반적으로 공허하고 좁게 유용한 톤의 발견 ThingDoers, FooFactories그리고 IFrobnicators변장 단지 기능입니다.

마찬가지로 다른 언어에서는 간단한 튜플 또는 이름없는 구조체를 전달할 수 있지만 Java에서는 2 개의 객체 만 간단한 데이터 컨테이너에 묶으려면 30 개 이상의 NamedThing 클래스를 setter, getter 및 Javadoc로 미리 정의해야합니다. Java의 상대적 기능 부족으로 인해 프로그래머는 때때로 객체 지향 이중 백 플립을 수행하여 작업을 수행해야합니다. 결과 코드는 Java 외부에서는 관용적이지 않습니다.

C ++에서는 메모리를 수동으로 관리하기 위해 매우 단순화 된 객체 그래프가 필요하다는 사실이 있습니다. 일반적으로 객체는 정확히 하나의 다른 객체가 소유합니다. Java에서는 가비지 수집기가 참조가 더 이상 없을 때 정리할 수 있으므로 엄격한 제약 조건을 따를 필요가 없습니다. 따라서 Java에서 C ++로 코드를 음역하는 경우 메모리 관리가 잘못 될 위험이 있습니다.

마지막으로, 그것은 엘리트주의 일 수 있습니다. 나는 그들이 대다수를 구성하는 척하지는 않지만, 일부 C ++ 개발자들 사이에서 "내 손을 잡고 어리석은 일을 할 수있는 언어가 필요하지 않다"는 감정을 분명히 보았습니다. 그들의 생각에 C ++은 "실제"언어이며, 당신이 그 특질을 다룰 수 없다면 당신은 "실제 프로그래머"가 아닙니다.


1
이것의 대부분은 Java 8로 완화됩니다.-Lambdas는 대부분 하루를 절약 하기 위해 타기 :-)
Martijn Verburg

@MartijnVerburg 합의, 큰 발전. 그러나 기술적 인 문제는 해결하기 쉬운 문제입니다! 오래된 습관은 심하게 죽고 낙인은 더욱 어려워집니다. 도대체 어떤 사람들은 자바가 이러한 "새로운"기능을 필요로하지 않고 다음 C ++가되기 위해 항의 할 정도로 불만을 제기 할 것이다.
Doval

그래, 나는 항상 고개를 숙이고있다-자바 장기적으로 장기적으로 다른 언어보다 고의적으로 항상 느리게 진화 할 것이다 . 그러나 JVM은 약간 더 빠르게 도약하여 람다와 같은 것들이 결국 언어에 도달하게합니다.
Martijn Verburg

6

주제 답변을 약간 벗어났습니다 ...

걱정하지 마십시오. 이것은 모든 전문가 커뮤니티에서 공통적 인 "동작"입니다. 그리고 어떤 언어라도 능숙하다면 "이상한"코드를 만나게 될 것입니다. 아마 당신도 그것을 비판 할 것입니다. (교육을 원하기 때문에).

나는 펄 세계에 있습니다-언제 다음과 같은 것을 보게 될 것입니다 :

$imax=$#array;
$str=""
for($i=0; $i<$imax; $i++) {
    $str = "$str" . $array[$i];
}

대신에:

my $str = join '', @array;

확실히 그 join기능 에 대해 주석을 달 것입니다-(읽기 : 저자를 가르치십시오) .

어쨌든, 너무 많은 비판은 전혀 비생산적이며, 가장 좋은 예 중 하나는 다음과 같습니다 (:에서 잡고 http://perl-begin.org/humour/#How_can_I_switch_off_the_T.V..3F )

(이 비트는 2011 년 3 월 23 일에 pastebot에 익명으로 게시되었습니다. 일부 편집 후 후손을 위해 여기에 배치됩니다.)-약간 편집 됨

질문 : TV를 켜려면 어떻게해야합니까?

OP가 듣고 싶은 것?

예를 들면 : TV 리모컨의 켜기 / 끄기 버튼을 찾아서 누릅니다. 버튼은 일반적으로 빨간색이며 리모컨의 맨 위 줄에 있습니다.

#perl 전문가의 답변 : 첫째, "켜기"는 무엇을 의미합니까? 먼저 정의하십시오. TV, TV 리모컨 및 거실도 붙여 넣습니다.

... 노 페이스트 후 :

당신의 방은 못 생겼습니다. 그리고 TV는 끔찍해 보인다. 화면에서 Mr. Clean을 사용하고 먼저 거실을 청소하십시오. 2 개 대신 3 개의 청소 걸레를 사용하십시오. 정말로 원하지 않는 한 HDMI를 사용하고 Scart (?) 커넥터를 사용하지 마십시오. TV 리모컨에 읽을 수없는 버튼이 있습니다. 먼저 청소하십시오. 당신은 초보자이므로 다음을 읽으십시오.

http://experts.blog/how_to_design_a_future_3D_TV.html http://experts.blog/the_basics_of_tv_repairing.html http://experts.blog/viruses_in_living_room_short_essay.html http://experts.blog/global_chip_replacement_guide.html

IRC 손님 :하지만 TV 전문가가되고 싶지 않습니다.

답 : 왜 TV를 켜고 싶습니까?!


1
이 답변은 주제가 아닙니다 . 그것은 왜 누군가가 언어의 틀에 박힌 언어 사용을 비판하는지, 그리고 왜 자동 비판이 너무 멀리 갈 수 있는지를 설명합니다. 나는 그것을 좋아한다.
trichoplax

1

리팩토링이 나중에 더 강력 해지면 프로토 타입 상황에서 더 많은 오류가 발생하기 쉬운 코드를 사용하는 것이 왜 나쁜 프로그래밍 관행입니까?

나중에 고칠 생각으로 빠르고 더러운 글을 쓸 때는 고칠 필요가있는 것을 잊을 위험이 있습니다.

C ++로 작성된 프로그램은 Java로 작성된 것과 어떻게 비슷합니까? 나쁜 프로그램은 무엇입니까? (현재 스타일의 의도와 개선하려는 계획된 작업을 고려한 것을 고려하면)

Java에서는 특정 객체를 소유 한 사람에 대해 생각할 필요가 없으며 참조를 전달하고 아무것도 아닌 것처럼 잊어 버립니다. 그러나 C ++에는 누가 객체를 소유하고 있으며 누가 객체를 정리할 것인지에 대한 명확한 정의가 필요합니다.

특정 프로그래밍 패러다임 (예 : OOP / DP)에 사용되는 구문을 사용하기로 선택한 경우 어떻게 나쁜 전문가가 되겠습니까?

당신은하지 않을 것입니다; C ++은 다중 패러다임 언어이며, OOP를 잘 지원하지만 다른 많은 작업도 수행 할 수 있습니다. 그러나 대부분은 나무에 뾰족한 스파이크를 날릴 때마다 망치를 당기는 대신 작업에 올바른 도구를 사용하는 것으로 요약됩니다.

당신이 나쁜 반응을 얻은 이유는 SO에있는 대부분의 사람들이 당신이 요구하는 언어로 관용적으로 코딩하는 방법으로 기술을 판단하는 경향이 있기 때문입니다. C ++에 익숙한 사람들은 과거에 물린 것처럼 보이는 나쁜 코드를 볼 때 무릎을 꿇는 경향이 있습니다.


개선을 잊어 버리는 것이 일부에게는 문제가 될 수 있지만 긴 작업 목록을 유지하고 있으며 이러한 종류의 작업에 대해 할 일 태그를 추가하는 데 매우 능숙합니다. (그래서 VS를 좋아하는 이유는 작업 관리에 매우 좋습니다) 문서와 동일합니다. 설명서를 작성하기 전에 코드 줄을 쓰지 않습니다. 소유권 질문에 관해서는 시퀀스 다이어그램으로 인해 누가 누구에게 링크가 있는지 잘 알고 있다고 생각합니다.
Onno

1
@Onno : 솔직히, 아무도 당신이 개인적 으로 그 물건을 얼마나 잘 추적 하는지 알거나 신경 쓰지 않습니다 . Java 또는 C처럼 보이는 C ++를 작성하는 대다수의 사람들은 그다지 세심한 것이 아닙니다. 경험에 의하면 실제로는 실제로 그렇게하지 않는 것으로 나타났기 때문에 나중에 돌아가서 나중에 고칠 메모를 작성하는 것보다 처음에 올바른 일을 배우는 것이 훨씬 낫습니다.
cHao
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.