"적절한"프로그래밍은 언제 더 이상 중요하지 않습니까?


49

여가 시간에 안드로이드 게임을 만들고 있습니다. 그것은 libgdx 라이브러리를 사용하고 있기 때문에 꽤 많은 노력이 필요합니다.

개발하는 동안 일부 절차에 대해 부주의하게 데이터 유형을 선택했습니다. 연관 배열에 가까운 것을 원했기 때문에 해시 테이블을 사용했습니다. 사람이 읽을 수있는 키 값. 비슷한 것을 달성하기 위해 다른 곳에서는 벡터를 사용합니다. libgdx에 vector2 및 vector3 클래스가 있지만 결코 사용하지는 않았습니다.

이상한 문제를 겪고 도움을 위해 스택 오버플로를 검색하면 다른 사람들이 기술적으로 "적절한"경우 특정 데이터 유형을 사용하는 질문에 답하는 사람들이 많이 있습니다. ArrayList를 사용하는 것과 같이 정의 된 경계가 필요하지 않고 새로운 알려진 경계로 int []를 다시 정의합니다. 또는 다음과 같이 사소한 것도 있습니다.

for(int i = 0; i < items.length; i ++)
{
    // do something
}

모든 반복에서 item.length를 평가한다는 것을 알고 있습니다. 그러나 아이템이 15 ~ 20 개를 넘지 않아야한다는 것도 알고 있습니다. 반복 할 때마다 items.length를 평가해야합니까?

방금 설명한 방법과 적절한 방법을 사용하여 앱의 성능을 확인하기 위해 몇 가지 테스트를 실행했으며 튜토리얼을 따르고 커뮤니티에서 제안한 정확한 데이터 유형을 사용했습니다. 결과 : 같은 것. 평균 45fps 전화와 은하계 탭에서 모든 앱을 열었습니다. 차이 없음.

그래서 나는 당신에게 내 질문이 있다고 생각합니다 : 더 이상 적절하지 않을 때 임계 값이 있습니까? "작업이 완료되는 한 신경 쓰지 않습니까?"


4
그것은 규모의 문제입니다. 분당 수천 건의 요청으로 1 초 미만의 응답 시간으로 검색 및 집계 기능을 제공하여 테라 바이트 급 데이터베이스를 현실 세계에 제공하십시오. 당신의 문제는 충분하지 않습니다. 당신의 접근 방식은 훌륭하지만 그 길을 따라 가면 불가피한 결론에 도달하는 데 시간이 걸리는 고통스러운 방법입니다.
지미 호파

8
언어에 실제 FOR 루프가있는 경우 해당 다중 평가 문제가 발생하지 않습니다. 불행히도 C 구문은 실제로 FOR 루프가 아니기 때문에 필요합니다. 가발과 큰 코 안경을 착용하는 WHILE 루프이며 루프 종료를 위해 임의의 조건을 수용해야합니다 (또는 전혀 없음).
메이슨 휠러

2
편집 내용을 볼 수 있지만 금요일 밤에 지정된 운전자와 파티를하는 것을 제외하고 어떤 상황에서도 취하고 무모한 경우를 확인하려는 경우 잘못된 트리를 짖는 것일 수 있습니다.
Robert Harvey

17
반복 할 때마다 item.length를 '평가'한다는 것을 어떻게 알 수 있습니까? 컴파일러는 매우 영리합니다. 그리고 item.length를 반복적으로 가져와도 어떻게됩니까? 'int itemsLength = items.length;와 같은 코드를 보는 것이 싫습니다. 성능 문제가 측정되지 않은 경우 (; i <itemsLength; ...) '
케빈 클라인

6
items.length는 "적절한 프로그래밍"과 전혀 관련이 없습니다. 그것은 미세 최적화이며 훌륭한 프로그래머는 프로파일 러를 실행하고 실제 성능 문제가 있는 곳을 알 때까지 시간을 낭비하는 것보다 더 잘 알고 있습니다. 마이크로 최적화와 좋은 프로그래밍 스타일은 종종 같은 것이 아니라 반대입니다.
Michael Borgwardt

답변:


65

