Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
4장 실용주의적 편집증
by king
#pragmatic
2년 전
922
1

오늘 TIL 3줄 요약

  1. 확인하기 전까지, 모두 발생가능한 일이다.

  2. 단정문을 사용해서 조건/계약을 확인해라

  3. 한 단계씩 앞으로 전진하라

TIL (Today I Learned) 날짜

2022.03.24

오늘 읽은 범위

4장 실용주의적 편집증

책에서 기억하고 싶은 내용을 써보세요.

여러분은 완벽한 소프트웨어를 만들 수 없다. 

  1. 방어적으로 코딩하라

    1. 의심들면 모든 정보를 확인하라

    2. 잘못된 데이터를 찾아내기 위해 단정문을 사용하고

    3. 공격자난 불량 사용자가 만들었을지도 모르는 데이터를 불신한다.

  2. 실용주의 프로그래머는 자기 자신 역시 믿지 않는다.

계약에 의한 설계

  1. 계약

    1. 정직한 거래를 보장하는 최선의 해법.

    2. 자신과 상대편의 권리 및 책임을 정의한다.

  2. DBC

    1. Design by Contract

    2. 프로그램의 정확성을 보장하기 위해 소프트웨어 모듈의 권리와 책임을 문서와하고 합의하는 데에 초점을 맞춘다.

    3. 정확한 프로그램

      1. 자신이 하는 일이라고 주장하는 것보다 많지도 적지도 않게 딱 그만큼만 하는 프로그램

      2. 함수와 메서드가 뭔가를 하기 위한 조건

        1. 선행 조건

          1. 루틴이 호출되기 위해 참이어야 하는 것. 루틴의 요구 사항

          2. 제대로 된 데이터를 전달하는 것은 호출하는 쪽의 책임이다.

        2. 후행조건

          1. 루틴이 자기가 할 것이라고 보장하는 것. 즉, 루틴이 완료 되었을 때 세상의 상태다. 

          2. 루틴에 후행 조건이 있다는 것은 곧 루틴이 종국에는 종료 될 것이라는 걸 의미

        3. 클래스 불변식

          1. 호출자의 입장에서 볼 때는 이 조건이 언제나 참인 것을 클래스가 보장한다. 

  3. 클래스 불변식과 함수형 언어

    1. 클래스 불변식 = 상태

      1. 객체 지향 언어에서 상태는 클래스의 인스턴스와 관련이 있다.

      2. 함수형 언어에서는 보통 상태를 함수에 넘긴 후 상태를 결과로 받는다.

DBC 구현

  1. 단정문

    1. 단정문을 사용해서 부분적으로  계약을 검사할 수 있다.

      1. 객체 지향 언어에서는 상속 계층을 따라 단정문이 밑으로 전파되도록 할 수 없을 것이다. 

      2. 계약이 자동적으로 집행되지 않는다.

      3. 이전 값이라른 개념이 없다.

  2. DBC와 일찍 멈추기

    1. 단정문이나 DBC방식을 사용하여 선앵 조건과 후행 조건, 불변식을 검증하면 더 일찍 멈추고, 문제에 대한 보다 정확한 정보를 알려줄 수 있을 것이다. 

의미론적 불변식

  1. 의미론적 불변식은 무언가 품은 진짜 의미의 중심이 되어야 한다. 

  2. 명확하고 모호한 점이 없게 서술하도록 노력하라

동적 계약과 에이전트

  1. 거절할 자유

  2. 재협상할 자유

죽은 프로그램은 거짓말을 하지 않는다.

  1. 망치지 말고 멈춰라

    1. 가능한 한 빨리 문제를 발견하면 좀더 일찍 시스템을 멈출 수 있으니 더 낫다.

단정적 프로그래밍

  1. "그런 일을 절대 일어날 리 없어” 라고 생각하지 말자.

  2. 단정문을 이용해서 확인

    1. 매개변수, 결과가 null이 아닌것을 확인

    2. 알고리즘 동작을 검사

  3. 단정과 부작용

    1. 디버깅 행위가 디버깅하려는 시스템의 행동을 바꿔 버리는 일.

  4. 단정 기능을 켜 둬라

    1. 모든 오류를 검사하라

    2. 놓친 것을 잡아내기 위해 단정을 사용하라

헤드라이트를 앞서가지 말라

  1. 작은 단계들을 밟아라.

    1. 더 진행하기 전에 피드백을 확인하고 조정하라

  2. 블랙 스완

    1. 역사상 중대한 사건은 모두 다 세간의 이목을 끌고 예측하기 어렵고, 드문 사건들로 부터 발생하는데 이사건들은 일반적 예상의 영역을 넘어서는 것이라고 상정했다. 

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

조건을 확인하고 오류를 잡아내는 방법을 배웠다. 똑똑한 개발자들은 좋은 코드를 개발하기위해서 이런 방법을 사용하는구나 알게되었을 뿐 내가 사용하기는 힘들다. 그래도, 방법을 아는 것하고 모르는 것은 다르니까 유익한 시간이었다. 자바, C++ 파이썬 코드 전문 용어가 나오는데 멋있어 보인다.

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

  1. 인지 편향(확증 편향)

    1. cognitive bias,

    2. 경험에 의한 비논리적 추론으로 잘못된 판단을 하는것을 말한다.

    3. 확증 편향은 사람들이 자신이 원하는 결과를 바라거나 어떤 사건을 접하고 감정이 앞설 때, 그리고 저마다의 신념을 지키고자 할 때 확증 편향을 보인다.

    4. 원하는 정보만 선택적으로 모으거나, 어떤 것을 설명하거나 주장할 때 편향된 방법을 동원한다.

  2. 자바스크립트에서 assert

    1. console.assert()

      1. web api

      2. https://developer.mozilla.org/en-US/docs/Web/API/console/assert

    2. assert module

      1. node.js

      2. https://nodejs.org/api/assert.html#assert

오늘 읽은 다른사람의 TIL

ilpyoyang님의 TIL

https://nomadcoders.co/community/thread/3922

1 comment