성장을 위한 밑 거름

코드위의승부사·2020년 5월 25일
0

eBrain Tech HR conference

성공하는 소프트웨어 엔지니어(박종천)

레쥬메
: 내가 왜 이회사를 오고 싶은지 / 이 회사에 어떤 것을 기여할 수 있는지/왜 나를 뽑아야하는지

면접
: 질문의 답만 해선 안된다.
빨리 배울수 있는지(개인시간 활용, 누굴만나는지, 어떤 책을 보는지)
부지런한가(극단적으로 게으르지 않은지 확인)
착한가(인터뷰를 하면서 말을 바꾸거나, 숨기는게 있는것처럼 보인다면 뽑지 않는다.)
평생에 걸쳐 이루고 싶은 목표와 현재 하는 일이 그 목표에 도움이 되는지
10년을 갈지, 10년 뒤엔 내가 이 회사에 있을지, 10년 뒤에 난 무얼 하고 있을지 고민

중요요소
: 생산성, 안정적, 팀워크, 제네럴/도메인 지식, 코드의 안정성, 클린코드, 시스템 디자인

성장
: 실패가 많을 수록 사람은 항상 한계에 도전하는 걸로 봐야한다.
쉬운 일은 언제든지 시작할 수 있으니 항상 어려운 일을 선택하자.
고생의 총량이 현재의 내 실력
꾸준하게 연습하는 사람

세상은 성공과 성공하지 않은 사람으로 나누는게 아니라, 배우는 사람과 배우지 않는 사람으로 나눈다.

주니어 개발자/시니어 개발자의 차이(김범준)

시니어 개발자가 되는 과정(2년,3년후에 다시 보기)

의도적수련
아는 걸로 빨리 해결해버린다면 학습의 시간 X / 코드리뷰 - 학습시간(적절한 피드백의 중요성)
회사 내에서 수련 방법
기존 코드 완성 > 테스트 코드 작성 > 전수 테스트 코드 작성
나만의 도전과제 만들기
테스트 코드 작성을 넘어 TDD 진행해 보기
60만큼의 힘으로 원래의 퍼포먼스가 나오도록 해보는것

코드가 아닌 가치
동료를 변화시키고 성과로 이어지게 하는 사람

주니어라면 본인의 코드에만 관심을 갖지만, 시니어는 본인이 만든 것의 가치의 관심을 갖는다.

이직의 2가지 동기(여길 떠나고 싶어하는 이유, 바깥에서 날 끌어당기는 이유)

프로그래밍, 어떻게 공부할 것인가(김창준)

야생학습 - 비순차적, 범위의 한정X, 명확한 평가X, 협업

  • 의미있는 프로그램 개발의 목표로
  • 책은 보조수단으로 활용
  • 실제 업무환경과 흡사한 환경으로 해야 의미가 있음
  • 실수 훈련을 통해 응용력 개발

하고있는 일에 대해서 시각적인 근거를 남긴다(기록)
Task를 짧게 짧게 만족도와 현재 상태 파악가능

의도적 수련

의도적 수련이란?
: 잘 정의된 작업, 적절한 난이도, 정보가 풍부한 피드백, 반복과 실수 교정의 기회

SQ3R 방법론
: Survey(훑어보기), Question(질문 정리), Read, Recite(안보고 적어보기), Review(기억한게 맞는지 확인하기)

프로그래밍의 의도적 수련방법
ex)

  • 소스리딩의 경우 클래스나 메소드 우선 분석
  • 공부를 스스로 설계해야한다. 구체적으로 목록을 적고 동사형태가 다양하게 나오도록
  • 어떤 프로그램을 완성하겠다, 어떤 어떤 값도 테스트 해보겠다.
  • 안 짰던 코드를 검토하며 이번주의 패턴을 최소 세 군대 이상 적용해보자(ex.디자인패턴을 써보자)
  • 목표지향보다 행동지향적으로(살 빼자가 아니라 줄넘기 몇 개 하자)
  • 이걸 배워서 뭘 만들어보자(SQ3R)
  • 작게 만든 후 키우기

다른 조언

쉬우면 어렵게 만들어 공부, 어려우면 쉽게 만들어 공부.
오늘 코딩한 것 중에 실수한걸 기록하고 다음엔 안하도록.
결과 피드백보다 과정피드백이 낫다.
액션과 피드백 사이의 시간을 줄여라.
프로그램에서 테스트(컴파일러, 단위테스트(30분단위), 코드리뷰, 동료, 커뮤니티)

