2013년 4월 10일
by aduris
0 comments

좋은 API 디자인하기, 왜 그것이 중요한가?

죠수아 블로치는 구글의 소프트웨어 아키텍쳐로 유명한 사람입니다.

아래 내용은 2007년 1월 24일 Google Tech Talks 에서 발표한 내용입니다.

API 를 개발하면서 한 번쯤 고민했던 내용들이 모두 들어있습니다.

API 를 개발하는 개발자라면 거의 하나도 놓칠 게 없는 경험이라고 생각합니다.

그만큼 많이 번역되고 블로그에 퍼졌던 글들입니다.

좀 길지만, 많은 개발자들이 두고두고 참조했으면 하는 바람이 있습니다.

원제 : How to Design a Good API and Why it Matters(Google Tech Talks, 2007.1.24)

저자 : Joshua Bloch, Principal Software Engineer, Google

  • API 디자인이 왜 중요한가?

    API는 회사가 가진 중요한 자산일 수 있다.

    - 고객들은 무섭게 투자한다 : 구매하고, 사용하고, 배운다.

    - 운영중인 API를 중단시키는 비용은 엄두도 낼 수 없다.

    - 성공적인 public API 는 고객을 잡는다.Public API 는 영원하다. – 그것을 제대로 만들 기회는 오직 딱 한 번 뿐이다.

  • API 가 왜 당신에게 중요한가?

    당신이 만일 프로그래머라면, 당신은 이미 API 디자이너이기 때문이다.

    - 좋은 코드는 모듈화되어 있고, 모든 모듈들은 API 를 가지고 있다.유용한 모듈들은 재사용되어지기 때문이다.

    - 일단 모듈이 사용자를 가지기 시작하면, 임의로 API를 바꿀 수 없다.

    - 좋은 방향으로 재사용되어지는 모듈들은 회사의 자산이다.

    API라는 관점에서 생각하는 것은 Code 의 Quality를 높이기 때문이다.

  • 좋은 API의 특징

    배우기 쉬울 것

    문서가 없어도 사용하기 쉬울 것.

    잘못 사용하기 어려울 것.

    읽기 쉽고, API를 사용하는 코드를 유지보수하기 쉬울 것

    요구사항을 만족시키기에 충분히 강할 것.

    확장하기 쉬울 것

    사용하는 사람들의 수준에 맞을 것

첫째. The Process of API Design

  1. 적당한 수준에서 회의적 태도로 요구사항 수집하기당신은 종종 솔루션들을 제안받을수도 있다.

    - 만일 더 나은 솔루션들이 있을 수 있다면,당신의 일은 진짜 요구사항을 수집하는 것이어야 한다.

    - 유즈케이스 형태로 수집을 해야 한다.

    더 일반적일수록 더 쉬워지거나 더 보상이 될 수 있다.

  2. 짧은 스펙으로 시작하라 – 1페이지는 이상이다.이 단계에서는 Agility 가 완벽함을 이긴다.

    가능한 많은 사람들로부터 반응을 살펴라.

    - 그들의 input 에 대해 귀기울여 듣고, 심각하게 받아들여라.

    스펙을 작게 할수록, 고치기 쉽다.

    자신감을 얻을 때까지 살을 붙여라.

    - 이것은 필연적으로 코딩을 포함한다.

  3. 미리 자주 API 에 글을 적어라.(그냥 function 내에 필요할 기능을 스크립트 형식으로 적어넣는다.)API를 구현하기 전에 시작하라.

    - 구현하는 시간을 절약해준다.가능한 스펙을 잡기 이전부터 시작하라.

    - 스펙을 잡는 시간을 절약해준다.

    살이 붙을 때까지 API 에 글을 적어라.

    - 끔찍한 실패를 예방해준다.

    - 코드는 예제와 unit test 를 먹고 산다.

  4. SPI 에 글을 적는 것은 더 중요하다.Service Provider Interface (SPI)

    - 플러그인 방식의 인터페이스는 여러 개의 구현을 가능하게 한다.

    - 예 : Java Ctyptography Extension (JCE)배포하기 전에 multiple plug-in 들을 만들어라. (윌 트랙은 “세개의 법칙”이라고 부른다.)

    - 만일 플러그인 하나를 만들면, 아마도 API가 다른 것은 지원하지 못하게 될 것이다.

    - 두 개를 만든다면, 어렵게라도 여러개를 지원하기는 할 것이다.

    - 세 개를 만든다면, 그것은 아주 잘 작동할 것이다.

  5. 현실적 기대수준을 받아들여라.대부분의 API 설계는 지나치게 제약되어 있다.

    - 당신은 모든 사람을 만족시켜줄 수 없다.

    - 모든 사람들을 똑같이 불만족하게 만드는 것에 초점을 맞추어라.실수하기를 기대하라

    - 몇 년 간 실사용이 되면, 실수따위는 잊어버리게 된다.

    - 실수를 통해 API를 진화시켜라.

둘째. General Principles (일반 원칙)

  1. API는 하나의 일만 해야 하고, 그것을 아주 잘 해야 한다.기능이 설명하기 쉬워야 한다.

    - 이름짓기 힘들다면, 통상적으로 잘못 만들어진 것이다.

    - 좋은 이름이 자연스럽게 개발로 이어지게 만든다.

    - 모듈을 쪼개거나 합칠 수 있어야 한다.

  2. API는 가능한한 작게 만들어야 하지만, 더 작아져서는 안된다.API는 요구사항을 만족시켜야 한다.

    의심이 들면 그대로 두어라.

    - 기능, 클래스, 메쏘드, 파라미터까지.

    - 뭔가를 더할 수는 있지만, 결코 제거할 수는 없다. (배포되면 회수불가)개념적인 무게가 규모보다 더 중요하다.

    (API의) 힘과 무게(power-to-weight ratio) 간의 균형비를 찾아라.

  3. Implementation 이 API에 영향을 주어서는 안된다.구현이 너무 세세해지면

    - 사용자를 혼란스럽게 한다.

    - implemenation 을 바꿀 자유를 방해한다.세세한 구현이 무엇인지를 정확히 알아라.

    - method behavior 스펙을 너무 과하게 잡지 마라.

    - 예를 들면 : hash function 들은 스펙화하지 마라.

    - 모든 튜닝 파라미터들은 의심해야 한다. (이게 많다고 좋은 API가 아니라는 뜻)

    세세한 구현이 API 로 흘러들어가게 해서는 안된다.

    - 디스크 상이나, 네트워크 상이나, 예외로라도 !!!

  4. 모든 것의 접근을 최소화하라.가능한 private 하게 class 와 member를 만들어라.

    public class 가 (상수에 대한 예외와 함께) public field를 가져서는 안된다.이렇게 해서 정보은폐를 최대화하라. (밖으로 드러나지 않게 Capsulation 하라는 뜻.)

    모듈이 독립적으로 debug 되고, 이해되어지고, 구축되어지고, 테스트 되어지도록 하라.

  5. 이름이 중요하다. – API 는 작은 언어다.이름은 굳이 설명하지 않아도 이해될 수 있어야 한다.

    - 기호나 축약을 사용하지 마라.Consistent 하게 하라 – 똑같은 단어는 같은 것이어야 한다.

    - API 전반에 걸쳐서 (API 플랫폼 전반에 걸쳐서!!!)

    규칙적이어야 한다. – 대칭과 균형을 갈구하라.

    코드는 산문처럼 읽힐 수 있어야 한다. (얼마나 읽기 쉬운가?)

    if (car.speed() > 2 * SPEED_LIMIT)

    generateAlert(“Watch out for cops!”);

  6. 문서화가 중요하다.

    재사용성은 “재사용한다”는 Action 보다 “재사용하겠다.”고 쉽게 말할 수 있는 어떤 것이어야 한다. Action 은 좋은 디자인과 좋은 문서를 필요로 한다. 비록 아주 가끔 우리가 좋은 디자인(설계, 아키텍쳐)을 보게 되었다고 하더라도, 우리가 문서 없이 재사용되어질 정도로 좋은 컴포넌트를 볼 수는 없다. – D.L.Parnas, Software Aging, 1994

  7. 종교처럼 문서화하라.”모든” class, interface, method, constructor, parameter, and exception 을 문서화하라.

    - class : instance 화 되는 것들

    - method : method 와 그 client 들간의 계약들이다.

    - parameter : units, form, ownership 등을 지칭한다.state-space(상태공간, 전체적인 것에 대해)을 주의깊게 문서화하라.

  8. API 디자인에 대한 성능결과에 대해 고려하라.

    나쁜 의사결정은 성능 한계를 만들기도 한다.

    - type 을 상호 교환가능하게 만들어라.

    - static factory 대신 constructor 를 제공하라.

    - interface 대신에 implementation type 을 사용하라.성능을 얻기 위해 API를 뒤틀지 마라. (변형하지 마라)

    - 기본적인 성능 이슈는 고쳐질 것이다. 하지만 두통이 그대와 함께 영원할 것이다.

    - 좋은 디자인은 일반적으로 좋은 성능과 일치한다.

  9. 성능을 고려한 API 설계는 실질적인 효과로 나타날 뿐 아니라 영원하다.

    - Component.getSize()는 Dimension을 return 한다.

    - Dimension 은 mutual 하다.

    - 모든 getSize call 은 Dimension을 할당해야만 한다.

    - 수많은 불필요한 object allocation 이 발생한다.

    - 대체안이 1.2 버전에 추가된다 : old client code 는 여전히 느리다.

  10. API 는 플랫폼과 평화적으로 공존해야만 한다.관습적인 것을 따라라.

    - 표준 naming rule 을 따라라.

    - 독자적인 파라미터나 Return Type을 쓰지마라.

    - 코어 API나 언어에 있는 패턴을 흉내내어 써라.API 친화적인 특징을 이용하라.

    - Generics, varargs, enums, default arguments

    API 의 위험과 단점들을 잘 알고 회피하라.

    - Finalizers, public static final arrays

