SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
2020년 2월 22일
개발 이야기 정리
박재호(jrogue@gmail.com)
참고 자료
• <컴퓨터 vs 책> 블로그
• http://jhrogue.blogspot.com/
• OKJSPTV 유튜브 방송
• https://www.youtube.com/watch?v=Htz33OAhYvo
오늘의 짤방
프로그래머: 돌아가면 된거지—
(via @hanalen_)
(오늘의 논쟁) 객체지향 프로그래밍 – 역대
급 재난(1)
• https://medium.com/better-programming/object-oriented-
programming-the-trillion-dollar-disaster-92a4b666c7c7
• 주장
• OOP가 절차적인 프로그래밍보다 좋다는 객관적인 증거는 없음
• 동물, 개, 사람 등의 계층이 깨끗하지만, 애플리케이션 복잡도가 높아지면 평평해짐, 디
자인 패턴을 도입하면 추가적인 복잡성이 발생
• OOP는 시한폭탄으로 코드 기반이 커지면 언젠가 폭발 → 레거시 코드 기반이 되므로
재작업
• OOP는 인간 두뇌에 자연스럽지 않음 → 사람은 행동을 중심으로 사고함
• 리누스 토발즈이 C++를 싫어하는 이유
• 프로그래머가 선택할 수 있는 옵션이 적을수록 코드의 탄력성이 높아짐
• 리누스 토발즈는 C로 제한함으로써 이를 달성할 수 있다고 주장 → 도로의 제한속도가
있는 이유
(오늘의 논쟁) 객체지향 프로그래밍 – 역대
급 재난(2)
• (계속됨)
• 코드 복잡성
• 소프트웨어 개발의 가장 중요한 측면은 복잡도를 낮추는 것
• 코드 기반이 복잡하고 유지보수가 불가능하다면 100% 테스트 커버리지도 쓸모가 없
어짐
• 코드 기반이 복잡한 이유: 공유 가능한 변경 상태(전역변수까지 들어가면…), 잘못된 추
상화, 낮은 신호 대 잡음비(boiler plate code, 특히 자바…)
• 상태의 문제
• 가변 상태: 메소드를 호출할 때 발생하는 상황과 부작용이 무엇인지 이해를 해야 하는
어려움
• 인간 두뇌의 한계: 5+-2 이론 → 가변 상태의 정신 저글링이 OOP의 핵심이므로 이를
제대로 다루기가 어려움
(오늘의 논쟁) 객체지향 프로그래밍 – 역대
급 재난(3)
• (계속됨)
• 상태의 문제(계속됨)
• OOP는 프로그램 전체의 상태를 분산시켜 코드 구성 문제를 더욱 악화시키고, 흩어진
상태는 다양한 객체들 사이에서 무차별적으로 공유됨
• 레고 트럭 조립(50개 상자에 무작위로 넣은 부품을 꺼내 조립하려면?)
• 동시성 문제까지 어려움을 유발 → 병행/병렬 작업을 위해 스레드 잠금, 뮤텍스 등등 도
입 → 교착 상태 유발, 디버깅 어려움 유발
• 캡슐화의 문제
• 캡슐화는 OOP의 가장 큰 장점 중 하나(외부 접근으로부터 객체 내부 상태를 보호)
• 하지만 트로이 목마: 안전한 듯이 보이게 만들지만 안전하지 않은 코드가 코드 기반에
침투해서 썩게 만드는 문제
(오늘의 논쟁) 객체지향 프로그래밍 – 역대
급 재난(4)
• (계속됨)
• 모델링 문제
• 현실 세계는 계층적이지 않음
• 부모의 DNA를 물러받더라도 이를 변경시킬 수 없음 → 부모의 행동을 물려받지도 부
모의 행동을 재정의할 수도 없음
• 명사 왕국
• OOP의 근본적인 한계는 모든 것을 명사로 강제
• 어려운 단위 테스트
• 의존성을 별도 클래스로 추출, 새로 작성된 클래스의 인터페이스 작성, 필드 선언,
mock 프레임워크로 종속성 흉내내기, 종속성 주입을 위한 IoC 프레임워크 사용 등등
…
(오늘의 논쟁) 객체지향 프로그래밍 – 역대
급 재난(5)
• (계속됨)
• 신호 대 잡음
• 상용구 코드는 프로그램을 컴파일하는 데 필요한 ‘소음’ → boiler plate 코드는 작성에
시간이 걸리고 잡음이 추가되어 코드 기반을 읽기 어렵게 만드는 주범
• 리펙토링
• OOP 코드는 리펙토링이 어려움 → 복잡한 의존성 그래프와 코드 기반에 흩어져 있는
상태가 주범
• 반창고
• 디자인 패턴: OOP의 단점을 해결하기 위해서만 존재
• 문제 공장
• 유지보수가 용이한 객체 지향 코드 작성은 무척 어렵다 → 일관성이 없고 표준을 준수
하지 않은 OOP 코드 기반 vs 오버엔지니어링으로 잘못된 추상화가 존재하는 코드 탑
(오늘의 논쟁) 객체지향 프로그래밍 – 역대
급 재난(6)
• 결국은…
(오늘의 논쟁) 객체지향 프로그래밍 – 역대
급 재난(7)
• OOP가 업계를 지배하는 이유
• 자바
• 처음에는 단순했으나 OOP를 강요
• C#
• 우수한 개발자 도구가 포함된 .Net 생태계 구축 + 비주얼스튜디오 조합
• 대안
• 함수형 프로그래밍
(생산성) Kasaya - 브라우저 자동화를 위한
위지윅 스크립팅 언어(1)
• https://github.com/syscolabs/kasaya
• 준비물
• JDK
• 크롬 66 이상
• Node.js(v12 이상)
(생산성) Kasaya - 브라우저 자동화를 위한
위지윅 스크립팅 언어(2)
• 구글에서 cat 입력 결과
(생산성) 8년 동안 사이드 프로젝트에서 배
운 교훈(1)
• https://www.junglecoder.com/blog/idea-chain-themes
• 핵심 정리
• 빈 상태에서 프로그래밍은 쓸모가 없다: 공학용 계산기를 만들든, 게임을 만
들든 구체적인 목표를 달성하기 위해 프로그래밍을 하라
• 프로그래밍 언어 구현은 어렵지만 보람이 있다: 간단한 구문 분석 루틴을 작
성하면 많은 것을 배운다
• 생각을 조직화해야 하지만 쉽지는 않다: 주어진 시간 동안 뭔가를 추적하기
위해 도움이 되는 시스템을 구축하자(예: Trello, 메모앱 등)
• 검색은 디버깅을 위한 유용한 도구: 로컬 컴퓨터를 검색하는 과정에서 유용
한 도구를 활용하자(예: everything)
(생산성) 8년 동안 사이드 프로젝트에서 배
운 교훈(2)
• Everything
• https://voidtools.com/ko-kr/
• 실시간 파일/폴더 검색
• 색인 속도가 엄청나게 빠름(몇 초 이내 완료)
• 모든 디스크에 담긴 파일 이름/디렉터리 이름을 검색해줌
• 윈도우 NTFS 색인을 활용해 speed up!
(개발) Deno 설치
• https://dev.to/kushal/getting-started-with-deno-3a4e
• Deno는 자바스크립트와 타입스크립트를 위한 안전한 런타임
(개발) Theia: Cloud & Desktop IDE
• https://theia-ide.org/
• Java/JavaScript/Python emd
60가지 언어 지원
• 내장 터미널
• 데스크탑과 클라우드에서 동작
• 오픈소스

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

