FP 사고에 익숙한 사람은 어떻게 명령형 코드를 읽어야합니까?


14

나는 약 5 개월 전에 대학을 졸업했으며 지난 4 개월 동안 현지 스타트 업에서 일했습니다. 대학에서 하스켈, F # 등을 스스로 공부했습니다. 우리는 대학에서 Java를 배웠지 만 곧 기능 프로그래밍에 노출되었고 명령형 프로그래밍보다 훨씬 더 많은 시간을 보냈습니다. 결과적으로, 나의 두뇌는 기능적인 사고를 위해 연결되어 있습니다. 내가 가입 한 회사는 Python을 사용하며 코드는 매우 중요합니다. 명령형 코드를 읽는 데 어려움을 겪고 있습니다. 돌연변이를 추적 할 수 없습니다. for-if-else-for -... 네 스팅이 4 단계 이상 깊어지면 코드에서 일어나는 일을 완전히 잃어 버립니다. 또한 파이썬은 동적 언어이므로 코드에 유형이 없습니다. 그것' 코드베이스의 일부를 이해하려고 노력한 지 몇 주가 지났지 만 ( '아마도 복잡한'것으로 추정 됨) 이해하기에는 아직 진지한 발전이 없었습니다. 해당 코드를 이해하는 방법에 대한 실용적인 기술을 알려주십시오. 미리 감사드립니다!

편집 :
아마도 코드에 실제로 많은 주석이 없으며 이름도 직관적이지 않다고 언급해야합니다.


1
의견이 없거나 부정확 한 의견이 있습니까? 나는 당신이 언급 한 조건에서 의견이 노화되지 않을 것이라고 확신합니다.
Larry Coleman

코드가 "자기 주석"으로 간주 될 수있는 매우 작은 코드의 하위 세트에 있지 않으면, 적어도 몇 가지 주석이있을 것입니다. 그러나 그것은 단지 나입니다!
John Tobler

2
명령형 프로그래머조차도 부작용을 최소한 직관적으로 제한하고 작은 방법을 작성하는 경향이 있습니다. 나는 당신이 이상적이지 않은 코드베이스에 착륙했다고 생각합니다.
Mauricio Scheffer

답변:


14

레거시 코드를 이해하는 것은 어렵습니다. 기능적 대 절차 적과는 거의 관련이 없습니다.

  1. 어떤 종류의지도를 만드십시오. 파이썬 패키지 및 모듈의 구성 요소 다이어그램. 각 모듈마다 클래스 다이어그램을 작성해야합니다.

  2. 파이썬 인터프리터를 사용하십시오. 모듈을 가져 와서 객체를 생성하고 대화식으로 연습 할 수 있어야합니다. 그렇기 때문에 파이썬이 인기가 있습니다. type(x)변수 ( x )가 실제로 어떤 유형인지 확인하기 위해 인쇄 할 수 있습니다 .

  3. 확실치 않은 경우, 유닛 테스트 코드를 읽으십시오. 단위 테스트 코드가없는 경우 새로운 코드 기반을 배우는 것 외에도 크고 어렴풋한 문제가 있습니다.

  4. 물건을 적어 두십시오. 사이드 문서로 시작하십시오. 그런 다음 무슨 일이 일어나고 있는지 알면 함수, 메소드 및 클래스에 docstring 주석을 추가하십시오. 이것들을 일찍 그리고 자주 추가하십시오.

  5. 배우고있는 것을 수집하기 위해 'autodoc'과 함께 스핑크스를 사용하십시오.

가장 중요한 부분은 이것입니다. 물건을 머릿속에 두는 것은 어렵습니다. 문서 파일에 물건을 보관하는 것이 더 쉽습니다.


6
+1. 이해 어떤 레거시 코드 것은 잘 쓰여 경우에도 어렵다.
quant_dev

12

명령형 코드를 읽는 데 어려움을 겪고 있습니다. for-if-else-for -... 네 스팅이 4 단계 이상 깊어지면 코드에서 일어나는 일을 완전히 잃어 버립니다.

잠깐만 ... 누구나 깊은 중첩 수준으로 코드를 완전히 느슨하게하십시오. 또는 Linus Torvalds는 다음과 같이 말합니다.

들여 쓰기 수준이 3 단계 이상 필요한 경우 어쨌든 문제가 있으며 프로그램을 수정해야합니다.

어쩌면 코드에 실제로 주석이 많지 않으며 이름도 직관적이지 않다는 것을 언급해야 할 것입니다.

회사가 일반적인 모범 사례를 준수하는 것처럼 들리지 않습니다.

내가 당신이라면, 나는 훈련과 힘으로 코드베이스를 이해하려고합니다. 계속해서 또 다시 파헤쳐보십시오. 아마 무엇이든 같습니다. 지금 당신은 당신이 수중에있는 것처럼 느끼고 숨을 쉴 수는 없지만 코드베이스를 계속 검토하면 곧 수면으로 수영 할 것입니다.

귀하의 질문에 기술적 인 세부 정보가 부족하여 코드베이스를 이해하는 방법에 대한 좋은 조언을 제공 할 것이라 두렵지 만, 몇 번의 세션으로 숙련 된 동료들과 함께하는 것은 결코 잘못된 일이 아닙니다. 전체 아키텍처와 서로 다른 구성 요소가 상호 작용하는 방식과 구현 결정에 대해 설명합니다.

기능 언어에서 명령형 / OO 언어로의 전환에 대한 일반적인 조언을 제공하기는 어렵습니다. 물론, "객체의 상태와 행동에 대해 생각해야합니다"와 같은 꽃이 많은 문구를 언급 할 수 있지만, 이것들은 당신에게 큰 도움이되지 않을 것입니다.


들여 쓰기 문제는 더 심할 수 있습니다. 언어가 RPG와 같은 열 코드이고 실제 들여 쓰기 가없는 경우입니다. 일부 도구는이 문제를 해결하려고 시도합니다.
Clockwork-Muse

2

만약 당신이 (나쁜 습관에서 설명한다면) 단위 테스트가 있다면, 그것들이 코드 테스트 방법을 볼 수 있습니다. 이를 통해 코드의 기능에 대한 통찰력을 얻을 수 있습니다.

그렇지 않으면 더 일반적인 파이썬 코드를 읽는 것이 코드 작성 방식에 익숙해 지도록 제안 할 것입니다.


2

파이썬의 일부 조각을 pseudo-Haskell 또는 원하는대로 변환하려고 시도 할 수 있습니다. 그것은 어떤 명령형 구조가 어떤 기능적 구조로 느슨하게 매핑되는지에 대한 감각을 줄 수 있습니다. 더 많은 경험을 얻으면 명령형 건축이 더욱 자연스럽게 느껴지기 시작합니다.

나는 OCaml과 Haskell 프로그래밍에서 Java와 Python 프로그래밍으로 갔다. 그리고 필자의 경험은 명령형 프로그래밍이 역동적 인 타이핑만큼 크지 않다는 것이다.


1

중단 점을 넣고 Next 명령을 사용하여 시작하는 것이 좋습니다 (디버깅하는 것처럼). 이것은 흐름을 이해하는 데 도움이 될 것입니다 (아마 가지, 아마도 가져갈 수있는 경로, 얻을 수있는 경로가 있습니다) 코드의 일반적인 아이디어).

(나는 좋은 결과를 가지고 이클립스 와 함께 PyDev의 이클립스 플러그인 등을)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.