셋째. Class Design

  1. 변경을 최소화하라.만일 다른 일을 해야 할 충분한 이유가 없다면, class 는 불변의 것이어야 한다.

    - 장점 : simple, thread-safe, reusable

    - 단점 : 각 value 별로 분리된 object

    만일 변경해야 한다면, 상태공간(state-space)를 작게 유지하고, 정의를 잘 유지하라.

    - 언제, 어떤 method를 부르는게 합리적인지를 명확히 하라.

    Bad: Date, Calendar

    Good: TimerTask

  2. subclass는 substitutability (대체성)를 의미한다.

    - (..은..이다)라는 관계가 존재할 때만 subclass 를 써라.

    - 그렇지 않으면, composition 을 사용하라.Bad: Properties extends Hashtable, Stack extends Vector

    Good: Set extends Collection

  3. 상속을 위해 설계하고 문서를 남겨라.

    설계가 그렇게 되어 있지 않고 문서가 없다면, 상속을 못하게 만들어라.상속이란 캡슐화와 상충한다.

    - subclass 는 superclass 의 세세한 구현에 민감하다.

    만일 subclass 를 허락한다면, self-use를 문서화하라.

    - method가 어떻게 다른 method 를 사용하는지?

    보수적인 정책 : 모든 구체적인 class 는 final 이다.

    Bad: Many concrete classes in J2SE libraries

    Good: AbstractSet, AbstractMap

넷째. Method Design

  1. 모듈이 할 수 있는 것을 client 가 하게 하지 마라.boilerplate code 에 대한 필요를 줄여라.

    - boilerplate code 란 일반적으로 cut-and-paste 로 행해지는 코드를 말한다.

    - (모듈을 cut&paste해서 client 내에 넣어버리면) 아주 추하고 번거롭고, 오류 발생이 잦다.

    import org.w3c.dom.*;

    import java.io.*;

    import javax.xml.transform.*;

    import javax.xml.transform.dom.*;

    import javax.xml.transform.stream.*;

    // DOM code to write an XML document to a specified output stream.

    private static final void writeDoc(Document doc, OutputStream out)throws IOException{

    try {

    Transformer t = TransformerFactory.newInstance().newTransformer();

    t.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, doc.getDoctype().getSystemId());

    t.transform(new DOMSource(doc), new StreamResult(out));

    } catch(TransformerException e) {

    throw new AssertionError(e); // Can’t happen!

    }

    }

  2. “사용자를 놀라게 하지 않기” 원칙을 준수하라.

    API 사용자는 behavior 에 의해 놀라서는 안된다.

    - 그렇게 하기 위해 구현에 추가적인 노력을 기울일만한 가치가 있다.

    - 그리고, 조금 성능을 깎여도 될만한 가치가 있다.

    public class Thread implements Runnable {

    // Tests whether current thread has been interrupted.

    // Clears the interrupted status of current thread.

    public static boolean interrupted();

    }

  3. 빨리 실패하라 – 장애가 발생되면 가능한한 빨리 에러를 알려라.컴파일 시간이 제일 좋다. – static typing, generics

    런타임에, 첫 잘못된 method invocation 이 제일 좋다.

    - method 는 반드시 failure-atomic 해야 한다.

    // A Properties instance maps strings to strings

    public class Properties extends Hashtable {

    public Object put(Object key, Object value);

    // Throws ClassCastException if this properties

    // contains any keys or values that are not strings

    public void save(OutputStream out, String comments);

    }

  4. String 포맷으로 있는 모든 데이터를 프로그램 구조로 바꾸어라.그렇게 하지 않으면, client 는 string 을 parse 해야 한다.

    - client 는 괴롭다.

    - 더 나쁜 건, string 이 사실상의 API 로 변질되어 버린다.

    public class Throwable {

    public void printStackTrace(PrintStream s);

    public StackTraceElement[] getStackTrace(); // Since 1.4

    }

    public final class StackTraceElement {

    public String getFileName();

    public int getLineNumber();

    public String getClassName();

    public String getMethodName();

    public boolean isNativeMethod();

    }

  5. 주의를 가지고 오버로딩 하라.모호한 오버로드는 피하라.

    - 여러 개의 오버로딩이 동시에 적용될 수 있다.

    - 보수적이 되어라 : 동일한 argument 숫자가 없도록 하라.당신이 모호한 오버로딩을 제공해야 한다면, 동일한 arguments에 대해서는 동일한 behavior 가 일어나게 하라.

    public TreeSet(Collection c); // Ignores order

    public TreeSet(SortedSet s); // Respects order

  6. 적절한 파라미터와 리턴타입을 사용하라.Input 을 위해 class 전반에 interface type 을 장려하라.

    - 유연성과 성능을 제공하라.가장 구체적이면서 가능한 input parameter type 들을 사용하라.

    - 런타임 시간으로부터 컴파일 시간까지 에러를 옮겨라.

    더 좋은 type 이 있으면, string 을 사용하지 마라.

    - string 은 무겁고, 에러가 나기 쉽고, 느리기까지 하다.

    통화를 표현하는데 floating point 를 사용하지 마라

    - binary floating point 는 부정확한 결과를 야기시킨다.

    float(32 bits) 보다 double(64 bits)를 사용하라.

    - 정확성 손실은 현실이고, 성능 손실은 무시할만 하다.

  7. method 전반에 걸쳐 일관적인 parameter odering 을 사용하라.특히 parameter type 들이 동일할 때 더욱 중요하다.

    #include

    char *strcpy (char *dest, char *src);

    void bcopy (void *src, void *dst, int n);

    java.util.Collections first parameter always collection to be modified or queried

    java.util.concurrent – time always specified as long delay, TimeUnit unit

  8. Avoid Long Parameter Lists세 개, 또는 더 적은 수의 파라미터들이 이상적이다.

    - 더 많다면, 사용자들은 문서를 참조하려 할 것이다.똑같이 타이핑된 파라미터들의 긴 리스트는 위험하다.

    - 프로그래머들이 parameter 순서를 실수로 바꾸어버릴 수도 있다.

    - 프로그래머들이 여전히 컴파일하고, 실행한다. 그러나 그것이 잘못일 수 있다.

    파라미터 리스트를 짧게할 수 있는 두가지 기법이 있다.

    - method 를 두개로 나누어라.

    - 파라미터를 유지할 수 있도록 helper class 를 만들어라.

    // Eleven parameters including four consecutive ints

    HWND CreateWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName,

    DWORD dwStyle, int x, int y, int nWidth, int nHeight,

    HWND hWndParent, HMENU hMenu, HINSTANCE hInstance,

    LPVOID lpParam);

  9. 예외처리를 요구하는 return value를 만들지 마라zero-length array를 리털하거나 빈 collection 을 리턴하라. null 을 리턴하지 마라.

    package java.awt.image;

    public interface BufferedImageOp {

    // Returns the rendering hints for this operation,

    // or null if no hints have been set.

    public RenderingHints getRenderingHints();

    }

