노력해서 공부하고 계신가요?

생각로그 2011. 4. 26. 15:53


대학교 때 인상깊게 읽었던 글인데, 예전 블로그를 정리하며 다시 읽어보니 더 깊은 의미로 다가온다  
요 몇달 동안 고민하느라 노력하는 것을 게을리 했다.  물론 생각을 많이 할 수 있는 시간들었기에 아쉽지는 않다.
이제 구체적인 목표를 잡고 다시 공부에 매진할 때인 듯하다
마지막 부분  "상대방에 대한 5분의 생각" 구문이 특히 마음에 든다 ㅎ


http://cafe.naver.com/javachobostudy/26157 블로그에서 퍼온 "고승덕 변호사"께서 작성한 글이다. 


고승덕 변호사

나는 외모에 컴플렉스가 있다. 
아시겠지만, 대학교 때 고시 3개를 합격했다. 
사법고시 합격, 외부고시 2등, 행정 고시 1등. 
그리고 서울대 법대를 수석 졸업했다. 

학교 졸업 후 부모님께 큰 절을 했었다. 똑똑한 머리를 물려줘서가 아니라, 사실은 변변찮은 외모덕에 그저 고시에만 전념할 수 있게 해줬기 때문에 감사하다는 의미로.


내 직업은 
1. 변호사이면서
2. 방송도 하고
3. 책을 쓰고 있다. 평생 소원이 1년에 1권씩 평생 책을 내는 것이다.
4. 글도 쓴다. 모 신문사에 경제기사를 1주일에 2개정도 쓴다.
5. 또 오늘과 같은 특강도 한다. 평균 1주일에 2회 정도
6. 증권분야에서도 활동하고 있다. 운영하고 있는 사이트가 있는데 회원수만도 3만5천명 정도 된다. 
나름대로 홈페이지 관련 사업을 하나 구상 중인 것도 있다.
7. 마지막으로 대학에서 겸임교수로 활동하고 있다.

이처럼 내가 하고 있는 일이 무척 많은 것 같고, 
어떻게 이걸 다 할까 생각이 들겠지만 다 가능하다.

이 중에서 한가지만 하더라도 힘들다고 하는 사람이 많다. 
그러나 가능하다고 생각하면 다 가능하다.

무엇이든지 목표가 중요하며, 
그 목표 달성을 위해 가장 중요한 것은 확신이다. 
사람들은 어려운 일일수록 확신을 갖지 못한다.

인생에 있어 2가지 자세가 있다. 
보통 사람들은 남보다 적게 노력하고 결과는 남들과 같은 똑같이 나오게 하려고 한다. 사실은 이것이 경제학 법칙에 맞는 것이다. 투입을 적게하고 효과를 많이 내는 것.

반대로, 다른 사람들 만큼의 결과를 얻기 위해서는 더 많은 노력을 해야 한다고 생각할 수 도 있다. 나의 경험상으로 보면 후자가 훨씬 좋은 결과를 낳는다.

남보다 노력을 더 많이 해서 비슷한 결과를 가져 오는 것이 비효율적인 것 같지만, 실제로 이것은 어느 시점이 지나면 훨씬 더 좋은 결과를 가져온다.이것이 내가 인생을 살면서 내 스스로 내린 결론이다.


그럼 노력이란 무엇이냐? 
나는 "노력이란 성공의 확률을 높이는 것이다."라고 정의 내린다. 
하지만 물론 결과를 반드시 보장하지는 않는다. 

노력에도 함수 관계가 성립한다.
* 노력 = f(시간 X 집중)

내가 실제 노력을 했는가 안했는가를 판단하려면 
시간을 많이 투입했거나 집중을 잘했거나 살펴보면 된다.

똑같은 일을 하더라도 3시간만에 끝내는 사람이 있는가 하면 5시간만에 끝내는 사람도 있다. 그러나 3시간만에 끝내는 사람이 실제 일을 더 잘하는 것 같지만 나머지 2시간을 어떻게 보내느냐가 중요하다. 
더 많이 알기 위해 그 2시간을 투자하지 않았다면 노력하지 않은 것이다.

짧은 시간을 비교해 보면 노력을 적게하고, 많이 하는 것이 결과만 보면 거의 미미하다고 할 수 있다. 그러나 그 순간을 이겨내면 주식처럼, 가속도가 붙기 시작하면서 그 차이는 엄청나다.