2020년 12월 20일 개발자 이야기
2020년 12월 20일 개발자 이야기2020년 12월 20일 개발자 이야기
2020년 12월 20일 개발자 이야기
 
2021년 3월 20일 개발자 이야기
2021년 3월 20일 개발자 이야기2021년 3월 20일 개발자 이야기
2021년 3월 20일 개발자 이야기
 
(책 소개) Tucker의 Go 언어 프로그래밍
(책 소개) Tucker의 Go 언어 프로그래밍(책 소개) Tucker의 Go 언어 프로그래밍
(책 소개) Tucker의 Go 언어 프로그래밍
 
2020년 11월 14일 개발자 이야기
2020년 11월 14일 개발자 이야기2020년 11월 14일 개발자 이야기
2020년 11월 14일 개발자 이야기
 
회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기
 
2021년 1월 30일 개발자 이야기
2021년 1월 30일 개발자 이야기2021년 1월 30일 개발자 이야기
2021년 1월 30일 개발자 이야기
 
2020년 10월 24일 개발자 이야기
2020년 10월 24일 개발자 이야기2020년 10월 24일 개발자 이야기
2020년 10월 24일 개발자 이야기
 
2020년 11월 28일 개발자 이야기
2020년 11월 28일 개발자 이야기2020년 11월 28일 개발자 이야기
2020년 11월 28일 개발자 이야기
 