다섯째. Exception Design

  1. 예외 상황을 표시하기 위해 exeption 을 던져라.client 가 control flow 를 위해 exception을 사용하도록 해서는 안된다.

    private byte[] a = new byte[BUF_SIZE];

    void processBuffer (ByteBuffer buf) {

    try {

    while (true) {

    buf.get(a);

    processBytes(tmp, BUF_SIZE);

    }

    } catch (BufferUnderflowException e) {

    int remaining = buf.remaining();

    buf.get(a, 0, remaining);

    processBytes(bufArray, remaining);

    }

    }

    정반대로, 조용하게 fail 이 나서는 안된다.

    ThreadGroup.enumerate(Thread[] list)

  2. Unchecked Exceptions 을 사용하라.. Checked – client 가 recovery action 을 해야 한다

    . Unchecked – programming error

    . Checked exceptions 의 과한 사용은 boilerplate 를 야기시킨다.

    try {

    Foo f = (Foo) super.clone();

    ….

    } catch (CloneNotSupportedException e) {

    // This can’t happen, since we’re Cloneable

    throw new AssertionError();

    }

  3. 예외 안에 에러정보(failure-capture information)를 포함시켜라.진단을 허용하고 repair 하거나 recovery 하라.

    unchecked exception에 대해서는 메시지로 충분하다.

    checked exception에 대해서는 accessor 를 제공하라.

여섯째. Refactoring API Designs

  1. Sublist Operations in Vector

    public class Vector {

    public int indexOf(Object elem, int index);

    public int lastIndexOf(Object elem, int index);

    }

    매우 파워풀하지 않다. – 단지 검색만을 지원한다.

    문서없이 사용하기 힘들다.

    * Sublist Operations Refactored

    public interface List {

    List subList(int fromIndex, int toIndex);

    }

    매우 파워풀하다. 모든 동작을 지원한다.

    인터페이스 사용이 개념적 무게를 작게한다.

    - power-to-weight ratio 가 올라간다.

    문서 없이도 사용할 수 있다.

  2. Thread-Local Variables

    // Broken – inappropriate use of String as capability.

    // Keys constitute a shared global namespace.

    public class ThreadLocal {

    private ThreadLocal() { } // Non-instantiable

    // Sets current thread’s value for named variable.

    public static void set(String key, Object value);

    // Returns current thread’s value for named variable.

    public static Object get(String key);

    }

    * Thread-Local Variables Refactored (1)

    public class ThreadLocal {

    private ThreadLocal() { } // Noninstantiable

    public static class Key { Key() { } }

    // Generates a unique, unforgeable key

    public static Key getKey() { return new Key(); }

    public static void set(Key key, Object value);

    public static Object get(Key key);

    }

    동작하기는 한다. 그러나 사용하려면 boilerplate code 가 필요하다.

    static ThreadLocal.Key serialNumberKey = ThreadLocal.getKey();

    ThreadLocal.set(serialNumberKey, nextSerialNumber());

    System.out.println(ThreadLocal.get(serialNumberKey));

    * Thread-Local Variables Refactored (2)

    public class ThreadLocal {

    public ThreadLocal() { }

    public void set(Object value);

    public Object get();

    }

    API나 client code 로부터 잡동사니를 없애라.

    static ThreadLocal serialNumber = new ThreadLocal();

    serialNumber.set(nextSerialNumber());

    System.out.println(serialNumber.get());

일곱째. 결론

  1. API 디자인은 우아하면서도 돈을 벌 수 있는 행위이다.

    - 많은 프로그래머와 사용자들과 회사들을 이롭게 한다.

  2. 이 이야기는 어떤 의미에서 휴리스틱한 기법들을 덮어버린다.

    - 노예같이 휴리스틱한 기술들에 달라붙지 마라.

    - 충분한 이유없이 그들을 침범하지도 마라.

  3. API 디자인은 힘들다.

    - 혼자하는 작업이 아니다.

    - 완벽할 수 없다. 그러나 완벽해지려고 시도하라.

  4. 뻔뻔하게 스스로 Promotion 하라.

About the author

김수보 팀장/로컬플랫폼팀 플랫폼개발실 KTH

  • More at
  • logo image
  • logo image

2013년 4월 10일
by aduris
0 comments

직관이 은탄환은 아니지만, 필수요건임에는 자명하다.

‘해봤다고’ 반드시 아는 것은 아니지만,

‘아예 안 해본 사람’은 죽었다 깨도 모르는 게 있다.

바로 그 분야에 대한 ‘직관’이다.

[더보기]

//

2013년 4월 9일
by shpark
0 comments

우리는 생각하는 대로 된다.

생각을 조심해라. 말이 된다.
말을 조심해라. 행동이 된다.
행동을 조심해라. 습관이 된다.
습관을 조심해라. 성격이 된다.
성격을 조심해라. 운명이 된다.

우리는 생각하는 대로 된다.

- 마가랫 대처

2013년 4월 9일
by admin
0 comments

일본 대표 디자이너 하라 켄야 초청 심포지엄 ‘익스포메이션 서울X도쿄’

일시 : 2013년 4월 26일(금)오후 4시~7시

장소 : 한국화재보험협회 대강당

토론자 : 하라켄야, 이나미, 한명수, 김경균

신청마감 : 4월 20일(입금 선착순으로 조기 마감될 수 있음)

2013년 4월 9일
by 강명수
0 comments

ADOBE DPS 성공세미나!

http://www.adobeconference.co.kr/dps2013/rgst.asp

일시 :  2013년 4월 23일(화요일) 13:00~ 16:50시

장소 : 중구 페럼타워 페럼홀 3층

관심있으신 분들은 신청하세요!

 

IL 44 – SPECIAL ANNIVERSARY ISSUE

2013년 4월 1일 by alexis | 0 comments

LO STATO DELL’ITALIA
Come siamo, come potremmo essere e soprattutto come vorremmo essere. Inchiesta ottimista sul futuro del nostro Paese.
+
L’INGORGO Sonetto rap per la crescita scritto da JOVANOTTI in esclusiva per IL

illustrations by Giacomo Gambineri
photo by Massimo Siragusa

 

 

