SlideShare a Scribd company logo
초보 프로그래머의 길
(Programming Beginner)
조용희(Yong Heui Cho) @ Mokwon University
프로그래밍이란 기술? 문화?
2
Coding skill
 Framework architecting
프로그래밍이란 기술? 문화?
3
 Coding skill
Framework architecting
좋은 프로그래머의 조건
4 ←grandespymes.com.ar
PICASSO를 기억하라.
5
PICASSO 요소
 Picture: 그리기
 Interface: 관계짓기
 Consume: 소비하기
 Abstract: 추상화
 Save: 저장하기
 Share: 공유하기
 Objectify: 객체화
6
Picture: 그리기
 결과물을 먼저 그린 후 Code를 작성하라.
 단순 Coding부터 시작하지 말라.
 머리속 개념을 끄집어내 직접 손으로 그려라.
 Software Engineering을 맛보라.
7
void main(void)
{
int nSum = 0;
for (int i = 0; i < 100; i++)
nSum += 0;
printf(“%d”, nSum);
}
초보자 Coding
시각화/개념화
Main
Sum
loop (for, while)
Output
* operation
 Framework 을 만 들 어 Class/ 함 수 간 의
Interface를 만든 후 세부 Coding을 시작하라.
 전체 구조의 설계도를 먼저 만들라.
 Class/함수의 입출력을 정확히 정하라.
 상세 설계도는 나중에 협업을 통해 채울 수 있다.
int sum(int nMax) { return 0; }
void output(int nSum) {}
void main(void)
{
int nMax = 100;
int nSum = sum(nMax);
output(nSum);
}
Interface: 관계짓기
8
void main(void)
{
int nSum = 0;
for (int i = 0; i < 100; i++)
nSum += 0;
printf(“%d”, nSum);
}
Interface
초보자 Coding
 Class/함수를 과도할 정도로 적극 소비하라.
 main() 안에 모든 세부 Code를 넣지 말자.
 절차적으로 분해할 수 있는 부분을 찾아 Class/함
수로 만들자. 공통되는 부분이 저절로 찾아진다.
 함수가 너무 많아지면 Class로 만들자.
int sum(int nMax) { return 0; }
void output(int nSum) {}
void main(void)
{
int nMax = 100;
int nSum = sum(nMax);
output(nSum);
}
Consume: 소비하기
9
함수 과소비
void main(void)
{
int nSum = 0;
for (int i = 0; i < 100; i++)
nSum += 0;
printf(“%d”, nSum);
}
초보자 Coding
 Class, 함수, 변수, 상수 이름은 해당 내용이
잘 드러나도록 추상화하라.
 누구든 이름만 보면 전체 작용을 이해할 수 있도
록 작명해야 한다.
 숫자도 상수 등을 이용해 반드시 이름을 붙이자.
int sum(int a) { return 0; }
void output(int a) {}
void main(void)
{
int a = 100;
int b = sum(a);
output(b);
}
#define MAX_SUM 100
int sum(int nMax) { return 0; }
void output(int nSum) {}
void main(void)
{
int nMax = MAX_SUM;
int nSum = sum(nMax);
output(nSum);
}
Abstract: 추상화
10 추상화
초보자 Coding
 공통적으로 사용하는 Class/함수를 저장해서
계속 재활용하라.
 프로그래머의 자산은 재활용할 수 있는 Code다.
 나만의 Code 포트폴리오를 만들자.
 개처럼 벌어(저장해) 정승처럼 쓰자.
#include <MyLib.h>
#define MAX_SUM 100
void main(void)
{
int nMax = MAX_SUM;
int nSum = sum(nMax);
output(nSum);
}
Save: 저장하기
11
저장하기
초보자 Coding
void main(void)
{
int nSum = 0;
for (int i = 0; i < 100; i++)
nSum += 0;
printf(“%d”, nSum);
}
 검증된 Class/함수는 활발하게 공유하고 협
업하라.
 나만 아는 Code는 더 이상 중요하지 않다. 함께
