May 12, 2018 - dev_seminar_career

개발자 커리어 컨퍼런스

Session 1. 인사담당자가 말하는 개발자 채용

첫번째 새션 모기업 인사담당자임 블로그에 적지 말아 달라고 함

면접시에는 정보의 비대칭성에 의해 이해가 상충할수 있다.

인사 담당자가 바라본 개발자의 특징/특성

개발자의 특징/특성

  1. 성취감 및 성장감 중시
  2. 외적 공정성 중시
  3. 자율성 중시
  4. 내향성

우수한 SW 개발자 핵심 3가지 요소/역량

  1. 프로그래밍 능력
  2. 도메인 지식
  3. 협업 - 가장 중요한 요소라고 생각한다.(발표자 생각)

집단 지성 플랫폼을 사용중 이라고 한다. -> 집단지성 플랫폼(KMS ??) 사용하신다고 하셨는데 개발자한테 동기 부여는 어떤것으로 하시나요?(답변 : 전문가를 업무를 아에 할당을 시킴)

채용 담당자로서 채용면접 시 평가기준

HR팀이 개발자에 요구하는 역량들

경력 -> 경력은 즉시 투입가능한 역량을 보유한 인력을 찾기 때문에 기본기 외에 도메인 업무경험이 품부한지 여부를 위주로 평가함

이직하기 전에 채용담당자를 많이 찾아 가라

개발자의 커리어는 어떻게 성장시켜야 하는가?

리더급으로 성장할려면 관리자능력(?) 경영자적 마인드(?) 이런것들이 있어야 된다고 함 -> 이게 진짜 맞는가?

인사담당자 분이 하드웨어 미들웨어 디펜던트 한 개발자가 더 대우를 받는다고 함(??) -> 소프트웨어 역량이 더 중요한것이 아닌가? 좀 나랑은 않맞는것 같음

Session 2. 개발자, 직장인? 직업인?

개발과 업무의 경계에서

못 들었다 ㅜㅜ

어떻게 하면 추천받는 개발자가 될 수 있을까?

추천 받는 개발자

  1. 경력공채
  2. 수시채용

위에 공통점으로 필요한거임 -> 사내추천

사내추천의 유리한점

  1. 나를 추천해준 추천자가 내부에 있다.
  2. 사내 추천시 서류전형이 통과된다.
  3. 리스크가 적다.

어떻게 하면 추천받는 개발자가 될 수 있을까요?

  1. 현 직장 동료와 좋은 관계를 유지하라.(커뮤니케이션과 협업능력)
  2. 현재 본인의 업무에 최선을 다해서 일하라.(서비스 오너쉽, 전문성, 도메인에 이해 )
  3. 자신을 적극적으로 표현하는 것이 좋다.(깃헙, 세미나, 페이스북)
  4. 개발 관련 컨퍼런스에 적극적으로 참석하는 것이 좋다.

더 중요한 건 바로 인성….

오오오 역량(연봉) -> 기술적인 능력, 커뮤니케이션 능력 성과(인센티브) -> 매출에 기여한 인센티브

관리자와 개발자

관리자와 개발자의 경계선에 대한 이야기….

CTO가 하는 역활은??? 처음 입사시엔 개발자가 4명 하지만 개발 업무 로드가 너무 많이 가고 있음 나도 개발해야지 하면서 기술적인 고민을 많이함

어느순간 회사에서 개발을 너무 많이 하지말아라 -> 기술리더와 개발자의 차이점 기술적인 문제 기술 외적인 문제도 해결해야됨

개발적으로 고민 -> 프로젝트 관리 -> 조직 관리 -> 문화 프로세스 -> 채용

업무 회고를 통해서 개별 구성원의 이슈 해결 및 만족도 재고

관리자의 가장 큰 슬픈점… 코딩을 더이상하기 힘들다… 책임과 역활이 늘어날수록 코딩을 하기 힘들어진다…

Session 3. 내가 보는 한국 개발 커리어의 현실

7년을 돌이켜 보며

고졸 -> 2012 SK 들어감 -> 퇴사함 ㅜㅜ -> NHN TechService -> 2015년 8월 퇴사 -> 우아한 형제들(병특) 2015년 8월 입사 -> 2017년 12월 6년차 마크업개발자

ui개발자 채용공고 2 - 프론트엔드 개발자 191

평생직장 따원 없다 최고의 직장으로 떠나라

내가 잘하는점과 못하는것을 알게 됨

면접을 보면 자신이 무엇을 잘하는지 알게 됨

프리랜서로 살아남는 법

프리랜서를 선택한 이유

짧은 경력 위주

대학원 진학으로 생긴 공백

창업으로 매우 적은 기본급(180만원)

돈을 많이 범

자유로운 시간

20년차 개발자로 살아남는 법