2013년 3월 29일
by gdkim
0 comments

한계를 먼저 그어 놓으면 결국 그렇게 된다

“안돼. 나는 할 수 없어”

많은 사람들이 이같이 부정적인 말을 너무도 쉽게, 습관처럼 내뱉는다.

사람의 마음은 강력한 도구이다.

어떤 일이 자신의 능력 밖의 것이라고 일단 확신하게 되면,

그 후에는 스스로 만든 장애물을 넘어서기가 거의 불가능해진다.

-리처드 칼슨, ‘우리는 사소한 것에 목숨을 건다’에서

 

* 불가능은 사실이 아니라 하나의 의견에 불과하다

2013년 3월 28일
by hoon515
0 comments

‘인포그래픽 제작 및 활용 노하우 2013’ 컨퍼런스 리뷰 Posted by: Vice Versa design studio

 

지난 화요일(2013년 3월 26일) 삼성 코엑스에서 진행된 ‘인포그래픽 제작 및 활용 노하우 2013′
컨퍼런스에 다녀왔습니다.

전자신문이 주관하고 한국 인포그래픽 포럼의 후원으로 이루어진 이번 컨퍼런스에는 기업, 공공기관 및 학생 등,
다양한 직종의 분들이 참석하셨다고 하는데요.
넓은 홀을 꽉 채운 300여명의 참석자들을 보며 인포그래픽에 대한 큰 관심을 짐작할 수 있었습니다.

컨퍼런스는 주제는 ‘인포그래픽 제작 및 활용 노하우’입니다. 국내 인포그래픽 시장의 성장과 적용에 대한 이야기를
실무자 중심으로 풀어낸 흥미로운 컨퍼런스였습니다.

아쉽게도 참가하지 못한 분들을 위해, ‘인포그래픽 제작 및 활용 노하우 2013′ 컨퍼런스 내용을
간략하게 정리해보았습니다

<설득력 있는 인포그래픽이란?> – 우석진 (샌들코어 대표) -

 

[사진을 클릭하면, 크게 보실 수 있습니다.]

1

전문가가 아닌, 실무에서 인포그래픽을 사용하고자 하는 관련자를 주 대상으로 강연을 진행해 주셨습니다.

첫 강연이니 만큼, 어떤 인포그래픽이 ‘좋은 것’인지에 대해
이론적 접근과 더불어 적절한 예시를 보여주셨습니다.

대표님은 전문가가 아닌 경우엔 인포그래픽을 두려워하고 있으며,
이것은 만들어놓은 결과물이 현실과 동떨어져 있기 때문이라고 지적하셨습니다.

열심히 예쁘게 만들었지만, 관계자들만 ‘좋아요’를 누르는 현실에 많은 비전문가분들은
고민을 거듭하는 상황인데요, 그렇다면 어떻게 만들어야 하는가?
무엇이 좋은 인포그래픽인가?라는 질문을 던지게 됩니다.

좋은 인포그래픽이란 ‘유쾌한 공감’을 이끌어낼 수 있어야 한다. 라고 말씀하셨습니다.
[사진을 클릭하면, 크게 보실 수 있습니다.]

IMG_8871

유쾌한 공감의 5가지 키워드.

1) 데이터 vs 정보화 : 무엇을 말하고 싶은가? 공감이 없는 정보는 데이터에 불과하다.
2) 비주얼 싱킹 : 그림으로 상상하고 말하라.
단순히 이미지를 붙이는 게 아니라 메시지를 시각화하라/ 공감까지 끌어낼 수 있으면 좋은 인포그래픽이 된다.
3) 메시지 도출 과정 : 단순한 사실 전달이 아니라는 것을 명심하라
4) 시각화 로직 :주제/메시지를 부각할 수 있는 시각화 방법을 고민하라
5) 인포그래픽 툴 & 스킬: 전문 프로그램이 아닌 이용하기 쉬운 몇 가지 툴을 사용하라.
하지만 툴보다는 메시지가 명확해야 함을 명심하라.

자료와 통계에 대해 고민하고 정의를 통해(정보화 단계) 정보를 메시지화 한 뒤, 상징과 연상을 통해 시각화하라.
이 모든 것은 언제나 ‘사람’이 중심이어야 합니다.

<정부 3.0 시대의 공공 인포그래픽 전략> – 최은숙 (peak15 communication 대표) -

 

[사진을 클릭하면, 크게 보실 수 있습니다.]

IMG_8886

2013년은 박근혜 대통령 정부가 출범하는 해였습니다. 박근혜 대통령 정부가 발표한 ‘정부 3.0시대’에 대해
슬쩍 한번쯤은 들어보신적이 있을겁니다.

최근에는 정부를 포함해 여러 지자체에서 인포그래픽에 대한 관심이 높아지고 있는 상황인데요,
최은숙 대표님은 이러한 ‘정부 3.0′ 시대에 공공 인포그래픽이 나아갈 방향에 대해 강연을 해주셨습니다.

먼저 ‘정부 3.0′은 개방, 공유, 맞춤 등이 키워드라고 합니다.
개인별 맞춤 행복에 주목하는 입장입니다.
’3,0′ 시대의 가치와 슬로건 아래 공공의 PR, 공공 인포그래픽스는 과연 어떤 입장을 취해야 할까요?

이에 대해 오바마 행정부의 인포그래픽스 전략을 예시를 들어주셨는데요,
재집권을 이룬 오바마측의 성공 비결의 하나는, 인포그래픽스를
1) 팩트를 극적으로 표현
2) 다양한 방식의 사용자 경험을 제공
3) 경쟁자 압박의 무기로 활용
4) 다른 자료와 섞어 시너지를 창출
하였다는 점입니다.

오바마측의 인포그래픽스는 수용자의 입장에서
어떤 부분이 더 유리한 정책인지 효과적으로 전달하였습니다.
하지만 현 정부기관은 대게 1.0에 머무르며 아직은 딱딱한 언어와 경직된 자세입니다.
paek15의 경우 이러한 점을 보완하기위해 공급자 버젼과 수용자 버젼
두 가지로 제작하여 제안하신다는 말씀을 해주셨습니다.

‘정부 3.0′에 발맞춰 ‘진정성과 소통’을 대표적 단어로 이야기할 수 있는 커뮤니케이션 3.0은
대립/분리가 아닌 파트너 관계로 바라보는
‘파트너쉽 빌더’(가디언의 오픈 저널리즘 / 광명시민 공동 프로젝트 블로그는 성공적 예시)가 필요하며,

이러한 자세로 정책을 보고 무엇을 어떻게 그릴 것인지, 어떤 가치를 나눌 것인지 고민할 때
좋은 공공 인포그래픽이 나온다. 고 합니다:)

수용자 입장에서 인포그래픽스를 제작한다는 부분은 단순히 공공 인포그래픽스만의 이야기로
생각할 것이 아니라 귀담아 들어야할 부분이라는 생각입니다.

<픽토그램을 활용한 인포그래픽 제작> – 신태호 (KT Media Hub 차장) -

 

[사진을 클릭하면, 크게 보실 수 있습니다.]

3

픽토그램은 그림으로 소통하는 문자입니다.

국제화로 세계 누구나 알아볼 수 있는 그림 문자의 필요와 모바일 SNS의 사용증가로
인포그래픽을 통한 소통이 증가함은 픽토그램의 중요성 역시 증가시키고 있습니다.

인포그래픽스에서도 역시 픽토그램은 중요한 요소이며 좋은 인포그래픽스를 만드는것에 빠질 수 없는 조건일 것입니다.
하지만 그럼에도 불구하고 인포그래픽스 안에서 픽토그램은 조연이며
이 점을 염두하고 적절히 이용했을때 좋은 인포그래픽스가 만들어 질 수 있다고 말씀하셨습니다.

