Programming
컴퓨터 프로그래밍(computer programming) 또는 간단히 프로그래밍(programming, 문화어: 프로그람 작성) 혹은 코딩(coding)은 하나 이상의 관련된 추상 알고리즘을 특정한 프로그래밍 언어를 이용해 구체적인 컴퓨터 프로그램으로 구현하는 기술을 말한다. 프로그래밍은 기법, 과학, 수학, 공학적 속성들을 가지고 있다.
어느 프로그래밍 언어를 선택해야 할까요?
Select_programming_language.png
프로그래밍 언어의 계보
Genealogy_of_Programming_Languages.jpg
Programming Basic
- Programming:Basic: 프로그래밍 기초.
Onboarding New Developers
- The Ultimate Guide to Onboarding New Developers: Industry Best Practices and How to Plan the First 90 Days
- 개발자 온보딩 가이드 : 첫 90일을 어떻게 계획해야 할까 | GeekNews
온보딩은 신규 입사자가 환영받고 회사의 일부라는 느낌을 주고, 이직률도 감소 시킴
- 3A : 관리(Administration) → 동화(Assimilation) → 가속(Acceleration)
전반적인 지침은 HR이 제공하되, 매니저가 주도해서 실행하는 것이 중요
역할과 책임
- HR : 일을 시작하는데 필요한 모든 지원
- 엔지니어링 매니저 및 C레벨 매니저들과 온보딩 미팅 잡기
- 전사에서 사용하는 도구들 기본 설명
- 팀에서 환영받는 느낌을 받도록
- 출근 첫날 : 전사에 소개(그룹웨어 같은 것), 사용자 계정 추가, 급여 및 근무시간에 대한 상세 소개, 모든 도구와 장비 지급, 사무실 투어, 다른 동료들과 점심식사 제안
- 엔지니어링 매니저
- 개발자를 팀 내부/외부에 소개
- 팀 구조, 팀의 회의 일정, 개발 도구 및 티켓 시스템 등 소개
- 1:1 체크인, 분기별 검토 미팅, 퍼포먼스 리뷰 등을 진행
- C-레벨 매니저
- 회사의 일부라고 느끼게 하고, 회사의 미래 비전과 목표를 향해 즐겁게 일하도록
- 이상적으로, CEO는 회사의 비전과 역사 소개, 제품 헤드는 제품과 사용자 소개, COO/CMO 는 현재 문제들에 대한 인사이트, CTO는 기술로드맵을 설명
- 신규인력이 자신의 업무가 회사의 장기목표에 어떻게 기여하는지 확인하는 정기적인 미팅을 가지는게 중요
온보딩 프로그램 모범사례
- 충분한 시간을 주고, 초반에는 기대치를 낮춰야함, 압박감을 받지 않도록 하기
프리보딩(Pre-boarding)
- 최종 면접일과 근무 첫날 사이의 시간
- 이때는 지원자가 다른 회사를 인터뷰하고 있을수도 있다는걸 염두에 두어야 함
- 채용 최종 단자에서 지원자를 미래의 팀원,팀장 관리자에게 소개
- 지원자가 입사를 결정하면, 첫 출근전에 사무적인 일들은 다 끝내는게 좋음
- 출근 일주일 전에 해야할 일들
- 출근 첫날에 대한 일정을 정리해서 보낼 것 : 언제 어디서 누구를 만나는지, 원격 회사라면 새 이메일 및 Slack 계정등에 대한 로그인 세부정보
- 필요한 모든 계약서 및 서류 작성
- 원격 근무에 대한 장비를 제공한다면 장비요청을 미리 작성완료 하도록
- 회사의 문화, 비전, 미션에 자세한 정보 공유
- 팀원들이 짧은 비디오/GIF로 신입사원 합류 축하 메시지를 보내거나
- 간단히 손으로 적은 환영 메모/카드를 우편으로 보내기
- 예산이 넉넉하다면, 회사 굿즈(SWAG, 컵/스티커/티셔츠 등등)를 보내주기
첫날
- 첫인상은 중요. 신규 입사자에게 레드카펫 경험이 되어야 함
- 환영받는 느낌을 주고, 새 팀원들과 의미있는 상호작용을 할 수 있는 기회를 주는 걸 목표
- 채용 담당자와 인포멀한 커피타임을 통해서 서로에 대해 알고나서, 공식 체크인 미팅을 통해서 R & R을 명확히 하고 기대치를 서로 맞춤
- 회사 및 여러 팀들 소개 (이때 조직도를 훓어보면 좋음)
- 동료나 멘토 소개
- Slack을 통해서 회사 전체에 신규 입사자 소개
- 담당하는 역할에 중요한 도구들의 매뉴얼 공유 또는 교육
- 회사 위키 및 기술문서 접근 방법 공유
- 아이스 브레이킹을 포함한 팀 점심 또는 원격의 경우 팀 화상통화
- 정기 팀 미팅을 포함해서 남은 한주 동안의 일정을 공유
- 관계 구축을 가속화 하기 위해 엔지니어링 매니저가 신규 입사자에게 물어볼수 있는 것들
- 어떻게 최선을 다해서 일하시나요? 제가 뭘 도와드리면 되나요?
- 어떤 작업들이 활력을 주고 당신을 흥분시키나요 ?
- 하루 일정을 어떻게 계획하는 것이 좋으세요? 미팅을 오전/오후 언제 하는게 좋으세요 ?
- 피드백을 주고 받는 것은 어떻습니까 ?
- 어떻게 인정을 주거나 받는것을 선호하시나요 ?
첫 주
- 첫주에는 회사, 제품 및 고객에 대해 학습
- 회사의 첫 시작 이야기, 가치, 비젼, 미션, 주요 마일스톤을 포함한 회사 문화와 역사에 대한 소개
- 제품에 대한 소개. SaaS 제품을 팔고 있다면, 신규 입사자에게 테스트 계정 만들어 주기
- 고객과 그들이 어떻게 제품을 사용하는지 소개. 제품에 대한 레코딩(실 사용 화면 녹화) 및 고객 인터뷰
- 기술 문서에 대한 소개
- 전사 회의 (all-hands meeting)에서 신규 입사자 소개
- 동료 / 멘토 체크인 예약
- 온보딩 피드백 받아서 향우 온보딩 프로그램 개선. 설문조사면 충분
- 그 주의 마지막 날에 체크인 : 성공한 것과 도움이 필요한 영역들 알기
- 신규 입사자와의 첫 킥오프 미팅에서 다루어야할 요점 들
- Role clarity (역할 명확성) : 자신이 할 일들(resposiblities) 검토, JD 리뷰, 기대치 설정.
- Development, compensation, and rewards (경력 개발 및 보상들) : 회사에서 지원하는 금전/비금전적 인센티브 및 커리어 패스 논의
- Motivators at work(업무상 동기부요 요소) : 이전에 가장 즐겁고 활력넘쳤던 프로젝트 물어보기. 이를 통해서 지정할 업무 유형의 선택과 최상의 업무를 수행하는데 도움이 되는 조건 파악
처음 30일
- 첫 달은 회사에서 어떻게 일이 진행되는지를 배우는 것을 포함
- 코딩 표준, 프로그래밍 프로세스, 워크플로우 프레임워크, 팀내의 로컬 개발 환경 설정 방법
- 소프트웨어 개발 방법론 소개
- 팀의 리포지토리 문서 공유
- 신규 입사자가 일반적인 버그 수정이나 예전 기능 업데이트등의 작은 작업으로 시작하도록 할 것. 시작하기 쉬운 일을 통해서 팀에 의미있는 기여를 했다는 성취감을 느끼게 할 것.
- 동료/멘토 체크인을 스케줄링하고 점차 빈도를 줄임
- 매주 매니저와 체크인을 통해서 신규 입사자가 성과를 내는데 필요한 모든 지원을 받고 있는지 확인 할 것
- 페어프로그래밍 세션은 신규 입사자가 전체 코드베이스 및 코딩 표준에 쉽게 익숙해지도록 하는 방법
- 이달 말에 심도 높은 체크인을 통해서, 성공한 것과 목표 검토, 지원이 필요한 영역 확인
- 향후 온보딩 프로그램에 대한 추가 피드백 요청
처음 60일
- 다음 30일 동안 신규 입사자는 작업 환경과 새 팀원들에 대해 더 편안하게 느끼게 될 것
- 매니저는 신규 입사자에게 장기 Responibilities를 할당하는 것을 고려할 것
- 체크인 중에 매니저는 계속 신규입사자가 업무를 잘 수행하는데 필요한 모든 정보와 지원을 받는지 확인
처음 90일
- 세번째 달이 되면, 신규 입사자는 비교적 편안하게 토론에 참여하고 업무를 수행할 수 있음
- 이제 좀 더 독립적으로 작업할 수 있게 됨
- 이달 말까지 엔지니어링 매니저는 신규 입사자에게 좀 더 장기적인 목표를 구체화하고, 정기 1:1 체크인에서 진행
장기 성장 및 관리로의 전환
- 온보딩에서 종종 간과되는 것은 장기적인 커리어 개발 단계로의 전환 과정
- 정기 1:1 미팅에서 온보딩에서 장기 개발로 전환할 것
- 첫 30일 후부터 향후 3~6개월간의 개발을 지원할 방법들을 고려하기 시작할 것
- 첫번째 퍼포먼스 리뷰 전까지 명확한 골과 타겟을 설정하도록 할 것
기타 온보딩 고려사항
- 신규 입사자가 필요할때 찾아볼수 있는 문서 정리는 꼭 필요
- 내부 위키가 있으면 좋음
- 소스 코드 및 팀의 Git Repo 접근 가이드
- 프로젝트간 디펜던시, 버전번호 포함
- 프로젝트에 사용된 도구들의 API 키와 Credentials
- 샘플 데이터 및 입력 매뉴얼
- 디자인 패턴 및 스타일 가이드
- 모든 것이 잘 동작하는지 확인하는 테스트 스위트
- 스테이징 / 프로덕선 서버에 대한 Deployment Credentials
- 팀 멤버가 제품의 단점과 과거 실수에서 배울수 있는 것들을 정리한 배포 노트
- 이 피쳐 또는 프로젝트의 목표
- 같은 SaaS 제품이나 에코시스템의 다른 기능과 비교해서 각 기능은 어떻게 동작해야 하는지
- 디자인 가이드라인, 사용자 흐름 및 코딩 표준
- 팀이 프로젝트나 기능을 어떻게 처음부터 끝까지 작업하는지. 각각의 환경(개발,스테이징,프로덕션) 및 배포 담당자
- 과거에 이 프로젝트 또는 유사한 프로젝트에서 처한 문제점들과 어떻게 해결 했는지
- 현재 어떤게 문제이고, 어떤 해결책들을 작업하는 중인지
원격 회사를 위한 팁
- 신규 입사자에게 근무 첫날에 물질적인 선물 보내기
- 매니저와 팀 리더는 처음부터 커뮤니케이션 기대치를 명확히 할 것 (슬랙의 메시지 하나로 일일 스탠드업은 건너뛸수 있다던가)
- 주간 체크인, 전사 미팅등 빠지면 안되는 사항들에 동의할 것
- 올바른 도구를 선택하고 회사 전체의 동의를 얻을 것(이메일을 선호하는데 Slack을 설치하는 것은 의미가 없을 수도)
- 가능하면 최선의 작업환경을 위해 장비/환경/인터넷 접속 비용을 지원
- 신규입사자와 직원들이 경계를 설정할수 있도록 도울 것(유연 근무나 타임존이 다른 경우 등)
온보딩 성과 측정
- 적어도 한번 이상의 설문조사를 보낼 것 (HR전문가는 7일,30일,60일,90일에 설문조사를 보내는 것을 권장)
- 물어볼 질문들
- 일하기 좋은 곳으로 [우리 회사]를 추천합니다.
- [우리 회사]는 내가 다른곳에서 비슷한 역할을 했을때 보다 더 나아갈수 있게 동기를 부여합니다.
- 나는 내 롤에 필요한 시스템과 도구를 사용하는데 자신이 있습니다.
- 나는 내 일을 잘하기 위해 아직 배워야 할 것이 무엇인지 잘 알고 있다.
- 나는 내 롤이 [우리 회사]의 조직 목표에 어떻게 기여하는지 이해하고 있습니다.
- 지금까지 내 역할은 JD에서 얘기했던 것과 일치합니다.
온보딩 개선 시작하기
- 일정과 목표 계획하기 : 첫날, 첫 주, 30일, 60일, 90일 동안의 주요 마일 스톤
- HR팀이 매니저 및 모든 관련자를 지원 하도록 : 개인별 체크리스트, 관리자와 팀 리더 교육
- 매일의 워크플로우에 문서를 포함 : 변경사항과 업데이트를 기록하는 습관 만들기(신규 입사자에게 오래된 변경 전 문서를 주지 않도록)
- 신규 입사자의 입장이 되어보기
Result
"어떤 식으로든 신규 입사자를 도운 것은 작든 크든 몇 년간 기억될 것"
설계 원칙
구조화, 추상화, 알고리즘의 차이점
내가 답변한 내용:
- 추상화 - 개념의 정의
- 구조화 - 규칙의 정의
- 알고리즘 - 절차의 정의
기술 부채 (Technical debt)
Technical debt 항목 참조.
Developer Survey
- JetBrains - The State of Developer Ecosystem in 2017
- Stackoverflow - Developer Survey Results 2018
- JetBrains - 2020년도 개발자 에코시스템의 현황
Correlated Technologies - How Technologies Are Connected (2018)
Correlated_Technologies_-How_Technologies_Are_Connected-_2018.png
대회
See also
- 프로그래밍 언어 (Programming language)
- 개발에 사용되는 추천 폰트 정리
- 프로그래밍 패러다임
- Massive open online course (MOOC)
- Bytecode
- Source code
- Code
- Serenade - 음성으로 코딩하는 도구
- No-code development platform (No-code; Low-Code; NCDPs)
- Programmer (프로그래머)
Favorite site
- Wikipedia (en) 컴퓨터 프로그래밍에 대한 설명
- Devpia (개발자 네트워크, 비주얼 베이직, 폭스프로, SQL, ASP, 오피스 등 개발 정보제공)
- [추천] 코더스 프로그램에디션 (오픈소스 커뮤니티, 검색 및 원시코드 정보 제공)
- [추천] CodeProject (Share your code, libraries, tips and answers to help others and learn from the best. Just need code?)
- [추천] Codeguru.com (컴퓨터프로그래밍, 프로그램언어 구조자료 수록)
- [추천] Get A Code (샘플코드 모음 사이트)
- 온라인으로 프로그래밍 배우기 – 완벽가이드
- vsChart.com (두 개 이상의 프로덕트를 비교해 주는 사이트)
- [추천] Awesome lists about all kinds of interesting topics (여러 가지 흥미로운 주제들에 대한 사이트/라이브러리 등 모음)
- [추천] Riju: fast online playground for every programming language (매우 빠른 온라인 플레이 그라운드; 현재 224개의 언어 및 환경들 지원; Programming language; REPL)
Beginner
- Scratch - Imagine, Program, Share (Scratch)
- Anybody can learn - Code.org
- Github - EbookFoundation/free-programming-books - List of Free Learning Resources In Many Languages (프로그래밍 무료 학습 자료 모음)
Online compiler
- coliru (C++)
- cplusplus.com: Forum: online compiler
- compileonline.com
- tutorialspoint.com
- ideone.com
- [추천] LeetGPU - Only platform to write and run CUDA code. Without a GPU. For Free. (온라인에서 무료로 CUDA 코드 돌리는 사이트)
Tutorial
News
- 2016년 분야별 최고의 오픈소스 소프트웨어
- 2016년에 자바스크립트를 실제로 배우는 기분
- 클라우드의 미래
- (소프트웨어 엔지니어를 위한) 끝내주는 이력서를 쓰는 방법
- 당신이 2016년에 배워야 하는 언어와 프레임워크 (ko)
- The Languages, Frameworks and Tools You Should Learn in 2017
Article
Libraries
- [추천] Open source, experimental, and tiny tools roundup ~ (게임/인터랙티브 웹사이트를 위한 작은 도구들 500+개 모음; 초소형 게임엔진 32개, 인디/오픈소스 게임엔진 11개, 판타지 콘솔 16개, 유니티 확장 16개, 지도 & 레벨 에디터 16개, 픽셀아트 / 아스키 편...)
Bloggers
- [강추] Today's Best Developer Blogs on Any Tech Stack - 특정 기술 스택에 대한 최고의 개발자 블로그 찾기2
Idea
- I wish there was an app... - 사람들이 "이런 앱이 있으면 좋겠어(I wish there was an app~)" 라고 말하는 트윗만 검색해서 보여주는 사이트