반응형

 한 교수가 강의실에 들어와서는 커다란 유리 그릇을 탁자 위에 올려놓는다. 그는 학생들에게 그 그릇이 비어있는지 가득 찼는지 물어본다. 학생들은 뭔가 속임수가 숨어 있는 질문이라는 생각을 하면서도 대체로 그 그릇이 비었다는 데  대해서는 이견을 보이지 않는다. 


 이제 교수가 돌멩이가 담긴 커다란 상자를 탁자 위에 올려놓고는 더 올려 놓을 수가 없어 보일 때까지 유리 그릇에 돌멩이를 채워 넣는다. 그리고 나서 학생들에게 그 그릇이 가득 찼는지 다시 물어본다. 나름 대학에 들어갈 만큼 똑똑한 학생들이기 때문에, 금방 돌멩이 사이에 공간이 있다고 답한다.


 이번에는 교수가 커다란 모래주머니를 꺼내서는 그릇에 모래를 부어서 돌멩이 사이의 빈틈을 메운다. 그런 다음 물병을 꺼내들고는 물이 꽉 차서 넘칠 때까지 물을 붓는다. 


 교수가 다시 한 번 학생들에게 그릇이 가득 찼는지 물어보자, 학생들은 이제 그릇이 꽉 찼다고 답한다. 교수가 학생들에게 "이 유리그릇을 시간관리에 비유해볼 때, 내가 지금 이걸 보여 준 의도가 무엇이라고 생각합니까?"라고 묻는다. 


한 학생이 자신있게 "시간이 없다는 생각이 들 때도 효율적으로 행동하면 시간을 더 짜내서 일해낼 수 있다는 것을 뜻한다고 생각합니다."라고 대답한다. 


교수는 실망했다는 듯이 고개를 좌우로 흔들며 이렇게 말한다. "실은 거의 반대되는 얘기를 하고 싶습니다. 제가 하고 싶은 건, 이 그릇에 물하고 모래를 먼저 넣었다면 돌멩이를 집어넣을 수 없었을 거라는 점입니다. 그리고 여기에서 돌멩이, 커다란 물건을 해야 할 일 중에서 가장 중요한 것을 나타냅니다."



목표 중심적인 시간 관리의 핵심은 바로 자기 목표와 그 목표를 달성하기 위해 해야 할 일을 제대로 이해하는 데 있다. 그 점을 분명히 해 두지 않으면 조그만 일, 급한 일을 하는 데 시간을 다 보내느라 진짜 중요한 일을 할 수 없게 된고 만다.



출처 - 프로그래머로 사는법 chapter 12 中

반응형
반응형

1. SDK 로그 출력

Log.e(태그, 로그 메시지);

 에러 로그

 public static int e(String tag, String msg, Throwable tr) 

 public static int e(String tag, String msg)

 경고 로그

 public static int w(String tag, String msg, Throwable tr) 

 public static int w(String tag, String msg) 

 정보 로그

 public static int i(String tag, String msg, Throwable tr) 

 public static int i(String tag, String msg) 

 디버깅 로그

 public static int d(String tag, String msg, Throwable tr) 

 public static int d(String tag, String msg) 

 세부 정보 로그

 public static int v(String tag, String msg, Throwable tr) 

 public static int v(String tag, String msg)  


2. NDK 로그 출력

Log 버퍼의 크기가 작으므로 많은 양의 로그를 출력하면 로그가 안나오는 경우가 가끔 있다.

 __android_log_write

 간단한 문자열 출력 

 __android_log_print

 printf처럼 사용 

 __android_log_vprint

 va_list를 사용할 수 있음 

 __android_log_assert

 assert와 같음. 디버깅할 때 쓴다. 

Android.ml에 다음을 추가한다.

LOCAL_LDLIBS := -llog


사용 하려는 코드에는 log.h 파일을 포함 해준다.

#include <android/log.h>


원하는 곳에 다음 코드를 사용한다.

__android_log_print(ANDROID_LOG_INFO, "----", "AAAAAA");


지정 가능한 로그이 유형

ANDROID_LOG_UNKNOWN

ANDROID_LOG_DEFAULT

ANDROID_LOG_VERBOSE

ANDROID_LOG_INFO

ANDROID_LOG_WARN

ANDROID_LOG_ERROR

ANDROID_LOG_FATAL

ANDROID_LOG_SILENT



안드로이드의 모든 것 NDK 中


반응형
반응형

고급 보안 애플리케이션을 제작하는 회사에서 언제나 후보자가 저수준 코딩 경험이 부족하다는 이유로 후보자들을 되돌려 보냈습니다. 우리가 보낸 후보자들은 운영체제, 고급 메모리 관리, 혹은 매우 정교한 다른 애플리케이션을 설계하고 구현하는 사람들이었습니다. 하지만 이런 사람들에게 관심이 없었습니다. 그들은 후보자가 특정 분야에 대한 저수준 코딩 경험을 가지고 있을 것을 요구했습니다. 

그러다가 혼자 힘으로 탁월한 컴퓨터 에뮬레이터를 만들어냈을 정도로 실력이 뛰어난 소프트웨어 엔지니어를 발견했습니다. 하지만 그는 저수준 코딩 경험을 가지고 있지 않았습니다.

이 사람을 채용하면 3~6개월 내에 필요한 분야의 프로그래밍 경험을 획득할 수 있다고 밀어붙여 인터뷰를 시작했습니다. 그들은 인터뷰를 시작했고 마침내 그를 채용했습니다. 불과 몇 주 만에 그가 회사 내에서 가장 똑똑한 프로그래머라는 사실이 밝혀졌습니다. 원래부터 요구되던 저수준 코딩 기술을 습득했을 뿐 아니라 회사 내에 있던 다른 프로그래머들의 실력을 앞질러 나가기 시작 했습니다.