공유하며 발전시켜야 한다.
 Open Source 활동은 나의 핵심 이력이다.
Share: 공유하기
12
공유하기
나만의 Coding
#include <MyLib.h>
#define MAX_SUM 100
void main(void)
{
int nMax = MAX_SUM;
int nSum = sum(nMax);
output(nSum);
}
 객체 지향을 적극 사용하여, 작성한 Code가
Framework 수준이 되도록 하라.
 함수 집합을 체계적으로 구성하여 Class로 만든다.
 Class 상속까지 고려하여 부모/자식을 만든다.
 객체가 모든 실행을 전적으로 담당해야 객체 지향!
class MyMath {
int sum(void) { return 0; }
void output(void) const {}
};
void main(void) {
MyMath math;
math.sum();
math.output()
}
Objectify: 객체화
13 객체 지향 Coding순차 Coding
#define MAX_SUM 100
int sum(int nMax) { return 0; }
void output(int nSum) {}
void main(void)
{
int nMax = MAX_SUM;
int nSum = sum(nMax);
output(nSum);
}
초급/중급/고급 프로그래머
 초급 프로그래머(학습)
 프로그래밍 언어 문법을 확실히 이해한다.
 시간만 있으면 어떤 문제든 프로그래밍한다.
 중급 프로그래머(개인)
 일을 할수록 Code 포트폴리오가 계속 쌓인다.
 나만의 유용한 Framework을 가지고 있다.
 고급 프로그래머(협업)
 Framework이 시간/공간적으로 지속 가능하다.
 여러 사람에게 Code 업무를 분담시킬 수 있다.
14
좋은 SW 회사
 Version Control System
 프로그래머의 선의를 믿지 않는다.
 매일 SW 실행 결과를 확인한다.
 Issue Tracking System
 Issue를 모두 공유하고 계속 추적한다.
 SW에 대한 권한/책임이 분명하다.
 Code Review
 남이 봐서도 이해하기 쉬운 Code를 만든다.
 실행 결과가 같아도 보기 어려우면 다시 짠다.
15
초보 프로그래머

More Related Content

What's hot

데브루키 170916 알쓸신잡 CPU 이야기
데브루키 170916 알쓸신잡 CPU 이야기데브루키 170916 알쓸신잡 CPU 이야기
데브루키 170916 알쓸신잡 CPU 이야기
Gi-Yeon Nam
 
Iocp advanced
Iocp advancedIocp advanced
Iocp advanced
Nam Hyeonuk
 
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
GangSeok Lee
 
[아꿈사/110514] 멀티코어cpu이야기 시작발표
[아꿈사/110514] 멀티코어cpu이야기 시작발표[아꿈사/110514] 멀티코어cpu이야기 시작발표
[아꿈사/110514] 멀티코어cpu이야기 시작발표sung ki choi
 
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기Kiheon Park
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea Strike
 
Introduction to Parallel Programming
Introduction to Parallel ProgrammingIntroduction to Parallel Programming
Introduction to Parallel Programming
UNIST
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
Seungmo Koo
 
병렬 프로그래밍2
병렬 프로그래밍2병렬 프로그래밍2
병렬 프로그래밍2
준혁 이
 
프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장
프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장
프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장SukYun Yoon
 
게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv
Seungmo Koo
 
Arduino Coding
Arduino CodingArduino Coding
Arduino Coding
영욱 김
 
TestBCD2017-2(answer)
TestBCD2017-2(answer)TestBCD2017-2(answer)
TestBCD2017-2(answer)
Yong Heui Cho
 
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
Seunghwa Song
 

What's hot (14)

데브루키 170916 알쓸신잡 CPU 이야기
데브루키 170916 알쓸신잡 CPU 이야기데브루키 170916 알쓸신잡 CPU 이야기
데브루키 170916 알쓸신잡 CPU 이야기
 
Iocp advanced
Iocp advancedIocp advanced
Iocp advanced
 
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
 