27년차 개발자

개발프로세스 와 개발문화 전문가

헬스케어 도메인 전문가

20년차 개발자랑 6명이 있음 굿닥에

20년차 개발자가 어디서 볼수 있나요? 고참 엔지니어가 필요한가?

20년차 직장인?

20년차 코더?

20년차는 어떻게 해야 되나

  1. 다양한 경험(대기업 안됨 ㅜㅜ)
  2. peer 리뷰 가능한 환경
  3. 뛰어난 동료
  4. 인건비

살아 남는 방법

  1. 사장님
  2. 개발팀장
  3. CTO
  4. 솔루션 or 프레임워크 주요 커미터
  5. 생존을 위한 변신(다른 선택을 해도 됨)

마켓분석이랑 개발자 영역은 틀리다.

이직은 언제….?

솔루션 없는 불만

경영자가 삽질할때

자신이 할일이 없다고 생각할때

적정기술의 중요성

참조


May 9, 2018 - coupling_(common coupling)

결합도 (coupling)

공통결합 (common coupling)

전역결합(global coupling)이라고도 함

강결합

두개 이상의 모듈에서 전역으로 선언된 데이터 모듈에 등록 할때 공통결합이 발생한다.

자바 코드에서 실수하는 부분이 static 변수를 선언해서 여러 쓰래드에서 공통적으로 사용하는 경우이다.

이렇게 되면 예기치 않은 문제가 생길수도 있다.(예: 데이터 변조)

이것만으로 공통 결합을 설명해야 되는지가… 일반 적으로는 공통결합 적인 코드를 작성하지 않는데

쓰레드 관련해서는 해당 사항으로 코딩이 되고 있는것 같다.

아래는 예제 이다 FreqABTest 의 freqAbtestType 값이 static으로 공유되고 있어서 공통 결합이 나타 났다.

해당 변수가 static 아니라 클래스나 아니면 클래스 자체를 싱글턴으로 유지하는 코드에서도 똑같은 형태가 나타난다.

공통 결합은 추상화를 도입하여 해결할 수 있습니다. 디자인 패턴은 훌륭한 아키텍처를 달성하는 데 유용 할 수 있습니다.

Static Factory Methods 이것도 이야기 하고 싶어 지는데 이것도 Thread safe 하지 않은 코드이다.


package com.github.sejoung.reactive.test;

import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

public class TestCode {
    public static void main(String[] args) throws InterruptedException {
        ExecutorService es = Executors.newCachedThreadPool();

        int count = 100;
        AtomicInteger ai = new AtomicInteger();
        CyclicBarrier cb = new CyclicBarrier(count);

        for (int i = 0; i < count; i++) {
            es.submit(() -> {
                int idx = ai.addAndGet(1);
                cb.await();
                FreqABTest cTest = new FreqABTest();        /// C
                cTest.setFreqAbtestType(idx);

                if ((idx != cTest.getFreqAbtestType())) {
                    System.out.println(" idx " + idx + " freqAbtestType " + cTest.getFreqAbtestType());
                }
                return null;
            });

        }
        es.shutdown();
        es.awaitTermination(10000, TimeUnit.HOURS);

    }
}


package com.github.sejoung.reactive.test;

public class FreqABTest {

    private static int freqAbtestType;

    public static void setFreqAbtestType(int freqAbtestType) {
        FreqABTest.freqAbtestType = freqAbtestType;
    }

    public static int getFreqAbtestType(){
        return FreqABTest.freqAbtestType;
    }
}

May 8, 2018 - coupling_(content coupling)

결합도 (coupling)

내용결합 (content coupling)

제일 높은 결합도 모델

컨텐츠 결합은 한 모듈이 다른 모듈의 코드를 사용할 때 발생한다고 말합니다.

이는 정보 숨기기를 위반하는 것으로, 기본 설계 개념입니다.

아래의 코드를 보시면 Builder class에 userAbInfoList를 AbCampaignSelector 에서 직접 참조 하고 있습니다.

내용 결합은 캡슐화에 따라 제거 할 수 있습니다.

 

public class AbCampaignSelector {
	private List<Map<String, String>> userAbInfoList;
	
	public AbCampaignSelector(Builder builder) throws EmptyException {
		// 쿠키로 조회
		if(CollectionUtils.isEmpty(builder.userAbInfoList) ) {
			throw new EmptyException("ab Empty Exception!!");
		}
		userAbInfoList = builder.userAbInfoList;
	}

	public static class Builder{
		private List<Map<String, String>> userAbInfoList;
		public Builder(List<Map<String, String>> userAbInfoList) {
			this.userAbInfoList = userAbInfoList;
		}

		public AbCampaignSelector build() throws EmptyException {
			return new AbCampaignSelector(this);
		}

	}
}