개발자를 위한 책 두권

1.
오후에 트위터로 이런 글을 트윗하였습니다. 어제 저녁부터 Cache Conscious를 보느라 머리가 아파서 올린 글입니다.

얼마전 어떤 분께 “현대컴퓨터구조와 소프트웨어개발방법”으로 강의를 하실 수 있을지 물어보았습니다. 시간을 내기 힘들다고 해서 없던 일로. 반응을 보아서 시리즈로 할 생각이었습니다. 보통 회사에 엔지니어로 취직, 과장만 넘어 가면 머리가 굳어가는데..

50이 되가면서 – 저는 아직도 40대후반이라고 주장합니다. 만나이에 생일이 지나지 않아서(^^) – 공학책을 읽으면 흐름은 이해가 되지만 상세한 수식을 이해가 힘듭니다. 특히 수식을 멀리한지 벌써 몇 십년이라 도무지 눈에 들어오지 않습니다. 그런데 데이타구조가 어쩌고 저쩌고, CPU구조가 어쩌고 하니까 머리가 아픕니다. 누가 강의를 해주면 잘 들을텐데. 이런 생각이 들더군요.

앞서 말한 여러가지 자료를 보다가 우연히 발견한 책들입니다.두가지 모두 HFT나 Low Latency Programming을 연구 혹은 개발하는 분들에게 도움이 되리라 생각합니다.

2.
우선 리눅스와 관련된 자료입니다.Linux나 Unix환경에서 업무어플리케이션이 아니라 시스템프로그램을 하는 분들에 필요한 책입니다.

The Linux Programming Interface (published in October 2010, No Starch Press, ISBN 978-1-59327-220-3) is a detailed guide and reference for system programming on Linux and UNIX systems.

With 1552 pages, 115 diagrams, 88 tables, nearly 200 example programs, and over 200 exercises, TLPI is the most comprehensive description of Linux and UNIX system programming available. The author, Michael Kerrisk, is the maintainer of the Linux man-pages project, which documents the Linux kernel and glibc APIs. He has long been active in the documentation, testing, and design review of Linux kernel-userspace interfaces.

The Linux Programming Interface

책한권만 있으면 리눅스환경에서 시스템프로그래밍을 할 때 도움을 잘 받을 수 있습니다. 아니면 한번 쭉 읽어도 좋을 듯 합니다.

3.
다음은 Fastware라는 책입니다.

Fastware!: Straight Talk about Fast Code

A book of under 300 pages covering the most important practical information about designing and implementing programs and systems that are fast. Aimed at architects, designers, and implementers of software systems targeting any problem domain using any programming language(s). Suitable for students or professionals. Assumes software development experience, but no formal background in Computer Science. Brings together the most important speed-related information every developer should be familiar with.

이 책은 아직 출간전입니다. 그렇지만 목차를 보시면 구미가 땡길 겁니다.

    * Introduction: Why fastware matters; fastware vs. “performance,” “efficiency,” “scalability,” “responsiveness,” etc.

* Memory and Processors: Memory hierarchies, cache behavior, processor variations, and their implications for software developers. Specialized hardware, e.g., GPUs, FPGAs, DSPs, etc.

* Collecting Empirical Data: The importance of empirical data; logging for data mining; development environments vs. deployment environments, etc.

* Exploiting Constraints: General-purpose solutions vs. special-purpose solutions; the importance of verifying constraints; “cheating.”

* Avoiding Computation: Precomputation (e.g., indexing, lookup tables, prefetching, etc.), caching, lazy evaluation, incremental computation, etc.

* Data Structures and Algorithms: Complexity analysis and the real world; cache- and concurrency-friendliness; evaluation of standard facilities in C#, Java, and C++; important algorithms, etc.

* IO: Disk IO vs. network IO; buffering; defragmentation; compression; striping; minimizing transmission distance; using deltas; memory mapping, etc.

* Concurrency: Data/task/pipelining parallelism; synchronization primitives; insulation; alternative approaches (e.g., lock-free, stream processing); exploiting “extra” cores and threads.

* Memory Management: For native code (C/C++); for managed code (Java/.NET); heaps/pools/arenas; working with generational and compacting collectors, etc.

* Environment Issues: Your code is a minority of what executes; compilers and options; WPO and PGO; runtimes and options; getting the most out of third-party libraries and applications, etc.

* Creating Fastware: Treating speed as a correctness criterion; designing for speed; assuming the existence of HW concurrency, etc.
Accelerating Slowware: Profilers and other tools; analyzing logs; “disturb and observe” strategies, etc.

개발언어와 관련된 책을 읽은 적은 없지만 – 예전에 C프로그래밍언어를 학습할 때를 제외하면 – 저도 기억나는 책제목인 Effective C++시리즈를 만든 분이 저자라고 합니다.

3.
이번 주는 아주 중요한 모임들이 있습니다. 블로그에 포스팅을 하더라도 금요일이후나 가능할 듯 하여 오늘 두개를 올렸습니다. 뭐, 혹시 기다리는 분이 있을까 사족을 답니다.

소프트웨어개발에서 중요한 지식을 흔히 두가지로 말합니다. 소프트웨어 지식, 도메인 지식. 전자는 소프트웨어개발과 관련된 지식을 말하는 경우가 많습니다.  요즘 드는 생각은 소프트웨어엔지니어링 지식이 아주 중요하지 않을까 합니다. 전산학이라는 이름으로 이야기할 수 있지만 하드웨어 구조,OS구조등 최근 변화가 일어나고 있는 곳의 지식을 학습하여야 한단계 발전이 가능하지 않을까 생각합니다.  그래서 앞서 트윗에서 강의를 만들어보고 싶었는데 쉽지 않네요.

누군가 했으면 합니다.

2 Comments

  1. han

    Fastware! 라는 책은 정말로 구미가 당기네요.
    얼른 출간됐으면 좋겠습니다.

    사이트에 email 구독이 있어서 출간되면 notify되면 좋겠는데 그런 게 없는 점이 아쉽네요

    Reply
    1. smallake (Post author)

      댓글때문에 다시금 저자의 홈페이지를 방문해보니까 2010년에 책을 쓴다고 했더군요. 결국 미완으로 남은 듯 하네요…

      Reply

Leave a Comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.