전체 글 96

크리에이티브 프로그래머 5장) 비판적 사고

5장 비판적 사고 1. 창의적인 비판적 사고 창의적 사고와 비판적 사고는 모두 창의적 노동의 결실을 거두기 위한 필수 조건이다. 창의적 사고는 독창적인 아이디어를 창출하고, 비판적 사고는 아이디어를 검증하거나 피드백을 요청하고 올바르게 해석하며 많은 인지적 편견을 극복하게 해준다. 2. 창의적인 프로세스 창의적인 프로세스는 총 5단계로 설명 가능하다. 참여: 창의적인 결과물을 위해 오랜 기간에 걸친 준비 작업 배양: 참여하기를 잠시 멈춘 채 거리를 두고 프로세스를 중단하는 기간. 무의식적으로 통찰의 속도를 높인다. 조명: 참여 중 번뜩이며 떠올리는 통찰력을 발견한 순간 검증: 그만한 가치가 있는 지 확인하고 그렇지 않다면 다시 시작한다. 발표/수용: 사회적으로 발표하고 수락되어야 진정으로 창의적이라고 할..

크리에이티브 프로그래머 4장) 제약 조건

4장 제약 조건 창의성을 발휘하는 데 있어서 제약은 가장 중요한 요소이다. 시간도 없어 비용도 너무 적어요. 자바 버전이 너무 낮아서 작업이 불편해요. 네트워크 연결이 너무 불안정해요. 초당 요청이 너무 많아서 이것을 잘 처리하기는 어려워요. 위와 같은 흔한 불평은 일종의 제약에 해당한다. 제약 조건이 나쁘다는 우리의 일반적인 생각과는 다르게 오히려 제약 조건으로 창의성이 향상할 수 있다. 제약의 종류 내재적 제약 조건 작업에 속해 있는 문제의 속성에 내제되어 있는 제약 조건 ㄴ 하드웨어 제약 조건: 하드웨어의 한계 때문에 16가지의 색상만으로 게임 아트를 구현한 ㄴ 소프트웨어 제약 조건: 소프트웨어를 작성하기 위해서 개발 생태계의 본질적인 범위 내에서 작업해야 한다. 키보드, 모니터 등을 사용하고 컴파..

크리에이티브 프로그래머 3장) 커뮤니케이션

3장 커뮤니케이션 피렌체 카메라타 카메라타란 16세기 말 피렌체에서 인문주의자, 음악가, 시인, 철학자들이 모여 예술, 음악에 대해 논의했던 자리이다. 여기에 모인 사람들은 고대 그리스 스타일의 예술 형식을 복원하고자 모였다. 바흐와 모차르트는 이 곳에서 영향을 받아 유명한 음악 작품을 작곡하는 등 예술과 미래에 대한 활발한 토론을 이어나갔다. 카메라타의 성공 요인 해결하고자 하는 문제를 서로 공유하고 있었다. 서로의 지식을 공유했다. 끊임없이 진화하고 상호 연결되는 시스템이었다. 비판적인 피드백을 주고받았다. 창의적 아이디어가 발현되는 환경 창의적인 사람들이 모였기 때문에 팀에서 아이디어가 나오게 되는 걸까? 아니면 창의적인 환경이 되었기 때문에 아이디어가 나오게 되는 걸까? 아마 둘 다 아닐까.. ㅎ..

크리에이티브 프로그래머 2장) 기술 지식

2장 기술 지식 1. 입력이 없으면 창의적인 결과물도 없다. 파이썬을 모르는 사람에게 창의적인 파이썬 코드를 기대할 수 있을까? 악기의 기존 스타일을 모르면서 창의적인 음반을 기대할 수 있을까? 그림을 모르는 사람에게 창의적인 그림 작품을 기대할 수 있을까? 안드레이 브레슬라프와 젯브레인 R&D 팀은 화이트보드 위에 스케치를 하면서, 다른 프로그래밍 언어의 기능들을 조사하면서 스케치 & 정보들을 가지고 코틀린이라는 새로운 프로그래밍 언어를 개발했다. 프로그래밍 언어의 기능들을 조사하지 않았다면, 문제 해결은 거의 불가능했을 것이다. 모든 창의적인 작업은 입력에서 시작된다. 그리고 창의성이 창의성을 낳는다. 2. 지식 수집하기 새로운 정보를 얻는 곳이 어디인가요? 정보를 얻을 때 글을 대충 훑어보나요 아니..

크리에이티브 프로그래머 1장) 프로그래머에게 창의성이란 무엇일까?

1장 창의성을 향한 여정 1. 창의성이란 정확히 무엇일까? 어떠한 데이터베이스를 사용할 지 결정이 필요할 때를 생각해보자. ⇒ 이 데이터는 정규화되기 어려운 데이터이므로 NoSQL 데이터베이스를 사용하자. 이 결정을 독창적인 아이디어라고 할 수 있을까? 창의적이라는 것은 어떻게 판단하는 것일까? 창의성은 사회적인 판단이다. 따라서 당신의 프로그래밍 노력이 창의적인 결과물로 이어졌는지는 다른 사람이 판단한다. 우리가 할 수 있는 것은 최선을 다할 뿐, 우리의 프로그래밍 노력이 창의적이라고 선언하는 것은 다른 사람의 판단을 받아들여야할 뿐입니다. 2. 왜 창의성일까? 창의성이 사회적인 판단이라면, 수동적으로 정해지는 것이라면, 왜 우리는 창의적인 개발자가 되기 위해 노력해야할까? 창의적인 개발자로 살아야 하..