“조연의 역할은 주연을 잘 받쳐주어 이야기에 몰입하게 하고
가끔 톡톡 튀는 연기로 재미를 더하는 것이다.”

과도한 픽토그램의 사용은 집중력을 떨어트리며,
픽토그램이 모든 것을 설명할 수는 없을뿐더러 추상적인 내용을 전달하는 데에는
텍스트가 더욱 효과적이기도 합니다.

그러나 맵에서 ‘범례’로 쓰이는 픽토그램은 주연의 역할을 하고,
다소 산만한 분위기일 수 있을 때는 픽토그램이 주연이 되기도 한다고 말씀하셨습니다.

따라서 픽토그램과 다른 주제가 합쳐졌을 때 그 힘은 더해질수 있으며
몇가지 결합을 예시를 들어 설명해 주셨습니다.
1) 픽토그램 + 디자인 : 디자인과 결합한 픽토그램은 단순한 사인 이상의 의미가 있다.
2) 픽토그램 + 정부: 정부와 행정부처의 아이덴티티로서 픽토그램의 역할이 생긴다.
3) 픽토그램 + 모션 : 단순한 평면으로는 표현되지 않는 부분을 더 설명할 수 있다는 장점이 있다.
4) 픽토그램 + 아이덴티티 : 색과 픽토그램의 사용으로 일관성이 더해져 기업을 떠올리게 한다.
5) 픽토그램 + 브랜딩: 픽토그램 역시 브랜딩 요소에 들어갈 수 있다.

서체/ 폰트 디자인이 만들어지듯 픽토그램 역시 고민이 많이 반영되어 제작된다는
디자이너로서의 입장/이야기도 들려주셨는데요.
아직도 틈틈이 픽토그램을 ‘재미있어서’ 제작해보신다는 신태호 차장님.

픽토그램에 대한 사랑이 느껴지는 재미있는 강연이었습니다:)

<미디어를 활용한 인포그래픽 기획 및 제작 프로세스> – 주상돈 (전자신문 총괄 / 부국장) -

 

[사진을 클릭하면, 크게 보실 수 있습니다.]

4
국내에서 인포그래픽스를 제일 먼저 도입한 분야는 미디어일 것입니다.

그렇다면 미디어는 왜 인포그래픽에 주목할까요?
스마트폰과 타블렛 피씨의 시대가 열리며 종이 신문 수요가 감소하고 텍스트에서 그래픽으로
선호도가 이동하고 있습니다. 많은 양의 정보가 빠르게 흘러가는 시대에 편하게 정보를
접하고자 하는 욕구의 반영입니다.

주상돈 부국장님은 미디어 인포그래픽은 매체/미디어에 대한 이해가 선행되어야 한다고 말씀하시며
수습기자의 실수를 통해 미디어 인포그래픽스의 특징을 설명해 주셨습니다.
수습기자는 기사를 처음 쓸 때 대게 ‘일기’를 써오곤하는데, 전하고자 하는 뚜렷한 메시지가 없다는것이 가장 큰 실수입니다.
언론사는 가장 적합한 팩트를 하나 선정해, 대상을 표현해낼 수 있어야 한다고 하셨습니다.

따라서 명확한 메시지를 전달할 수 없는 화려하기만한 인포그래픽은 지양되야 한다는 것 입니다.

또, 미디어 인포그래픽은 데이터 조사를 함께하는 것이 또다른 특징으로 인사이트를 가지고 데이터를
가공하고 제작할 수 있다면 큰 파급효과를 가질 수 있을 것임을 말씀해주셨습니다:)

<기업 커뮤니케이션 담당부서에서의 인포그래픽 도입 사례> – 박준완 (GS칼텍스 팀장) -

 

[사진을 클릭하면, 크게 보실 수 있습니다.]

5

5번째 순서였던 GS칼텍스의 박준완 팀장님의 강연은 현장에서 인포그래픽스를 고민하는
‘클라이언트’의 입장에서 바라본 인포그래픽이 큰 특징이었습니다.

GS칼텍스는 한국에서 인포그래픽을 적용한 첫번째 ‘기업’으로.
현재 인포그래픽스를 홍보와 소셜 큐레이팅에 활용하고 있습니다.

인포그래픽을 사랑한다는 박준완 팀장님은,
그 애정에도 불구하고 기업 커뮤니케이터의 입장에서 ‘정말 효과적인가?’에 대한
고민을 하지 않을 수 없음을 고백해주셨습니다.

박준완 팀장님은 먼저 1년 반전만 해도 국내에서 인포그래픽은 불모의 분야였다고 합니다.
몇 차례의 고생스러운 시행을 거쳐 긍정적 효과와 반응을 확인하였고
GS칼텍스는 현재 전문 제작사들과 지금은 인포그래픽스를 제작하고 있는 상황입니다.
전문업체의 유용성, 디자인의 비용 측정, 제작프로세스의 정립 과정등에 대한 경험은
어떤 파트너가 좋은지 어떤 파트너가 되야하는지 등을 설명해 주셨습니다.

현재는 노출을 고민하는 시점이 되었으며 TV광고처럼 충분한 노출이 가능하지 않는 상황에서는
비용 효율성을 최대화하는 것이 방향임을 깨닫고 “타겟과 메시지에 대한 고민”을 하는 단계임을 말씁해 주셨습니다.

“국내 인포그래픽은 좀 더 성장해야 하는 상황이다. 이에는 두가지 전제 조건이 필요하다.
Business Value & 시장 + 전문 업체의 성장이 그것이다.”

클라이언트의 입장으로, 인포그래픽 현장을 조망해 볼 수 있었던 좋은 기회였었습니다.:)

<감성을 자극하는 인포그래픽 제작 가이드> – 송정수 (인포그래픽웍스 대표) -

 

[사진을 클릭하면, 크게 보실 수 있습니다.]

6

현재 인포그래픽 전문회사를 운영하고 계시는 송정수 대표님은
‘감성을 자극하는 인포그래픽’을 주제로 강연을 해주셨습니다.

1) 인포그래픽의 다양한 종류와 예
2) 인포그래픽 제작 프로세스
3) 좋은 인포그래픽이란
4) 인포그래픽 제작 기법
의 순서로 진행되었습니다.

제품 홍보와 변천 과정의 설명, 프로세스를 설명,
비교, 사회적 문제, 상호작용이 있는 인터렉티브 인포그래픽,
전달력이 높은 모션 인포그래픽 등 다양한 인포그래픽의 종류가 있습니다

인포그래픽 제작 프로세스는 자료수집 – 정보가공 – 디자인의 과정으로
디자인에서 가장 기초가 되는 작업은 손으로 스케치하는 과정입니다.

정보의 전달과 함께 좋은 인포그래픽의 3요소로
1. 정보전달 2. 스토리텔링 3. 그래픽을 꼽을 수 있다고 합니다.

인포그래픽의 제작 기법에 대해 ‘사람의 눈은 시각적인 것에 더 눈이 간다.’
예를 들어 “This is a Square”라는 문장이 있고 그 옆에 원이
그려져 있는 경우 사람들은 그래픽에 눈이 먼저 가고, 그것을 진실로 믿는다는 것입니다.

비교의 기준을 명확히 하면 빠른 정보 습득이 가능해집니다.
명확하지 않은 기준으로 비교하는 인포그래픽은 혼란만을 줍니다.

<스토리가 있는 인포그래픽 제작 노하우> – 김묘영 (바이스 버사 디자인 스튜디오 대표) -

 

[사진을 클릭하면, 크게 보실 수 있습니다.]

7