[아꿈사/110514] 멀티코어cpu이야기 시작발표
[아꿈사/110514] 멀티코어cpu이야기 시작발표[아꿈사/110514] 멀티코어cpu이야기 시작발표
[아꿈사/110514] 멀티코어cpu이야기 시작발표
 
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_Architecture
 
Introduction to Parallel Programming
Introduction to Parallel ProgrammingIntroduction to Parallel Programming
Introduction to Parallel Programming
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
 
병렬 프로그래밍2
병렬 프로그래밍2병렬 프로그래밍2
병렬 프로그래밍2
 
프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장
프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장
프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장
 
게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv
 
Arduino Coding
Arduino CodingArduino Coding
Arduino Coding
 
TestBCD2017-2(answer)
TestBCD2017-2(answer)TestBCD2017-2(answer)
TestBCD2017-2(answer)
 
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
 

Similar to 초보 프로그래머

HI-ARC PS 101
HI-ARC PS 101HI-ARC PS 101
HI-ARC PS 101
Jae-yeol Lee
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
흥배 최
 
3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약
Tae wook kang
 
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
iamprogrammerofficial
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택
JinTaek Seo
 
Api design for c++ 6장
Api design for c++ 6장Api design for c++ 6장
Api design for c++ 6장Ji Hun Kim
 
[Osxdev]4.swift
[Osxdev]4.swift[Osxdev]4.swift
[Osxdev]4.swift
NAVER D2
 
Object C - RIP
Object C - RIPObject C - RIP
Object C - RIP
Dong Heon Cho
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
Ryan Park
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
유익아카데미
 
KTH_Detail day_화성에서 온 개발자 금성에서 온 기획자 시리즈_6차_아이폰앱만들기_최명진&안두경_20120704
KTH_Detail day_화성에서 온 개발자 금성에서 온 기획자 시리즈_6차_아이폰앱만들기_최명진&안두경_20120704KTH_Detail day_화성에서 온 개발자 금성에서 온 기획자 시리즈_6차_아이폰앱만들기_최명진&안두경_20120704
KTH_Detail day_화성에서 온 개발자 금성에서 온 기획자 시리즈_6차_아이폰앱만들기_최명진&안두경_20120704KTH, 케이티하이텔
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
Jaeseung Ha
 
Ai C#세미나
Ai C#세미나Ai C#세미나
Ai C#세미나
Astin Choi
 
TDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringTDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: Refactoring
Suwon Chae
 
이산수학 C1 프로젝트 7
이산수학 C1 프로젝트 7이산수학 C1 프로젝트 7
이산수학 C1 프로젝트 7pkok15
 
Node.js intro
Node.js introNode.js intro
Node.js intro
Chul Ju Hong
 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 release
Jaehyeuk Oh
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니
Lusain Kim
 

Similar to 초보 프로그래머 (20)

HI-ARC PS 101
HI-ARC PS 101HI-ARC PS 101
HI-ARC PS 101
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
 
3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약
 
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택
 
Api design for c++ 6장
Api design for c++ 6장Api design for c++ 6장
Api design for c++ 6장
 
[Osxdev]4.swift
[Osxdev]4.swift[Osxdev]4.swift
[Osxdev]4.swift
 
Object C - RIP
Object C - RIPObject C - RIP
Object C - RIP
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
 
KTH_Detail day_화성에서 온 개발자 금성에서 온 기획자 시리즈_6차_아이폰앱만들기_최명진&안두경_20120704
KTH_Detail day_화성에서 온 개발자 금성에서 온 기획자 시리즈_6차_아이폰앱만들기_최명진&안두경_20120704KTH_Detail day_화성에서 온 개발자 금성에서 온 기획자 시리즈_6차_아이폰앱만들기_최명진&안두경_20120704
KTH_Detail day_화성에서 온 개발자 금성에서 온 기획자 시리즈_6차_아이폰앱만들기_최명진&안두경_20120704
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
Ai C#세미나
Ai C#세미나Ai C#세미나
Ai C#세미나
 
TDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringTDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: Refactoring
 
이산수학 C1 프로젝트 7
이산수학 C1 프로젝트 7이산수학 C1 프로젝트 7
이산수학 C1 프로젝트 7
 
