ݺߣ

ݺߣShare a Scribd company logo
좋은 개발자 되기
개발역량강화 세미나
KESTI 2016-01-08
목차
 좋은 개발자란?
 어떻게 공부할 것인가?
 Programming Language 습득 방법
 좋은 개발팀원이란?
 좋은 코더란?
 전문분야 찾기
2
좋은 개발자란?
3
개발자 분류
 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
4
좋은 개발자란?
 좋은 제품을 만드는 사람
 사용성
 안정성 (예외처리)
 성능
 유지보수성
 납기 준수, 매뉴얼
 논리적 사고, 자기계발
 게으름  자동화, 관심  자기주도, 3D  끈기
 참고 : 좋은 프로그래머 되기
5
좋은 개발자란?
6
SI
• 적기 납품
• Domain 지식 (요구사항 충족)
• 유지보수성
Solution
• 범용성 (다양한 Needs를 일반화)
• 안정성 / 성능
• 자동화 / 매뉴얼
• 호환성
Embedded
• 안정성
• 성능
• 호환성
SM
•현업과의 소통
•Domain 지식 / 코드 이해력
•시스템 운영 능력
분야별
어떻게 공부할 것인가?
7
개발자 학습 분야
8
Software
Domain
Knowledge
Business
Management
학습 전략을 짜라
 분야별로 10년 학습 Milestone 을 짜라 (Currier Path)
 자신있는 분야, 흥미있는 분야부터 공략해라
 돈 되는 것, 남이 원하는 것만 하게되면 언젠가 후회한다.
 쉬운 것부터 해라
 폼생폼사가 아니다.
 첨부터 잘하는 놈 없다.
 눈에 보이는 것부터 해라 - 남들에게 Feedback 을 쉽게 받을 수 있는 것
을 해라
 최종적으로는?
 자신이 오래 할 수 있는 것을 해라
 성과가 높은 것?
 자동화가 가능한 것?
 항상 새로운 것?
9
학습전략
10
개발방법론 CBD (UML) Waterfall Agile
Language Java (OOP) Python C/C++
Scala
(Functional)
Frontend HTML /
JavaScript
jQuery
Responsible
Web
JavaScript
Framework
NodeJS
Backend 자료구조 WAS
멀티스레딩
비동기
분산 서버
DATA RDBMS NoSQL Hadoop Spark
Machine
Learning
Infra OS / Linux
Build
Automation
Docker AWS (Cloud)
11
KEST 개발자
Backend
이론
자료구조
디자인패턴
Framework
Spring
Framework
Spring MVC
Spring Data
Spring Batch
Spring
Integration
비동기
Java NIO
Concurrency
Parallel
Programming
분산환경
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
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
12
책 읽기 방법
 좋은 책을 선택해라
 다독보다 양서를 읽어라
 변화가 심한 분야는 차라리 Blog Article 을 읽어라
 Head First 류는 서점에서 간단히 읽어라 (돈이 아깝다)
 추천도서를 우선순위에 둬라 (서평도 꼭 봐라)
 되도록 영문원서를 읽을 수 있도록 해라 (SW 정보 변화를 생각해
라)
 같은 책을 두번 이상 읽어라
 끝까지 읽어라
 처음에는 전체 구조 파악을 목표로 하라 (목차, 전체 내용 파악)
 두번째는 정독하기 (예제는 실행해보기)
 요즘은 예제도 github에 올라온다 (이런 책이 좋은 개발자가 쓴 책이다)
 세번째부터는 모르는 부분, 즉시 적용해야 하는 부분
13
Program Language 학습방법
14
Programming Language 학습방법
 자신에게 맞는 개발 환경을 구축해라
 좋은 IDE (VS.NET, IntelliJ IDEA), 코딩용 폰트
 언어의 Eco Environments 를 적극 활용하라
 빌드 툴 (Maven, Gradle) 을 먼저 익혀라 (Ant 는 잊어라)
 개발 프로세스를 먼저 익혀라
 소스 관리 툴 (GIT) 을 익혀라
 TDD 로 코딩하라
 예제도 TDD 로 하라
 실제 코딩 전에 테스트 코드로 검증하라
 운영 OS 에 대한 기본 지식은 필수이다
 프로그램이 구동되는 환경이다
 되도록 운영 환경과 같은 환경에서 개발해라
15
16
Dependency Diagram
Class Diagram
좋은 개발팀원
17
좋은 팀원이 되려면
 문제를 숨기지 마라
 지뢰를 심어놓으면, 나중에 다른 사람이 다친다
 문제를 빨리 파악하는 능력을 키워야 한다 (TDD)
 남의 문제에 대한 지적질도 매우 중요하다 (대안도 같이 제시)
 꼼수는 필요하지만, 나중에 꼭 개선해야 한다 (Refactoring)
 논쟁은 필수, 항상 Why 를 생각하라
 누가 시켰어요 … (전 생각이 없어요)
 지식은 나누면 더 크게 돌아온다
 팀원의 경험과 Idea는 나눠야 팀의 역량이 강화된다
 Communication Tool 을 적극 활용하라
 개발자는 문제 해결사이다
 문제 파악 / 문제 해결 경험을 많이 가져라 (직관도 높아진다)
 협업 툴을 적극 활용하라
 GIT, Wiki, Jira, Build Automation 등을 사용 못하면 팀에서 제외될 수 있다
