티스토리 뷰

프로그래밍에서 중요한 것은??

  • 사용자의 요구사항에 대한 정확한 이해
  • 요구사항을 구현하기 위해 적합한 플랫폼과 환경에 대한 깊은 이해
  • 사용하는 도구의 기능에 대한 높은 숙련도

 

  • 문제를 해결하는 것이 목적이기에 입력과 출력, 처리 과정에 대한 개념을 머릿속에 빨리 그려낼 수 있는 감각
  • 프로그래머는 주어진 문제를 해결하는 사람이다
  • 중간의 전략을 뽑아내는 과정에서 제약 조건을 확인하고 제한된 리소스를 어떻게 조합하고 활용할지 판단해야 한다

 

  • 공학적 사고하기, 발산과 수렴
  • 도전정신, 끈기, 창의성
  • 끈기 - 끝까지 살아남는 사람이 잘 하는것이다

 

구체적인 목표 수립하기

목표  
측정지표  
목표일정  
키 리절트
구분 내용 비고
기본    
액션 아이템














 

측정 지표

  • 정량적 측정 지표
    • 학습한 서적 페이지 수, 권수 시간
    • 직접 작성해본 프로그램 수
    • 일일 생산 코드량
    • 풀어본 코드 연습 문제 레벨 및 수량
  • 정성적 측정 지표
    • 데이터 분석 라이브러리 사용에 대한 자신감
    • 파이썬 사용에 대한 자신감
    • 작성해본 프로그램에 대해 설명해 볼 수 있는 자신감

 

인출 작업이 중요하다

  1. 새로 배운 것을 인출 연습 : 퀴즈 등
  2. 시간 간격을 둔 인출 연습 : 다시 풀기, 펫 프로젝트 만든것 다시 만들어보기
  3. 다양한 문제의 유형을 섞어서 공부하기 :
  4. 새로운 지식을 기존 지식과 연결하는 정교화 : 프레임워크를 먼저 짜고 알고리즘과 프로토콜 등 배우기
  5. 나름대로 문제를 표현하고 표현하는 생성 : 문제 답을 보기 전에 미리 풀어보는 시도를 하는 것, 가설을 세우고 실행해본다
  6. 배운 것을 검토하고 스스로 질문해보는 반추 : 어떤 부분이 잘 되었나? 잘 안되었나? 능숙해지려면 무엇을 배워야 하나?  - 리팩토링 ( 코드의 동작이나 의도는 유지하면서 코드의 구조, 재사용성, 가독성을 개선해 코드의 악취를 개선하고 전체 디자인을 개선하는 방법)
  7. 기억을 붙잡아두는 정신적 도구, 기억술
  8. 무엇을 알고 무엇을 모르는지 알아보는 측정 : Mooc , Udacity, Coursera 활용 / 학습한 내용을 정리하고 발표

 


맛보기 단계 극복하기

:  기초 개념 순차, 반복, 조건문을 배운다

  • 무언가 만들어보는 경험을 한 후 이론적인 개념을 학습하는 것을 반복한다

 

당황하는 단계 극복하기

  • 대부분 이 단계에서 포기
  • 좌절감은 사람으로 극복한다, 함께 학습할 동료와 멘토를 찾는다
  • 작고 다양한 요구사항을 가지는 프로그램을 구현해보며 문제상황을 겪고, 해결해 보는 경험을 한다

 

절망하는 단계 극복하기

  • 알아야 할 지식이 폭발, 더 포기, 현실에 안주
  • 가장 중요한 것은 목표를 설정하고 목표에 집중하는 것
  • 자신감이 바닥을 친다, 흥미가 가장 떨어지는 시점
  • 다른 언어, 다른 직무에 관심이 간다, 옮겨다니며 수박 겉핥기가 된다
  • 새로운 분야로 바꾸기보다는 도전하기로 마음먹은 분야에 집중한다
  • 너무 많은 것 보다는 한 가지라도 제대로 학습하는 것을 목표로 설정하고 집중한다
  • 필자는 기간상, (알고리즘, 네트워크 운영체제) 기초지식 학습은하고 (프로그래밍, 객체지향설계, 테스트, 리팩토링, 프레임워크)를 중점으로 해서 취업함
  • 현재 자신이 관심 있는 분야와 지식이 무엇인지를 찾아 결정한 후 주변을 의식하지 말고 묵묵히 걸어가라
  • [코딩을 지탱하는 기술] - 니시오 히로카즈
    • 필요한 부분부터 학습한다
    • 대략적인 부분을 잡아 조금씩 상세화한다
    • 끝에서부터 차례대로 베껴간다 -25분간 어디까지 베끼나

 

