좋은 개발자 되기

26
좋좋 좋좋좋 좋좋 좋좋좋좋좋좋 좋좋좋 KESTI 2016-01-08

Upload: sunghyouk-bae

Post on 16-Apr-2017

3.633 views

Category:

Software


0 download

TRANSCRIPT

Page 1: 좋은 개발자 되기

좋은 개발자 되기개발역량강화 세미나 KESTI 2016-01-08

Page 2: 좋은 개발자 되기

2목차 좋은 개발자란 ? 어떻게 공부할 것인가 ? Programming Language 습득 방법 좋은 개발팀원이란 ? 좋은 코더란 ? 전문분야 찾기

KESTI

발자

역량

강화

세미

Page 3: 좋은 개발자 되기

3

좋은 개발자란 ?

KESTI

발자

역량

강화

세미

Page 4: 좋은 개발자 되기

4개발자 분류 Domain 별

Software 산업이라는 것은 모든 산업에 Software 를 제공하는 것 정부 , 게임 , B2C, B2B, O2O, Embedded …

Topic 별 보안 , 엔터테인먼트 , 오픈소스

Role 별 SI, SM, Service, Infra, DBA, Device Architecture, PM, Analysis, Consultant

기술 분야 Frontend – Windows, Web, Mobile (iOS, Android …) Backend – Web, Middleware, Servers (Cache, MQ …) … Database – DBA, OLTP, OLAP, Big Data

KESTI

발자

역량

강화

세미

Page 5: 좋은 개발자 되기

5좋은 개발자란 ? 좋은 제품을 만드는 사람

사용성 안정성 ( 예외처리 ) 성능 유지보수성

납기 준수 , 매뉴얼 논리적 사고 , 자기계발

게으름 자동화 , 관심 자기주도 , 3D 끈기 참고 : 좋은 프로그래머 되기

KESTI

발자

역량

강화

세미

Page 6: 좋은 개발자 되기

6좋은 개발자란 ?KESTI

개발

자역

량강

화세

미나

SI• 적기 납품• Domain 지식 ( 요구사항 충족 )• 유지보수성

Solution• 범용성 ( 다양한 Needs 를 일반화 )• 안정성 / 성능• 자동화 / 매뉴얼• 호환성

Embedded• 안정성• 성능• 호환성

SM•현업과의 소통•Domain 지식 / 코드 이해력•시스템 운영 능력

분야별

Page 7: 좋은 개발자 되기

7

어떻게 공부할 것인가 ?

KESTI

발자

역량

강화

세미

Page 8: 좋은 개발자 되기

8개발자 학습 분야KESTI

개발

자역

량강

화세

미나

SoftwareDomain KnowledgeBusiness Management

Page 9: 좋은 개발자 되기

9학습 전략을 짜라 분야별로 10 년 학습 Milestone 을 짜라 (Currier Path) 자신있는 분야 , 흥미있는 분야부터 공략해라

돈 되는 것 , 남이 원하는 것만 하게되면 언젠가 후회한다 . 쉬운 것부터 해라

폼생폼사가 아니다 . 첨부터 잘하는 놈 없다 . 눈에 보이는 것부터 해라 - 남들에게 Feedback 을 쉽게 받을 수 있는 것을 해라

최종적으로는 ? 자신이 오래 할 수 있는 것을 해라 성과가 높은 것 ? 자동화가 가능한 것 ? 항상 새로운 것 ?

KESTI

발자

역량

강화

세미

Page 10: 좋은 개발자 되기

10학습전략KESTI

개발

자역

량강

화세

미나

개발방법론 CBD (UML) Waterfall Agile

Language Java (OOP) Python C/C++

Scala (Functional

)

FrontendHTML /

JavaScript

jQuery Responsible Web

JavaScript

Framework

NodeJS

Backend 자료구조 WAS 멀티스레딩비동기 분산 서버

DATA RDBMS NoSQL Hadoop Spark Machine Learning

Infra OS / Linux

Build Automati

onDocker AWS

(Cloud)

Page 11: 좋은 개발자 되기

11KESTI

개발

자역

량강

화세

미나

KEST 개발자

Backend

이론

자료구조

디자인패턴

Framework

Spring Framework

Spring MVC

Spring Data

Spring Batch

Spring Integration

비동기

Java NIO

Concurrency

Parallel Programmin

g

분산환경

HA 구성

분산 Cache

Frontend

JavaScript

jQuery

AngularJS

React

Meteor

Resposible