국내 최초의 인포그래픽 전문회사 바이스 버사 디자인 스튜디오의 김묘영 대표님은
‘스토리텔링’을 키워드로 인포그래픽 강연을 해주셨습니다.

“이야기가 더해진 콘텐츠는 생명력이 연장된다.
인포그래픽이 주목받는 이유는 여기에 있다.”

정보에 스토리가 더해졌을 때 정보 전달력은 더욱 강해집니다.
데이터 시각화와 인포그래픽이 가장 다른 점이 이것이라고 지적해주셨는데요.
인포그래픽은 ‘메시지’가 명확하다는 것이 큰 특징입니다.

빅데이터 시대를 살아가면서 소화해야 하는 정보가 기하급수적으로 늘어나고 있는데요.
데이터 → 정보 → 메시지의 과정을 거치며
메세지는 전달하기 위해 스토리텔링은 더욱 중요해집니다.
[사진을 클릭하면, 크게 보실 수 있습니다.]

7-1

인포그래픽에서의 스토리텔링은

1) 정보의 배치에 따른 스토리텔링
2) 스토리텔링을 통한 내용 구성
3) 비주얼 스토리텔링
이 있습니다.

스토리텔링 인포그래픽의 장점은
이야기가 있는 좋은 콘텐츠는 공유와 확산이 쉽다는 점입니다.

그렇다면 좋은 인포그래픽의 조건은 무엇일까요?

1) 흥미로운 주제
2) 스토리가 있는 내용 구성
3) 주제를 잘 전달하는 동시에 호기심을 자극할 수 있는 타이틀
4) 효과적인 비주얼 스토리텔링
5) 타이밍
이 그것입니다.

이 모든 조건을 충족시키는 인포그래픽은 ‘배려’가 있는 인포그래픽이다. 보는 이에게 필요한 정보를 보다 알기 쉽게
전달하는 것이 좋은 인포그래픽임을 이야기해주셨습니다.

2013년 3월 28일
by aduris
0 comments

책추천]코딩 호러의 이펙티브 프로그래밍 스택 오버플로우 공동 창립자가 알려주는 소프트웨어 개발의 비밀

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

책소개

코딩 호러 블로그의 운영자가 알려주는 소프트웨어 개발의 비밀!

스택 오버플로우 공동 창립자가 알려주는 소프트웨어 개발의 비밀 『코딩 호러의 이펙티브 프로그래밍』. ‘코딩 호러’와 ‘스택 오버플로우’ 두 사이트를 탄생시킨 저자의 소프트웨어 개발과 관련된 지혜와 조언이 가감 없이 담겨 있다. 그동안 코딩 호러에 실린 글 중에서 엄선한 글만 실린 이 책은 소프트웨어 개발에 관한 저자의 통찰력과 실질적인 조언이 수록되어 있다.

[인터넷 교보문고 제공]

저자소개

제프 앳우드

저자 : 제프 앳우드
저자 제프 앳우드는 캘리포니아 버클리에서 아내, 두 마리 고양이, 세 명의 아이들, 그리고 여러 대의 컴퓨터와 함께 살고 있다. 그는 80년대 자신의 첫 번째 마이크로컴퓨터였던 텍사스 인스트루먼트의 TI-99/4A를 이용해 다양한 마이크로소프트 베이직 프로그램을 구현하면서 소프트웨어 개발자의 길을 걷기 시작했다. 90년대 초반까지 계속 PC상에서 비주얼 베이직 3.0과 윈도우 3.1을 사용했고, 델파이의 최초 버전을 이용해 파스칼 코드도 많이 작성했다. 현재는 대소문자에 민감한 사악한 속성에도 불구하고 VB.NET 혹은 C# 프로그래밍에 익숙하다. 지금은 루비를 배우고 있다. 앳우드는 개발자가 읽어야 할 도서 목록에서 밝힌 것처럼 스스로를 소프트웨어 개발 과정에 존재하는 인간적인 측면에 특별히 관심이 있는, 상당히 경험이 풍부한 윈도웹(WINDOWSWEB) 소프트웨어 개발자라고 생각한다. 그가 주장하는 바에 따르면 컴퓨터는 놀라운 기계이지만 사실상 그것을 사용하는 사람을 단순히 반영하는 기계에 불과하며, 소프트웨어 개발의 기술적인 측면은 코드를 학습하는 것만으로는 충족되지 않고 소프트웨어의 배후에 존재하는 사람도 함께 연구해야 한다.

역자 : 임백준
역자 임백준은 서울대학교에서 수학을 전공하고, 인디애나 주립대학에서 컴퓨터 사이언스를 공부했다. 삼성SDS, 뉴저지 소재 루슨트테크놀로지스에서 근무했고, 지금은 월스트리트에서 금융 소프트웨어를 개발하고 있다. 뉴저지에서 아내와 두 딸과 함께 살고 있다. 《누워서 읽는 퍼즐북》(2010), <프로그래밍은 상상이다》(2008), 《뉴욕의 프로그래머》(2007), 《소프트웨어 산책》(2005), 《나는 프로그래머다》(2004), 《누워서 읽는 알고리즘》(2003), 《행복한 프로그래밍》(2003, 이상 한빛미디어), 《프로그래머 그 다음 이야기》(2011, 로드북)을 집필했고, 다수의 책을 번역했다.

[인터넷 교보문고 제공]

목차

▣ [1부] 들어가며
결국 프로그래머가 되고 싶은 거로군
프로그래머의 여덟 단계
쓰지 않으면서 쓰기
▣ [2부] 엉터리 같은 일을 마무리하는 기술
거대하고 끝없는 바다
톱날 갈기
저 길로 가라. 총알처럼.
멀티태스킹이라는 미신
▣ [3부] 좋은 프로그래밍의 원리
프로그래밍의 첫 번째 원리: 그것은 언제나 당신의 잘못이다.
최선의 코드는 아무 코드도 없는 것이다.
주석 없이 코딩하기
루크, 소스를 읽는 법을 배우게
고무오리 문제 해결법
아이디어가 아니라 팀을 경작하라
당신의 팀은 엘리베이터 테스트를 통과할 수 있는가?
성능은 기능이다
▣ [4부] 프로그래머를 제대로 채용하는 법
프로그래머가 어째서 프로그래밍을 못하는 걸까?
프로그래머를 채용하는 방법
전화 인터뷰로 걸러내는 과정을 올바로 수행하기
몇 년이나 경험했는가, 라는 질문에 담긴 미신
프로그래머를 대상으로 인터뷰하기
인터뷰 역사상 가장 어려운 질문
▣ [5부] 팀이 함께 일하도록 만들기
그들이 어떤 말을 하든 그것은 결국 사람과 관련된 문제다
예를 통해 리드하기
뱀파이어 프로그래머 대 베어울프 시스템 관리자
짝 프로그래밍 대 코드 리뷰
회의: 일이 죽으러 가는 장소
썩은 사과를 다루는 방법
썩은 사과: 그룹 전체의 독4
원격근무에 대해
▣ [6부] 당신의 박쥐동굴: 프로그래머를 위한 효율적인 작업 공간
프로그래머 권리 장전
컴퓨터 워크스테이션 인체공학
하나 이상의 모니터를 사용하면 생산성이 향상되는가?
품질 좋은 프로그래밍용 의자에 투자하기
배경 조명
▣ [7부] 사용자를 염두에 두고 설계하기
당신은 결코 충분한 치즈를 갖지 못할 것이다
애플리케이션은 결국, 작은 디테일의 모음이다
사용자 인터페이스가 애플리케이션이다
UI를 우선시하는소프트웨어 개발
쪽수매기기의 종말
사용자의 좁은 시야 다루기
폴드 다시 살펴보기
피츠의 법칙과 무한한 넓이
궁극적인 단위 테스트 실패
버전 1은 엉망이야, 하지만 어쨌든 출시하라고
▣ [8부] 보안의 기초: 사용자의 데이터를 보호하라
웹 트래픽 전체를 암호화해야 하는가?
사전 공격 기초
빠른 해싱
웹 비밀번호를 둘러싼 불편한 진실
▣ [9부] 코드를 테스트해서 그것이 필요 이상으로 엉망이 되지 않게 만들기
고객의 고통을 공유하기
무질서한 원숭이와 함께 일하기
코드 리뷰: 그냥 하라
무식한 방식의 테스트
나는 단위 테스트를 작성하지 않는 바보들에게 동정을 보낸다
단위 테스트 대 베타 테스트
싸구려 사용성 테스트
크래쉬보다 더 나쁜 것은무엇인가?
▣ [10부] 커뮤니티를 만들고, 관리하고, 커뮤니티로부터 이익 얻기
커뮤니티의 의견을 들어라, 하지만 그들이 당신이 어떻게 할지 말하게 하지 마라.
반복한다: 사용자의 말을 듣지 마라
게임화
정지, 금지 혹은 완전금지?
▣ [11부] 마케팅 사기꾼들, 그리고 어떻게 그런 사람이 되지 않을 수 있는가
마케팅 사기꾼들이 당신을 속이려고 하는 9가지 방법
인터넷 광고에서하지 말아야 할 일
그라운드호그 데이, 혹은 A/B 테스트의 문제
기업처럼 보인다면, 그것을 변화시켜라.
소프트웨어 가격 책정: 우리는 그것을 잘못 하고 있는가?
▣ [12부] 우선순위를 제대로 관리하기
행복을 구매하기
빠르게 살고, 일찍 죽고, 지친 육신을 남기고