그 이후로 그가 자기 회사의 기술적 중심이라고 자랑을 하고, 프로그래머를 채용할때 더는 자기들이 요구하는 기술을 정확하게 보유하고 있는 사람을 찾으려고 하지 않습니다. 대신 그들은 가장 영리하고 가장 열정적인 엔지니어를 찾으려고 합니다.


위의 내용에는 소프트웨어 개발에서 경험이 중요하지 않다는 말을 하는 것이 아니라 어느 개발자의 경험 전체를 놓고 평가해야 한다는 의미이다.


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



반응형
반응형

그저 참고 봐줄 만한 프로그래머와 위대한 프로그래머 사이에 존재하는 차이는 그들이 얼마나 많은 언어를 알고 있는가가 아니다. 또한 어떠한 언어를 선호하느냐도 아니다. 단지 그들이 자신의 아이디어를 얼마나 잘 설명하는가에 달려있다.

위대한 프로그래머는 다른 사람들을 설득함으로써 영향력을 확대한다. 명확한 설명과 기술적인 스펙을 통해 그들은 다른 프로그래머들이 자신의 코드를 잘 이해하게 만들고, 그렇게 함으로써 다른 프로그래머들이 새로운 코드를 작성하는 대신 자기가 작성한 코드를 사용할 수 있게 만든다. 이러한 능력이 없다면 그들이 작성하는 코드는 아무 의미가 없을 것이다. 

프로그래머들은 부족한 의사소통 능력을 개선하기 위해 노력이 필요하다.

인용 출처  : 코딩 호러의 이펙티브 프로그래밍 中

반응형
반응형

프로그래머에게는 여덟 개의 단계가 있다고한다.

1. 죽은 프로그래머

이것은 최고의 단계이다. 당신이 작성한 코드가 끝까지 살아남아서 당신이 죽고난 후에도 사용된다. 컴퓨팅 역사의 한 부분을 영원히 차지하게 되고, 다른 프로그래머들이 당신이 작성한 코드를 학습한다. 생전에 이 정도의 업적을 성취하는 사람은 극히 드물다.

예 : 다익스트라, 도널드 커누스, 앨런케이

 

2. 성공적인 프로그래머

널리 알려져 있으며 자신의 코드를 이용해 하나의 비즈니스를 새롭게 창조한 프로그래머다. 대부분의 프로그래머들이 꿈꾸는 단계이다. 이 단계에 이르는 것은 종종 프로그래밍 기술보다 비즈니스 기술에 좌우되는 경우가 많다.

예 : 빌 게이츠, 존 카맥, DHH

 

3. 유명한 프로그래머

프로그래밍과 관련된 직업을 가지고 있는 한해서 당신은 프로그래머 집단에서 잘 알려져 있다. 유명하다고 해서 많은 수입이 보장되는 것은 아니다. 잘 알려진 대형 기술 회사나 작지만 영향력 있는 회사, 아니면 작은 규모의 스타트업에서 근무하고 있을 것이다. 다른 프로그래머들이 이미 당신의 이름을 들어 알고 있고, 당신은 자신의 분야에서 긍적적인 영향을 미치는 존재다.

 

4. 일하는 프로그래머

소프트웨어 개발자로서 성공적인 경력을 보유하고 있다. 당신의 기술을 필요로 하는 곳이 늘 있으며, 좋은 직장을 구하기 위해 그다지 오래 기다릴 필요가 없으며, 주변의 동료들은 당신을 존경한다. 당신이 근무한 회사는 모두 실적이 향상되고, 당신의 존재에 의해 뭔가 분위기가 향상된다.

 

5. 평균적인 프로그래머

프로그래머는 자신이 결코 위대한 프로그래머가 아니라는 사실을 깨닫긴 하지만 충분히 좋은 실력을 가지고 있는 프로그래머다. 이런 사람들은 아마도 위대한 프로그래머가 되지는 못할 것이다. 비즈니스 능력과 사람을 다루는 기술이 뛰어난 사람이 더 큰 성공을 거두는 경우가 많다. 근근이 먹고 살아가는 정도라면 아마도 재능이 있긴 하되 그 재능이 코딩의 영역에 있는 것은 아닐 것이다.

 

6. 아마추어 프로그래머

코딩을 좋아하는 사람들이다. 장래가 촉망되는 학생이나 인턴일 수도 있고, 오픈소스 프로젝트에 기여하는 사람들일 수도 있고, 그저 재미를 위해 여가 시간에 흥미로운 애플리케이션이나 웹사이트를 제작하는 사람일 수도 있다. 그들이 작성하는 코드는 미래의 가능성과 열정을 보여준다. 이 단계에 머물던 사람이 빠르게 일하는 프로그래머의 단계로 성장하는 경우도 있다.

 

7. 알려지지 않은 프로그래머

전형적인 프로그래머의 단계다. 이름 없는 프로그래머들로 보통 유능하긴 하지만 별다른 특징이 없는 사람들이다. 대부분 큰 회사에서 근무하며 하는 일은 그저 직업일 뿐이며 개인적인 삶의 목표와 별로 상관이 없다.

 

8. 나쁜 프로그래머

프로그래밍에 어울리는 기술이나 능력이 없는 상태에서 프로그래밍을 수행하는 직업을 갖게 된 사람들이다. 건드리는 것이 다른 동료 프로그래머들에게 고통과 통증을 안겨준다. 자신이 이 곳에 포함되어 그것을 인식을 못하는 사람들도 있을 것이다. 비즈니스에 사용되는 코드를 작성하면 안되지만 그런 코드를 작성하고 있다.

 

인용 출처  : 코딩 호러의 이펙티브 프로그래밍 中

반응형

+ Recent posts