집중에 대해서 얘기해 보면, 고시 공부할 때 예를 들어 보겠다. 
나는 고시 공부를 1년간 해서 합격했다. 어떻게 가능 했느냐?
첫째는 된다고 생각하는 확신 있었기 때문이고, 
둘째는 남보다 더 많은 노력을 했기 때문이다.

보통 고시에 합격하려면, 봐야 할 책이 50권, 권당 페이지는 500p. 
그 책을 5번을 봐야 합격한다는 얘기가 있다. 
그러나 나는 7번을 봤다. 이를 계산해보면,
50 X 500 X 7 = 175,000 페이지를 읽어야 한다는 얘기다. 
이것을 1년을 360일로 계산해보면 1일 목표량이 나온다. 
즉, 1일 500페이지 정도의 분량을 봐야 한다는 것이다.

이처럼, 목표를 세울때는 구체적으로 세워야 한다. 
막연한 목표는 달성하기 힘들다.

이 결론을 보면 "인간이 할 짓이 아니다"라고 생각할 것이다. 
누구나 그렇게 생각한다. 
그렇게 생각하면 사람들은 포기하게 된다. 
설사 하게 되더라도 하다가 흐지부지 된다. 

이렇게 목표에 대해 확신이 없고, 
목표를 의심하는 사람은 집중을 할 수 없다. 
무엇보다도 자신의 목표에 확신을 가져라.

된다는 사람만 되고 안된다고 생각하는 사람은 안된다. 
일단 안 된다고 생각하는 대부분의 85%의 사람들은 이미 나의 경쟁상대가 아닌 것이다. 된다고 생각하는 일부만 나의 경쟁이 된다. 그럼 경쟁대상이 줄어드니 훨씬 마음도 한결 가벼워진다.

세상도 절대적으로 잘하는 사람은 원하지도 않고 필요하지도 않다. 남 보다만 잘하면 된다. 그럼, 다른 사람보다 잘하고 있는지를 어덯게 판단하느냐? 그것은 나 자신을 판단 기준으로 삼으면 된다.

인간은 거의 비슷하다. 내가 하고 싶은 선에서 멈추면 남들도 그 선에서 멈춘다. 남들보다 약간의 괴로움이 추가되었을 때라야 비로소 노력이란 것을 했다고 할 수 있다.

고시 공부할 때 7시간 잤다. 장기간 공부를 해야할 경우라면 일단 잠은 충분히 자야한다. 하루 24시간 중 나머지 17시간이 중요하다. 고시생의 평균 1일 공부시간은 10시간 정도다. 

그러나 정말 열심히하는 사람은 잠자는 시간빼고 17시간을 하는 사람이 있을 것이다라는 생각을 했다.

그러면 정말, 밥먹는 시간도 아까웠다. 남들과 똑같이 먹어서는 안된다고 생각한 것이다. 반찬 떠 먹는 시간도 아까웠다.씹는 시간도 아까웠다. 그래서 모든 반찬을 밥알 크기로 으깨어 밥과 비벼 최대한의 씹는 시간도 아꼈다. 숟가락을 놓는 그 순간부터 공부는 항상 계속 되어야했다. 나의 경쟁자가 설마 이렇게까지 하겠냐하고 생각들면 노력했다고 할 수 있는 것이다.

미국에서 생활할 때 보면 소위 미국의 전문가라고 하는 사람들은 간단한 샌드위치로 끼니를 때운다. 점심시간 1시간 다 쓰고, 이래저래 20~30분 또 그냥 보내는 우리나라 사람들은 그들에 비하면 일 하는게 아니다.

집중을 잘 하는 것은 벼락치기 하는 것이다. 벼락치기 할 때가 더 기억에 오래 남는다고 한다. 우등생은 평소에 벼락치기 하는 마음으로 공부를 한다. 

이렇게 할 수 있는 이유는 목표가 분명하기 때문이다. 
막연한 목표를 가지면 이렇게 긴장이 안되지만 분명하면 항상 긴장되고 집중을 잘 할 수 있다.

방송하면서 인생이 많이 바뀌었다. 
처음 주변 사람들은 말렸지만 결과적으로 보면 좋은 결과를 가져왔다.