[인터넷 교보문고 제공]

2013년 3월 28일
by aduris
0 comments

책 추천] 프로그래머로 사는 법 프로그래머의 길을 걸어가는 당신을 위한 안내서

프로그래머로 사는 법

샘 라이트스톤|서환수|2012.10.04
원제 Making it big in software : get the job. Work the org. Become great
페이지 608|ISBN ISBN 안내 레이어 보기 9788979149623|판형 A5, 148*210mm|책정보
25,000원 -> 19,500원(-22%)

책소개

성공하는 소프트웨어 프로그래머를 위한 경력 관리 비결!

『프로그래머로 사는 법』은 소프트웨어 프로그래머로 취업하여 경력을 시작하는 방법부터 창업에 이르기까지의 단계별 경력을 집약한 책이다. IBM에서 20여 년간 프로그래머로 일하며, 수많은 기업과 대학에서 소프트웨어 엔지니어 양성에 힘써 온 샘 라이트스톤의 학술적 소산으로, 경력관리가 필요한 프로그래머들에게 유용한 정보가 담겨 있다. 소프트웨어 분야에서 경력을 쌓기 위해 필요한 기본 구성 요소를 비롯하여 압박 하에서 제대로 일하는 방법, 전문가로서 정점에 도달하여 대가가 되는데 필요한 경험을 생생한 언어로 일깨운다. 또한, 업체 중역, 연구자, 업계 리더 등 다양한 인물을 대상으로 선정한 인터뷰를 수록하여 유능한 프로그래머 리더의 표본을 보여주고 있다.

[인터넷 교보문고 제공]

저자소개

샘 라이트스톤

저자 : 샘 라이트스톤
저자 샘 라이트스톤은 IBM 소프트웨어 그룹의 수석연구원 및 프로그램 디렉터로 일하면서 세계 최대의 소프트웨어 엔지니어링 팀 가운데 하나에서 제품 전략 및 R&D와 관련된 일을 하고 있다. 샘은 대중 강연 및 저술 활동, 발명 활동으로도 유명하며 여전히 업무 시간의 상당 부분을 소프트웨어 엔지니어를 선발하고 지도하는 데 할애하고 있다. 수십 군데의 포춘 500대 기업, 기술 전시회 및 학회, 유수 대학 등에서 경력 개발, 기술 트렌드, 신규 연구 필요 분야 등을 주제로 강연을 해 왔다. EWEEK, INFORMATIONWEEK, INFOWORLD, MIT TECHNOLOGY REVIEW에서도 다수 인용되었다. 소규모의 응용연구 팀에서 각지에 걸친 200명이 넘는 직원이 참여하는 대규모 프로젝트에 이르기까지 다양한 프로젝트를 관리해 왔다. 자가 관리 데이터베이스 시스템에 관한 IEEE 데이터 엔지니어링 워크그룹의 설립자이며 자율 자동 컴퓨팅 시스템에 관한 IEEE 컴퓨터 소사이어티 기술위원회의 국제 자문위원단으로도 활동하고 있다. 30개가 넘는 특허의 발명인으로 등재되어 있으며, 몇 권의 책과 논문의 저자이기도 하다. 퀸즈 대학교 전기공학부에서 응용과학 학사 학위를 받았으며, 워털루 대학교에서 전산 및 소프트웨어 엔지니어링 석사 학위를 받았다. 플뢰레 종목으로 전국대회에서 활약한 경험이 있는 펜싱 선수였으며, 여가 시간에는 가족과 시간을 보내거나 자전거, 기타 등을 취미로 하고 있다.

역자 : 서환수
역자 서환수는 서울대학교 물리학과에서 박사 학위를 받고 지금은 경기도 모처의 기업 연구소에서 나노과학을 연구하고 있다. 유치원에 들어가기 전부터 아무것도 모르고 물리학을 하겠다고 마음먹은 이후로, 30대 중반에 이른 지금까지도 “어떤 사람이 되고 싶으냐?”라는 질문을 받으면 “훌륭한 과학자요”라고 대답하고 있다.『HEAD FIRST JAVA : 뇌 회로를 자극하는 자바 학습법 (개정판)』, 『SLIDE : OLOGY – 위대한 프레젠테이션을 만드는 예술과 과학』, 『프로그래밍 면접』을 비롯해서 한빛미디어와 함께 여러 권의 번역서를 냈다.

[인터넷 교보문고 제공]

목차

CHAPTER 1크게 성공하기
__소프트웨어 분야의 거성들은 무슨 일을 할까?
__행복을 좇아라
__뭘 망설이는가?
__생각보다는 어렵지 않다
CHAPTER 2좋은 소프트웨어란?
__망쳐버린 소프트웨어 프로젝트와 무용담
__우리가 하는 모든 일의 원동력, 시장
__고객: 기존 고객과 신규 고객
__이기는 전략과 전술
__고객에게 귀 기울이기(또는 그러지 않기)
__INTERVIEW__마리사 메이어
CHAPTER 3학교 대 직장
__제한된 비전
__학교는 어항이다
__회사는 어항이다
__차이를 지렛대 삼아 …
__INTERVIEW__존 벤틀리
CHAPTER 4미션 임파서블? 소프트웨어 개발 분야 직장 구하기
__현명하게 선택하는 법
__신규 취업자 이력서의 현실
__바람직한 소프트웨어 개발자 이력서
__이력서를 넘어서
__학점의 가치
__과외 활동의 가치
__현장 실습과 인턴십
__훌륭한 면접을 위한 15가지 비결
__INTERVIEW__비야네 스트롭스트룹
CHAPTER 5소프트웨어 개발자 초기 시절 활용법
__트레이드크래프트
__소프트웨어 업계
__도메인 전문성
__온고지신
__리더로부터 배워라
__네트워크 구축
__어떤 사람이 될 것인가?
__멘토
__재미와 성공
__INTERVIEW__리차드 스톨만
CHAPTER 6필수 역량
__업무 역량과 업무 외 역량
__성장을 위한 기술 역량
__프로그래밍 언어: 잘 나가는 언어와 그렇지 않은 언어
__디버깅
__생존을 위한 규격, 설계 및 코드 검토
__성장 역량
__조직 최상부의 비업무 역량
__궁극의 비업무 역량: 감성 지능
__INTERVIEW__레이 톰린슨
CHAPTER 7소프트웨어 R&D 조직
__누가 무슨 일을 하나?
__좋은 선수와 위대한 선수
__효과적인 경력을 쌓기 위한 세 가지
__업무상 대화의 네 가지 모드
__절대로 상사를 놀래키지 말라
__인상과 체제 순응도
__INTERVIEW__피터 노빅
CHAPTER 8…(하략)