18
Communication Tools
19
Evernote
kifi
Slack
좋은 프로그래머가 되려면
 소프트웨어 개발 방법론을 공부해라
 CBD, DDD, TDD, Agile …
 알고리즘을 배워라
 자료구조는 기본이다
 알고리즘은 작동여부 뿐 아니라 성능도 중요하다
 H/W 를 알아야 한다
 OS 의 기본 특성을 잘 알아야 한다 – OS 설정은 매우 중요하다
 관심 분야의 Community 활동을 해라
 회사 내부에 전문가가 없다하더라도 국내외에는 상당히 많다
 영어를 못하더라도 상관없다. 외국애들 참 친절하다.
 두가지 이상의 언어를 사용해야 한다 (Polyglat)
20
Programming Languages
21
Best Language for me
좋은 코더가 되려면 1
 내가 짠 코드는 내가 책임진다
 코드가 작동되는 것을 책임진다 (증명한다)
 의사코드(Pseudo code) 와 주석은 꼭 작성한다.
 Logging Frameworks 을 잘 사용해야 한다
 Log 만 보고도 시스템의 활동을 알 수 있어야 한다
 Printf 가 아니다 ㅠ.ㅠ
 읽기 쉬운 코드 (Readable Code) (참고)
 코드는 간결하게, 중복 제거
 Format 은 보기 좋게
 변수는 의미있게 (한글이 아닌 영어 단어로 – JuminNo 
CitizenNo)
 함수명도 의미있게 (전치사를 잘 쓰면 좋다 – With, Of, By, On 등)
