코드에서 수학적 논리 문서화


19

가끔은 아니지만 종종 코드에 수학 논리를 포함시켜야합니다. 사용되는 개념은 대부분 매우 간단하지만 결과 코드는 목적이 불분명 한 많은 변수가 아니며 의도하지 않은 일부 작업은 아닙니다. 코드를 읽을 수 없거나 유지할 수 없다는 것을 의미하는 것은 아니며 실제 수학 문제보다 이해하기가 어렵다는 것을 의미합니다. 이해하기 어려운 부분에 대해서는 언급하려고 노력하지만, 코드를 작성하는 것과 같은 문제가 있습니다. 텍스트에는 수학의 표현력이 없습니다 .

복잡한 코드의 일부, 바람직하게는 코드 자체의 논리를 설명하는보다 효율적이고 이해하기 쉬운 방법을 찾고 있습니다. TeX를 고려했습니다-문서를 작성하고 코드와 별도로 생성합니다. 그러나 TeX를 배워야하며 설명서 자체는 코드 자체가 아닙니다. 내가 생각한 또 다른 것은 종이 / 화이트 보드에 쓰여진 수학 표기법, 방정식 및 다이어그램을 찍고 javadoc에 포함시키는 것입니다.

더 간단하고 명확한 방법이 있습니까?



(설명 적 이름주기 PS timeOfFirstEvent대신을 t1변수로는) 실제로 더 자세한 심지어 더 열심히도 읽을 수있는 코드를합니다.


5
TeX를 배우는 것이 실제로 그렇게 어려운 것은 아닙니다. 온라인 어디에서나 코드를 가지고 있다면 MathJax는 짧은 시간 안에 코드를 인쇄 할 것입니다. HAL / S 와 같은 언어 가 오래 전에 우려를 불러 일으켰다는 점을 기억하십시오 .
Deer Hunter

4
아니 내 자신의 나팔을 불다,하지만 여기에 하나의 예는 다음과 같습니다 meta.stackexchange.com/a/49787/141513 아이디어는 그것을 보이는 누군가가 무엇을 이해할 수 있도록를 작성하는 것입니다, 그들은 이해하지 않는 경우에도 그 뒤에 수학. 좋은 함수 / 변수 이름과 간단한 주석 하나만으로도 충분합니다.
BlueRaja-대니 Pflughoeft

답변:


32

그러한 상황에서해야 할 올바른 것은 알고리즘, 수식 또는 프로그래밍 언어가 허용하는 한 기본 실제 소스 와 정확히 동일한 변수 이름을 가진 것을 구현하고 그 위에 간결한 의견을 말하는 것입니다. 인용은 쉽게 접근 할 수있는 수학 설명과 연결되는 "[Knuth1968]에 설명 된 것과 같은 Levenshtein 거리 계산"과 같은 것입니다.