문제를 해결하기위한 프로그램을 작성합니다. 이 문제에는 문제 해결을위한 특정 요구 사항이 수반됩니다. 이러한 요구 사항이 충족되면 문제가 해결되고 목표가 달성됩니다.

그게 다야.

이제 모범 사례를 준수하는 이유는 일부 요구 사항은 유지 관리 성, 테스트 가능성, 성능 보증 등과 관련이 있기 때문입니다. 따라서 적절한 코딩 스타일과 같은 것을 요구하는 나와 같은 성가신 사람들이 있습니다. T를 교차시키고 I를 점으로 표시하는 데 훨씬 많은 노력이 들지 않으며 나중에 코드를 읽고 그것이 무엇인지 알아 내야하는 사람들에게 존경의 몸짓입니다.

대형 시스템의 경우 이러한 종류의 구속과 훈련은 필수적입니다. 다른 모든 시스템과 잘 작동해야 프로젝트가 자체적으로 무너지지 않도록 기술적 부채를 최소화해야하기 때문입니다.

스펙트럼의 반대편에는 현재 특정 문제를 해결하기 위해 작성하는 일회용 유틸리티, 다시는 사용하지 않는 유틸리티가 있습니다. 이러한 경우 스타일과 모범 사례는 전혀 관련이 없습니다. 당신은 일을 함께 해킹하고 실행하고 다음 일에 착수합니다.

따라서 소프트웨어 개발에서 많은 것들과 마찬가지로, 그것은 의존합니다.


1
나는 동의하는 경향이있다. 직장에서 나는 질문하지 않고 교차하고 점을 찍습니다. 그러나 내가 일을 위해하는 많은 일들이 실제로 유지 될 필요가없는 일회성이라고 생각하십시오. 트렌드를 전달합니다. 생일 앱,왔다 갔다하는 것들. 거기에 모두 적절하지만 실제로는 필요하지 않습니다.
Kai Qing

21
항상 징계를 받으면 필요할 때 징계하기가 더 쉬워집니다. 어떤 사람들은 Shift 키를 누르지 않고 Stack Overflow에 대해 질문을합니다. 이론 없이는 아이디어를 적절하게 전달할 수 있으며 영어는 유동적이고 진화하는 것입니다. 내 CPU 시간이 비어 있다고 생각하는 바이러스 작성자를 제외하고는 더 이상 화를 내지 않습니다.
Robert Harvey

2
@KaiQing 누군가가 당신에게 파스칼에서 태어 났고 그 이후로 포팅 된 5mloc 레거시 애플리케이션을 전달해야합니다.이 애플리케이션에서 기능을 추가하거나 변경하려는 첫 번째 시도에서 베스트 프랙티스가 존재하고 깨달은 이유를 즉시 알게 될 것입니다.
지미 호파

5
@KaiQing에서 Angry Birds는 여러 플랫폼에서 실행되어야하며, 게임이 2 초 동안 중단되면 청중의 x %가 포기합니다. 이는 Angry Birds 사용자에게 적은 달러로 해석됩니다. 나는 그것이 매우, 매우 신중하게 쓰여졌다 고 확신합니다. 아마도 이것은 당신의 질문에 대답 할 것입니다. 코드가 당신만을위한 것이라면 누가 당신의 행동을 신경 쓰나요? 돈이나 다른 사람들의 시간이 위기에 처해 있다면 매우 조심해야합니다.
Charles E. Grant

2
@KaiQing 아무도 당신에게 그 임계 값을 말할 수는 없습니다. 그것은 시간이 지남에 따라 프로젝트마다 다르며 각 프로젝트마다 다릅니다. LOC, 사용자 기반, 개발자 기반, 응용 프로그램 유형 (암호화 대 크루 드 대 드라이버), 기능 견고성, 중복 요구 사항, 소프트웨어 중요도 (이메일 서버 대 생명 유지 장치 대 시계 위젯), 지원 플랫폼, 기술 스택, 거래 또는 분석되는 데이터 양, 내역 감사 제약 조건 및 불량 코드의 영향에 영향을주는 여러 가지 사항
Jimmy Hoffa

18

현명한 인용구가있다. "노인의 발자취를 따르지 마라. 그들이 찾은 것을 찾으 라." '적절한'코딩의 모든 규칙에는 이유가 있습니다. 이러한 규칙이 존재하는 이유를 아는 것이 해당 규칙이 무엇인지 아는 것보다 중요합니다.