이펙티브 타입스크립트 5장 - any 타입 다루기

5장 any 다루기 타입스크립트의 타입 시스템은 선택적이고 점진적이기 때문에 정적이면서도 동적인 특성을 동시에 가진다. 프로그램의 일부분에만 타입 시스템을 적용할 수 있다는 특성떄문에 자바스크립트 코드를 타입스크립트로 점진적인 마이그레이션이 가능하다. 이 때, any를 사용하여 일부분의 타입 체크를 비활성화시켜줄 수 있다. 하지만 any는 매우 강력하므로 남용하게 될 소지가 높다. 아이템 38 any 타입은 가능한 한 좁은 범위에서만 사용하기 1) 매개변수 내에서만 any 사용하기 x: any = returningFoo() // 1 processBar(x) x = returningFoo() // 2 processBar(x as any) 1보다는 2를 사용한다. any 타입이 매개변수에서만 사용되기 때문에..

유튜브 설계

14장 유튜브 설계 유튜브는 엄청난 규모의 전 지구적 서비스 문제 이해 및 설계 범위 확정 다음의 기능을 포함한다. 댓글 남기기 비디오 공유 좋아요 누르기 재생목록에 저장 구독 일간 능동 사용자가 5백만이고, 10%의 사용자가 하루에 1비디오 업로드 한다고 가정하자. 비디오의 평균 크기가 300MB라면, 매일 요구되는 저장 용량 150TB이다. 개력적 설계안 제시 및 동의 구하기 CDN을 새롭게 구축할 필요는 없다. (기존 클라우드 서비스 활용) 시스템 설계 면접은 모든 것을 밑바닥부터 만드는 것과는 관계가 없다. ** 저장소를 사용한다, 라고 언급만 해도 충분하다. 규모 확장이 쉬운 CDN을 만드는 것은 지극히 복잡하고, 많은 비용이 드는 일이다. 비디오 업로드 절차 사용자 : 유튜브를 시청하는 이용자..

async, await는 Promise는 제너레이터의 조합이다

콜백 지옥 비동기 프로그래밍을 사용하다 보면, 비동기 호출에 따른 후속 처리를 진행하면서 콜백 함수를 중첩해서 사용하게 되는 경우가 있다. get('/step1', a => { get(`/step2/${a}`, b => { get(`/step3/${b}`, c => { get(`/step4/${c}`, d => { // do something } } } } 이렇게 중첩 함수를 호출하면서 복잡도가 높아지는 현상을 콜백 지옥이라고 부른다. 다음과 같은 코드는 가독성을 나쁘게 하며, 개발 경험 면에서도 부정적인 영향을 끼친다. 또한 비동기 프로그래밍을 사용하면 에러를 캐치하지 못한다는 치명적인 단점이 있다. Promise의 등장 Promise는 ES6에서 도입된 ECMAScript 사양의 표준 빌트인 객체이다..

검색어 자동완성 시스템 설계

13장 검색어 자동완성 시스템 설계 범위 확정 필요한 검색어 자동완성 시스템 단어를 검색할 때 검색어의 첫 부분이 자동 완성된다. 검색 시 5개의 자동 완성 검색어가 표시된다. 인기 순위를 기준으로 5개, 맙춤법 검사나 자동 수정은 지원하지 않는다. 영어만을 사용하고, 모든 질의는 영어 소문자로 한다. DAU는 천만명이다. 요구사항 빠른 응답 속도: 시스템 응답속도 100밀리초 이내 연관성: 사용자가 입력한 단어와 연관된 것이 출력되어야 한다, 개략적 규모 추정 평균 1사람당 매일 10건 검색한다고 가정하고, 20바이트의 데이터를 입력한다고 가정한다. 검색어가 평균적으로 4개의 단어로 이루어진다고 가정하고, 각 단어는 5글자로 구성된다고 했을 때, 20바이트의 데이터를 입력한다고 한다. 검색창에 글자를 ..

무조건 SSR을 하면 좋은걸까? 극단적인 SSR의 문제점

CSR(클라이언트 사이드 렌더링)의 몇가지 문제점들을 해결하기 위해서 나온 SSR(서버 사이드 렌더링)은 비교적 새로 나온 신기술 입니다. 그렇다면 모든 것을 서버 사이드 렌더링으로 처리하면 좋은 걸까요? 오늘은 서버 사이드 렌더링의 문제점과, 어떻게 하면 적절한 SSR을 사용할 수 있을 지에 대한 글을 써보고자 합니다. 흔히 CSR이라고 부르는 클라이언트 사이드 렌더링은 사용자가 웹 페이지를 방문했을 때, 브라우저는 빈 HTML 파일을 다운로드 합니다. 그리고 자바스크립트를 실행하여 API 요청을 통해 JSON을 받으면서, 나머지 동적 컨텐츠들에 대한 값을 가져오고 페이지에 그립니다. CSR을 사용할 때는 자바스크립트 번들링에 신경을 써야하는 데, HTML 파일을 받아 올 때, 애플리케이션 실행에 필요..