(당신이하지 않으면 같은 기준을하지만 수학은 어쩌면 당신은 스스로를 게시 고려해야한다, 사운드 및 유용하다. 그냥 선생님 '.)


4
@JustinC 아니오 그는 동일한 변수 이름을 의미한다고 생각합니다. 즉 y = m*x + c, m, x 및 c를 변수로 사용 한다고 말하면
jk.

5
@JustinC 의미 : 출판물에있는 변수와 상수 이름 만 사용하십시오. 일반적으로 n, f, q 또는 n_i와 같은 한 글자의 이름입니다. 나는 EulerLinearMomentum실제로 읽기 어려운 OP에 동의합니다 m. 요점은 소스 코드가 수식을 표현하는 데 선호되는 매체가 아니기 때문에 코드가 프로그램 요구 사항을 충족하지 않고 인쇄 된 수식과 동일한 기능을 수행하는지 쉽게 확인할 수 있어야한다는 점입니다.
Kilian Foth

1
나는 그 전략에 동의 할 것이다. 그러나 우리가 이야기하는 텍스트는 코드가 특정 정밀도 / 규모 및 동작 (알려진 호스트 또는 대상이 주어짐)을 포함하여 기본 제약 조건을 갖는 코드입니다. 수학적 모델을 지정하거나 설계하지 않고 코드로 구현합니다 (대부분의 경우). 의도를 확인하기가 훨씬 어려운 것을 나타내는 적절한 이름을 사용하지 않으면
JustinC

2
+1. 최근 출판물에 대한 참조라면, DOI 하이퍼 링크 를 종이에 제공하십시오. 예 dx.doi.org/10.1000/182 . 이것이 바로 DOI를 위해 설계된 것입니다. 간행물을위한 짧은 표준 URL은 절대 변경되지 않습니다.
MarkJ

2
@KeithS는 모든 변수가 물리적 의미를 갖는 작은 방정식에 전적으로 의존하지만, 물리적 의미가없는 여러 부분 결과가있는 FFT 알고리즘을 구현하는 경우 어떻게해야합니까? 이 때문에이 상황에서 당신은 절대적으로 수학 문헌 일치해야 입니다 도메인 언어
JK.

8

그런 알고리즘을 구현해야 할 때 몇 가지 일이 있습니다.

  1. 가능한 한 알고리즘을 자체 메소드 또는 바람직하게는 클래스로 분리하십시오. 현재 프로젝트에는 Math복잡한 알고리즘을 추가 하는 자체 클래스가 있습니다.

  2. 일반적인 약어 또는 용어에 대한 속기 참조를 포함하여 알고리즘이 일반 용어로 수행해야하는 작업을 요약합니다. 메서드 자체 에서이 작업을 수행하므로 코드와 함께 작동합니다.

  3. 기술 / 수학적 용어로 알고리즘 요약을 제공하고 내가 알고있는 외부 참조를 포함하십시오. 다시 말하지만, 메소드 자체 로이 작업을 수행하므로 관련성을 유지할 가능성이 높아집니다. 이 경우에는 평범한 텍스트가 좋지 않으므로 수학 용어를 최대한 인용하고 그 옆에 괄호로 설명합니다. 예를 들어 x^y (x raised to the power y)

  4. 알고리즘을 구성 요소로 분리하는 방법을 문서화하고 알고리즘에서 각 변수가 나타내는 것을 표시하십시오. 예.t1 is time of first event

  5. 알고리즘을 코딩하고 복잡한 부분을 주석 처리하십시오. 본질적으로 알고리즘 자체 내에서 명확하지 않거나 간단하지 않은 단계를 취하는 모든 곳에 주석을 추가합니다. 특히 명확하지 않은 지름길을 언급하고 구현 내에서 가져갈 수있는 이유는 무엇입니까?

  6. 알고리즘 작동을 확인하는 단위 테스트를 작성하십시오.

마지막으로, 그것이 정말로, 정말로, 정말로 복잡하다면, 나는 그 프로젝트에서 남은 시간 동안 그 코드를 소유하고 있다는 사실에 저를 사임합니다.

다른 사람이 코드를 이해하기 위해 외부 문서에 의존하는 것을 좋아하지 않습니다. 그렇습니다. 간결한 세부 사항을 얻을 때 특히 필요할 수 있습니다. 그러나 가능할 때마다 코드 자체에 모든 것을 유지하려고 노력하므로 업데이트되고 쉽게 찾을 수 있습니다. 이 경우, 나는 문서의 표현력보다는 정보에 대한 접근성을 중요하게 생각합니다.


6

양적 금융 경제학 연구를 중심으로 진행되는 프로젝트에서 우리는 많은 수학을 활용하며 이미 게시 된 내용의 조합을 따릅니다.

  1. 사용중인 기본 소스에 대한 링크를 제공하십시오. 우리에게 가장 쉬운 방법은 BibTex-handle을 사용하는 것입니다. BibTex-handle은 기본적으로 모든 사람이 볼 수있는 종이의 ID입니다. 특정 소스에 따라 정기적으로 방정식 참조를 추가합니다.

  2. 모든 변수에 대한 설명을 제공하십시오. 우리는 원래의 논문이 그리스어 나 다른 문자를 사용한다면 Tex를 사용합니다. 그 이유는 종종 충분한 논문과 서적이 다른 표기법을 사용하기 때문입니다. 누군가가 수학을 재 작업해야하는 경우 훨씬 쉬워집니다.

  3. 방정식을 한 조각으로 코딩하십시오. 그렇게 인식하는 것이 훨씬 쉽습니다. 전체 방정식의 Tex-Code를 코드에 게시하지 마십시오. 방정식이 매우 짧고 tex 게시가 복잡하고 불필요하거나 수식이 거대하고 tex 코드가 컴파일되지 않는 한 tex 코드는 쓸모가 없습니다 ( 대신 참조). 방정식을 작은 조각으로 분해하면 무슨 일이 일어나고 있는지 이해하기가 어렵습니다 (적어도 수학에 능숙하다면).

IMHO의 가장 중요한 실현은 수식이 종종 상황에 따라 달라진다는 것입니다. 내가 아는 모든 수학 논문은 모델의 환경을 설정하는 데 시간이 걸립니다. 당신도 똑같이해야합니다.


1
맥락을 자세하게 설명하는 것은 '어떻게'가 실제로 도움이 될 수 있는지 전에 '왜'에 초점을 맞추는 것이 좋습니다.
jmruc

3

텍스트에는 수학의 표현력이 없습니다

네 말이 맞아 이미 코드 외부에서 수행 할 수있는 방법을 찾고 있으며 Tex는 가파른 학습 곡선 외에도 과도한 노력이므로 권장 사항은 다음과 같습니다.

OpenOffice.org/LibreOffice Math Equation Editor를 사용하십시오.

무료입니다. 열려 있습니다.

시각적으로 사용하거나 특수 언어로 방정식을 작성할 수 있습니다.

GUI를 사용할 때 "코드"가 표시되도록 패널에 생성되므로 언어를 즉시 배울 필요가 없습니다.

상단 패널에서 팔레트를 사용하여 방정식을 "그릴"수 있습니다. 하단 패널에서 동등한 표기법이 생성됩니다. 표기법을 파악하고 하단 패널에 표기법을 쓰고 상단 패널에 그래픽 출력을 표시하면 다른 방법으로 할 수 있습니다.

여기에 이미지 설명을 입력하십시오


그리고 뭐? 수학 표기법에 대한 일반 텍스트 코드를 원래 코드에 주석으로 포함 시키거나 스크린 샷을 찍고 TeX에서 할 수 있다고 말한 OP와 같은 Javadoc을 사용합니까?
dodgethesteamroller 2016 년

@dodgethesteamroller 예, 제 답변은 "이미 코드 외부에서 할 수있는 방법을 찾고 있기 때문에 Tex는 과잉입니다."
Tulains Córdova
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.