Node.js intro
Node.js introNode.js intro
Node.js intro
 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 release
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니
 
이산수학07
이산수학07이산수학07
이산수학07
 

More from Yong Heui Cho

Android - Sensor Manager
Android - Sensor ManagerAndroid - Sensor Manager
Android - Sensor Manager
Yong Heui Cho
 
Android - Broadcast Receiver
Android - Broadcast ReceiverAndroid - Broadcast Receiver
Android - Broadcast Receiver
Yong Heui Cho
 
Android - Message
Android - MessageAndroid - Message
Android - Message
Yong Heui Cho
 
Cloud Computing
Cloud ComputingCloud Computing
Cloud Computing
Yong Heui Cho
 
Computing Paradigm
Computing ParadigmComputing Paradigm
Computing Paradigm
Yong Heui Cho
 
TestBCD2018-2(answer)
TestBCD2018-2(answer)TestBCD2018-2(answer)
TestBCD2018-2(answer)
Yong Heui Cho
 
TestSDS2018-2(answer)
TestSDS2018-2(answer)TestSDS2018-2(answer)
TestSDS2018-2(answer)
Yong Heui Cho
 
TestEC2018-2(answer)
TestEC2018-2(answer)TestEC2018-2(answer)
TestEC2018-2(answer)
Yong Heui Cho
 
TestEC2018-1(answer)
TestEC2018-1(answer)TestEC2018-1(answer)
TestEC2018-1(answer)
Yong Heui Cho
 
TestBCD2018-1(answer)
TestBCD2018-1(answer)TestBCD2018-1(answer)
TestBCD2018-1(answer)
Yong Heui Cho
 
TestSDS2018-1(answer)
TestSDS2018-1(answer)TestSDS2018-1(answer)
TestSDS2018-1(answer)
Yong Heui Cho
 
BJT - Analysis of Bias
BJT - Analysis of BiasBJT - Analysis of Bias
BJT - Analysis of Bias
Yong Heui Cho
 
TestCloud2018-2(answer)
TestCloud2018-2(answer)TestCloud2018-2(answer)
TestCloud2018-2(answer)
Yong Heui Cho
 
TestECD2018-1(answer)
TestECD2018-1(answer)TestECD2018-1(answer)
TestECD2018-1(answer)
Yong Heui Cho
 
Test-SDIC2018-2(answer)
Test-SDIC2018-2(answer)Test-SDIC2018-2(answer)
Test-SDIC2018-2(answer)
Yong Heui Cho
 
TestCloud2018-1(answer)
TestCloud2018-1(answer)TestCloud2018-1(answer)
TestCloud2018-1(answer)
Yong Heui Cho
 
Cloud Service Model
Cloud Service ModelCloud Service Model
Cloud Service Model
Yong Heui Cho
 
Test-SDIC2018-1(Answer)
Test-SDIC2018-1(Answer)Test-SDIC2018-1(Answer)
Test-SDIC2018-1(Answer)
Yong Heui Cho
 
RF 증폭기 설계(Design of RF Amplifier)-rev1
RF 증폭기 설계(Design of RF Amplifier)-rev1RF 증폭기 설계(Design of RF Amplifier)-rev1
RF 증폭기 설계(Design of RF Amplifier)-rev1
Yong Heui Cho
 
Computing Paradigm - rev1
Computing Paradigm - rev1Computing Paradigm - rev1
Computing Paradigm - rev1
Yong Heui Cho
 

More from Yong Heui Cho (20)

Android - Sensor Manager
Android - Sensor ManagerAndroid - Sensor Manager
Android - Sensor Manager
 
Android - Broadcast Receiver
Android - Broadcast ReceiverAndroid - Broadcast Receiver
Android - Broadcast Receiver
 
Android - Message
Android - MessageAndroid - Message
Android - Message
 
Cloud Computing
Cloud ComputingCloud Computing
Cloud Computing
 
Computing Paradigm
Computing ParadigmComputing Paradigm
Computing Paradigm
 
