지난 7년 반 동안 저는 Ronimo Games에서 12명의 프로그래머 인턴을 멘토링하고 수백 개의 이력서를 검토했습니다. 나는 그들 대부분이 한 가지를 배워야 한다고 생각합니다. 일종의 기술, 알고리즘, 수학 또는 다른 형태의 지식이라고 생각할 수도 있습니다. 물론, 그들은 이 지식을 보충해야 하지만 내 생각에는 이것이 가장 중요하지 않습니다. 그들이 배워야 할 가장 중요한 것은 자기 훈련입니다. 이러한 자기 훈련은 가능한 한 명확한 코드 작성, 후속 개발의 변경으로 인한 혼란을 제거하기 위한 코드 리팩토링, 사용되지 않는 코드 제거 및 주석 추가에서 나타납니다.
제가 인턴들에게 멘토링을 하는 대부분의 시간은 높은 수준의 기술이나 엔진 세부 사항을 설명하는 것이 아니라 그들이 더 나은 코드를 작성하도록 하는 것입니다. 저는 인턴 지원자들에게 항상 묻습니다. 좋은 프로그래머가 되기 위해서는 무엇이 중요하다고 생각하시나요? 그들의 대답은 대개 다음과 같습니다. 코드는 명확하고, 이해하기 쉽고, 유지 관리하기 쉬워야 합니다. 제가 듣고 싶은 말은 분명하지만, 이를 지속적으로 실천하는 젊은 프로그래머는 거의 없습니다.
이 작업을 수행하려면 자기 훈련이 필요합니다. 왜냐하면 코드가 "기능 구현"에서 멈출 수 없다는 의미이기 때문입니다. 모든 변수의 이름이 임의로 지정된다고 가정하면 코드는 완벽하게 실행되지만 가독성이 떨어집니다. 단기적으로는 "기능적 코드"에서 "클린 코드"로의 결과는 작습니다. 코드는 그대로 작동하고 코드는 정리 후에도 여전히 작동합니다. 이것이 이 단계를 완료하기 위해 자기 훈련이 필요한 이유이며, 인턴십을 하는 것이 도움이 될 수 있는 이유입니다. 좋은 멘토는 코드의 품질에 충분한 주의를 기울일 것입니다(사람마다 "좋은 코드"에 대한 정의가 다르지만). 인턴쉽을 요청하면 학생들은 더욱 발전하고 발전하여 다음 단계로 나아갈 것입니다.
다음은 초보 프로그래머가 작성한 코드에서 자주 볼 수 있는 몇 가지 문제의 예입니다.
이름에 걸맞지 않는 함수/변수/ 클래스
이러한 함수, 변수 및 클래스는 이름이 암시하는 대로 수행되지 않으며 이러한 이름은 기만적입니다. 분명히 이름은 실제로 무슨 일이 일어나고 있는지를 반영해야 하지만, 그렇지 않은 경우가 많다는 것이 나에게는 놀랍습니다.
예를 들어, 저는 최근에 전직 인턴이 작성한 두 개의 클래스인 EditorGUI와 EditorObjectCreatorGUI를 발견했습니다. 이 코드북은 편집기에서 인터페이스를 처리하는 데 사용됩니다. 놀랍게도 새 객체를 생성하는 버튼의 코드는 EditorGUI에 배치되어 있는 반면 EditorObjectCreatorGUI는 서로 다른 객체 간의 작업을 처리합니다. 이는 이름이 의미하는 것과 정반대입니다! 코드는 비교적 간단하지만 클래스 이름을 기준으로 완전히 잘못된 가정을 했기 때문에 코드를 알아내는 데 시간이 걸렸습니다. 이 경우의 해결책은 간단합니다. 이름을 EditorObjectCreatorGUI 및 EditorObjectNavigationGUI로 바꾸는 것만으로도 가독성이 크게 향상될 수 있습니다.
네이밍이 부정확한 경우를 많이 봤습니다. 코드가 끊임없이 발전하기 때문에 이런 일이 자주 발생합니다. 해당 이름은 처음 선택했을 때는 정확했을 수도 있지만 코드가 완성되면 이름이 부정확하거나 심지어 잘못될 수도 있습니다. 이 함정은 우리가 항상 이름 지정을 염두에 두어야 함을 상기시켜 줍니다. 코드 조각을 추가할 때 해당 코드가 함수 또는 클래스의 이름과 일치하는지 파악해야 합니다.
난독화된 클래스
또 다른 문제는 난독화된 클래스, 즉 관련 없는 일을 많이 하는 클래스입니다. 이 문제는 오랫동안 동일한 코드 블록에 집중할 때 발생할 수 있습니다. 새로운 기능은 가장 간단한 방법으로 구현되며, 어느 정도 클래스가 비대해지고 관련 없는 작업을 많이 수행하게 됩니다. 때로는 코드 크기 때문이 아니라 클래스가 비대해지는 경우가 있습니다. 클래스에는 수백 줄만 있을 수 있지만 클래스 기능의 일부가 아닌 코드가 포함되어 있습니다.
예를 들어, GUI 클래스가 "어떤 텍스처를 사용할 수 있는지 분석"해야 하는 경우(텍스처 선택 버튼이 있다고 상상해 보세요), GUI 클래스가 이 분석 결과가 필요한 유일한 클래스라면 in GUI 클래스에서 구현하는 것이 합리적입니다. 그러나 이때 전혀 관련이 없는 게임플레이 클래스에도 이 분석 결과 정보가 필요하므로 GUI 클래스를 게임플레이 클래스에 전달하여 텍스처 정보를 쿼리합니다. 이때 GUI 클래스에는 GUI 클래스와 TextureAnalyser 클래스가 하나 더 있습니다. 이 경우 해결책은 간단합니다. TextureAnalyser 클래스에서 별도의 클래스를 분리하면 됩니다. 이 클래스는 GUI 클래스와 게임플레이 클래스 모두에서 사용할 수 있습니다.
이 문제를 피하는 가장 좋은 방법은 코드를 작성할 때마다 두 번 생각하는 것입니다. 여기에 추가하는 함수가 클래스 이름과 일치합니까? 준수하지 않는 경우 클래스 이름을 바꾸거나 독립 클래스로 분할하거나 이 코드를 다른 클래스에 배치해야 합니다.
클래스와 잘 어울리는 이름이 생각나지 않는다면 이는 대개 코드 냄새(Bad Smell)입니다. 이 클래스를 설명하는 데 적합한 이름을 찾을 수 없다면 아마도 그 기능이 너무 혼란스럽기 때문일 것입니다. 이 시점에서는 여러 부분으로 나눌 수 있으며 각 부분은 적절한 이름으로 설명됩니다.
대량 클래스
이 문제는 위에서 언급한 혼란스러운 클래스와 매우 유사합니다. 더 많은 코드가 클래스에 추가되어 클래스가 부풀어오르게 됩니다. 이 경우 클래스에 넣는 것이 합리적이지만 클래스의 크기가 매우 커진다. 매우 큰 클래스를 처리하는 것은 매우 번거로운 일입니다. 동일한 전용 멤버 변수에 대해 많은 코드가 작동하면 버그가 나타나기 쉽고 사람들이 많은 세부 사항을 간과하기 쉽습니다.
매우 큰 학급을 나누는 것은 다소 지루한 작업입니다. 코드가 고도로 인터리브된 경우에도 이는 매우 어렵습니다. 코드를 분리하려면 원래 기능을 변경하지 않고 기존 코드를 추가하거나 수정하는 것이므로 높은 수준의 자기 관리가 필요합니다.
로니모 회사에는 클래스 코드는 500줄, 함수 코드는 50줄 이내로 유지하는 규정이 있습니다. 때로는 이것이 실현 가능하지 않거나 합리적이지 않지만 일반적으로 어떤 클래스나 기능이 이 사양을 초과하더라도 이를 리팩토링하거나 더 작고 관리하기 쉬운 조각으로 분할하는 방법을 찾을 것입니다. (궁금하네요. 이 제한은 몇 줄이어야 한다고 생각하시나요? 댓글로 메시지를 남겨주세요.)
코드 코멘트
인턴 지원자가 보내주는 거의 모든 샘플 코드에는 주석이 달린 코드 블록이 있지만 왜 이런 주석이 붙었는지 설명하지 않습니다. 수정해야 할 코드에 오류가 있습니까? 아니면 코드가 너무 오래되어 업데이트해야 합니까? 주석 처리된 코드가 여기에 있는 이유는 무엇입니까? 지원자들에게 물어보니 댓글이 달린 코드에 대해서도 헷갈려하는 것 같았는데, 이상하게도 알 수 없는 이유로 항상 댓글이 달린 코드가 있었습니다.
코드 중복
제가 자주 보는 또 다른 문제는 유사한 기능을 가진 코드의 중복입니다.
예를 들어 TreeBackground.dds와 같은 텍스처 이름을 보면 이 것의 목적을 알 수 있습니다. 이 텍스처를 나무에 사용할 수 있는지 확인하려면 Tree로 시작하는 파일 이름을 확인합니다. 아마도 SDK를 사용한 후에 빨리 찾을 수 있을 것입니다. BeginsWith("Tree")를 사용하면 됩니다. 이 코드는 매우 짧습니다. 사용해야 하는 경우 거기에 붙여넣기만 하면 됩니다. 이는 코드 중복이며, 반복되는 코드가 짧다면 가장 매력적인 접근 방식은 복사하여 붙여넣는 것입니다. 여기서 문제는 명백합니다. 나중에 이 텍스처가 다른 것에 적용되는지 확인하려면 한 번에 한 곳씩 산발적인 방식으로 수정해야 합니다.
일반적으로 더 나은 접근 방식은 코드에 특별한 기능이 있으면 복사하지 말고 함수에 넣는 것입니다. 코드가 짧고 짧고, 함수를 호출하려면 붙여넣는 것보다 더 많은 코드를 작성해야 하지만, 이를 위해서는 배워야 하며, 이 역시 높은 수준의 자기 훈련이 필요합니다.
이 기사에서 다루는 주제는 너무 간단해서 대부분의 사람들이 이미 대학 1학년 때 배웠을 것입니다. 어려운 부분은 이러한 사실을 아는 것에서부터 실제로 시간을 내어 이를 따르고 기억에 남는 것입니다. 그렇기 때문에 로니모에서 인턴을 하신 모든 분들이 가장 중요하게 배운 것은 지식이 아닌 자기수양이었습니다.
LAMP Brothers의 원본 PHP 비디오 튜토리얼 CD/"Essential PHP in Detail"을 무료로 받으세요. 자세한 내용은 공식 웹사이트 고객 서비스에 문의하세요:
http: //www.lampbrother.net
http://yun.itxdl.cn/online/cto/index.php?u=5 이것은,소X 과정 CTO과정
http://yun.itxdl.cn/online /server/index.php?u=5 모바일 인터넷 서버측 개발 강좌
http://yun.itxdl.cn/online/weixin/index.php?u=5 WeChat 개발 과정
http://yun.itxdl.cn/online/yingxiao/index.php?u=5마이크로 마케팅 강좌
http://yun.itxdl.cn/online/phpcms/index.php?u=5phpcms 중등개발과정
|