2021년 3월 27일 개발자 이야기
2021년 3월 27일 개발자 이야기2021년 3월 27일 개발자 이야기
2021년 3월 27일 개발자 이야기
 
2020년 4월 18일 개발 이야기 정리
2020년 4월 18일 개발 이야기 정리2020년 4월 18일 개발 이야기 정리
2020년 4월 18일 개발 이야기 정리
 
[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기
 
2020년 2월 1일 개발 이야기 정리
2020년 2월 1일 개발 이야기 정리2020년 2월 1일 개발 이야기 정리
2020년 2월 1일 개발 이야기 정리
 
2020년 4월 4일 개발 이야기 정리
2020년 4월 4일 개발 이야기 정리2020년 4월 4일 개발 이야기 정리
2020년 4월 4일 개발 이야기 정리
 
2020년 10월 17일 개발자 이야기
2020년 10월 17일 개발자 이야기2020년 10월 17일 개발자 이야기
2020년 10월 17일 개발자 이야기
 
2021년 4월 10일 개발자 이야기
2021년 4월 10일 개발자 이야기2021년 4월 10일 개발자 이야기
2021년 4월 10일 개발자 이야기
 
2020년 6월 6일 개발 이야기 정리
2020년 6월 6일 개발 이야기 정리2020년 6월 6일 개발 이야기 정리
2020년 6월 6일 개발 이야기 정리
 
[5분 따라하기] git 다중 사용자 신원 설정 방법
[5분 따라하기] git 다중 사용자 신원 설정 방법[5분 따라하기] git 다중 사용자 신원 설정 방법
[5분 따라하기] git 다중 사용자 신원 설정 방법
 
2020년 4월 25일 개발 이야기 정리
2020년 4월 25일 개발 이야기 정리2020년 4월 25일 개발 이야기 정리
2020년 4월 25일 개발 이야기 정리
 
[부스트캠프 Tech Talk] 김제우_짝코딩(Pair Programming)
[부스트캠프 Tech Talk] 김제우_짝코딩(Pair Programming)[부스트캠프 Tech Talk] 김제우_짝코딩(Pair Programming)
[부스트캠프 Tech Talk] 김제우_짝코딩(Pair Programming)
 
[부스트캠프 Tech Talk] 이정현_Github Workflow 활용하기
[부스트캠프 Tech Talk] 이정현_Github Workflow 활용하기[부스트캠프 Tech Talk] 이정현_Github Workflow 활용하기
[부스트캠프 Tech Talk] 이정현_Github Workflow 활용하기
 

Semelhante a 2020년 2월 22일 개발 이야기 정리

클로져 소개 강의 (한국정보통신산업노동조합)
클로져 소개 강의 (한국정보통신산업노동조합)클로져 소개 강의 (한국정보통신산업노동조합)
클로져 소개 강의 (한국정보통신산업노동조합)
Sang-Kyu Park
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
devCAT Studio, NEXON
 
05_스마트 포인터 구현하기
05_스마트 포인터 구현하기05_스마트 포인터 구현하기
05_스마트 포인터 구현하기
noerror
 

Semelhante a 2020년 2월 22일 개발 이야기 정리 (20)

Java the good parts
Java the good partsJava the good parts
Java the good parts
 
스프링보다 중요한 스프링 이야기
스프링보다 중요한 스프링 이야기스프링보다 중요한 스프링 이야기
스프링보다 중요한 스프링 이야기
 
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기) FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
 
김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15
 
[W3C HTML5 2017] 예제를 통해 쉽게 살펴보는 Vue.js
[W3C HTML5 2017] 예제를 통해 쉽게 살펴보는 Vue.js [W3C HTML5 2017] 예제를 통해 쉽게 살펴보는 Vue.js
[W3C HTML5 2017] 예제를 통해 쉽게 살펴보는 Vue.js
 