TestBCD2018-2(answer)
TestBCD2018-2(answer)TestBCD2018-2(answer)
TestBCD2018-2(answer)
 
TestSDS2018-2(answer)
TestSDS2018-2(answer)TestSDS2018-2(answer)
TestSDS2018-2(answer)
 
TestEC2018-2(answer)
TestEC2018-2(answer)TestEC2018-2(answer)
TestEC2018-2(answer)
 
TestEC2018-1(answer)
TestEC2018-1(answer)TestEC2018-1(answer)
TestEC2018-1(answer)
 
TestBCD2018-1(answer)
TestBCD2018-1(answer)TestBCD2018-1(answer)
TestBCD2018-1(answer)
 
TestSDS2018-1(answer)
TestSDS2018-1(answer)TestSDS2018-1(answer)
TestSDS2018-1(answer)
 
BJT - Analysis of Bias
BJT - Analysis of BiasBJT - Analysis of Bias
BJT - Analysis of Bias
 
TestCloud2018-2(answer)
TestCloud2018-2(answer)TestCloud2018-2(answer)
TestCloud2018-2(answer)
 
TestECD2018-1(answer)
TestECD2018-1(answer)TestECD2018-1(answer)
TestECD2018-1(answer)
 
Test-SDIC2018-2(answer)
Test-SDIC2018-2(answer)Test-SDIC2018-2(answer)
Test-SDIC2018-2(answer)
 
TestCloud2018-1(answer)
TestCloud2018-1(answer)TestCloud2018-1(answer)
TestCloud2018-1(answer)
 
Cloud Service Model
Cloud Service ModelCloud Service Model
Cloud Service Model
 
Test-SDIC2018-1(Answer)
Test-SDIC2018-1(Answer)Test-SDIC2018-1(Answer)
Test-SDIC2018-1(Answer)
 
RF 증폭기 설계(Design of RF Amplifier)-rev1
RF 증폭기 설계(Design of RF Amplifier)-rev1RF 증폭기 설계(Design of RF Amplifier)-rev1
RF 증폭기 설계(Design of RF Amplifier)-rev1
 
Computing Paradigm - rev1
Computing Paradigm - rev1Computing Paradigm - rev1
Computing Paradigm - rev1
 

