CHAPTER 1 소프트웨어 엔지니어링이란?

Part I 전제

CHAPTER 1 소프트웨어 엔지니어링이란?

프로그래밍과 소프트웨어 엔지니어링의 가장 큰 차이

  • 시간
  • 확장
  • 트레이드오프

소프트웨어 엔지니어링은 흐르는 시간 위에서 순간순간의 프로그래밍을 모두 합산한것

이 코드의 예상 수명은?

  • 지속가능성

소프트웨어 프로젝트의 팀 조직, 프로젝트 구성, 정책과 관례는 모두 소프트웨어 엔지니어링의 복잡성을 좌우 한다
이문제들은 모두 규모와 관련이 깊다

시간과 변경

단명하는 코드도 있고 장수 하는 코드도 있다

수명이 길어질수록 동작한다와 유지보수 가능하다의 차이를 더 분명하게 인지해야 한다

  • 하이럼의 법칙
    • API 사용자가 충분히 많다면 API명세에 적힌 내용은 중요하지 않다
    • 시간의 흐름에 따른 변경과 유지 보소를 논하려면 하이럼의 법칙을 알아야 된다
    • 해시순서
    • 모법사례를 따르고 미래에 대비한 코드는 클린하고 유지보수 가능한 코드 이다
  • 변하지 않기를 목표로 하지 않는이유
    • 변경은 피할 수 없다라는 가정은 정말 그럴까?

      규모 확장과 효율성

      구글이 운영하는 시스템은 인류가 만든 가장 복잡한 머신이다

변경비용이 시간 흐름보다 가파르게 상승하는 시스템은 분명 확장 가능하지 않습니다
비욘세 규칙(CI 시스템에 테스트를 추가해 놓지 않으면 인프라팀 책임이 아니다)

코드베이스의 유연성에 영향을 주는 여러 요인

  • 전문성
  • 안정성
  • 순응
  • 익숙함
  • 정책

원점회기 : 개발과정에서 문제를 일찍 발견할수록 비용이 적게 든다

트레이드오프와 비용

잘못된 결정이라 판단될때 찾아가야할 사람들의 에스컬레이션 경로도 명시해야 된다

비용

  • 금융비용
  • 리소스 비용
  • 인적 비용
  • 거래 비용
  • 기뢰 비용
  • 사회적 비용

엔지리어닝 조직의 선택을 결정짓는 요인

  • 반드시 해야 하는일
  • 근거에 기반하여 당시에 내릴수 있는 최선의 선택

제펀스의 역설 : 효율이 좋아지면 자원소비가 늘어난다

잘못을 인정할줄 아는 리더가 더 존경받는다

소프트웨어 엔지니어링 vs 프로그래밍

주어진 과업을 쉽게 해결할수 있고 당장 활용할수 있는 방법을 찾으세요

참조