그런 식으로 for 루프에서 반복적으로 다시 계산할 수있는 테스트를 수행해서는 안되는 규칙이 있습니다. 규칙이 해결되도록 고안된 경우 (성능이 실제로 다를 수 있음), 이치에 맞습니다. 이 경우 정답은 하나뿐입니다. 귀하의 예에서는 성능 차이가 없으며 수십 번의 반복이 불가능하다는 것을 알고 있습니다. 이 경우 어쨌든 규칙을 적용 할 수있는 두 가지 정답이 있습니다. 규칙이 단순하고 아무 것도 해치지 않으며 좋은 습관을 형성하는 데 도움이 될 수 있기 때문에 걱정할 성능 차이가 없으므로 규칙을 무시하는 것입니다.

나는 첫 번째 정답을 선호하고 두 번째 답을 선호하는 것처럼 보입니다. 당신은 그것에 대해 틀리지 않습니다. 나는 '적절한'프로그래밍이 무엇인지에 대한 당신의 생각이 틀렸다고 생각합니다. 그것은 당신에게 도움이되지 않고 목적이없는 무작위로 선택된 규칙 집합을 따르는 것이 아닙니다. 예제에서 for 루프를 수정하지 않으면 실제로 조기 최적화에 대한 매우 좋은 규칙을 따릅니다.

실제 적절한 프로그래밍은 지능적인 방식으로 이해하기 좋은 규칙을 따르는 것입니다.


나는 두 번째를 선호한다고 말하지 않을 것입니다. 누군가 가이 안드로이드 게임을 거의 완전히 취하게 만드는 것에 대한 부분을 제거하기 위해 내 게시물을 편집했습니다. 나는 이상한 클래스를 테스트하기 위해 적절한 클래스로 대체했습니다. 규칙이 무엇인지 아는 것이 규칙이 무엇인지 아는 것보다 중요하다는 데 동의합니다.
Kai Qing

또한, "적절한"프로그래밍에 대한 나의 생각은 스택 오버 플로우 커뮤니티의 반복적 인 의견과 내가 일하는 회사에서 왔다가 프로그래머를 모은 것이다. 일부는 CI 학위를 가지고 있으며, 일부는 자기 교육을 받았습니다. 근거를 두는 데는 일반적인 의견이 있으며 한 가지 방법이 옳고 한 가지 방법이 잘못되었다고 결정하기 전에 모든 사람들이 집단적으로 말하는 것에 동의하는 경향이 있습니다. 참여해 주셔서 감사합니다.
Kai Qing

1
내가 규칙을 어겼다는 말을 들었던 것처럼 들리면 나쁘게 표현했습니다. 당신이했던 것에 대해 내가 반대하는 것은 없습니다. 저는 "법의 정신"이 "법의 편지"보다 더 중요하다는 것을 지적하려고했습니다.
Michael Shaw

아니, 난 네가 나 한테 말하고 있다고 생각하지 않았다. 나는 단지 의사 소통을하고있었습니다. 나는이 질문에 이유를 물었고이 많은 사람들이 닫히지 않고 투표하지 않고 기쁘다.
Kai Qing

10

이를 보는 올바른 방법은 수익을 줄이는 것입니다. 프로그램 개발의 추가 이점을 추가 개발 비용과 비교합니다.

한계 이익이 한계 시간 / 노력보다 적을 때 수익률이 감소합니다.

루프 items.length밖으로 나가기 위한 비즈니스 사례를 만들 수 있습니까 for? 경제적으로, 그러한 변화는 그것을 정당화하는 데 소비 한 시간을 정당화 할 수 있습니까? 사용자 경험에는 차이가 없으므로 측정 시간 (기억해야 할 유용한 교훈을 제외하고)까지도 아무 것도 얻지 못합니다. 사용자는 프로그램보다 더 이상 프로그램을 좋아하지 않으며 변경으로 인해 더 많은 사본이 판매되지 않습니다.

