본문 바로가기

책/책 읽은거

프로그래밍 면접 이렇게 준비한다

네 자신을 알라


시스템 프로그래머 

컴퓨터 시스템이 돌아갈 수 있게 해 주는 프레임워크나 툴, 컴파일러 , 드라이버, 서버 같은 코드. 주로 다른 프로그래머들과 얼굴을 맞대고 일해야 하며, 프로그래머가 아닌 사람들과는 같이 일하는 경우가 거의 없다


응용 프로그래머

프로그래머가 아닌 사람들이 자기 일을 하는데 필요한 프로그램을 만드는 일을 한다. 


디버깅에 능숙한가?

테스팅을 좋아하는가?


아키텍트

코딩보다는 디자인 쪽을 더 좋아한다. 다른 사람들과의 접촉이 업무의 대대수를 차지하며, 코딩은 거의, 또는 전혀 하지 않는다. 


코더

코딩함


나는 관리 업무에 흥미를 느끼고 있는가?

대기업

안정성, 커리어 패스 쌓는데 유리, 이름값이 있어서 인정받음. but 관료주의 경직성, 타기업과의 경쟁 때문에 스트레스


중소기업

월급 적고, 회사가 점점 커지고 사업이 성공 가도를 달린다면 큰돈 만질 기회가 생김. 


오픈 소스 프로젝트를 좋아하는가?

대부분의 프로그래밍 업무는 소스가 공개되지 않는 상용 프로젝트를 중심으로 돌아가는데, 이런 프로젝트를 맘에 들어하지 않는 프로그래머들도 있다. 


장기 프로젝트가 좋은가 단기 프로젝트가 좋은가?


온라인 구직 사이트

dice(기술 관련 커리어 전문), monster, hotjobs


아웃소싱

개발도상국에도 교육 수준이 높은 인력들이 늘어나고, 인터넷 연결이 가능한 곳이라면 어디에서든 소프트웨어 개발이 가능. 인건비가 싸서 많이 함. 


소프트웨어 개발 전문회사에서 일한다

그 회사에서 개발하는 소프트웨어가 바로 그 회사의 존재 이유다. 제대로 된 히사라면 회사 전체를 외국으로 옮긴다거나 자사의 미래를 외부 업체에 맡겨버리는 일을 할 가능성은 희박하다. 


프로그래머 먹이 사슬에서 위쪽으로 올라간다

관리직으로 전환한다


팔릴만한 능력을 개발한다

1. 좋은 학위를 취득한다. 

석사, 박사 학위는 구직 활동에 크게 도움이 된다. 구글 등의 회사는 선호.

2. 사이드 프로젝트를 진행한다

업무 외에 아무거나 능력 계발

3. 성적을 잘 받는다

전부는 아니지만 참고사항

4. 지속적으로 공부한다

블로그, 책 등으로 계속 공부한다

5. 인턴 경험을 쌓자

회사 경험이 유리


인터넷에 글쓴 기록들을 삭제하라


일단 당신을 받아들이겠다는 결정이 나면 리크루터는 당신이 최대한 낮은 월급으로 그 회사에서 일을 하도록 만드는 것이 가장 중요한 목표가 된다. 


지원자에게 일하게 될 팀의 연락처를 알려주지 않는 리크루터들도 있다.


자신이 원하는 것을 정확하게 파악한다

입사 보너스, 월급, 스톡옵션 중에서 어떤 것을 더 올리고 싶은지 결정하자


자신의 상황을 설명하자

채용 제의를 해 주신데 대해 감사드립니다. 하지만 다른 회사에서 받은 채용 조건에 못 미치기 때문에 선뜻 받아들이기가 힘든 문제가 있습니다. 

채용 제의에 다시 한 번 감사드립니다. 하지만 주변 사람들과 얘기해 보고 다른 회사들에 알아보니 귀사에서 제시한 조건이 다른 곳에 비해 조금 약한 것 같아서 제의를 받아들이기가 힘들군요.

귀사에서 제시한 조건을 포함하여 제가 받은 취업 제의는 전부 비밀로 하고 있습니다. 함부로 그런 정보를 말하고 다니는 것은 프로답지 못한 행동이라는 생각이 드네요