[인터넷 교보문고 제공]

출판사 서평

1. 이 책이 제시하는 핵심 내용
프로그래머로 취직해서 경력을 시작하는 방법부터 창업에 이르기까지 경력의 모든 것을 알려준다

2. 어떤 독자를 위한 책인가?
-. 자기 계발에 관심 있는 프로그래머
-. 경력 관리가 필요한 프로그래머

3. 도서 특징(책 표지 글)
성공하는 프로그래머를 위한 인생 전략 특강
소프트웨어 업계에서 취직하는 방법, 높은 자리로 올라가는 방법, 최고 자리로 가는 방법처럼 프로그래머로 경력을 시작하는데 필요한 정보가 모두 담겨 있다. 학점을 잘 받거나 코드를 잘 짜는 것만으로는 성공하지 못하며, 리더십, 팀 관리, 인간 관계, 성장 역량, 제안서 작성법, 발표의 기술, 시간 관리, 일과 삶의 균형, 소프트웨어 개발 방법론, 품질 관리와 같은 다양한 역량이 성공의 요소임을 설명한다.
샘 라이트스톤은 IBM에서 소프트웨어 아키텍트, 수석 관리자, 선임 프로그래머로 20년간 일하며 수많은 기업과 대학에서 진로, 신기술, 신규 연구 분야를 지도했으며, 소프트웨어 엔지니어를 선발하고 멘토링하는 일에 시간을 쏟고 있다. 저자가 경험을 통해 터득한 교훈을 이 책에 모았다.

【독점 인터뷰】
스티브 워즈니악 _애플 컴퓨터의 아버지
제임스 고슬링 _자바의 아버지
마리사 메이어 _전 구글 부사장, 현 야후! CEO
존 슈왈츠 _전 비즈니스 오브젝츠 CEO, 현 Visier CEO
리누스 토르발스 _리눅스 운영체제 커널의 창시자
데이비드 바스케비치 _마이크로소프트 CTO
리차드 스톨만 _자유 소프트웨어 운동 창시자
피터 노빅 _구글 연구본부장
마크 루시노비치 _마이크로소프트 펠로우 및 윈도 아키텍트
존 벤틀리 _『생각하는 프로그래밍』의 저자
톰 멀로이 _어도비 시스템즈 최고 소프트웨어 아키텍트
마크 베니오프 _세일즈포스닷컴 CEO
다이앤 그린 _VMware 공동설립자, 전 CEO
그래디 부치 _IBM 펠로우, 래셔널 소프트웨어 공동창업자
로버트 칸 _인터넷 공동 발명자
레이 톰린슨 _이메일 창시자
비야네 스트롭스트룹 _C++의 아버지

【우리가 개발자로 살아가는 이야기】
한상렬 _지방대 대학생의 BPC 수상기
김민장 _유학생의 미국 소프트웨어 엔지니어 구직 인터뷰
이연복 _좌충우돌 스타트업 생존기
서민구 _프로그래머의 공부
이창신 _길고 구부러진 길
백창우 _엔지니어가 실수하는 것들
변종원 _대한민국에서 나이 많은 개발자가 살아남는 법
유영창 _어떻게 프로그래머로 살까?
박영주 _우연히 시작한 개발자의 꿈, 아직도 진행형

관리자나 경영진 중에 프로그래밍을 조…(하략)

[인터넷 교보문고 제공]

책속으로

관리자나 경영진 중에 프로그래밍을 조립 라인에서 하는 저수준의 업무로 치부해 버리려는 사람이 너무 많아요. – 비야네 스트롭스트룹

어려운 건 마찬가지예요. 다른 도구를 쓰고 다른 객체를 쓰고 다른 프로그래밍 엔티티를 쓰고 다른 언어를 써도 결국은 그게 그거죠. 여전히 아귀가 잘 안 맞는 것을 맞추는 방법을 찾아내서 조립하는 일을 해야만 하는 겁니다. – 레이 톰린슨

큰물에서 노는 게 중요합니다. 혼자서 배우거나 이룰 수 있는 수준에는 한계가 있어요. 누구든 주변에 있는 동료의 평균 정도만큼 성장하게 마련이기 때문에 훌륭한 동료가 있는 게 중요합니다. – 피터 노빅

“목표를 높게 잡아라”, “큰 꿈을 가져라” 같은 말은 전부 쓸데없는 소리라고 생각해요. 단번에 높은 건물을 뛰어넘을 수는 없어요. 한 계단 한 계단씩 올라가야 하죠. – 리누스 토르발스

전문 분야를 공부하러 대학에 진학하지만, 정작 대학에서는 쓸데없는 것만 잔뜩 가르친다. 안타깝게도 학교에서 배우는 전형적인 교육과 성공적인 직장생활에 필요한 역량 사이에는 상당한 간극이 자리하고 있다. – 샘 라이트스톤

학교는 업무량이 상대적으로 잘 제어되고, 모든 참가자가 유사한 것에 도전하고, 다들 각자 단독으로 일하는 것이 바람직하게 여겨지는, 고도로 인위적인 환경이다. 학교에서는 각자 단독으로 일해야 하며 그 규칙을 지키지 않으면 퇴학당하거나 심한 질책을 받는 반면에, 회사에서는 항상 ”팀워크”를 우선해야 한다. 학교에서는 개개인의 노력으로 성공이 결정되지만, 회사에서 팀워크는 매우 큰 요소로 작용한다.— 「3장 학교는 어항이다」

소프트웨어 개발자 자리를 원하는 지원자들의 이력서는 거의 대동소이하다. 다들 운영체제, 자료구조, 알고리즘 수업은 듣게 마련이다. 자바, C, C++ 같은 핵심 프로그래밍 언어도 다들 안다. 기계어 프로그래밍, TCP/IP 같은 것도 개론 수준의 수업은 다들 듣는다.— 「4장 신규 취업자 이력서의 현실」

신입 사원으로서 정말 놀랄 만한 부분은 바로 트레이드크래프트(tradecraft) 스킬이다. 여기서 “트레이드크래프트”란 본질적으로 매우 전문적인 스킬임에도 학교에서는 자세히 가르쳐주지 않는 것을 뜻한다.— 「5장 트레이드크래프트」

(관리, 경영 방면에서) 그나마 잘하는 것을 하나 꼽으라면, 저는 다른 사람한테 어떤 일을 하라는 얘길 잘 안 하는 편이에요. 누군가가 자기가 설계한 걸 가지고 왔을 때 뭔가 문제가 있다는 생각이 들면 “여기 이게 문제가 있는 것 같네요.” 같은 식으로 얘기하지 않습니다. 그러면 방어적이 되거든요. 그럴 때는 그와 관련된 질문을 던지고 본인이 스스로 “아, 그게 좀 문제가 있겠네요.”라고 깨닫도록 유도합니다. — 「16장 업무지시 방법」

[YES24 제공]

Proudly powered by WordPress | Theme: Yoko by Elmastudio

Top