목록분류 전체보기 (103)
정글에서 온 개발자
회사가 소유한 소프트웨어는 프로그래머가 개발을 하다 해고되거나 그만두면 코드는 여전히 회사 자산이고 프로그래머는 또 다른 일을 찾아야 한다.오픈 소스의 경우 개발자가 회사를 그만두거나 옮겨도 회사가 뺐을수 없고 그 개발자가 관리한다. 개발자의 힘이 강해지고 회사도 오픈 소스 개발자들을 유연하게 대하게 된다.자기가 하고 싶은 일을 더 많이 할 수 있고 좀 더 자유롭고 유연하다.출신 국가나 학교 등의 제약 없이, 코드 커밋으로 자신의 가치를 증명할 수 있고, 회사 선태그이 폭이 넓어진다.또한 코드를가 정해진 고객이 아니라 많은 사람들이 쓴다는 매력이 있다.출처꾸준히, 자유롭게, 즐겁게
테스트의 3가지 종류출력 기반 - 가장 좋음상태 기반 - 그 다음 안 좋음. 고전파가 선호통신 기반 - 가장 안 좋음 . 런던파가 선호상태 기반 테스트는 안정성을 위해 더 신중해야 한다. 유지보수가 쉽지 않다.통신 기반 테스트도 안정성에 신중. 목도 공간을 많이 차지해 가독성이 안 좋다.캡슐화를 잘하면 통신 기반도 리팩터링 안정성을 많이 지킬수 있다.유지보수성 지표테스트를 이해하기 얼마나 어려운가?(테스트 크기)테스트를 실행하기 얼마나 어려운가?(프로세스 외부 의존성의 크기)함수형 프로그래밍외부로의 부작용, 숨은 매개변수가 없어야 한다. 테스트 용이성을 상당히 높힌다.의존성이 시그니처에 없더라도, 불변이라면 숨은 매개변수가 아니다.비즈니스 로직과 부작용을 분리하는 것이 목표다. (완전한 제거는 불가능하므..
목표 브레인 스토밍몸값 올리기제대로된 프로젝트에 대한 이해잘하는 사람들의 협업 방식 익히기깃허브 이슈과 관리되는 방식 익히기 (빠르게 파악하는 능력 기르기)c++ 프로젝트에 익숙해지기go 언어를 잘 사용할 수 있음을 증명하기유명 프로젝트에 기여하기게임 관련 프로젝트 참여하기 (게임 개발 이해도 증명하기)외국 개발자들과의 소통오픈 소스 기여 경험전혀 모르는 사람들과의 개발 협업 목표 정리깃허브 이슈 관리와 파악에 익숙해지기c++ 프로젝트에 익숙해지기go 언어를 잘 사용할 수 있음 증명하기경력을 키우고 싶은 도메인에 익숙해지기대규모 서비스 인프라게임 개발실력있는 개발자와의 협업 경험 향상하기실력있는 개발자가 짠 코드 구조 몸에 익히기목표를 바탕으로 한 오픈소스 프로젝트 요건 (중요도 순)초보자 친화적이어야 ..
목 VS 스텁둘다 목 라이브러리로 구현한다.목은 외부로 나가는 상호작용을 모방하고 검사하는데 도움스텁은 내부로 들어오는 상호작용을 모방하는 데 도움 (검사는 하면 안됨!)스텁과 상호작용을 검증하면 취약한 테스트가 된다. 내부 상호작용은 최종 결과가 아니기 때문CQS 원칙명령 조회 분리 원칙. 모든 메서드가 명령 또는 조회 중 하나여야 한다.CQRS는 이 원칙이 객체나 시스템 단위로 확장된 것이다.조회는 값을 반환하는 대신 부작용이 없어야 한다.(멱등성)명령은 부작용이 있는 대신 void를 반환해야 한다. 목은 명령을 대체한다.스텁은 조회를 대체한다.좋은 API공개 API 와 식별할 수 있는 동작공개 API (public)는 식별할 수 있는 동작과 다르다.이상적으로는 시스템의 공개 API는 식별할 수 있..

TL;DR번역이긴 하지만, 내가 수정한 부분이 실제 서비스에 반영되는 신기한 경험이였다.관련 지난 포스팅오픈소스 관련 서적 TIL기여를 위해 번역한 포스팅과정오픈소스 기여를 하기 위해서는 작은 번역이나, 라이브러리 같은 프로젝트부터 시작하라는 조언이 있었다. 이런 프로젝트를 찾기 위해 깃허브를 돌아다니던 중 초보자용 오픈소스가 잘 정리된 깃 레포를 발견했고 여기에 링크된 글이 번역 기여가 가능하다는 걸 발견했다.기여 방법 읽기보통을 기여를 하기 위해서는 contribution guideline을 읽으면 되는데, 기여자 친화적인 경우 이 문서가 잘 작성되어 있다. github에서는 보통 CONTRIBUTION.md 파일로 작성되어 있다. 강제사항이 아니므로 이름이 조금 다를 수도 있고 위치도 /docs 밑..
interval 관련 알고리즘LeetCode- NonOverlappingIntervalshttps://leetcode.com/problems/non-overlapping-intervals/description/?envType=study-plan-v2&envId=leetcode-75Codility - NumberOfDiscIntersectionshttps://app.codility.com/programmers/lessons/6-sorting/number_of_disc_intersections/백준 -철로 https://www.acmicpc.net/problem/13334팁:순서를 정해서 새는게 유리하기 때문에 정렬이 들어갈 수 밖에 없다. (NlogN을 해서 1억 안쪽이라면)문제 풀이에서 앞쪽 끝 뿐만 아..
sliding window다음 코드는 멋있긴 하지만 겁나 느리다.int tribonacci(int n) { array arr = {0,1,1}; for(int i=3; i아래 코드처럼 대입 저글링을 하는 게 더 빠르다.int tribonacci(int n) { array arr = {0,1,1}; for(int i=3; i아니면 차라리 array 대신 a,b,c 변수를 선언해놓고 저글링 하는 것도 괜찮다.map에서 count로 키 여부 확인하면느리다..find() 는 찾으면 바로 반환하는 반면, .count() 는 map의 특성상 key가 하나임에도 불구하고 템플릿 메소드로써 모든 값을 찾는 추가 로직이 들어갈 수 있기 때문에 느리다.
오픈소스자유 소프트웨어 vs 오픈 소스대부분의 자유 소프트웨어는 오픈소스다. 자유 소프트웨어가 좀 더 자유에 진심이다.그래서 자유소프트웨어를 오픈소스라고 부르면 화낸다.자유 소프트웨어와 오픈 소스 사이에는 자유를 도덕적 문제로 보는지(자유 소프트웨어), 실용적 문제로 보는지 (오픈 소스)차이가 있지만 라이선스를 보기 전까지는 큰 차이를 느끼기 힘들다.라이선스OSI 라이선스가 없으면 오픈소스가 아니다. 그냥 소스 이용가능일 뿐이다.GPL, MIT, 아파치 라이선스 모두 OSI(Open Source Initiative) 라이선스이다. (; Open System Interconnection 7계층과 관계 없음)방임형 라이선스오픈 소스 라이선스의 파생 저작물을 원 저작물과 다르게 할 수 있다.또한 원래 코드..

Kent C. Dodds 의 원문 포스트 First Timers Only 의 번역입니다.저는 최근에 정말 보람 있는 일을 시작했습니다. 저는 AngularJS에서 꽤 인기 있는 폼 라이브러리인 angular-formly의 유지 관리자입니다. 저는 많은 코드를 커밋했고 현재 라이브러리에는 33명의 기여자(contributors)가 있습니다. 이 중 최소 5명의 기여자는 오픈 소스 라이브러리에 기여한 것이 처음입니다.저는 angular-formly에 쉽게 기여할 수 있도록 정말 열심히 노력했습니다. 오픈소스 프로젝트 관리자가 하는 모든 일반적인 일을 했고, 덜 일반적인 일도 했습니다...CONTRIBUTING.md 설정 (자주 무시됨)코드를 체계적으로 정리하고 필요한 곳에 주석 달기.up-for-grabs ..
string에는 .length() 메소드가 있다. 그런데 헷갈리니까 그낭 .size()로 통일하는 게 좋을 것 같다.class 의 private 부분을 먼저 선언해도 된다.array 선언시 array 과 같이 정적인 숫자를 반드시 명시해줘야 한다. 그리고 매개변수로 넘길 때도 마찬가지다. n 같은 동적인 변수로 선언도 어렵다는 게 단점인데, 아무리 메모리를 아끼고 싶어도 알고리즘에서 쓰기는 그닥 좋지 않아 보인다. 그냥 이차원 배열 만들 때 vector를 사용하자. 논리가 더 중요하다고 생각한다.direction 같은 정해진 배열 만들 때도 맘 편하게 vector 쓰는게 나을수도. (혹시나 매개변수로 넘길 때 괜히 귀찮아질 것 같아서)generate, transform, form_each 메소드gene..