협상은 전문가와 상대하므로 어렵지만 30분만에 300만원 연봉이 오른다면 그 대가는 크다


제의 수락 또는 거부

입사를 제의했을 정도라면 이미 그 회사 및 그 회사 사람들과 어느 정도 친분을 쌓았음은 분명하다. 그러므로 그 회사에 가지 못하겠다는 메일을 보내야 한다. 상사가 될 뻔 했던 사람에게도 개인적으로 전화를 걸어서 입사 제의를 해 줘서 고마웠다는 인사를 하고 자신이 어떤 결정을 내렸는지를 알려줘야 한다. "저에게 입사 제의를 해 주셨던 점 감사드립니다. 회사가 아주 맘에 들었지만, 지금 저에게 최선의 선택은 아니라는 결정을 내리게 되었습니다. 다시 한 번 감사드리고, 저에게 신뢰를 보내 주신 점에 대해 고마운 마음 간직하고 있겠습니다. "


인터뷰

많은 회사들이 인터뷰를 한 사람들 중에서 10% 미만의 지원자에게만 입사 제의를 한다. 코딩 문제는 상당수가 한 시간 정도 안에 풀 수 있는 수준으로 제출되기 때문에 문제를 듣자마자 바로 답이 떠오르지 않는다고 해서 괴로워 할 필요는 없다. 사실 바로 답을 내놓는 사람은 거의 없다. 원래 문제가 어렵다. 답이 보이지 않는 상황에서 문제를 어떤 식으로 해결하는지를 살펴보기 위해 내는 문제들도 있으니 너무 긴장하지 말자


시나리오

코딩 문제는 인터뷰어와 1:1 이 일반적. 코딩을 쓰기 전에 문제에 대해 한번 쭉 설명을 해보라는 경우도 있다. 보통 함수나 메소드를 만들라고 하는 경우가 많지만 클래스 정의 또는 연관 코드 모듈을 만들어 보라고 하는 경우도 가끔 있다. 


문제 

"비교 연산자를 전혀 사용하지 않고 두 정수가 같은지 판단하는 함수를 만드시오"

비트 연산자 등으로 한다던가 

제약이 걸린 문제는 그 제약대로 푼다


문제해결

1. 문제를 확실히 이해한다

2. 이해하고 나면 몇 가지 예를 시도해 본다.

3. 문제 풀이에 사용할 알고리즘에 초점을 맞춘다.

4. 알고리즘과 구현 방법을 알아내고 나면 인터뷰어에게 풀이를 설명한다

5. 코딩을 할 때도 뭘 하고 있는지 설명한다

6. 필요하다면 질문을 한다.

7. 코드를 완성하고 나면 바로 몇 가지 예를 시도해 보고 맞는지 확인한다. 

8. 모든 오류 및 특별 케이스, 특히 경계 조건을 확인한다.


풀이 분석

빅 오 분석법(big-O analysis)을 제대로 이해하고 있다면 인터뷰어에게 좋은 인상을 남긴다. 재귀 호출의 경우 질문이 많이 나온다. 입력 값의 개수에 따라 알고리즘이 수행되는 데 걸리는 시간을 바탕으로 알고리즘의 효율성을 평가하는 실행 시간 분석법이다. 정확한 벤치마크와는 다르지만 알고리즘의 상대적인 효율성을 간단하게 따져보는 데는 유용하다.



요약

인터뷰 후반으로 갈수록 문제가 점점 어려워지기 때문에 인터뷰어에게 힌트를 받아 풀어야 할 수도 있는데, 부담을 가지지 말자. 의사소통은 최대한 활발하게 하자. 





이 책은 머 면접 얘기가 많아서..별로 읽은게 없네...되게 현실적으로 잘 알려주는거 같은데 외국도 환경이 이런가..

여기까지가 내가 읽어보고 싶어서 읽은 내용이고 그 뒤로는 자료구조니 알고리즘 등에 대한 기술적인 내용들...

물론 공부해야 겠지만...이력서랑 마소 면접에 대한 내용은 읽고 반납해야겠다