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