코딩테스트 준비하기
- 회사에 따라 난이도는 다르지만 크게 어려운 문제가 나오지 않음 -> 대회처럼 등수를 메기기 위함이 아닌 코딩 능력, 문제 해결 능력을 보는 것, 얼마나 정확하고 효율적인지 But 자료구조, 시간 공간 복잡도에 대한 이해를 확인
- 코딩테스트 후 코딩 스타일, 왜 이 코드를 적었는지, 왜 이 알고리즘을 사용했는지 설명
- 프로그래밍 기본 문법 익혀야 함
- 기본적으로 Python C++이 많이 사용됨 -> 문제 해답이 많아서 공부하기 좋음
(어제 취사에서는 파이썬으로 코딩을 많이하니 다른언어로 무조건 1문제이상 풀어야 한다고도 문제가 나왔다고 함)
웹 개발자의 경우 js
안드로이드 개발자의 경우 코틀린, 자바
IOS 개발자의 경우 스위프트
플랫폼에서 사용하는 언어가 제한적인 경우 다른 언어를 선택했을 때 설명할 이유가 필요할 수도 있음
코딩테스트 공부법
- 기본 100제를 풀면서 반복(개인적으로 시간 제한을 두는 것 추천. 생각보다 시간이 많이 걸림)
- 대부분의 사이트는 중요 순서대로 문제 배치X
- 그리디, 탐색 알고리즘 위주로 공부. 이 두 개를 탄탄히, 동적 프로그래밍도 함께 공부 각각 50문제 정도 풀어보며 감 익히기
- 기출 문제를 풀어볼 것. 삼성, 카카오의 경우 코딩 테스트 사이트에서 기출 문제를 구할 수 있음 해외 취업의 경우 LeetCode 참고
- 자신이 사용하는 언어나 가장 근접한 언어로 기술된 코딩 테스트 풀이 책을 보면서 문제 풀이 감을 익힘
** 왜 이 코드를 사용하고 왜 이 알고리즘을 구현했는지 설명할 수 있어야 함. 코딩 테스트 합격 -> 끝이 아닌 이후 면접에서 사용될 수 있음
코딩 테스트 지식 입사후에도 필요할까 ? yes, but..
- 모든 것을 다 구현하기 보다 라이브러리를 가지고 와서 기능에 맞게 사용하는 경우가 더 많음
- 얼마나 정확하고 효율적인지 BUT 자료구조, 시간 공간 복잡도에 대한 이해를 확인
- 자료구조 : 클라이언트에게 데이터를 전달하거나 보여줄 때, 데이터를 검색할 때, 여러개의 데이터를 한번에 저장할 때 찾고자 하는 데이터를 수정할 때, 효율적인 기능을 구현하기 위해 적절한 자료구조를 사용하는 것이 중요
- 중복을 허용하는 자료구조인지, 스택, 해시 테이블, 이중 테이블을 이해하고 사용 검색의 경우 어떠한 자료구조를 사용하느냐에 따라서 시간이 밀리초에서 수십초로 달라질 수 있음(프론트에게도 중요한 사항)
- 제한적인 시간과 자원을 어떻게 효율적으로 쓸 수 있을지 알고리즘 로직을 짜는 일
- 이해가 중요하지만 너무 deep하지 않게! 그래야 잘 구현된 API를 가지고 와서 적용해도 왜? 그리고 어디에? 빨리 할 수 있음
코딩 테스트 사이트
- 프로그래머스
- LeetCode
- 백준 알고리즘
- 코드업
- SW Expert Academy
기술과제(코딩테스트 대신, 경력직?)
- 주로 경력직 위주의 채용 프로세스
- 회사에서 직접 구현해야 할 과제를 주고 주어진 기간안에 구현하도록 함
- 코딩 스타일, 문제해결 능력 봄
- 과제를 해결하면서 회사가 무엇을 사용하는지 알 수 있음
-> 답변 아까 내생각
코팅테스트 포기 후 입사
코팅테스트 보는 기업은 체계화되어 있을 가능성이 높음
코팅테스트에 자신이 있으면 그렇게 테스트 후 취업을 권함
첫 스타트가 굉장히 중요하다..!!!!!!!
코팅테스트 후 입사하면 초봉이 쌔다
코팅테스트 없이 회사 들어가서 취직하고 경력 쌓아 대기업 갔을 경우 신입보다 연봉이 적을 가능성이 크다
코팅테스트가 힘들면 대기업 인턴을 노려보라 -> 다른 회사에 도움이 될 수도 인턴에서 정규직으로 바뀔 수 도 있다
코딩테스트로 입사하는 것을 추천하나 6개월이상은 생각해 볼 것 -> 리스크도 어느정도 감수
면접 준비하기
회사의 비전과 연관된 지원 동기는 무엇
본인이 어떤 개발자라 생각
회사에서 지원자를 뽑아야 하는 이유
내 장/단점
어려움을 극복한 사례
일할 때 가장 중요하게 생각하는 것은 무엇
다른 사람과 의견 충돌이 있으면 어떻게 해결
실무자가 면접 진행
어떤 것을 개발했고 개발 하면서 어느 부분이 어려웠는지
손코딩 사전 과제 등이 있을 수 있음
오픈 소스는 어떤 걸 사용해 보았는지
기존 익숙한 업무와 전혀 다른 팀에 배치가 된다면
코드 리뷰 진행 경험
개발 프로세스에 대한 이해가 있는지
-------------------------------------------------
공부 사이트 및 공부방법
인프런(무료 강의도 있고, 유로도 비싸지만 내용이 좋음), 생활코딩(강의를 만들 수 있고 좋음), udemy(개발자 현직자들의 advance를 얻고자 한다면), coursera, dex, eliceacademy, k-mooc(강의도 듣고 수료증도 줌)
w3schools
웹 개발을 위해 필요한 내용이 잘 정리된 사이트이며 웹 페이지 내에서 테스트 가능함
- html, css, js, jquery, pyhton, bootstrap, java, c++,,,
TCPSCHOOL.COM
-w3 schools와 마찬가지로 웹 개발에 필요한 지식을 학습 할 수 있음
- 인터넷 기초 MYSQL, PHP
- jquery, xml, ajax, json
ISO 개발자가 보면 좋음
BOOSTCOURSE
-컴퓨터 과학, 모바일, 인공지능에 대해 무료로 학습 가능
- 코드리뷰는 별도 유료
ios academy(유튜브인듯)
- ios 개발에 필요한 기본 언어 부터 개발 까지 학습 할 수 있음
- 어떤 구조로 코드를 작성하고, 프로젝트를 작성했는지 볼 수 있음
raywenderlich.com
-ios, android. flutter를 학습하기 위한 강의, 아티클을 제공
- 부분 유료화 및 구독 시스템
- advanced 한 내용과 잘 짜인 구성
공부 방법
동기와 목표 설정하기
- 강의를 듣는 이유와 내가 이 강의를 통해 얻고자 하는 것은 무엇인지?
- 이 강의를 통해 무엇을 해보고 싶은지 생각해 보기
- 세부적으로 목표를 지정해 능동적으로 강의 듣기
커리큘럼 확인하기
- 내가 필요한 내용이 있는지? 난이도가 적절한 편인지
- 한 번 시작하면 끝까지 완료하기
직접 정리하고 찾아보면서 강의 듣기
잘 모르는 내용이 나오면 꼭 찾아보고 직접 정리하고 익히기
퀴즈나 강의는 배운 내용을 바탕으로 직접 해보기
타이핑만 하는게 아니라 어떤 문제에 어떻게 접근하는지 생각해 하기
책 공부하기
- 처음 부터 끝까지 공부하기x
- 기본적인 개념 익히기
- 실제 사용해 보면서 이 기술이 왜 필요하고 다른 기술보다 장점은 무엇인지 생각해보기
- 레퍼런스 문서 참고하기
경험 쌓기
- 회사 내부 프로젝트 진행
- 토이프로젝트 진행
- 스터디
- Slack, 카카오톡 단톡방, 커뮤니티 등에서 정보 및 스터디 구하기
- Udemy, 인프런 등에서 강의 듣기
- 세션 강연 테크콘
- 블로그 깃허브 관리하기
회사 선택하기
스타트업
- 시작을 함께 할 수 있고 성장 중인 회사
- 여러 언어와 프레임워크를 경험해 볼 수 있음
- 서비스 시작과 프로세스 가까이서 경험
- 개개인의 역할이 중요함
- 처음부터 개발해 나갈 수 있음
- 관심있고 비전있는 서비스
- 새로운 문화, 유연하게 스택 변경 가능
- 천인우(유튜브?)
중견, 중소 기업
- SI, 자체 서비스 개발
- 성장중인 회사이거나 해당 규모로 유지되는 회사
- 언어나 프레임워크 스위칭이 대기업보다 자율움
- 회사에 따라 워라벨과 업무 강도가 다른 편
- 중소기업의 메리트를 가지고 있는지 확인할 것
대기업
- 큰 규모와 대규모 트레픽 서비스를 경험해 볼 수 있음
- 다양한 사람들과의 협업
- 복지 혜택
- 개발 문화 지원
- 개인의 영향력이 작음
- 잘잡힌 체계와 교육 지원
회사 선택하기
- 현재 급하게 선택하기 보다는 N년 뒤를 생각하며 선택
막상 들어갔는데 관심없고 어려운 서비스를 운영하는 경우
원하는 언어로 개발하는 것까지는 문제 없겠지만 면 년 후면 사라질 언어나 다른 곳에서 잘 사용하지 않는 것으로 개발하는 경우 몇 년 뒤에 이직이 힘들거나 개발 커리어에 문제가 생길 수 있음
- 장기적인 접근이 중요함
회사에서 무엇을 서비스 하는가 -> 내가 구현하는 서비스
- 어떤 스택을 사용하는가
- 회사에서 사용하는 기술이 내가 사용하는 스택이거나 관심있거나 배워보고 싶은 스택일 경우 장기적으로 바라봤을 때 추가 했으면 좋겠는 스택이면 좋음
- 사수가 있는지
- 청년 사업을 지원하는지
- 개발 문화
- 일 프로세스는 어떤지
- 회사에서 배운 지식으로 다음 이직 커리어에서 사용할 수 있는지
- 어떻게 성장 할 수 있을 것인가
- 얼마만큼 발전이 있을 수 있을지
- 함께 일하는 사람들, 경영진, 어떤 일을 하고 어떤 서비스를 제공하는지
- 면접관이 나를 확인하지만 나또한 이 회사가 적합한지 판단하는 시간
회사에서 질문 하면서 방향, 스택을 조사할 수도 있음
이 팀에 문화를 확인 할 수 있는 시간
개발자로서 필요한 역량
의사소통
- 내가말하고자 하는 것을 분명하게 전달할 수 있는 능력
- 기획자, 디자이너, QA 등 꾸준하게 소통하고 반영해야 함
- 설득하거나 이해시켜야 하는 부분이 있음, 개발의 한계
- 코드에 대한 리뷰/이유 설명 및 정보 교환을 위한 커뮤니케이션
- 프론트 네이티브 플랫폼도 OS 별로 달라서 개발자 간의 소통도 많이 필요함
협업능력
- 작성된 코드를 물려받음 리팩토링이나 완성된 코드에 일부의 코드를 넣는 일
- 코드를 온전히 이해할 수 있어야 함
- 타 개발자의 코드도 디버깅 할 줄 알아야 함
- 라인별로 의도 파악, 코드의 흐름을 파악
- 문서화 중요
능동적인 신입 개발자 되기
회사와 팀에 대해 이해하기
- 우리 회사가 어떤 일을 해왔고 현재 하고 있는 일은 무엇인지 파악하기
- 우리 팀은 회사에서 어떤 일을 하고 있고 현재 하고 있는 일은 무엇인지 어떻게 일을 하는지 파악하기
- 팀이 어떻게 일하고 공유하는지
- 팀이 맞고 있는 프로젝트 이해하기
- 회사 문화, 팀 문화 파악하고 적응하기
프로젝트 파악하기
- 프로젝트에 관련된 문서를 요청하여 받아보기 : 업무 프로세스 적응과 프로젝트 파악하기
- 직접 서비스를 사용하고 서비스에 사용되는 용어와 관련 기능 이해하기
- 프로젝트 아키텍쳐 이해하기, 어떤 모듈과 어떤 패키지 사용하기
솔선수범
- 참고하거나 받아 볼 수 있는 문서가 없는 경우 프로젝트 진행하면서 잘 정리해서 공유하기(프로젝트 기본 세팅)
- 리팩토링, 유닛 테스트로 개선하기
능동적이게 일하기
- 멘토나 사수 찾기 없다면 유튜브 강연, 온라인에서 메토 찾기
- 직책과 타이틀에 제한 두지 말기
- 신입이 아닌 시니어처럼 행동하기
- 긍정적이고 능동적이게 일하기
- 커뮤니케이션 능력 높이기
개발자라는 전문가로서의 가치
- 회사의 연봉은 회사가 나의 가치를 얼마만큼 생각하느냐에 담겨 있음
- 내가 하는 일이 평가되어 고가에 반영됨
실수를 통해서 배우기
- 실수 없는 완벽은 없음. 버그 없는 완벽한 코드는 없음
- 실수를 그냥 넘어가면 기억도 안나고 발전도 없음
- 실수를 통해 무엇을 배웠는지 기록하고 개선하기
- 실수를 장려하는 문화와 팀리더 만나기
성장하는 개발자 되기
피드백 받기
- 코드리뷰, 개선점을 지속적으로 받을 수 있으면 좋음
- EX) 페이스북 동료 평가
- 피드백을 받을 땐 구체적으로 : 현재 개선하고자 하는 것, 현재 개발하는 것에 대해 구체적으로 질문받고 개선점 피드백 받기
신뢰 받는 개발자 되기
- 나를 신뢰할 수 잇게 만들어야 중요 태스크를 일할 수 잇음
- 내가 받은 업무 보다 그 이상의 것을 하기(양적으로 말고 질적으로)
- 스스로의 약속에 최선을 다하기, 흔들리지 말고 해내기
- 꾸준히 공부하고 개선해 나가기
- 단순히 트렌드라서 X, 나의 커리어에 맞게 왜 공부하는지 생각하기, 이 공부를 통해 무엇을 알 수 잇고 무엇을 개선할 수 있는지
개발자란
- 언어와 프레임워크의 전환은 언제든지 일어난다
- 지식은 중요하지만 어떤 때에는 치명적이다
- 환경은 지속적으로 빠르게 발전 및 변화하고 있다. 지식 보다는 지식을 얻는 방법이 중요
- 문제를 해결하기 위해서는 지식을 활용하는 방법이 중요
- 꾸준히 공부해야 하는 직업
- 트렌드에 앞서는 프론트엔드