알고리즘 디자인 실력 향상방법

  • 어려운 문제를 푼 후에 처음부터 새로 푸는 것, 해법의 통찰만을 유지
  • 해법이 내가 원하는 만큼 명료하고 직접적일 때 까지 반복,
  • 비슷한 문제를 공략할 일반적인 규칙 찾기
  • 주어진 문제를 완전 처음부터 최고로 효율적인 방향에서 접근하도록 이끌어줬을 그런 규칙을 찾는것

질보단 양이다!

프로그래밍에선 같은걸 다르게 다른 맥락에서 여러번 해보는게 좋다. 실수를 많이 해야 한다.

과거에 어댑터 패턴을 적용하면 좋았을게 뭐가 있을까 고민 -> 현재 연습 -> 정리

효율적인 학습법

비효율적인 학습

  • 같은 자료를 반복해 읽기 ↔️ 반복하는 term을 길게 둘 경우 괜찮다
  • 밑줄 긋기
  • 요약하기(보지않고 하는것은 효과적)

효율적인 학습

  • 읽은 부분에 대해 왜 그런지 자주 자문해보기
    "전이효과" 누리기
    : 과거 경험, 실제 사용사례 관련해 설명, 왜 에러가 났는지 우선 코드를 보기전에 상상해서 스스로에게 설명해봄
    => 전이를 높이기 위해선 어떤 문제를 풀었을 때 그 문제에서 살짝 추가기능을 더해서 풀어봄, 같은 문제를 반복해서 푸는게 아니라 살짝씩 변경하는것

  • 섞어서 공부하기

  • 연습시험 치기(기억해서 쳐보기, API 외워서 쳐보기) Cornell Note활용법(백견이 불여일타)

  • 분산연습 : 1시간씩 공부해서 중간 중간 테스트 하는것 Anki(Spaced Repetition Software)
    ↔️ Chunk(연속되어 있는 집중시간) by 피터드러커

  • 새로운 정보가 이미 아는 것과 어떻게 관련있는지(혹은 문제 푸는 단계를) 설명해보기

프로그래밍 책에 관련한 질문

  1. 최고의 책을 구해 그걸로 공부할 생각보다 서로 성격이 다른 여러개를 구해 비교해 가며 공부한다는 마음을 갖는다
  2. 대형 서점에 가서 비슷한 주제를 다루는 서로 다른 스타일의 책들을 비교해보면서 뭔가 내 맘에 들고 끌리는 책들을 서너 권 고른다
  3. 그 책들을 공부할 때 목차 순서로 간다면 한 책으로 한 챕터 읽고 다른 책으로 해당 내용이 있는 부분을 찾아서 다시 읽는다
  4. 목차 순서로 가지 않는다면 목차를 훑어보고 흥미로운 부분을 골라 읽는다 (순서는 크게 신경쓰지 않는다)
  5. 책을 어떻게 읽느냐가 무척 중요하다 -- 조금 읽고 조금 시험쳐 보고(책 덮고 소스코드 재생해내기) 조금 응용/실험해 보고를 반복한다

SW개발자에게 중요한 주제들

특정 프로그래밍 언어들, 자료구조, 소프트웨어 디자인과 패턴, 소프트웨어 아키텍쳐, 요구사항 수집 및 분석, HCI(Human Computer Interaction) 및 유저 인터페이스, 객체 지향 기술 및 개념, 직업윤리와 프로페셔널리즘, 분석 및 디자인방법, 청중에게 프리젠테이션, 프로젝트 관리, 테스팅 검증및 QA, 알고리즘 설계, 기술적 글쓰기, 운영체제, 데이터베이스, 리더쉽, 형상 및 릴리즈 관리, 데이터 전송과 네트워크, 경영

출처 및 참고

비전공 학원출신 SI개발자, 유명스타트업 들어간 썰(이종립 개발자님)

책읽기(Code complete, 실용주의 프로그래머, TDD, 기타 등등)
프로그래머의 길, 멘토에게 묻다.

회사는 팀플레이
작은 도구 만들기 : 같은 일을 수작업으로 처리하지 않는다.
기억력을 보완하는 습관(블로깅)
일상생활의 최적화
다른 개발자와의 커뮤니케이션 중요(오픈소스 코드 참고)

profile
함께 성장하는 개발자가 되고 싶습니다.

0개의 댓글