비즈니스 사례는 알 수없는 위험과 위험으로 가득 차 있기 때문에 항상 평가하기 쉽지는 않습니다. 따라서 이해하지 못하는 요소에 노출 될 수 있습니다. 제안 된 변경은 큰 차이가 없도록 완전히 사소하지 않을 수 있습니다.

반품 유형의 사고는 행동을 취하지 않는 변명을 찾고, 위험을 피하는 것을 피할 수 있습니다.

그러나 때로는 무언가를하지 않아야 할 때 분명 합니다. 개발 비용 중 일부가 개발 비용을 지불하기 위해 경제 기적을 요구하는 것처럼 보이는 경우 (아직도) 나쁜 생각 일 수 있습니다.


잘 쓰여졌습니다. 제 경우에는 계획된 귀환이 없었습니다. 반품은 우연히 발생할 수 있지만 가장 큰 성공은 flukes로 시작된 것으로 생각되므로 해고해서는 안됩니다. 클라이언트 작업의 측면에서, 돈이 많이 들지 않는 경우 앱이 중단되거나 사소한 불편이 발생하면 악화 될 수 있으므로 임계 값이 더 두껍습니다. 벤치 마크가 좋아 보이지만 코드가 가장 효율적이지 않은 것으로 판명되면 아무도 코드 진행 전에 감사하지 않고 마이그레이션을 요구하지 않을 것입니다.
Kai Qing

과연. 우리는 항상 객관적인 사례를 만들 수는 없습니다. 모든 사람이 같은 방식으로 프로그램을 평가하는 것은 아닙니다. 프로그램의 주요 유틸리티가 작업의 즐거움이라고 가정하십시오. 그것은 다른 사람에게는 도움이되지 않을 것입니다 (아무도 프로그래머 이외의 사용자가있는 경우에도).
Kaz

아주 잘 쓰여진 답에 추가 할 두 가지 유용한 단어 인 "투기 투자 (Speculative Investment)"는 미래에 수익이 올 것이라고 추측하기 때문에 그렇게합니다.
mattnz

@ mattnz-당신이 말하는 것은 반환이 좋은 웃음이더라도 아무도 반환을 위해 무언가를하지 않는다는 것입니다. 거의 모든 개인 프로젝트는 유머를 위해 이루어집니다. 거의 모든 사람들이 요구 사항을 정당화하기에 충분합니다. 그들 중 어느 것도 나를 끝내지 못했습니다.
Kai Qing

정확합니다. 먼저 우리는이 프로그램을 작성하지 못하거나 계속하기를 원하는 것을 결정합니다. 그것은 "재미 있도록 시간을 지나가는 것"일 수 있습니다. 그러나 그때조차도, 우리는 생각할 수 있습니다 : 그러한 것들과 그러한 프로그램에서 그런 일을하고있는 것이 가장 재미 있거나 다른 일에 시간을 투자하는 가장 좋은 방법입니다.
Kaz

3

"적절한"코드를 신경 쓰지 않아야 할 때

  • 비즈니스 목표를 달성하고 시간이 지남에 따라 오버 헤드를 낮게 유지하십시오. (사용자는 지불하기 전에 소스를 보지 않습니다)
  • MVP / POC-적절한 코드를 작성하는 것이 돈을 버는 방법을 알기 전에 개념에 시간을 낭비하는 것을 의미하는 경우 (수년과 4 천 5 백만 달러를 앱을 작성하고 시장이 없어서 상점을 폐쇄하는 경우 아무도 신경 쓰지 않습니다. 적절한 코드였습니다)
  • 생명을 위협하는 상황에 처했을 때 (예 : 아이언 맨 프로토 타입 1은 더러운 핵 이었지만, 동굴 밖으로 나갔습니까?)
  • 또는 단순히 올바른 코드를 작성하는 방법을 모른다면 (일부 사람이 적절한 코드를 작성하지 않고 현재 코드를 작성하는 경우 노숙자보다 나쁜 코드를 작성하는 것이 좋습니다)
  • 단순히 자신이하는 일을 알고 있거나 자신을 가장하여 도망 칠 수 있다고 생각한다면