회복하는 단계 극복하기

  • 객체 설계, 데이터 설계, 아키텍쳐, 모범 사례
  • 피드백이 중요!! 멘토 또는 동료와 코드리뷰
  • 무엇을 아느냐가 아니라 '무엇을 할 수 있느냐' 가 중요하다

소트웍스 앤솔러지 - 객체지향 생활체조 9가지 원칙

 

  • 1단계: 메소드(함수) 분리연습
    • 한 메소드에 오직 한 단계의 들여쓰기만 한다.
    • else 예약어를 쓰지 않는다
    • 한 메소드의 라인 수는 10라인을 넘지 않는다
  • 객체를 분리하는 연습
    • 모든 원시값과 문자열을 포장한다
    • 모든 엔티티를 작게 유지한다
    • 3개 이상의 인스턴스 변수를 가진 클래스를 만들지 않는다
    • 일급 콜렉션을 쓴다
  • 깔끔한 코드 구현 연습
    • 한 줄에 점을 하나만 찍는다
    • 줄여쓰지 않는다(축약 금지)
    • 게터/세터/프로퍼티를 쓰지 않는다

애자일 개발 방법론 - XP 익스트림 프로그래밍

3가지 중요 요소

  • 가치 : 커뮤니케이션, 존중, 용기, 피드백, 단순성
  • 원칙
  • 실천방안
    • 테스트 주도 개발 : 만들고자 하는 기능을 위한 테스트를 우선 만들고, 이를 통과하는 프로그램을 만든다. 유닛 테스트 프로그램을 작성하고 만든다
    • 리팩토링 : 성능 향상
    • 단순한 설계 : 누가봐도 이해해야 실력있는 코드
    • 페어 프로그래밍

의도적 수련이 중요하다

  • 알고리즘 기반의 코딩 훈련 : CodeKata 

코딩은 편지다

  • 코드는 컴퓨터에게 쓰는 편지다
  • 코딩, 결국 사람들과의 소통이다
  • 퇴고하듯 테스팅하고 디버깅한다
  • 주석으로 미리 골조를 잡아본다

// 1부터 100까지 합을 구하는 계산기를 선언한다.