나는 세상을 살면서 이런 생각을 해본다. 
사람은 해야 할 일과 하지 말아야 할 일이 있다. 사람이 해야할 일이란 남에게 해을 끼치는 일이 아니면 해도 되는 일이다 라고 생각한다. 그렇게 생각하면 세상에 해야 할 일이 참 많다.

인생에서 내가 할 수 있는 일들을 쌓아 가면 된다. 하다가 안되면 포기하더라도 아예 안하는 것보다는 낫다. 아예 하지 않으면 할 수 있는 일은 아무 것도 없다.

나의 징크스는 시험에 합격하려면 10번을 봐야 하는 것이다 .그래야 합격의 확신을 갖는다. 3~4번만 보면 불안하다. 그래서 그냥 뭐든지 기본적으로 10번을 본다. 몇 번 3~4번 책을 보고 시험을 본 적 있다. 역시 떨어졌다.


앞으로는 이렇게 해보자. 
첫째는 남보다 많이 노력하는 것이다. 
둘째는 어려운 목표일수록 확신을 가져보자. 
그러면 정말 되는 일이 훨씬 많다. 
셋째는 남보다 최소 3배는 해야한다고 생각하자.

직장에서 윗사람이 일을 시킬 때 남보다 더 많은 일을 시키고, 나한테만 어려운 일을 시키더라도 신나는 표정을 지어보자. 대부분의 사람, 아니 나의 경쟁자는 이럴 때 얼굴을 찌푸릴 것이다. 
그러나 내가 이기려면 그들 보다는 다른 모습이어야 한다. 

힘들더라도 괴로움을 추가해 보자.

남들에 비해 노력한 만큼의 결과가 나오지 않더라도 노력을 계속해야 한다. 3배의 노력만 한다면 4번째부터는 분명 가속도가 붙어 급속도로 차이가 날 것이다.

마지막으로 대인관계에 대해 강조하고 싶다. 세상을 살다보면 대인관계를 유지하는 것도 노력이다. 성공을 위해서는 나 혼자의 노력 외에 대인관계가 차지하는 비중이 높은 경우가 있다. 
어떤 상대를 만나든 최소 5분은 상대방을 위해 생각하는 시간으로 할애해 보자.

남과 똑같이 해서는 절대 노력했다고 할 수 없다.

 

프로그래밍 문제 접근법

알고리즘.데이터구조 2011. 4. 26. 13:32



인터뷰에서 가장 주된 부분을 차지하는 것은 기술면접, 코딩 => 어려운 문제 => 능력을 보여줄 수 있는 기회
답이 보이지 않는 상황에서 문제를 어떤 식으로 해결하는지를  살펴보기 위한 문제들도 있으니 긴장은 하지말자!


1. 절차


1.1 시나리오
코딩문제는 인터뷰어와 일대일로 진행하는 것이 일반적.  
종이와 펜을 코드를 작성하라고 한다거나, 전에 문제를 설명해보라고 할 수 있다.


1.2 문제
짧은 시간안에 설명까지 할수 있어야 하기 때문에, 변별력 있는 적당히 어려운 문제가 출제된다.
(실전에 직접 적용할 수 있는 코드를 만드는 문제가 나올 가능성은 희박함)
문제의 난이도는 대체로 점점 어려워지는 순서로 배치된다 


1.3 어떤 언어를 선택할 것인가?
일반 프로그래밍 또는 개발업무를 지원했다면  C#, Java, C++,  C 같은 주류 언어를 제대로 쓸수있는 정도면 됨
인터뷰를 하러 가기 전에 자신이 사용할 모든 언어의 사용법 및 문법을 제대로 숙지해야함
(C++ 프로그래밍을 마지막으로 건드려본지 몇년 지났다면 적당한  C++ 레퍼런스 가이드를 펼쳐 중요한 내용 체크!)


1.4 의사소통의 중요성 
자신이 사용할 언어를 가다듬고 가능하면 가장 좋은 코드를 만들자.
인터뷰어가 정말로 원하는 것은 지원자가 문제를 푸는 각 단계들을 어떻게 진행하는지 보는 것임
지속적으로 무슨일을 하고 있는지 설명하도록 하자



2. 문제해결
인터뷰 문제를 해결하는 조직적인 방법을 알아보면,

1) 문제를 확실히 이해한다
   - 문제를 이해하지 못했을 경우 주저하지 말고 인터뷰어에게 문제에 대한 질문을 해야함 