적절한 코드를 작성하는시기

  • 비즈니스에 중대한 영향을 미치는 경우 (예 : 성과가 수익에 영향을 미치거나 판매를 방해 할 수 있음)
  • 코드를 유지 관리하는 것이 비즈니스 문제가되는 것이 적절하지 않은 경우 (높은 유지 관리 비용)
  • 대규모 오픈 소스 프로젝트를 수행하는 알려진 프로그래머 인 경우
  • 사내 도서관을 세계에 제공하는 대기업과 동일
  • 향후 인터뷰에서 작품을 포트폴리오로 보여주고 싶다면

1
안타깝게도 많은 사람들이 알지 못하는 축복을받는 적절한 목록이되기를 간절히 바라지 않는 또 하나의 방법이 있습니다. 때로는 시간 및 / 또는 예산이 적절한 코딩에 적합하지 않으며 프로젝트에 대한 관심이 비즈니스 트랜잭션보다 더 큰 은혜입니다. 예를 들어, 코드에서 더 이상 사용되지 않는 메소드를 사용하지만 웹 시나리오에서 말하는 일부 패치가 필요한 경우. 모든 것을 고칠 수 없습니다. 더러워 져야합니다.
Kai Qing

"코드를 유지 관리하는 것이 비즈니스 문제가되는 것이 적절하지 않은 경우 (높은 유지 관리 비용)." 이 임계 값은 실제로 경험이없는 대부분의 개발자가 생각하는 것보다 상당히 낮습니다. 확실한 코드를 작성하면 며칠 또는 몇 달이 아닌 몇 시간 내에 비용을 상환하는 경우가 많습니다.
PeterAllenWebb

2

성능이 주요 관심사입니까? 그것이 당신이 극대화하려는 것입니까?

그렇다면 배우는 기본 교훈이 있으며, 그렇게하면 몇 안되는 사람이 될 것입니다.

더 빨리하기 위해해야 ​​할 일을 "생각"하려고하지 마십시오. "이 컨테이너 클래스를 사용해야합니까?"또는 " length루프 상태를 설정해야합니까?" 환자에게 질문 또는 검사.

추측하고 있습니다. 모두가 그것을하지만 작동하지 않습니다.

대신 프로그램 자체에 문제가 무엇인지 알려주십시오. 자세한 예는 다음과 같습니다.

차이점이 보입니까?


테스트에서 지정된 시나리오에 대한 데이터 유형의 부적절한 사용과 적절한 사용간에 성능 차이가없는 것으로 나타났습니다. 귀하의 제안 에서처럼, 나는 더 많은 데이터로 클래스를 오버로드하여 차이를 만들기에는 너무 작지 않은지 확인했습니다. 결국 둘 다 똑같이 수행되었습니다. 물론, 저는 기본 RPG 유형 게임을 만들고 있습니다. 은행 소프트웨어 나 복잡한 것과는 다릅니다. 그러나 비즈니스가 항상 적절하지 않은 것이 더 나을지 궁금해졌습니다.
Kai Qing

퍼포먼스가 중요하기 때문에, 당신은 당신의 선험적 인 질문이 차이를 만들지 않고 묻지 말고 프로그램에 질문해야합니다. 이 링크를 클릭 하고 그 내용을 따르십시오. 프로그램이 실제로 시간을 보내는 것에 대해 알려주고 더 빨리 만드는 방법을 알려줍니다.
Mike Dunlavey

글쎄, 성능은 의문 절차의 기초였으며 반드시 걱정할 필요는 없었습니다. 나는 말 당 벤치마킹하려고하지 않습니다. 비효율적 인 코드는 성능 차이를 나타내지 않음을 관찰했습니다. 프로그램이 얼마나 효율적이거나 비효율적 이었는지는 사용자에게 투명하므로, 그러한 프로파일 링에 대한 관심은 무의미합니다. 물론, 처음에는 벤치마킹에 관심이 있었지만 대부분 호기심이었습니다. 그리고 제품이 완성되고 눈에 띄게 느리면 프로파일 러가 의미가 있습니다. 링크 주셔서 감사합니다
Kai Qing

2

귀하의 질문은 "작업이 완료되는 한 신경 쓰지 않습니까?"입니다.

