아름다운 언어와 아름다운 코드

13673 단어 mailinglistcleancode


게시물Beautiful Language and Beautiful CodeQvault에 처음 등장했습니다.

"죽은 시인의 사회"는 고전 영화이며 최근에 제가 가장 좋아하는 영화가 되었습니다. 특히 내가 좋아하는 장면이 있는데, 로빈 윌리엄의 캐릭터가 "매우 피곤하다"또는 "매우 슬프다"와 같은 용어를 사용하는 것은 나쁜 습관이라고 설명하는 대신 "기진맥진하다"또는 "침착하다"와 같은 설명적인 단어를 사용해야 합니다!

저는 이 장면에서 학생들에게 가르치는 내용에 전적으로 동의합니다. 작가가 빈약한 어휘의 범위 내에서 계속되는 소설을 읽는 것은 지루합니다. 이것은 내가 이 짧은 기사에서 강조하고 싶었던 요점으로 이어집니다.

아름다운 언어와 아름다운 코드는 전혀 다릅니다.

아름다운 언어는 단순히 한 사람에서 다른 사람에게 지시 사항을 전달하는 것이 아닙니다. 잘 사용된 언어는 감정을 불러일으키고, 풍경을 묘사하고, 뉘앙스를 드러내고, 운율과 운율을 통해 노래할 수 있습니다. 그 목적은 순전히 기능적인 것이 아니라 창의적인 표현의 풍부한 매체입니다.

적어도 내 기준에 따르면 아름다운 코드는 순전히 기능적입니다. 그것의 목표는 그것이 하는 일을 정확하게 전달하는 것입니다. 감정, 모티프, 내러티브는 저주받을 것입니다. 아름다운 코드는 기계가 가능한 효율적으로 명령을 수행하고 인간이 가능한 한 쉽게 명령을 이해할 수 있도록 작성되어야 합니다. 이상적인 코드 조각은 완벽하게 효율적이며 그것을 읽는 모든 사람이 이해할 수 있습니다.

코드가 더 표현력이 풍부한 코드와 비슷하면 안 되는 이유는 무엇입니까?



Reddit에서 /r/shittyprogramming의 일원이라면 커뮤니티가 주어진 숫자가 짝수인지 여부를 계산하는 가장 우스꽝스럽고 비효율적인 방법을 작성하는 데 관심을 갖게 된 몇 주 전을 눈치챘을 것입니다. 다음은 몇 가지 하이라이트입니다.

const isEven = n => 'x'.repeat(n).replace(/xx/g, '') === '';`
<small id="shcb-language-1"><span>Code language:</span> <span>JavaScript</span> <span>(</span><span>javascript</span><span>)</span></small>


source

function isEven(number) {
    if (0 == number) {
        return true;
    } else if (number < 0) { //I actually don't remember if JS has an absolute value function,
        return !isEven(number+1); // so this is how we handle negative numbers
    } else {
        return !isEven(number-1);
    }
}


source

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

char isEvenFile() {
    while (access("/tmp/isEven", F_OK)) ;
    //We have to wait until the other process created the file
    FILE *comms = fopen("/tmp/isEven", "r");
    int c = EOF;
    while (c == EOF)
        c = fgetc(comms);
    //In case we were so fast that the other process didn't write to the file
    for (;;) {
        int newC = fgetc(comms);
        if (newC != ' ')
            //the number has been sent
            c = newC;
        else {
            FILE *out = fopen("/tmp/out", "w+");
            switch (c) {
                case '0': case '2': case '4': case '6': case '8':
                    fprintf(out, "b");
                    break;
                default:
                    fprintf(out, "a");
                    //printing a null char would be the end of the string.
                    break;
            }
            fflush(out);
            break;
        }
    }
    fclose(comms);
    exit(0);
}

char isEven(int n) {
    char input[10];
    sprintf(input, "%d", n);
    int pid = fork();
    if (pid == -1)
        return 2; //error
    if (pid == 0) {
        isEvenFile();
    }
    else {
        FILE *comms = fopen("/tmp/isEven", "w+");
        fprintf(comms, "%d ", n);
        fflush(comms);
        //send the number to stdin of the child
        while (access("/tmp/out", F_OK | R_OK)) ;
        FILE *out = fopen("/tmp/out", "r");
        int result = EOF;
        while (result == EOF)
            result = fgetc(out);
        //Again, we have to wait until the other process is done
        result = result == 'b';
        fclose(comms);
        fclose(out);
        remove("/tmp/isEven");
        remove("/tmp/out");
        return (char) result;
    }
}


Source

One Redditor은 기계 학습을 문제에 적용하고 "isEven"훈련 세트에 주석을 달기까지 했습니다.

이 모든 "isEven"넌센스에 대한 내 요점은 코드가 재미있고 흥미롭고 재미있을 수 있다는 것입니다. 그럴 수 없다고 말하는 것이 아닙니다. 그러나 나는 이 모든 "코드를 통한 농담"을 정상적인 언어로 정의한다는 점에서 정신 체조를 하고 있습니다. 영화, 시, 소설, 블로깅처럼 인간이 서로에게 창의적으로 자신을 표현하는 매체입니다.

위의 예는 실제로 프로덕션 환경에서 실행하기 위한 것이 아닙니다. 그렇다면 실제로 추악한 코드의 예가 될 것입니다.

코딩할 준비가 되셨나요?

Try our coding courses free

Join our Discord community

질문이나 의견이 있으십니까?



질문이나 의견이 있으면 트위터에서 나를 팔로우하고 연락하십시오. 기사에서 실수를 한 경우 반드시 let me know 수정하여 수정할 수 있도록 해주세요!

좋은 웹페이지 즐겨찾기