Bootstrap

CSS3

Mobile App

Android

iOS / Swift

Database

RDBMS

Persistence Framework

SQL Mapper

MyBatis

jOOQ

ORM

Hibernate

JPA

Oracle PostgreSQL

PostGIS

HStore

NoSQL

MongoDB

Redis

ElasticSearch

InfluxDB

Page 12: 좋은 개발자 되기

12

KESTI 개발자는 ?

Data 처리• 자료구조• Collections• 선형수학

• RDBMS• ERD• 인덱스• 서브쿼리

Frontend

• HTML5• Bootstrap

• JavaScript• jQuery• AngularJS

• Mobile• Android• iOS

Backend

• Spring Framework• Spring MVC• Spring Data

• WAS• Persistence Layer• MyBatis• JPA/Hibernate

• 분산 서버• Redis, Akka

KESTI

발자

역량

강화

세미

Page 13: 좋은 개발자 되기

13책 읽기 방법 좋은 책을 선택해라

다독보다 양서를 읽어라 변화가 심한 분야는 차라리 Blog Article 을 읽어라 Head First 류는 서점에서 간단히 읽어라 ( 돈이 아깝다 ) 추천도서를 우선순위에 둬라 ( 서평도 꼭 봐라 ) 되도록 영문원서를 읽을 수 있도록 해라 (SW 정보 변화를 생각해라 )

같은 책을 두번 이상 읽어라 끝까지 읽어라 처음에는 전체 구조 파악을 목표로 하라 ( 목차 , 전체 내용 파악 ) 두번째는 정독하기 ( 예제는 실행해보기 )

요즘은 예제도 github 에 올라온다 ( 이런 책이 좋은 개발자가 쓴 책이다 ) 세번째부터는 모르는 부분 , 즉시 적용해야 하는 부분

KESTI

발자

역량

강화

세미

Page 14: 좋은 개발자 되기

14

Program Language 학습방법

KESTI

발자

역량

강화

세미

Page 15: 좋은 개발자 되기

15

Programming Language 학습방법 자신에게 맞는 개발 환경을 구축해라 좋은 IDE (VS.NET, IntelliJ IDEA), 코딩용 폰트

언어의 Eco Environments 를 적극 활용하라 빌드 툴 (Maven, Gradle) 을 먼저 익혀라 (Ant 는 잊어라 ) 개발 프로세스를 먼저 익혀라 소스 관리 툴 (GIT) 을 익혀라

TDD 로 코딩하라 예제도 TDD 로 하라 실제 코딩 전에 테스트 코드로 검증하라

운영 OS 에 대한 기본 지식은 필수이다 프로그램이 구동되는 환경이다 되도록 운영 환경과 같은 환경에서 개발해라

KESTI

발자

역량

강화

세미

Page 16: 좋은 개발자 되기

16KESTI

개발

자역

량강

화세

미나

Dependency Diagram

Class Diagram

Page 17: 좋은 개발자 되기

17

좋은 개발팀원

KESTI

발자

역량

강화

세미

Page 18: 좋은 개발자 되기

18좋은 팀원이 되려면 문제를 숨기지 마라

지뢰를 심어놓으면 , 나중에 다른 사람이 다친다 문제를 빨리 파악하는 능력을 키워야 한다 (TDD) 남의 문제에 대한 지적질도 매우 중요하다 ( 대안도 같이 제시 ) 꼼수는 필요하지만 , 나중에 꼭 개선해야 한다 (Refactoring)

논쟁은 필수 , 항상 Why 를 생각하라 누가 시켰어요 … ( 전 생각이 없어요 )

지식은 나누면 더 크게 돌아온다 팀원의 경험과 Idea 는 나눠야 팀의 역량이 강화된다 Communication Tool 을 적극 활용하라

개발자는 문제 해결사이다 문제 파악 / 문제 해결 경험을 많이 가져라 (직관도 높아진다 )

협업 툴을 적극 활용하라 GIT, Wiki, Jira, Build Automation 등을 사용 못하면 팀에서 제외될 수 있다

KESTI

발자

역량

강화

세미

Page 19: 좋은 개발자 되기

19

Communication ToolsKESTI

개발

자역

량강

화세

미나

Evernotekifi

Slack

Page 20: 좋은 개발자 되기

20좋은 프로그래머가 되려면 소프트웨어 개발 방법론을 공부해라

CBD, DDD, TDD, Agile … 알고리즘을 배워라