제 대답은 "코드에 어떤 일이 일어날 지 전혀 모른다"입니다. "사용자 문제를 해결하기 위해이 빠른 작업을 작성하겠습니다."로 시작한 많은 프로젝트에 참여했습니다. 그것을 쓰고, 거기에 넣고, 다시는 생각하지 마십시오.

한 번, 내가 쓴 것은 "오, 이제 사용자 부서 전체가 그 코드를 사용하고 싶다"로 바뀌 었습니다.이 코드를 사용하기 전에 "회사 전체가 해당 코드를 사용하고 있으며 이제는 감사에서 살아남을 것임을 증명해야합니다" 내일 예정된 20 명 코드 검토가 있으며 일부 부사장이 이미 고객에게 판매했습니다. "

나는 당신이 "여가 시간에 안드로이드 게임을 작성하고있다"는 것을 알고 있지만, 그 게임이 이륙하여 명성과 행운의 표가 될지 결코 알 수 없습니다. 더 나쁜 것은, 그 게임은 사람들의 전화를 계속 부수기 때문에 악의적 인 티켓이 될 수 있습니다. 누군가의 자녀가 휴대 전화에서 게임을하는 것을 멈출 수 없기 때문에 구인을 받고 싶은 사람이되고 싶습니까, 아니면 이와 같은 게시판에서 비방을받는 사람이되고 싶습니까?


1

대답은 결코 중요하지 않으며 항상 중요하다는 것입니다.

적절한 프로그래밍이든 아니든 프로그래밍은 목표 자체가 아니라 목표를 달성하는 방법이기 때문에 중요하지 않습니다. "적절한"프로그래밍없이 그 목표를 달성하면 괜찮습니다 (비즈니스 관점에서는 프로그래밍없이 목표를 달성 할 수있는 것이 가장 좋습니다).

적절한 프로그래밍은 목표 달성에 도움이되는 도구이기 때문에 항상 중요합니다. 일을하는 올바른 방법은 단순히 다른 방법으로하는 것이 장기적으로는 절약하는 것보다 더 많은 고통을 초래한다는 인식입니다.

어느 것이 당신이 그것을 무시할 수 있는지에 대한 질문에 대답합니다-장기적으로 다른 방법이 더 쉬울 것이라고 확신 할 때 (아마도 장기가 없기 때문에).

일회용 도구는 일반적으로 오류 점검이나 기타 유효성 검사가 거의 또는 전혀없고, 예외 로깅, 일반적인 변경 대신 약간의 변경 또는 변경이없는 cut-n-paste 코드 등을 사용하여 최대한 빠르고 더러운 작업을 수행합니다. .

그냥 조심하십시오 : 때로는 그 빠르고 더러운 앱이 자신의 삶을 사로 잡습니다.


1
"never"와 "always"는 서로를 취소합니다. 좋은 대답과 나쁜 대답 모두.
Tulains Córdova에서

@ user1598390 : 서로를 취소하는 것이 핵심이었습니다. 교리를 취소하면 유용한 것처럼 남게됩니다. 그리고 당신은 그것을 잘못 알고 그로부터 배울 것입니다.
jmoreno

나는 당신에게 동의한다고 말하고 싶지만 그런 극단으로 가져 가지 않았을 것입니다. 나는 한 번의 오프가 종종 뱉어 내고 테스트 나 디버깅을 탈출한다고 생각하지 않습니다. 최적화되지 않았고 완벽하게 설계 되었기 때문에 성능과 안정성이 숏 커트의 영향을받지 않는 경우 제품을 덜 만들지 않습니다. 어느 것이 궁극적으로 내 요점이며 왜 모든 사람들이 왜 최고가 아닌 코딩 예제에 대해 악취가 나는지 궁금합니다. stackoverflow에서 많이 발생합니다.
Kai Qing

@KaiQing : 테스트 및 디버깅은 물론 발생하지만 일반적으로 현재 존재하는 것으로 제한됩니다. 예를 들어 UTF 인코딩이있는 파일로 프로세스가 실패하고 실제로 작업중인 파일이없는 경우 당신은 그것을 테스트하지 않습니다. 성능 문제가 확인되면 최적화를 수행해야합니다. SO의 라인 코딩 예제 중 최고가 아닌 이유에 대해서는 사이트 목표의 기능이라고 생각합니다. 그것은 영구적 인 자원을 목표로하고, 답변의 코드 (및 질문)는 마치 다른 사람들이 사용하는 템플릿 인 것처럼 보입니다.
jmoreno

