Book2015. 3. 25. 11:21



코딩 호러의 이펙티브 프로그래밍

저자
제프 앳우드 지음
출판사
위키북스 | 2013-03-29 출간
카테고리
컴퓨터/IT
책소개
코딩 호러 블로그의 운영자이자 스택 오버플로우 공동 창업자가 알...
가격비교



어제 퇴근 후 집에서 와이프를 기다리며 "코딩호러의 이펙티브 프로그래밍"을 읽었다.

읽었던 내용 중 기억에 남는 부분이 면접과 관련된 부분인다.

놀랍게도 지원자 200명 중 199명은 프로그래밍을 전혀하지 못한다는 것이였다.

너무도 놀라운 내용이라 '그럼 난 프로그래밍을 할 수 있는 걸까?'하는 의심이 들었다.

아래는 책에서 소개한 개발자를 구별할 수 있는 "피즈버즈"라는 질문이다.


1에서 100 까지의 수를 출력하는 프로그램을 작성하라.

하지만 3의 배수는 해당 수자 대신 "Fizz"를 출력하고,

5의 배수는 "Buzz"를 출력한다.

3과 5의 배수에 모두 해당하는 수는 "FizzBuzz" 를 출력한다.


지금 부터 나도 한번 작성해 봐야겠다.

혹시라도 이 포스트를 읽고 계신분이 있다면 한번 풀어보길 바란다.


사실 대단한 문제가 아닌듯 하지만 책의 내용에 따르면 대부분의 훌륭한 프로그래머라면 대략 2분정도면 풀수 있으나

컴퓨터 공학을 졸업한 대다수의 사람들이 프로그램을 적지 못하였으며

선임 프로그래머라고 주장하는 사람 중에서 10~15분이 걸리는 경우도 있었다고 한다.


나는 아래와 같이 작성했다.

종이에 작성하는데 대략 2분 정도 걸렸지만 문제를 잘못 이해새 숫자 출력하는 부분을 빼먹어 

수정 시간까지 20 ~ 30초 정도 추가로 소요되었다.


for (int i = 1; i <= 100; i++)

{

string temp = string.Empty;

if (i % 3 == 0)

{

temp = "Fizz";

}


if (i % 5 == 0)

{

temp += "Buzz";

}


if (!string.IsNullOrEmpty(temp))

Console.WriteLine(temp);

else

Console.WriteLine(i.ToString());

}




책에서는 전화 인터뷰로 적당한 문제들도 소개하고 있다.

전화 인터뷰가 아니라 일반 면접 시에 사용해도 좋은 문제 들인 것 같다.


코딩

 - 문자열의 수서를 뒤집는 함수를 작성하라

 - N번째 피보나치 수를 계산하는 함수를 작성하라

 - 구구단 표를 12*12까지 출력해보라

 - 한 줄에 하나의 정수가 적혀 있는 텍스트 파일을 읽어 그것들을 모두 더하는 함수를 작성하라

 - 1에서 99 사이에 존재하는 홀수를 모두 출력하는 함수를 작성하라

 - 정수형 배열에서 가장 큰 값을 찾아라

 - (세 개의 1바이트 수로 이뤄진) RGB 값을 6개의 수로 이뤄진 16진수 문자열로 표현하라


객체지향 프로그래밍

 - 여러 가지 카드 게임 애플리케이션에 사용할 수 있는 카드 한 벌을 설계해 보라

 - 가상 동물원 프로그램에서 사용할 수 잇는 동물의 왕국을 클래스 시스템으로 모델링하라

 - 파일시스템을 나타내는 클래스를 설계하라

 - HTML을 모델링하는 객체지향 표기법을 설계하라.


스크립트 작성과 정규 표현식

 - 50,000개 에 달하는 웹페이지 템플릿에서 (xxx) xxx-xxxx 혹은 xxx-xxx-xxxx라는 

전화번호를 담고 있는 파일 목록을 제출하라


자료구조

 - 예를 들어 java.util 같은 데 포함돼 있는 아주 흔한 자료구조는 무엇인가?

 - 언제 연결 리스트를 사용하고 언제 벡터를 사용할 것인가?

 - 트리를 이용해 맵을 구현할 수 있는가? 리스트도 구현할 수 있는가?

 - 트리에 저장돼 있는 노드를 모두 출력하려면, 어떻게 해야 하는가?

 (즉, 첫 번째 레벨의 노드를 모두 출력하고, 그다음에 두 번째 레벨, 그다음에 세 벌째 레벨과 같은 식으로 진행하는 것이다.)

 - 해시테이블에 데이터를 추가할 때 최악의 경우에 해당하는 성능은 무엇인가? 이진트리의 경우는?

 - 우선순위 큐를 구현하기 위한 방법으로는 어떤 것들이 있는가?


비트와 바이트

 - 바이트 안에 존재하는 최상위 비트의 값이 설정돼 있는지 검사하는 방법을 말하라.

 - 정수 안에 존재하는 모든 비트의 수를 세는 함수를 작성하라.

  이 함수의 시그너처는 다음과 같다. 

  int countBits(int x)

 - 정수를 받아들여 그 수의 비트 패턴이 해당 패턴을 거꾸로 했을 때와 동일하면(회문 형태라는 뜻이다)

 참을 반환하는 함수를 작성하라. 시그너처는 이렇다.

 boolean isPalindrome(int x)



이중에서 당장 대답할 수 있는 문제가 몇개나 될까?

다음에 하나씩 풀어봐야겠다.



'Book' 카테고리의 다른 글

Programming in Scala  (0) 2015.03.26
Posted by 레인타입