public class Computer{

 

// 1부터 100까지 합을 구하는 계산기를 실행하는 구역을 선언한다.

public static void main(String[]args){

 

// 1부터 100까지 정수값을 순차적으로 값을 저장할 수 있는 변수,

// sum을 하나 선언한다.

// 아직 합을 구하지 않았으나 0을 초기 값으로 설정한다.

int sum = 0;

 

// 1부터 100까지 반복적으로 sum 값을 축적시킨다.

sum = sum + i;

 

// 계산된 값을 화면에 출력한다.

System.out.printIn(sum);

 

  • 주석으로 학습의 코딩의 기억을 기록한다

 

코딩의 시작 : 다른 사람이 작성한 코드 번역하기

  • 해당 언어의 기본적인 어휘와 문법을 배우면, 간단한 소스코드 예제를 찾아 번역하는 훈련을 해보자

 

코딩스타일

  • 운문식이던 산문식이던, 글쓰기를 잘 하는 사람이 코드도 잘 짠다.

 

다작과 다독은 코딩의 왕도

  • 미괄식 개발자(예제 기반 학습)와 두괄식 프로그래머 (문제 기반 학습)
  • 다독
    • 양질의 코딩 정보 검색과 영어활용 능력
    • 예제 기반 학습
    • API 문서 열공하기
  • 다작
    • 작성한 코드 공개하기
    • 내가 만든 프로그램 배포하고 광고하기

덜 헤매는 법

  • 글 개요를 잡듯, 소스코드 작성시 프로그램 전체 윤곽 잡기
  • UML, 순서도 등 다양한 다이어그램 통해 데이터와 논리의 흐름을 표현
  • 순서는 논리적 순서대로 명령의 앞뒤 순서대로 작성
  • 산발적으로 하면 수정과 에러 발생, 예제 코드를 보며 한줄 한줄 작성하며, 하나의 에러 발생시 그 에러 내용을 충분히 이해한 후 해결한다.
  • 에러가 없는 코드를 만든 후, 그 다음 줄을 작성하는 방식으로 차근차근 작성한다.!!!
  • 깃헙으로 공개, 잔디심기, 배포하기

 

UML 구조 다이어그램과 액티비티 다이어그램 그리기

 

어떻게 공부할 것인가

  1. 시나리오를 짠다 - 동기유발, 시나리오 상황 가정하고 문제해결 도구로 만들기
  2. 설계에 공들이기 - 코드 작성 전, 최종적으로 완성할 프로그램의 입출력 모습과 단계별 내부 프로세스, 사용자와의 상호작용 부분을 미리 그린다. UML 표준 다이어그램을 이용하여 생각을 명료하고 간결하게 정리한다. 프로그램 요구사항 읽고 바로 옮기는 것에 아니라, 설계도면과 같은 시퀀스 다이어그램, 클래스 다이어그램 등을 그린다. 그렇지 않으면 스파게티 코드가 되어 유지보수가 어렵다.
  3. 액티비티 , 클래스, 객체 다이어그램 등도 연습한다.

 

설계시 고려할 4가지

  1. 입력 데이터 : 이 프로그램 구동 위해 필요한 데이터는 무엇인가, 어떻게 확보하나, 어디에 저장하나, 어떻게 받아오나 - 데이터 입출력은 별도 클래스로 관리
  2. 프로그램 작동 시퀀스 설계 : 프로그램 내부의 절차적 실행 알고리즘 , 받아온 데이터를 이용하여 수학적 연산 혹은 텍스트 연산을 수행하여 가공된 결과물을 만들어내는 전 과정을 순서대로 적어본다.
  3. 외부시스템 혹은 사용자와 상호작용 부분에 대한 정의 ; 외부 이벤트 등 계획된 이벤트와 예측하지 못한 예외사항을 구분하여 각각 대응 설계
  4. 출력 형태 설정 : 출력데이터 쓸건지, 팝업창 띄울건지, 음성출력 할건지 디자인적 디테일도 고려

 

에러가 나는 코드 분석하기

  • 형 변환 type conversion 오류
  • array 의 index 참조 오류 등
  • 왜 문제이며, 어디서 에러가 발생하며, 개선 방법은 무엇인지, 동일 기능을 수행하는 다른 방법은 어떤 것이 있는지 공부한다
  • 핵심 기능과 부가적 기능이 어떻게 데이터를 상호주고받는지 분리해낸다
  • 평소 소스코드에 꼼꼼하게 코멘트를 단다

 

하드웨어 구조 익히기

  • 소프트웨어 알고리즘 최적화를 위해
  • ex. 함수의 매개변수 전달에서 값에 의한 전달(call by value)와 참조에 의한 전달(call by reference)를 구분 -> 변수라는 것이 메모리의 어떤 영역을 주소값 대신 프로그래머가 정한 이름으로 참조할 수 있도록 정의된 개념임을 이해
  • ex. CPU가 메모리에 있는 데이터에 접근하는 것에 비해 하드디스크에 저장된 내용을 읽어오는 것이 느리기 때문에, 파일 I/O를 최소화해야함을 이해

 

 

기타

  • 문법 외 외부 라이브러리와 api 적극 활용
  • 좋은 툴 쓰기 - 파이썬이면 idle 보단 주피터노트북이나 파이참 사용

'ETC' 카테고리의 다른 글

SaaS vs PaaS vs IaaS vs AIaaS  (0) 2021.10.11
파이썬이 스타트업에게 인기 있는 이유 7가지  (0) 2021.07.07
SSAFY 6기 서울 합격후기  (2) 2021.07.01
SSAFY 6기 SW적성진단 / 인터뷰 후기  (0) 2021.06.19
MVC FRAMEWORK  (0) 2021.06.16
댓글