1

또는 다음과 같이 사소한 것도 있습니다.

for(int i = 0; i < items.length;i ++) {
     // do something 
}

모든 반복에서 item.length를 평가한다는 것을 알고 있습니다. 그러나 아이템이 15 ~ 20 개를 넘지 않아야한다는 것도 알고 있습니다. 반복 할 때마다 items.length를 평가해야합니까?

실제로 최종 코드에서 items.length는 컴파일러가 최적화하기 때문에 모든 반복에서 평가되지 않습니다. 그렇지 않은 경우에도 length는 배열 객체의 공용 필드입니다. 비용이 들지 않습니다.

그래서 나는 당신에게 내 질문이 있다고 생각합니다 : 더 이상 적절하지 않을 때 임계 값이 있습니까? "작업이 완료되는 한, 신경 쓰지 않습니까?"라고 말할 수 있습니까?

실제로 최종 제품에서 기대하는 바에 따라 다릅니다. 평균적인 제품과 훌륭한 제품의 차이점은 세부적으로 의존합니다. Tata Nano와 같은 자동차와 Mercedes S와 같은 자동차는 "작업을 수행합니다"-한 곳에서 다른 곳으로 이동합니다. 차이점은 엔진 출력, 편안함, 안전 및 기타 세부 사항에 달려 있습니다. 소프트웨어 제품을 포함하여 존재하는 모든 제품과 동일합니다. 예를 들어 MySQL과 Postgre가 무료이기 때문에 Oracle, IBM 또는 Microsoft에 Oracle 데이터베이스, DB2 또는 MS SQL Server를 지불하는 이유는 무엇입니까?

세부 사항에주의를 기울이고 고품질의 제품을 얻으려면이 물건 (및 다른 물건, 분명히)에 관심을 가져야합니다.


나는 그것에 동의하지 않는다고 생각합니다. 내 게시물에는 성능 차이가 없습니다. 그것은 평균적이거나 훌륭한 제품은 없지만 제품의 단점에도 불구하고 동등한 균형을 제안합니다. 그러나 귀하의 진술에 동의 할 것입니다. 그러나 매우 중요한 특정 프로젝트가 있다면 우리 모두 비교로 사용했습니다. 그러나 추상적으로 볼 때,이 익명의 프로젝트에서 결정적으로 비효율적 인 클래스는 최적화 된 클래스와 동일하게 수행된다는 것이 일반적인 관찰입니다. 그렇다면 이것에 대해 느슨한 태도를 취하거나 매번 완벽을 주장하는 것이 괜찮습니까?
Kai Qing

@Kai Qing 단일 클래스는 큰 차이를 만들지 않습니다. 나는 당신이 당신의 제품이 고품질의 제품이되기를 기대한다면 세부 사항에주의를 기울여야한다. 반면에 원하는 유일한 기능 시스템이라면 작은 세부 사항에 많은 관심을 기울이지 않아야 할 것입니다.
m3th0dman

그렇습니다. 디자인에 약간의주의를 기울여도 차이가 없어야합니다. 그러나 그것은 목적에 따라 또는 일반적으로 목적이 시간이 지남에 따라 변형되어 의도하지 않은 것이 된 경우에 차이를 만들 수 있습니다. 전에 본 적이 있지만 여기서는 접선으로 가고 있습니다. 공평하게 말하면, 제품은 기능 이상일 필요없이 고품질 일 수 있습니다.
Kai Qing

1

집에서 직접 프로그래밍하는 경우 몇 구석을자를 수 있습니다. 그리고 당신이 실험하고 시도 할 때 이것은 완전히 정당화됩니다.

그러나 조심하십시오. 이 예에서는 실제로 해당 모서리를자를 필요가 없으므로주의해야합니다. 이것은 추세를 시작하고 집에서하는 나쁜 습관이 직장에서 코드에 영향을 줄 수 있습니다. 집에서 좋은 습관을 연습하고 개선하고 직장에서 코드를 살펴 보는 것이 훨씬 좋습니다. 그것은 당신을 도울 것이고 다른 사람들을 도울 것입니다.

