과거 7 7명 이상의 소프트웨어 인턴을 수십, 수백 명의 학생을 이끌었습니다. 그리고 졸업 파일이 보였습니다. 나는 그들이 배워야 할 것들이 많이 있다고 생각합니다. 아마도 당신은 내가 특정 기술, 알고리즘, 수학 또는 기타 특정 형태의 지식에 대해 이야기하고 있지 않다고 말할 것입니다. 예, 이것은 배워야 할 것이지만 가장 중요한 것은 아닙니다. 그들이 배워야 할 가장 중요한 것은 "자기 조절"입니다. 이러한 규범은 다음과 같습니다: 가능한 가장 간단한 코드를 작성합니다. 나중에 변경으로 인해 코드가 지저분해지면 쓸모 없는 코드를 삭제하고 주석을 추가합니다.
저는 이 인턴들에게 이 콘텐츠를 배우도록 촉구하는 데 많은 시간을 보냈습니다. 나는 그들에게 좋은 PHP 프로그래머가 되는 방법을 자주 묻는다. 그들은 대개 코드가 명확하고, 이해하기 쉽고, 유지 관리하기 쉬워야 한다고 대답한다. 이것이 내가 듣고 싶은 말이지만 실제로 이것을 일관되게 구현할 수 있는 젊은 프로그래머는 거의 없습니다.
이 점을 염두에 두시기 바랍니다. "자율 규제"를 이해해야 하며, 코드가 "작동"하면 즉시 잊어버릴 수 없습니다. 모든 변수의 이름이 잘못 지정되었음에도 불구하고 코드가 여전히 완벽하게 실행된다면 코드는 참을 수 없을 정도로 엉망이 될 것입니다. 기능적 코드를 간결한 코드로 개선하는 것은 단기적으로 성과를 거두지 못할 수 있습니다. 원래 작동했던 코드는 정리 후에도 계속 작동합니다. 이것이 바로 "자기 규제" 단계가 필요한 이유입니다. 이것이 바로 인턴십이 필요한 이유입니다. 좋은 상사는 코드 품질에 매우 중점을 두기 때문에("좋은 코드"의 정의가 프로그래머마다 다르지만) 인턴과 후배 프로그래머는 코드 품질을 계속해서 수정해야 합니다. 다시. .
아래에 제시한 예 중 일부는 초보 프로그래머가 코드를 작성할 때 일반적으로 사용됩니다.
잘못된 이름의 함수/변수/클래스
이러한 함수, 클래스 및 변수가 실제로 수행하는 작업은 이름에서 알 수 있는 의미와 다릅니다. 일관성이 없습니다. 일방적으로 이름을 보는 것이 맞지만, 현실적으로 보면 전혀 관련성이 없는 이름들도 있다.
예를 들어, 지난번 인턴은 EditorGUI와 EditorObjectCreatorGUI라는 두 가지 클래스를 작성했습니다. 편집 인터페이스를 처리하기 위한 코드입니다. 나를 어리둥절하게 만드는 것은 새 개체를 만드는 데 사용되는 것이 EditorGUI인 반면 EditorObjectCreatorGUI는 다른 개체를 처리해야만 탐색할 수 있다는 것입니다. 둘의 의미는 실제로 완전히 반대입니다! 비교적 간단한 코드임에도 불구하고, 반대의 가정으로 시작했기 때문에 이해하는데 꽤 시간이 걸렸습니다. 이 상황에 대한 해결책은 매우 간단합니다. EditorObjectCreatorGUI의 이름을 EditorObjectNavigationGUI로 바꾸면 훨씬 이해하기 쉽습니다.
저는 이런 일을 많이 봤습니다. 이는 작업 중에 코드가 발전하기 때문에 발생합니다. 이름을 선택할 때는 이름이 정확할 수 있지만 코드 작성을 마칠 때쯤에는 이름에 걸맞지 않을 수도 있습니다. 중요한 것은 항상 명명 규칙을 염두에 두는 것입니다. 추가한 내용이 여전히 함수 및 클래스 이름과 일치하는지 이해해야 합니다.
수업이 헷갈린다
또 문제는 수업이 지저분하다 : 수업은 관련없는 일을 많이 합니다. 새로운 기능을 추가하는 것은 쉽지만 천천히 코드가 부풀어오르고 관련 없는 기능이 곳곳에서 발견될 것입니다. 때로는 부풀림이 클래스 크기를 나타내지 않습니다. 클래스에는 수백 줄만 있을 수 있지만 여전히 클래스에 속하지 않는 코드가 포함되어 있습니다.
왜 이런 일이 발생하는 걸까요? 예를 들어, 어떤 이유로 GUI 클래스가 어떤 텍스처를 사용할 수 있는지 분석해야 한다고 가정합니다(아마 텍스처를 선택하는 버튼이 있을 수도 있습니다). 이 GUI 클래스가 이 분석 결과가 필요한 유일한 클래스라면 GUI 클래스에서 이 작업을 수행하는 것이 합리적입니다. 그러나 어떤 이유로 전혀 관련이 없는 게임플레이 클래스에도 이 정보가 필요합니다. 따라서 이러한 텍스처 쿼리 정보를 GUI 클래스에서 게임플레이 클래스로 전달해야 합니다. 현재 GUI 클래스는 실제로 TextureAnalyser 클래스를 포함하고 있기 때문에 실제로 더 커졌습니다. 해결책도 간단합니다. TextureAnalyser 클래스를 GUI와 게임플레이 클래스 모두에서 사용할 수 있는 별도의 클래스로 분할하는 것입니다.
많은 사람들이 이 경험 법칙에 의문을 제기했습니다. 내가 추가한 기능이 여전히 원래 클래스의 이름과 일치하면 어떻게 되나요? 맞지 않으면 이름을 바꾸거나, 별도의 클래스로 분할하거나, 다른 클래스로 코딩해야 합니까?
클래스에 적합한 이름을 찾지 못하면 불쾌하게 느껴질 것입니다. 이름에 클래스의 목적을 설명할 수 없으면 복잡해 보일 것입니다. 때로는 비대해진 클래스를 여러 부분으로 나누고 각각에 적절한 이름을 지정해야 할 때도 있습니다.
과도한 수업
과 비슷합니다. 이전 요점 - 카오스 클래스에도 비슷한 점이 있습니다. 클래스에 많은 것들이 조금씩 추가되고, 그러면 필연적으로 클래스가 비대해집니다. 이 경우 그러한 클래스는 여전히 의미가 있지만 조금 너무 커질 뿐입니다. 이러한 거대 괴물은 번거로울 뿐만 아니라 버그가 발생하기 쉽습니다. 동일한 전용 멤버 변수를 작동하려면 많은 양의 코드를 사용해야 하기 때문에 일부 세부 사항을 간과하기 쉽습니다.
너무 커진 반을 나누는 건 사실 꽤 지루한 일이다. 클래스의 코드가 밀접하게 얽혀 있으면 이는 문제가 될 수도 있습니다. 이미 작동하고 있고 수정되는 동안 새로운 기능을 추가할 수 없다는 사실과 함께, 너무 크고 자체를 엄격하게 규제할 수 없는 클래스를 분할하는 것은 선택 사항이 아니라고 말해야 합니다.
로니모의 일반적인 경험에 따르면 클래스는 500라인 이하, 함수는 50라인 이하로 유지하는 것이 가장 적절합니다. 그러나 때때로 이것은 실현 가능하지 않거나 현명하지 않습니다. 그러나 일반적으로 클래스나 함수가 해당 경계를 초과하면 이를 리팩토링하고 더 작고 관리하기 쉬운 조각으로 분할하는 방법을 찾을 수 있습니다.
코드 주석에 대해
거의 모든 샘플 코드가 이유를 설명하지 않고 주석 처리된 코드 조각을 포함합니다. 이 코드를 수정해야 합니까? 이전 코드가 교체되었나요? 이 코드는 왜 거기에 쓰여졌나요? 주석이 없는 코드는 아무 의미가 없는 경우가 많다는 것은 누구나 알고 있지만, 어떤 이유에서인지 많은 사람들은 자신의 코드에 주석을 달는 것을 잊어버립니다.
병렬 논리 및 코드 중복
하나 더 문제는 여러 코드 조각에서 비슷한 논리를 자주 본다는 것입니다.
예를 들어 "TreeBackground.dds"와 같은 텍스처 이름을 통해 대략적인 대상 개체를 알 수 있습니다. 텍스처가 트리에서 사용될 수 있는지 알아보기 위해 파일 이름이 "tree"로 시작하는지 확인합니다. SDK를 사용할 수 있는 경우 filename.beginsWith("tree")를 사용하여 신속하게 감지할 수 있습니다. 단지 이 코드가 너무 짧기 때문에 필요한 위치를 선택하고 직접 복사하여 붙여넣는 경우가 많습니다. 물론 이것은 코드 중복이고 모두가 알고 있듯이 코드 중복을 피해야 하지만, 복사된 코드가 너무 짧다면 이를 잊어버리고 자연스럽게 직접 복사하는 경향이 있습니다. 여기서 직면한 문제도 분명합니다. 텍스처가 트리에 적합한지 확인하는 방법은 나중에 변경해야 할 수도 있으며 그런 다음 "샷건 수정"(즉, 모든 곳에서 수정) 전략을 구현해야 할 수도 있습니다. 한 번에 한 곳씩.
여기서 일반적인 규칙은 매우 구체적인 코드인 경우 원본 코드가 매우 짧더라도 함수를 호출하지 않는 것입니다. 더 많은 코드가 필요한 코드를 직접 작성하는 것보다 훨씬 더 빠르며 함수로 캡슐화해야 합니다.
위에서 논의한 내용은 매우 자세하게 설명되었습니다. 대학에서도 많은 것을 배웠습니다. 하지만 지금의 과제는 수동적 순응에서 능동적 기억으로 단계적으로 습관을 발전시켜야 한다는 것입니다. 그렇기 때문에 로니모 인턴에게 가장 중요한 것은 지식을 배우는 것이 아니라 자기조절을 배우는 것입니다.
Brothers IT Education 원본 PHP 튜토리얼 CD/"Essential PHP in Details"를 무료로 받아보세요. 자세한 내용은 공식 웹사이트 고객 서비스(http://www.lampbrother.net)에 문의하세요.
PHP, Linux, HTML5, UI, Android 및 기타 비디오 튜토리얼(코스웨어 노트 비디오)을 배워보세요! 이벤트에 참여하고 Brothers의 원본 비디오 튜토리얼 CD 컬렉션을 받으려면 Q2430675018
에 문의하세요. http://www.lampbrother.net/newcd.html
|