22
23
/**
* 예보 발표 시각과 예보 시각에 해당하는 값을 조회한다. 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
24
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
@Setter
public 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
Readable Code Books
25
좋은 코더가 되려면 2
 남의 좋은 코드를 참고하라
 유명한 라이브러리의 소스를 자주 읽어라
 사용하는 라이브러리의 소스를 자주 읽어라
 좋은 코드 작성 능력은 하늘에서 떨어지는 게 아니다
 좋은 소설도 초안이 여러 개이다
 Refactoring 을 습관화하라 (변수명 개선, 구조 개선 등등)
 디자인 패턴을 익히고 적용하라
 디자인 패턴은 코딩 Best Practices
 좋은 라이브러리를 사용해라
 좋은 라이브러리를 채택하는 능력이 중요
 검증된 라이브러리를 잘 사용하는 것이 능력이다
26

More Related Content

좋은 개발자 되기

  • 1. 좋은 개발자 되기 개발역량강화 세미나 KESTI 2016-01-08
  • 2. 목차  좋은 개발자란?  어떻게 공부할 것인가?  Programming Language 습득 방법  좋은 개발팀원이란?  좋은 코더란?  전문분야 찾기 2
  • 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 4
  • 5. 좋은 개발자란?  좋은 제품을 만드는 사람  사용성  안정성 (예외처리)  성능  유지보수성  납기 준수, 매뉴얼  논리적 사고, 자기계발  게으름  자동화, 관심  자기주도, 3D  끈기  참고 : 좋은 프로그래머 되기 5
  • 6. 좋은 개발자란? 6 SI • 적기 납품 • Domain 지식 (요구사항 충족) • 유지보수성 Solution • 범용성 (다양한 Needs를 일반화) • 안정성 / 성능 • 자동화 / 매뉴얼 • 호환성 Embedded • 안정성 • 성능 • 호환성 SM •현업과의 소통 •Domain 지식 / 코드 이해력 •시스템 운영 능력 분야별
  • 9. 학습 전략을 짜라  분야별로 10년 학습 Milestone 을 짜라 (Currier Path)  자신있는 분야, 흥미있는 분야부터 공략해라  돈 되는 것, 남이 원하는 것만 하게되면 언젠가 후회한다.  쉬운 것부터 해라  폼생폼사가 아니다.  첨부터 잘하는 놈 없다.  눈에 보이는 것부터 해라 - 남들에게 Feedback 을 쉽게 받을 수 있는 것 을 해라  최종적으로는?  자신이 오래 할 수 있는 것을 해라  성과가 높은 것?  자동화가 가능한 것?  항상 새로운 것? 9
  • 10. 학습전략 10 개발방법론 CBD (UML) Waterfall Agile Language Java (OOP) Python C/C++ Scala (Functional) Frontend HTML / JavaScript jQuery Responsible Web JavaScript Framework NodeJS Backend 자료구조 WAS 멀티스레딩 비동기 분산 서버 DATA RDBMS NoSQL Hadoop Spark Machine Learning Infra OS / Linux Build Automation Docker AWS (Cloud)
  • 11. 11 KEST 개발자 Backend 이론 자료구조 디자인패턴 Framework Spring Framework Spring MVC Spring Data Spring Batch Spring Integration 비동기 Java NIO Concurrency Parallel Programming 분산환경 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
  • 13. 책 읽기 방법  좋은 책을 선택해라  다독보다 양서를 읽어라  변화가 심한 분야는 차라리 Blog Article 을 읽어라  Head First 류는 서점에서 간단히 읽어라 (돈이 아깝다)  추천도서를 우선순위에 둬라 (서평도 꼭 봐라)  되도록 영문원서를 읽을 수 있도록 해라 (SW 정보 변화를 생각해 라)  같은 책을 두번 이상 읽어라  끝까지 읽어라  처음에는 전체 구조 파악을 목표로 하라 (목차, 전체 내용 파악)  두번째는 정독하기 (예제는 실행해보기)  요즘은 예제도 github에 올라온다 (이런 책이 좋은 개발자가 쓴 책이다)  세번째부터는 모르는 부분, 즉시 적용해야 하는 부분 13
  • 15. Programming Language 학습방법  자신에게 맞는 개발 환경을 구축해라  좋은 IDE (VS.NET, IntelliJ IDEA), 코딩용 폰트  언어의 Eco Environments 를 적극 활용하라  빌드 툴 (Maven, Gradle) 을 먼저 익혀라 (Ant 는 잊어라)  개발 프로세스를 먼저 익혀라  소스 관리 툴 (GIT) 을 익혀라  TDD 로 코딩하라  예제도 TDD 로 하라  실제 코딩 전에 테스트 코드로 검증하라  운영 OS 에 대한 기본 지식은 필수이다  프로그램이 구동되는 환경이다  되도록 운영 환경과 같은 환경에서 개발해라 15
  • 18. 좋은 팀원이 되려면  문제를 숨기지 마라  지뢰를 심어놓으면, 나중에 다른 사람이 다친다  문제를 빨리 파악하는 능력을 키워야 한다 (TDD)  남의 문제에 대한 지적질도 매우 중요하다 (대안도 같이 제시)  꼼수는 필요하지만, 나중에 꼭 개선해야 한다 (Refactoring)  논쟁은 필수, 항상 Why 를 생각하라  누가 시켰어요 … (전 생각이 없어요)  지식은 나누면 더 크게 돌아온다  팀원의 경험과 Idea는 나눠야 팀의 역량이 강화된다  Communication Tool 을 적극 활용하라  개발자는 문제 해결사이다  문제 파악 / 문제 해결 경험을 많이 가져라 (직관도 높아진다)  협업 툴을 적극 활용하라  GIT, Wiki, Jira, Build Automation 등을 사용 못하면 팀에서 제외될 수 있다 18
  • 20. 좋은 프로그래머가 되려면  소프트웨어 개발 방법론을 공부해라  CBD, DDD, TDD, Agile …  알고리즘을 배워라  자료구조는 기본이다  알고리즘은 작동여부 뿐 아니라 성능도 중요하다  H/W 를 알아야 한다  OS 의 기본 특성을 잘 알아야 한다 – OS 설정은 매우 중요하다  관심 분야의 Community 활동을 해라  회사 내부에 전문가가 없다하더라도 국내외에는 상당히 많다  영어를 못하더라도 상관없다. 외국애들 참 친절하다.  두가지 이상의 언어를 사용해야 한다 (Polyglat) 20
  • 22. 좋은 코더가 되려면 1  내가 짠 코드는 내가 책임진다  코드가 작동되는 것을 책임진다 (증명한다)  의사코드(Pseudo code) 와 주석은 꼭 작성한다.  Logging Frameworks 을 잘 사용해야 한다  Log 만 보고도 시스템의 활동을 알 수 있어야 한다  Printf 가 아니다 ㅠ.ㅠ  읽기 쉬운 코드 (Readable Code) (참고)  코드는 간결하게, 중복 제거  Format 은 보기 좋게  변수는 의미있게 (한글이 아닌 영어 단어로 – JuminNo  CitizenNo)  함수명도 의미있게 (전치사를 잘 쓰면 좋다 – With, Of, By, On 등) 22
  • 23. 23 /** * 예보 발표 시각과 예보 시각에 해당하는 값을 조회한다. 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
  • 24. 24 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 @Setter public 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
  • 26. 좋은 코더가 되려면 2  남의 좋은 코드를 참고하라  유명한 라이브러리의 소스를 자주 읽어라  사용하는 라이브러리의 소스를 자주 읽어라  좋은 코드 작성 능력은 하늘에서 떨어지는 게 아니다  좋은 소설도 초안이 여러 개이다  Refactoring 을 습관화하라 (변수명 개선, 구조 개선 등등)  디자인 패턴을 익히고 적용하라  디자인 패턴은 코딩 Best Practices  좋은 라이브러리를 사용해라  좋은 라이브러리를 채택하는 능력이 중요  검증된 라이브러리를 잘 사용하는 것이 능력이다 26

Editor's Notes

  1. 프로그래밍 언어 중 Java 는 굉장히 쉬운 언어이다. 다만, 같은 의미의 코드 작성 시 장황해지기 쉽다. Lombok Project 의 Annotation 을 활용하면, 코드를 간결하게 작성할 수 있다