자료구조는 기본이다 알고리즘은 작동여부 뿐 아니라 성능도 중요하다

H/W 를 알아야 한다 OS 의 기본 특성을 잘 알아야 한다 – OS 설정은 매우 중요하다

관심 분야의 Community 활동을 해라 회사 내부에 전문가가 없다하더라도 국내외에는 상당히 많다 영어를 못하더라도 상관없다 . 외국애들 참 친절하다 .

두가지 이상의 언어를 사용해야 한다 (Polyglat)

KESTI

발자

역량

강화

세미

Page 21: 좋은 개발자 되기

21

Programming LanguagesKESTI

개발

자역

량강

화세

미나

Best Language for me

Page 22: 좋은 개발자 되기

22좋은 코더가 되려면 1 내가 짠 코드는 내가 책임진다

코드가 작동되는 것을 책임진다 ( 증명한다 ) 의사코드 (Pseudo code) 와 주석은 꼭 작성한다 .

Logging Frameworks 을 잘 사용해야 한다 Log 만 보고도 시스템의 활동을 알 수 있어야 한다 Printf 가 아니다 ㅠ .ㅠ

읽기 쉬운 코드 (Readable Code) ( 참고) 코드는 간결하게 , 중복 제거 Format 은 보기 좋게 변수는 의미있게 ( 한글이 아닌 영어 단어로 – JuminNo Citi-

zenNo) 함수명도 의미있게 ( 전치사를 잘 쓰면 좋다 – With, Of, By, On 등 )

KESTI

발자

역량

강화

세미

Page 23: 좋은 개발자 되기

23KESTI

개발

자역

량강

화세

미나

/**

* 예보 발표 시각과 예보 시각에 해당하는 값을 조회한다 . DB 에 없으면 새로 생성하여 반환합니다 .

*

* @param refTimeUtc 예보 발표 시각 * @param forecastTimeUtc 예보 시각 * @return {@link ForecastTime} 인스턴스 , 없으면 null 반환 */

default ForecastTime getOrCreate(@NonNull DateTime refTimeUtc, @NonNull DateTime forecastTimeUtc) { ForecastTime time = findOne(refTimeUtc, forecastTimeUtc); if (time == null) { synchronized (this) { time = findOne(refTimeUtc, forecastTimeUtc); if (time == null) { time = save(ForecastTime.of(refTimeUtc, forecastTimeUtc)); log.debug(" 새로운 ForecastTime 엔티티를 생성했습니다 . {}", time); } } } return time;}

1. 주석은 꼭 작성해야 한다2. Logging 은 필요한 부분에 적절한 LEVEL 로 추가한다 ( 비용문제 )

참고 : Top 15+ Best Practices for Writing Super Readable Code

Page 24: 좋은 개발자 되기

24KESTI

개발

자역

량강

화세

미나

public class MongoCacheItem extends AbstractMongoDocument {

private Object key; private byte[] value; private long expireAt = 0;

public Object getKey() { return key; } public void setKey(Object key1) { this.key = key1; } public byte[] getValue() { return key; } public void setValue(byte[] value1) { this.value = value1; } public long getExpireAt() { return expireAt; } public void setExpireAt(long expireAt1) { this.expireAt = expireAt1; }

private static final long serialVersionUID = 5081372628460588627L;}

@Getter@Setterpublic class MongoCacheItem extends AbstractMongoDocument {

private Object key; private byte[] value; private long expireAt = 0;

private static final long serialVersionUID = 5081372628460588627L;}

Project Lombok

Java 의 Boilerplate 코드를 최대한 간결하게 줄여라

참고 : Reducing Boilerplate Code with Project Lombok

Page 25: 좋은 개발자 되기

25

Readable Code BooksKESTI

개발

자역

량강

화세

미나

Page 26: 좋은 개발자 되기

26좋은 코더가 되려면 2 남의 좋은 코드를 참고하라

유명한 라이브러리의 소스를 자주 읽어라 사용하는 라이브러리의 소스를 자주 읽어라

좋은 코드 작성 능력은 하늘에서 떨어지는 게 아니다 좋은 소설도 초안이 여러 개이다 Refactoring 을 습관화하라 ( 변수명 개선 , 구조 개선 등등 )

디자인 패턴을 익히고 적용하라 디자인 패턴은 코딩 Best Practices

좋은 라이브러리를 사용해라 좋은 라이브러리를 채택하는 능력이 중요 검증된 라이브러리를 잘 사용하는 것이 능력이다

KESTI

발자

역량

강화

세미