초보 프로그래머

  • 1. 초보 프로그래머의 길 (Programming Beginner) 조용희(Yong Heui Cho) @ Mokwon University
  • 2. 프로그래밍이란 기술? 문화? 2 Coding skill  Framework architecting
  • 3. 프로그래밍이란 기술? 문화? 3  Coding skill Framework architecting
  • 4. 좋은 프로그래머의 조건 4 ←grandespymes.com.ar
  • 6. PICASSO 요소  Picture: 그리기  Interface: 관계짓기  Consume: 소비하기  Abstract: 추상화  Save: 저장하기  Share: 공유하기  Objectify: 객체화 6
  • 7. Picture: 그리기  결과물을 먼저 그린 후 Code를 작성하라.  단순 Coding부터 시작하지 말라.  머리속 개념을 끄집어내 직접 손으로 그려라.  Software Engineering을 맛보라. 7 void main(void) { int nSum = 0; for (int i = 0; i < 100; i++) nSum += 0; printf(“%d”, nSum); } 초보자 Coding 시각화/개념화 Main Sum loop (for, while) Output * operation
  • 8.  Framework 을 만 들 어 Class/ 함 수 간 의 Interface를 만든 후 세부 Coding을 시작하라.  전체 구조의 설계도를 먼저 만들라.  Class/함수의 입출력을 정확히 정하라.  상세 설계도는 나중에 협업을 통해 채울 수 있다. int sum(int nMax) { return 0; } void output(int nSum) {} void main(void) { int nMax = 100; int nSum = sum(nMax); output(nSum); } Interface: 관계짓기 8 void main(void) { int nSum = 0; for (int i = 0; i < 100; i++) nSum += 0; printf(“%d”, nSum); } Interface 초보자 Coding
  • 9.  Class/함수를 과도할 정도로 적극 소비하라.  main() 안에 모든 세부 Code를 넣지 말자.  절차적으로 분해할 수 있는 부분을 찾아 Class/함 수로 만들자. 공통되는 부분이 저절로 찾아진다.  함수가 너무 많아지면 Class로 만들자. int sum(int nMax) { return 0; } void output(int nSum) {} void main(void) { int nMax = 100; int nSum = sum(nMax); output(nSum); } Consume: 소비하기 9 함수 과소비 void main(void) { int nSum = 0; for (int i = 0; i < 100; i++) nSum += 0; printf(“%d”, nSum); } 초보자 Coding
  • 10.  Class, 함수, 변수, 상수 이름은 해당 내용이 잘 드러나도록 추상화하라.  누구든 이름만 보면 전체 작용을 이해할 수 있도 록 작명해야 한다.  숫자도 상수 등을 이용해 반드시 이름을 붙이자. int sum(int a) { return 0; } void output(int a) {} void main(void) { int a = 100; int b = sum(a); output(b); } #define MAX_SUM 100 int sum(int nMax) { return 0; } void output(int nSum) {} void main(void) { int nMax = MAX_SUM; int nSum = sum(nMax); output(nSum); } Abstract: 추상화 10 추상화 초보자 Coding
  • 11.  공통적으로 사용하는 Class/함수를 저장해서 계속 재활용하라.  프로그래머의 자산은 재활용할 수 있는 Code다.  나만의 Code 포트폴리오를 만들자.  개처럼 벌어(저장해) 정승처럼 쓰자. #include <MyLib.h> #define MAX_SUM 100 void main(void) { int nMax = MAX_SUM; int nSum = sum(nMax); output(nSum); } Save: 저장하기 11 저장하기 초보자 Coding void main(void) { int nSum = 0; for (int i = 0; i < 100; i++) nSum += 0; printf(“%d”, nSum); }
  • 12.  검증된 Class/함수는 활발하게 공유하고 협 업하라.  나만 아는 Code는 더 이상 중요하지 않다. 함께 공유하며 발전시켜야 한다.  Open Source 활동은 나의 핵심 이력이다. Share: 공유하기 12 공유하기 나만의 Coding #include <MyLib.h> #define MAX_SUM 100 void main(void) { int nMax = MAX_SUM; int nSum = sum(nMax); output(nSum); }
  • 13.  객체 지향을 적극 사용하여, 작성한 Code가 Framework 수준이 되도록 하라.  함수 집합을 체계적으로 구성하여 Class로 만든다.  Class 상속까지 고려하여 부모/자식을 만든다.  객체가 모든 실행을 전적으로 담당해야 객체 지향! class MyMath { int sum(void) { return 0; } void output(void) const {} }; void main(void) { MyMath math; math.sum(); math.output() } Objectify: 객체화 13 객체 지향 Coding순차 Coding #define MAX_SUM 100 int sum(int nMax) { return 0; } void output(int nSum) {} void main(void) { int nMax = MAX_SUM; int nSum = sum(nMax); output(nSum); }
  • 14. 초급/중급/고급 프로그래머  초급 프로그래머(학습)  프로그래밍 언어 문법을 확실히 이해한다.  시간만 있으면 어떤 문제든 프로그래밍한다.  중급 프로그래머(개인)  일을 할수록 Code 포트폴리오가 계속 쌓인다.  나만의 유용한 Framework을 가지고 있다.  고급 프로그래머(협업)  Framework이 시간/공간적으로 지속 가능하다.  여러 사람에게 Code 업무를 분담시킬 수 있다. 14
  • 15. 좋은 SW 회사  Version Control System  프로그래머의 선의를 믿지 않는다.  매일 SW 실행 결과를 확인한다.  Issue Tracking System  Issue를 모두 공유하고 계속 추적한다.  SW에 대한 권한/책임이 분명하다.  Code Review  남이 봐서도 이해하기 쉬운 Code를 만든다.  실행 결과가 같아도 보기 어려우면 다시 짠다. 15