2) 일단 문제를 이해하고 나면 몇 가지 예를 들어본다 
  - 예를 시도하다보면 문제를 어떻게 풀어야 할지 감을 잘을 수도 있다.
3) 문제 풀이에 사용할 알고리즘에 초점을 맞춘다 
  - 보통 이 과정은 시간이 오래 걸리는 단계임. 부담을 가지지 말고, 인터뷰어와 대화를 통해 무엇을 하고 있는지를 보여줘야함 
4) 알고리즘과 구현 방법을 알아내고 나면 인터뷰어에게 풀이를 설명한다.
5) 코딩을 할 때도 뭘 하고 있는지 설명한다. 
   - 조용히 코드만 적는 방법은 그리 좋지 않다. 
6) 필요하다면 질문을 한다
7) 코드를 완성하고 나면 바로 몇 가지 예를 시도해 보고 맞는지 확인한다 
8) 모든 오류 및 특별 케이스, 특히 경계 조건을 확인한다 

=> 코드가 제대로 만들어졌다는 판단이 들면 인터뷰어가 코드에 대한 질문을 몇 가지 던질 것이다.
보통 이런 추가 질문에는 실행시간이나 또 다른 구현 방법, 복잡도 등에 초점을 맞춘다 


2.1 문제를 풀다가 막히는 경우
인터뷰어는 문제에 대한 답을 바로 알아낼 수 없는 경우에 지원자가 어떤 식으로 반응하는지를 살펴보고 싶어하기 마련.
문제를 풀다가 갑자기 막히게 됐을 때 포기하거나 좌절하는 것은 최악의 대응책이다. 
계속해서 흥미를 보이고 풀려고 시도하는 모습을 보이자

* 예를 다시 따져본다
 - 특정 예에서 일반적인 경우로 확장을 해보고 그로부터 풀이를 도출해보자.
* 다른 자료 구조를 사용해 시도해 본다.
* 언어에서 그리 많이 쓰이지 않는 기능 또는 고급 기능을 고려해 보자. 
 - 다른 자료구조, 언어ㄱ의 고급 기능이 문제 풀이의 핵심이 되는 경우도 있다. 


3. 풀이 분석

3.1 빅 오 분석법(big-O analysis) 
입력 값의 개수에 따라 알고리즘이 수행되는데 걸리는 시간을 바탕으로 알고리즘의 효율성을 평가하는 실행 시간 분석법
(입력의 개수 n이 매우 큰 경우의 실행시간인 점근적인 실행시간을 따지기 때문에 상수항은 무시함                                                    
(n이 매우 커질 때 가장 큰 항만 남기고 다른 항은 무시함)


3.2 빅 오 분석법을 적용하는 방법
1) 입력 값이 무엇인지 확인하고 어떤 것을  n으로 놓아야 할지 결정한다.
2) 알고리즘에서 수행해야 할 연산 횟수를 n의 식으로 표현한다 
3) 차수가 제일 높은 항만 남긴다
4) 모든 상수 인수를 없앤다 


때론 최선 케이스,  평균 케이스, 최악 케이스의 실행 시간을 따져봐야 하는 문제도 생김. 








 


'알고리즘.데이터구조' 카테고리의 다른 글

[알고리즘] 알고리즘 글 목록  (0) 2013.07.08
프로그래밍 문제 접근법  (0) 2011.04.26
원 위에 나열된 수 제거하기  (0) 2011.03.23
합병정렬(Merge Sort)  (0) 2011.03.23
HMAC-SHA1  (0) 2011.03.11
문제5 그래픽편집기  (0) 2011.02.18

BlackBerry Architecture

앱개발로그 2011. 4. 26. 01:54



아래 그림에서 보는 바와 같이 BlackBerry Device 상에는 BlackBerry Java, MDS Runtime, Browser 이렇게 3가지 타입의 Application이 존재하며, 이 애플리케이션들은 MDS Device 소프트웨어 위에서 구동된다.  BlackBerry JVM 위에서 실행되는 자바 애플리케이션을 개발하거나, MDS Runtime 기반의 애플리케이션을 개발할 수 있다. 
이외에도 MDS (Mobile Data System) Device 소프트웨어는 무선 네트웍을 통해 BlackBerry Enterprise Server 의 MDS
서비스와 통신하는 역할을 담당한다.