[NEXT] Nextgram Refactoring
[NEXT] Nextgram Refactoring[NEXT] Nextgram Refactoring
[NEXT] Nextgram Refactoring
 
클로져 소개 강의 (한국정보통신산업노동조합)
클로져 소개 강의 (한국정보통신산업노동조합)클로져 소개 강의 (한국정보통신산업노동조합)
클로져 소개 강의 (한국정보통신산업노동조합)
 
IT 서비스 개발 15년 _ IT service 15 years
IT 서비스 개발 15년 _ IT service 15 yearsIT 서비스 개발 15년 _ IT service 15 years
IT 서비스 개발 15년 _ IT service 15 years
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
 
Dev team chronicles
Dev team chroniclesDev team chronicles
Dev team chronicles
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
 
Embedded project presentation
Embedded project presentationEmbedded project presentation
Embedded project presentation
 
2020년 5월 16일 개발 이야기 정리
2020년 5월 16일 개발 이야기 정리2020년 5월 16일 개발 이야기 정리
2020년 5월 16일 개발 이야기 정리
 
백엔드 서버 개발과 코틀린의 조합
백엔드 서버 개발과 코틀린의 조합백엔드 서버 개발과 코틀린의 조합
백엔드 서버 개발과 코틀린의 조합
 
05_스마트 포인터 구현하기
05_스마트 포인터 구현하기05_스마트 포인터 구현하기
05_스마트 포인터 구현하기
 
올챙이 현재와 미래
올챙이 현재와 미래올챙이 현재와 미래
올챙이 현재와 미래
 
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AI
 
Slack과 Rust로 Amazon ECS에서 서비스 배포하기
Slack과 Rust로 Amazon ECS에서 서비스 배포하기Slack과 Rust로 Amazon ECS에서 서비스 배포하기
Slack과 Rust로 Amazon ECS에서 서비스 배포하기
 
Multithread & shared_ptr
Multithread & shared_ptrMultithread & shared_ptr
Multithread & shared_ptr
 
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
 

Mais de Jay Park

Mais de Jay Park (20)

