Computer Science/컴퓨터구조

한 권으로 읽는 컴퓨터 구조와 프로그래밍 | 15장 훌륭한 프로그래머가 되기 위한 팁과 경험담

토마토. 2022. 4. 7. 12:13

들어가며

프로그래머가 된다는 것에 대한 철학적인 문제와 실용적인 문제

 

가치 제안

"내가 가치를 더하고 있는가?"

사이드 프로젝트를 통해 다양한 기술을 잘 배워두기

도구 만들기 - 가능하다면 기존 도구를 개선할 것

코드를 배포하는 생태계에 가치를 더하면서 생태계를 더럽히지 말 것

rule of least astonishment : 사용자 인터페이스/소프트웨어가 가능한 한 사람들의 예상과 다른 결과를 내놓지 말아야한다는 규칙

 

소프트웨어 개발의 발자취

간추린 역사

UNIX 운영체제 : 최소주의와 모듈화

=> 첫번째 이식 가능한 운영체제가 되었음. 

PC : 1980년대 중반부터. 

FOSS Free and Open Source Software 

Copyleft : 다른 사람이 소프트웨어를 자유롭게 변경할 수 있도록 하되, 변경된 결과물도 다른 사람들에게 공유해야 하도록 하는 라이선스 방식

Linux : 리눅스 토발즈

 

오픈소스 소프트웨어

코드 품질의 긍정적 지표 : 한사람 이상의 contributor가 활발히 개발하는 경우

코드 품질의 부정적 지표 : 철학이 중간에 바뀐 경우

 

크리에이티브 커먼즈

Creative Commons

예술 작품에 대한 라이선스

 

이식성의 발전 portability

다양한 환경에서 실행될 수 있는 프로그램

 

패키지 관리

버전 관리 package management

프로그램 의존관계 목록을 package로 묶게 해준다

(but, 한 PC의 다양한 프로그램이 각기 다른 버전을 요구할 때 문제가 발생한다)

 

컨테이너

패키지 관리 문제를 해결하기 위한 방법

애플리케이션과 패키지 의존관계를 한번에 담아, 

프로그램을 다른 프로그램과는 격리된 상태에서 실행하는 것이다. 

 

자바

자바의 아이디어 : 모든 기계에 컴파일하는 게 아니라, 자바 인터프리터에서 컴파일해두었다면 프로그래머가 코드를 재컴파일할 필요는 없다. 

메모리 관리를 하지 않아도 돼서 프로그래머 교육에 널리 활용됨

자바는 좋은 OOP 객체 지향 언어다. 

예) 자바 DB 도구 하이버네이트

=> 데이터 은닉

=> HQL

 

Node.JS

Node.JS 자바스크립트가 브라우저 밖에서 실행되게 해주는 환경

Node.JS를 통해 Client, Server를 JS로 모두 작성할 수 있게 되었다. 

(but, 패키지 관리가 어렵고, 의존성이 꼬이기 쉽다)

 

클라우드 컴퓨팅

네트워크를 통해 다른 누군가의 컴퓨터를 쓰는 것

 

가상 머신 Virtual Machine

하드웨어 환경과 운영체제가 실행되기 위한 명령어 집합을 제공하는 세스템

 

이동식 장치

배터리 성능이 매우 중요한 문제

 

프로그래밍 환경

먹고 살기 위해 하는 프로그래밍

 

초보 프로그래머도 경험을 얻는 방법

경험 : 기본이 탄탄해야 한다. 

 

추정하는 방법 배우기

"프로젝트 팀원으로 할 수 있는 가장 파괴적인 행위는

아무 경고도 없이 결과물을 제때 전달하지 않는 것이다"

 

어떻게 기한을 추정하는 방법을 배울 수 있을까? 

상황 일지를 작성하는 것이 도움이 된다. 

 

프로젝트 스케줄링

프로젝트의 일정을 추정하는 방법

프로젝트의 모든 요소를 목록으로 만든다. 

상황 일지를 보면서 경험치를 높일 수 있다. 

개발자가 제시한 스케줄/비용을 인정하지 않는 관리자

 

의사결정

개인적인 선호와 기술적인 필요성을 서로 분리할 것

 

성향이 다른 사람들과 함께 일하기

프로그래밍을 하는 과정에는 다른 사람과 함께 일하는 것이 포함된다. 

관리자의 일 중 상당 부분은 사람들이 생산적이게 될 수 있도록 성격 차이를 부드럽게 해소해주는 것

 

직장 내 문화 다루기

성격에 맞는 문화를 가진 직장을 고르는 것은 성공적이고 즐거운 경력을 영위하는 데 가장 중요한 요소

- 직업 : 직업에서 긍정적 보상을 받기

- 경력 : 경력에서 향상을 원함

- 소명 : 소명에서 즐거움을 찾음

 

정보를 얻은 상태에서 선택하기

프로젝트 설계

더 나은 결과를 얻기 위해 따라야 할 단계

 

생각을 글로 써보자

빠른 프로토타이핑 fast prototyping

"프로토타입이 작동하면, 한 걸음 물러나서 프로토타입의 동작을 관장하는 원칙을 관찰하고 이런 원칙을 일관성 있게 적용하면서 새로 코드를 구현해야 한다"

 

인터페이스 설계

어플리케이션의 인터페이스는 위쪽 인터페이스를 결정해야 한다. 

API Application Program Interface

UI User Interface

 

API를 설계하는 좋은 시작점 ) 유스케이스 문서화하기

 

프로젝트 개발

나이 든 개발자의 잡설

이식성이 있는 코드

소스코드 제어

테스트

버그 보고와 추적

리팩토링

유지보수

스타일을 지켜라

기존 프로젝트를 활용하라

정리