당신이하는 프로그래밍과 프로그래밍에 대한 당신의 생각은 운동입니다. 가치있게 만드십시오. 그렇지 않으면 돌아와서 물릴 것입니다.

그래도 좋은 편을보세요. 당신은 이것에 대해 물었으므로 아마도 내가 만들고있는 요점을 이미 알고있을 것입니다.


1
그래, 나는 알고 있지만 문제의 요점은 더 작고 포함 된 맥락에서 그렇게 적절한 이유가없는 것으로 보인다는 것입니다. 몇 년 동안의 프로그래밍 과정에서 실제로 우리를 물리 치기 위해 많은 노력을 기울이지 않았습니다. 나는 우리가 너무 적절하다는 것을 의심합니다. 언어와 기대치가 일반적인 소프트웨어처럼 변한다고 생각합니다. 다른 것보다 적은 것. 그러나 결국 한 프로젝트의 비 효율성은 프로젝트가 과거에 있고 더 이상 필수가 아닌 경우에만 실현 될 수 있습니다. 너무 딱딱한 두통을 정당화하기가 어렵습니다.
Kai Qing

그것은 좋은 지적입니다. 오늘의 규칙은 내일의 제한 일 수 있습니다. 나는 무엇을해야하는지 듣는 것을 좋아하지 않지만, 전에 와서 어려운 길을 배운 다른 사람들을 존중합니다. 유용한 규칙과 현재 판매 기한이 지난 규칙을 찾는 것이 흥미로울 수 있습니다.
Daniel Hollinrake

1

가구 제조업체가 품질이 가장 중요하지 않은 곳이나 품질이 눈에 띄지 않는 곳에서 사용할 가구를 만들고 있다면 여전히 똑바로 자르려고 노력하고 조각을 결합하는 적절한 일을해야합니까?

많은 사람들이 소프트웨어를 장인 정신이라고 생각합니다. 우리가 구축하는 것은 기능을 수행 할뿐만 아니라 신뢰성, 유지 보수성, 견고성을 갖추어야합니다. 이러한 소프트웨어를 만들려면 기술이 필요하며이 기술은 실습에서 비롯됩니다.

따라서 오늘날 작업하고있는 것에 대해 루핑 구조를 선택하는 것은 중요하지 않지만 항상 올바른 구조를 사용하려고 노력한다는 사실은 시간이 지남에 따라 더 나은 프로그래머가 될 것입니다.


프로그래밍에서 코드를 유지 관리하거나 필요 이상으로 수행 할 필요가없는 인스턴스가 발생했습니다. 매우 구체적이고 재사용 할 가능성이없는 전시회 또는 이벤트를위한 키오스크 유틸리티와 같습니다. 내 게임의 경우-나는 그것을 유지하는 유일한 사람이므로 논쟁이 가장 적합하지 않을 수 있습니다. "더 나은 프로그래머"에 대한 공통된 관점에 대해서는 여전히 의문의 여지가 있습니다. 지침, 유지 관리 성 및 데이터 유형의 올바른 사용을 엄격하게 준수하면 프로젝트를 완료하지 못할 수 있습니다. 코드가 예상대로 작동하면 왜 완벽합니까?
Kai Qing

right_now를 빌드하는 소프트웨어를 유지 관리 할 필요가 없더라도 코딩 기술을 강화한 것처럼 소프트웨어를 작성하십시오. 마지막으로 유지 관리 가능한 코드를 작성해야 할 때 더 쉽게 수행 할 수 있습니다.
Bryan Oakley

유지 관리 가능한 코드를 항상 작성해야합니다. 어떤 경우에는 필요하지 않습니다. 그러나 나는 경험이 많기 때문에 일반적으로 모서리를 언제 어디서자를 지 알 수 있습니다. 이 게시물의 요점은 목적에 관계없이 적절하고 조잡한 임계 값에 대한 대화를 자극하는 것이 었습니다. 주어진 예제는 작은 응용 프로그램에서 대부분 무해하므로 내 예제는 가볍게 닦습니다. 그러나 은행 소프트웨어를 작성한다면 결코 부주의하지 않을 것입니다.
Kai Qing
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.