(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
(독서광) 쉽고 빠르게 익히는 실전 LLM - ChatGPT 활용부터 LLM 파인튜닝, 임베딩, 고급 프롬프트 엔지니어링까지
(독서광) 쉽고 빠르게 익히는 실전 LLM - ChatGPT 활용부터 LLM 파인튜닝, 임베딩, 고급 프롬프트 엔지니어링까지(독서광) 쉽고 빠르게 익히는 실전 LLM - ChatGPT 활용부터 LLM 파인튜닝, 임베딩, 고급 프롬프트 엔지니어링까지
(독서광) 쉽고 빠르게 익히는 실전 LLM - ChatGPT 활용부터 LLM 파인튜닝, 임베딩, 고급 프롬프트 엔지니어링까지
 
(독서광) LEAN HR - 당신의 스타트업은 안녕하십니까 (한빛미디어 2024)
(독서광) LEAN HR - 당신의 스타트업은 안녕하십니까 (한빛미디어 2024)(독서광) LEAN HR - 당신의 스타트업은 안녕하십니까 (한빛미디어 2024)
(독서광) LEAN HR - 당신의 스타트업은 안녕하십니까 (한빛미디어 2024)
 
(독서광) 구술 문화와 문자 문화: 출간 30주년 기념판 (전후 해제 포함)
(독서광) 구술 문화와 문자 문화: 출간 30주년 기념판 (전후 해제 포함)(독서광) 구술 문화와 문자 문화: 출간 30주년 기념판 (전후 해제 포함)
(독서광) 구술 문화와 문자 문화: 출간 30주년 기념판 (전후 해제 포함)
 
(독서광) 테드 창의 숨 (아홉 가지 단편/중편 SF 과학 소설 모음집)
(독서광) 테드 창의 숨 (아홉 가지 단편/중편 SF 과학 소설 모음집)(독서광) 테드 창의 숨 (아홉 가지 단편/중편 SF 과학 소설 모음집)
(독서광) 테드 창의 숨 (아홉 가지 단편/중편 SF 과학 소설 모음집)
 
(독서광) 이제는 이기는 인생을 살고 싶다 - 적을 만들지 않고 단번에 갈등을 풀어내는 백전백승 변호사의 지혜지략
(독서광) 이제는 이기는 인생을 살고 싶다 - 적을 만들지 않고 단번에 갈등을 풀어내는 백전백승 변호사의 지혜지략(독서광) 이제는 이기는 인생을 살고 싶다 - 적을 만들지 않고 단번에 갈등을 풀어내는 백전백승 변호사의 지혜지략
(독서광) 이제는 이기는 인생을 살고 싶다 - 적을 만들지 않고 단번에 갈등을 풀어내는 백전백승 변호사의 지혜지략
 
(독서광) 프로덕트 매니저 원칙: 10년이 가도 변하지 않을 PM/PO로 살아가는 원칙과 철학
(독서광) 프로덕트 매니저 원칙: 10년이 가도 변하지 않을 PM/PO로 살아가는 원칙과 철학(독서광) 프로덕트 매니저 원칙: 10년이 가도 변하지 않을 PM/PO로 살아가는 원칙과 철학
(독서광) 프로덕트 매니저 원칙: 10년이 가도 변하지 않을 PM/PO로 살아가는 원칙과 철학
 
(독서광) 개발자로 첫 출근했어요 - 사내 개발 도구, 기술, 문화 적응 가이드
(독서광) 개발자로 첫 출근했어요 - 사내 개발 도구, 기술, 문화 적응 가이드(독서광) 개발자로 첫 출근했어요 - 사내 개발 도구, 기술, 문화 적응 가이드
(독서광) 개발자로 첫 출근했어요 - 사내 개발 도구, 기술, 문화 적응 가이드
 
(독서광) 책 vs 책: 코딩 테스트 합격자 되기 vs 파이썬 알고리즘 인터뷰
(독서광) 책 vs 책: 코딩 테스트 합격자 되기 vs 파이썬 알고리즘 인터뷰(독서광) 책 vs 책: 코딩 테스트 합격자 되기 vs 파이썬 알고리즘 인터뷰
(독서광) 책 vs 책: 코딩 테스트 합격자 되기 vs 파이썬 알고리즘 인터뷰
 
(독서광) 테니스 이너 게임
(독서광) 테니스 이너 게임(독서광) 테니스 이너 게임
(독서광) 테니스 이너 게임
 
(독서광) 인간 vs. AI 정규표현식 문제 풀이 대결
(독서광) 인간 vs. AI 정규표현식 문제 풀이 대결(독서광) 인간 vs. AI 정규표현식 문제 풀이 대결
(독서광) 인간 vs. AI 정규표현식 문제 풀이 대결
 
(독서광) 모던 리눅스 교과서
(독서광) 모던 리눅스 교과서(독서광) 모던 리눅스 교과서
(독서광) 모던 리눅스 교과서
 
(독서광) 상자 밖에 있는 사람
(독서광) 상자 밖에 있는 사람(독서광) 상자 밖에 있는 사람
(독서광) 상자 밖에 있는 사람
 
(독서광) 자바 알고리즘 인터뷰 with 코틀린
(독서광) 자바 알고리즘 인터뷰 with 코틀린(독서광) 자바 알고리즘 인터뷰 with 코틀린
(독서광) 자바 알고리즘 인터뷰 with 코틀린
 
(독서광) 리그 오브 레전드 플레이어 중심주의
(독서광) 리그 오브 레전드 플레이어 중심주의(독서광) 리그 오브 레전드 플레이어 중심주의
(독서광) 리그 오브 레전드 플레이어 중심주의
 
(일상다반사) 2023년 구독자 3,000명 돌파 이벤트
(일상다반사) 2023년 구독자 3,000명 돌파 이벤트(일상다반사) 2023년 구독자 3,000명 돌파 이벤트
(일상다반사) 2023년 구독자 3,000명 돌파 이벤트
 
(독서광) 오늘날 우리는 컴퓨터라 부른다
(독서광) 오늘날 우리는 컴퓨터라 부른다(독서광) 오늘날 우리는 컴퓨터라 부른다
(독서광) 오늘날 우리는 컴퓨터라 부른다
 
(독서광) 사실은 이것도 디자인입니다
(독서광) 사실은 이것도 디자인입니다(독서광) 사실은 이것도 디자인입니다
(독서광) 사실은 이것도 디자인입니다
 
(독서광) 프로덕트 매니지먼트
(독서광) 프로덕트 매니지먼트(독서광) 프로덕트 매니지먼트
(독서광) 프로덕트 매니지먼트
 
(독서광) 슬기로운 파이썬 트릭
(독서광) 슬기로운 파이썬 트릭(독서광) 슬기로운 파이썬 트릭
(독서광) 슬기로운 파이썬 트릭
 

2020년 2월 22일 개발 이야기 정리

  • 1. 2020년 2월 22일 개발 이야기 정리 박재호(jrogue@gmail.com)
  • 2. 참고 자료 • <컴퓨터 vs 책> 블로그 • http://jhrogue.blogspot.com/ • OKJSPTV 유튜브 방송 • https://www.youtube.com/watch?v=Htz33OAhYvo
  • 3. 오늘의 짤방 프로그래머: 돌아가면 된거지— (via @hanalen_)
  • 4. (오늘의 논쟁) 객체지향 프로그래밍 – 역대 급 재난(1) • https://medium.com/better-programming/object-oriented- programming-the-trillion-dollar-disaster-92a4b666c7c7 • 주장 • OOP가 절차적인 프로그래밍보다 좋다는 객관적인 증거는 없음 • 동물, 개, 사람 등의 계층이 깨끗하지만, 애플리케이션 복잡도가 높아지면 평평해짐, 디 자인 패턴을 도입하면 추가적인 복잡성이 발생 • OOP는 시한폭탄으로 코드 기반이 커지면 언젠가 폭발 → 레거시 코드 기반이 되므로 재작업 • OOP는 인간 두뇌에 자연스럽지 않음 → 사람은 행동을 중심으로 사고함 • 리누스 토발즈이 C++를 싫어하는 이유 • 프로그래머가 선택할 수 있는 옵션이 적을수록 코드의 탄력성이 높아짐 • 리누스 토발즈는 C로 제한함으로써 이를 달성할 수 있다고 주장 → 도로의 제한속도가 있는 이유
  • 5. (오늘의 논쟁) 객체지향 프로그래밍 – 역대 급 재난(2) • (계속됨) • 코드 복잡성 • 소프트웨어 개발의 가장 중요한 측면은 복잡도를 낮추는 것 • 코드 기반이 복잡하고 유지보수가 불가능하다면 100% 테스트 커버리지도 쓸모가 없 어짐 • 코드 기반이 복잡한 이유: 공유 가능한 변경 상태(전역변수까지 들어가면…), 잘못된 추 상화, 낮은 신호 대 잡음비(boiler plate code, 특히 자바…) • 상태의 문제 • 가변 상태: 메소드를 호출할 때 발생하는 상황과 부작용이 무엇인지 이해를 해야 하는 어려움 • 인간 두뇌의 한계: 5+-2 이론 → 가변 상태의 정신 저글링이 OOP의 핵심이므로 이를 제대로 다루기가 어려움
  • 6. (오늘의 논쟁) 객체지향 프로그래밍 – 역대 급 재난(3) • (계속됨) • 상태의 문제(계속됨) • OOP는 프로그램 전체의 상태를 분산시켜 코드 구성 문제를 더욱 악화시키고, 흩어진 상태는 다양한 객체들 사이에서 무차별적으로 공유됨 • 레고 트럭 조립(50개 상자에 무작위로 넣은 부품을 꺼내 조립하려면?) • 동시성 문제까지 어려움을 유발 → 병행/병렬 작업을 위해 스레드 잠금, 뮤텍스 등등 도 입 → 교착 상태 유발, 디버깅 어려움 유발 • 캡슐화의 문제 • 캡슐화는 OOP의 가장 큰 장점 중 하나(외부 접근으로부터 객체 내부 상태를 보호) • 하지만 트로이 목마: 안전한 듯이 보이게 만들지만 안전하지 않은 코드가 코드 기반에 침투해서 썩게 만드는 문제
  • 7. (오늘의 논쟁) 객체지향 프로그래밍 – 역대 급 재난(4) • (계속됨) • 모델링 문제 • 현실 세계는 계층적이지 않음 • 부모의 DNA를 물러받더라도 이를 변경시킬 수 없음 → 부모의 행동을 물려받지도 부 모의 행동을 재정의할 수도 없음 • 명사 왕국 • OOP의 근본적인 한계는 모든 것을 명사로 강제 • 어려운 단위 테스트 • 의존성을 별도 클래스로 추출, 새로 작성된 클래스의 인터페이스 작성, 필드 선언, mock 프레임워크로 종속성 흉내내기, 종속성 주입을 위한 IoC 프레임워크 사용 등등 …
  • 8. (오늘의 논쟁) 객체지향 프로그래밍 – 역대 급 재난(5) • (계속됨) • 신호 대 잡음 • 상용구 코드는 프로그램을 컴파일하는 데 필요한 ‘소음’ → boiler plate 코드는 작성에 시간이 걸리고 잡음이 추가되어 코드 기반을 읽기 어렵게 만드는 주범 • 리펙토링 • OOP 코드는 리펙토링이 어려움 → 복잡한 의존성 그래프와 코드 기반에 흩어져 있는 상태가 주범 • 반창고 • 디자인 패턴: OOP의 단점을 해결하기 위해서만 존재 • 문제 공장 • 유지보수가 용이한 객체 지향 코드 작성은 무척 어렵다 → 일관성이 없고 표준을 준수 하지 않은 OOP 코드 기반 vs 오버엔지니어링으로 잘못된 추상화가 존재하는 코드 탑
  • 9. (오늘의 논쟁) 객체지향 프로그래밍 – 역대 급 재난(6) • 결국은…
  • 10. (오늘의 논쟁) 객체지향 프로그래밍 – 역대 급 재난(7) • OOP가 업계를 지배하는 이유 • 자바 • 처음에는 단순했으나 OOP를 강요 • C# • 우수한 개발자 도구가 포함된 .Net 생태계 구축 + 비주얼스튜디오 조합 • 대안 • 함수형 프로그래밍
  • 11. (생산성) Kasaya - 브라우저 자동화를 위한 위지윅 스크립팅 언어(1) • https://github.com/syscolabs/kasaya • 준비물 • JDK • 크롬 66 이상 • Node.js(v12 이상)
  • 12. (생산성) Kasaya - 브라우저 자동화를 위한 위지윅 스크립팅 언어(2) • 구글에서 cat 입력 결과
  • 13. (생산성) 8년 동안 사이드 프로젝트에서 배 운 교훈(1) • https://www.junglecoder.com/blog/idea-chain-themes • 핵심 정리 • 빈 상태에서 프로그래밍은 쓸모가 없다: 공학용 계산기를 만들든, 게임을 만 들든 구체적인 목표를 달성하기 위해 프로그래밍을 하라 • 프로그래밍 언어 구현은 어렵지만 보람이 있다: 간단한 구문 분석 루틴을 작 성하면 많은 것을 배운다 • 생각을 조직화해야 하지만 쉽지는 않다: 주어진 시간 동안 뭔가를 추적하기 위해 도움이 되는 시스템을 구축하자(예: Trello, 메모앱 등) • 검색은 디버깅을 위한 유용한 도구: 로컬 컴퓨터를 검색하는 과정에서 유용 한 도구를 활용하자(예: everything)
  • 14. (생산성) 8년 동안 사이드 프로젝트에서 배 운 교훈(2) • Everything • https://voidtools.com/ko-kr/ • 실시간 파일/폴더 검색 • 색인 속도가 엄청나게 빠름(몇 초 이내 완료) • 모든 디스크에 담긴 파일 이름/디렉터리 이름을 검색해줌 • 윈도우 NTFS 색인을 활용해 speed up!
  • 15. (개발) Deno 설치 • https://dev.to/kushal/getting-started-with-deno-3a4e • Deno는 자바스크립트와 타입스크립트를 위한 안전한 런타임
  • 16. (개발) Theia: Cloud & Desktop IDE • https://theia-ide.org/ • Java/JavaScript/Python emd 60가지 언어 지원 • 내장 터미널 • 데스크탑과 클라우드에서 동작 • 오픈소스