1. BlackBerry MDS(Mobile Data System) 란?
 MDS는 애플리케이션 개발을 위한 프레임웍으로, 기업용 애플리케이션들을 추가하고 관리하는데 사용된다.
BlackBerry Enterprise Server 컴포넌트 중 하나로, 보안과 무선연결, 관리 옵션들을 제공한다.
무선통신 애플리케이션을 좀더 쉽게 개발하고, 블랙베리 디바이스에 배포할 수 있는 방법을 제공한다.
기본 애플리케이션 및 시스템과 무선통신 애플리케이션 통합의 단순화를 위해 MDS는 표준에 근거한
프로토콜과 방법을 사용한다.

MDS의 구성요소들을 간략히 알아보자.

1.1 BlackBerry MDS Services
디바이스에 무선애플리케이션을 배포하고, 유지 및 관리하는데 사용된다. 아래와 같은 2가지 요소로 구성된다.

① BlackBerry MDS Integration Service

   MDS 애플리케이션과 웹서비스나 DB 연결을 사용하는 종단시스템 간의  통신에 사용된다.
   BlackBerry Enterprise Server 설치시 설치된다

② BlackBerry MDS Connection Service
   BlackBerry Browser와 Java 애플리케이션으로 부터의 웹컨텐츠 요청을 처리한다.


1.2 BlackBerry MDS 개발도구 : www.blackberry.com/developers 를 참고하자.


1.3 BlackBerry MDS device software
  BlackBerry Application 실행을 위한 MDS Device Software 들로 다음과 같은 것들이 있다.

① MDS Runtime 애플리케이션을 실행하기 위한  BlackBerry MDS Runtime.
② Java Application 을 실행하기 위한  BlackBerry APIs 와 Java ME 개발킷.
③ Browser Application을 실행하기 위한 BlackBerry Browser




2. 개발 가능한 BlackBerry Application 의 종류
위에서 언급한 각각의 BlackBerry Application에 대해 좀더 자세히 알아보자.
자바 애플리케이션은 BlackBerry Administration Service를 사용해서 Device에 설치되며,  MDS Runtime 애플리케이션과 Browser 애플리케이션은 BlackBerry MDS Application Console 통해 설치된다


2.1 BlackBerry Java Applications
블랙베리 자바 애플리케이션은  게임과 같은 단순한 것에서부터, 진보된 UI와 데이터 관리, 저장, 네트웍 통신을 위한 옵션을 가진 복잡한 애플리케이션까지 다양하다.  블랙베리 자바 애플리케이션은 Client-only 아키텍처 모델을 사용한다
(일반적으로 클라이언트가 애플리케이션 서버에 데이터를 요청하고 받는 것과 같이)
개발자들은 블랙베리 자바 애플리케이션을 이클립스상에서 JDE 플러그인 또는  third-party 툴을 사용하여 개발 할 수 있다. (www.blackberry.com/developers. 참고하자.)


2.2 BlackBerry MDS Runtime Applications
 MDS Runtime Applcation은 Visual Studio 또는 MDS Studio를 사용해서 생성한 경량, rich client 애플리케이션이다.
BES의 컴포넌트인 BlackBerry Integration Service를 통해, 기업시스템과 통신할 수 있으며, 웹서비스와 데이터베이스에
액세스 하는데 사용될 수 있는 폼 기반 애플리케이션이다.  웹서비스와 데이터베이스는 MDS Runtime Application에서
사용할 수 있는 데이터와 오퍼레이션을 포함하며, MDS Runtime Application으로부터 수신한 데이터를 처리한다


2.3 BlackBerry Browser Applications
Browser 애플리케이션은 BlackBerry Browser 상에 웹 컨텐츠를 보여줄 수 있는 웹기반의 단순한 애플리케이션이다.
개발자는 BlackBerry 템플릿과 표준 웹개발도구를 사용해서 Browser Application을 작성할 수 있다. MDS Integration
Service는 특정 웹주소에서 변경사항과 업데이트를 검사할 수 있는 Push Engine을 포함하고 있어, 개발자가 명시한 시간
간격으로 블랙베리 디바이스에 웹컨텐츠를 push 할 수 있다.


'앱개발로그' 카테고리의 다른 글

[Android] 안드로이드앱 개발 도전기  (2) 2013.03.31
2011년 스마트폰 사용자 통계  (0) 2012.11.12
BlackBerry Architecture  (0) 2011.04.26