[발번역] – Why learn C?

No Comments

출처: http://radar.oreilly.com/2012/06/why-learn-c.html

심심해서 공부할 겸 맘대로 발 번역(혹은 의역?)했습니다. 이상하게 번역된 것은 커맨트를 주세욤. ㅋㅋㅋ

———-

C 언어가 수십년 동안 사용되고 있지만 여전히 사용 및 학습하는 프로그래밍 언어의 목록들의 상위권에 한결같이 올라오고 있습니다. 최근에 Head First C의 공저자인 David Griffiths(@dogriffiths)와 C 언어의 계속된 인기(심지어는 상승)의 이유와 성숙된 시장에서 그의 책이 무엇을 제공하는지 이야기를 했습니다.

다음은 우리의 대화에서 가장 흥미로운 내용들을 정리한 것입니다.:

* 왜 C 가 여전히 인기가 있을까요?

        

        C 는 어디에나 있습니다. 하드웨어에 가깝고 다른 언어나 운영체제를 만드는데 사용하고 있습니다

* 요즘에는 어떤 소프트웨어를 만드는데 C가 사용될까요?

        시스템 프로그래밍(순수 C 로) 또는 C 언어와 밀접하게 관련 되었거나 C 언어의 확장인 언어들과 작업하는 특화된 영역에서 사용되고 있습니다.(예를 들면 iOS 앱을 위한 Object-C 프로그래밍을 더욱 효율적으로 만드는 C와 C++ 게임 프로그래밍을 더욱 직관적으로 만드는 것)

* 만약에 C를 배운다면 어떤 도움이 될까요?

        C 를 안다는 것은 하드웨어에 가까워지고 시스템 레벨에서 어떻게 동작하는지를 이해하기 쉬워집니다.

* Head First C를 쓴 이유는 무엇인가요?

        Kernighan과 Riche의 The C Programming Language는 최고는 아니지만 인기있는 프로그래밍 책중의 하나입니다. 그리고 그 책은 ANSI 표준을 정의하고 있습니다. 여전히 표준이지만, 언어는 변경되지 않았습니다. 이 책을 가지고 있는 독자들과 많은 학습자들은 다른 측면과 여러 지식들을 가지고 C 언어를 접근하고 있습니다.

* 새로운 독자들은 Head First C 를 통해서 어떻게 C 언어를 더 쉽게 접근할 수 있는가요?

        예를 들면, 이 책은 더 심오한 방법으로 메모리가 어떻게 동작하는지를 알려줍니다. (특화된 분야의 새로운 프로그래머들은 모르지도 모르지만, concept systems 프로그래머들은 이미 알 것입니다.)

* Head First C의 실습들을 설명해주세요.

        이 책은 학습자를 위해 완전한 소스코드가 없는 프로젝트 형태의 세 가지의 미션들을 포함하고 있습니다. 첫 번째 프로젝트에서 학습자는 Arduino를 사용하여 화분에 물을 줘야할 때를 감지하는 센서들을 가지고 있는 꽃을 프로그래밍합니다. 두 번째는 웹캠을 통해서 얼굴, 동작 등을 검사하기 위해 컴퓨터 시각 시스템(OpenCV)을 사용합니다. 마지막으로 이 책으로 부터 익힌 다양한 개념들을 모아서 Asteroids과 유사한 게임을 만듭니다.

* Arduino는 제조사들 커뮤니티에서 C 를 대중적으로 만들고 있습니다.

        제한된 플랫폼으로서 Arduino는 C 를 위한 자연환경입니다. 특히 입/출력의 실시간 처리에서 C 는 기계의 최대 성능을 뽑아냅니다. 그리고 작은 언어이기 때문에 상대적으로 빠르게 기본 명령어들 익혀 능숙하게 사용할 수 있으며, 작은 Arduino 프로젝트들을 즐거운 프로그래밍의 입문으로 사용할 수 있습니다.

* 대학에서 C 언어를 계속 가르쳐야 하는 이유는 무엇인가요?

        C 언어는 중요하고, 기술의 전체 스택을 이해하는데 필요한 기본적인 언어입니다. C 언어를 배운다면, 컴퓨터를 심오한 수준에서 이해할 수 있을 것입니다.

Java언어로 배우는 디자인 패턴 입문, 멀티쓰레드 편 – Yuki Hiroshi 저 / 변연희 역

No Comments

wpid-x9788931436921-2012-04-2-02-00.jpg

멀티 쓰레드 관련 책으로 뭐가 있나 살펴보다 눈에 띄어서 도서관에서 빌려서 살펴보았다.

가볍게 읽히기에 빠르게 훑어 보았다.

이 책에서 총 12가지의 멀티쓰레드 관련 패턴을 소개한다.

* Single Thread Execution – Synchronized를 사용하여 크리티컬 섹션을 만들어 이용

* Immutable – 인스턴스가 생성된 후에는 상태가 절대 변하지 않는 클래스. 즉, 처음 값 설정 이후에는 값이 변경되지 않는 것

* Guarded Suspension – 임계영역 진입 전 조건 확인. 조건에 맞지 않으면 기다린다(Suspension). 다른 쪽에서 깨워주면 다시 조건 확인.

* Balking – 임계영역 진입 전 조건 확인. 조건에 맞지 않으면 돌아간다(Balk).

* Producer-Consumer – 여러 생산자, 여러 소비자 사이에 중개자를 두는 방식.

* Read-Write Lock – 읽기와 쓰기를 구분하는 Locking 방식.

* Thread-Per-Message – 하나의 요청당 하나의 쓰레드를 생성하여 처리하는 방식

* Worker Thread – 요청을 처리할 쓰레드들(Worker)를 미리 만들어 두고, 요청이 들어오면 쓰레드에게 처리를 맡기는 방식

* Future – 요청을 하면 이를 처리하는 쓰레드를 생성하여 처리를 맡긴다. 요청한 쪽에서는 처리 결과를 확인 할 수 있는 인스턴를 넘겨 받아, 나중에 이 것을 통해서 결과를 얻어가는 방식

* Two-Phase Termination – 동작하고 있는 쓰레드를 종료시키기 위해서 종료 요구를 하며, 쓰레드에서는 종료 요구를 확인하여 종료 처리를 하는 방식.

* Thread-Specific Storage – 쓰레드 전용 공간을 만들어 사용하는 방식

* Active Object – 다소 복잡한 형태의 패턴. 요청을 받아 저장 해두고 이를 선택하여 처리하는 스케줄러 쓰레드가 존재. 결과는 Future 패턴 형태로 나중에 확인한다.

Active Object 패턴만 복잡하고, 나머지는 단순한(?) 형태라 이해하는데 어렵지는 않았다.

각 패턴마다 생각의 폭을 넓히기 위한 힌트라고 나오는 부분이 나름 괜찮았다.

Multi-thread를 이용한 프로그래밍을 시작하는 분들은 한번쯤 훑어 보면 괜찮을 것 같다.