후배 프로그래머가 결점을 극복하도록 돕는가? [닫은]


15

팀에 합류하거나 함께 작업해야하는 주니어 개발자에 대한 일반적인 장점은 무엇입니까? 분명히 그들은 경험이 없어서 모든 것을 알기를 기대할 수는 없지만, 어떤 기술이 종종 설명하기 어려운 것이 있습니다.

나는 '조언에 귀를 기울이는 것'과 같은 대인 관계 기술을 의미하는 것이 아니라 다음과 같은 기술적 문제를 의미합니다.

  • '당신은 SQL을 한 적이 없다?'

  • '단위 테스트를 한 적이 없습니까?'

  • '유닉스 명령 줄 사용법을 모른다?'

당신 기대 하는 것-나는 새로운 프로그래머에게 이러한 특정 단점을 극복하도록 가르치는 당신의 관찰과 기술을 듣고 싶습니다.


13
가장 짜증나는 것 : 짜증나는 것에 대해 끊임없이 묻는 것. :-)
Jerry Coffin

12
사람들이 당신이 알고 싶어하는 것을 알지 못할 때 짜증을 내야한다고 생각하지 않습니다. 중요한 것은 그들이 기꺼이 배우
겠다는 것입니다.

당신이 :) 나는 그것의 중요한 생각 경청하는 법을 배워야 할 의지가 있다면 그래 @KoMet에 동의
MalsR

8
이 질문이 마음에 들지 않습니다. 개발자에게는 잘못된 생각입니다. 우리는 그 초보자, 그리고 우리는 매일 초보자입니다. 나는 무언가를 모르는 사람에게 결코 화를 내지 않을 것입니다. 이것은 너무 많은 오만과 관련이 있다고 생각합니다 ....
Darknight

3
아, 닫아 BRAVO. 나는 6 가지 가이드 라인을 구성하는 주관적인 질문을 읽고 이것이 모든 것을 충족시킨다. 솔직히 비 건설적인 부분은 13 명이 이미 질문을 오해했기 때문에 이미 답변 한 스레드를 마치느라 바쁘다. 선임 개발자가 때로는 후배 개발자의 능력에 실망하는 것은 현실입니다.이 질문은이 실망에서 패턴을 찾아서 어려움을 피하는 것이 더 좋습니다. 합법적 인 불만과 비판을 무시하는 것은 누구에게도 도움이되지 않으며 오만과는 아무런 관련이 없습니다.
Andrew M

답변:


25

버전 관리가 무엇인지, 올바르게 사용하는 방법을 모르는 경우 .

최근 몇 달 동안 회사에 근무한 주니어 개발자 중 한 명이 Subversion의 매우 기본적인 내용을 배워야했습니다. 정말 울부 짖었습니다. 그녀는 코드를 확인하여 하루 종일 프로젝트를 진행하고있었습니다. 그녀가 무엇을하고 있는지 전혀 몰랐습니다.


4
크린 지? 그녀는 여전히 직업이있어 운이 좋다.
Rein Henrichs

2
이것은 "알지 못하는 것을 모르는 것"또는 "알지 못하는 것을 인정하지 않는 것"의 문제인 것 같습니다. 그녀는 처음부터 도움을 요청했다면 전혀 큰 도움이되지 않았습니까?
Michael McGowan

1
아야, 나는 haha처럼 들렸다. 우리는 최근까지 버전 제어를 구현하지 않았고, 신선한 대학원으로 회사에 합류했다. 나는 대학에서 약간의 버전 제어와 Subversion 종류를 배웠지 만 전에는 구현하지 않았다.
Sufendy

1
"백업 도구가 아닌가? 매일 저녁 코드를 저장하는 데 사용 하는가?"
David

2
그들이 학교에서 당신을 거의 가르치지 않는 것은 한 가지 큰 일입니다
Elijah Saounkine

23

충분한 질문을하지 않음

나는 그들이 후배라는 것을 알고 있습니다. 나는 그들이 실수를하고 물건을 알지 못할 것으로 기대합니다. 그래서 무언가를 가정하는 대신 질문을함으로써 많은 왕실의 업을 피할 수있었습니다. 솔직히 말해서, 나는 충분히 귀찮게 할 수 없습니다.

나는 시작할 때 많은 톤 의 질문을했다. 지옥, 나는 아직도 많은 질문을 가지고 있습니다 ... 나는 그들이 더 나은 질문이라고 생각하고 싶습니다.


Gee ... 내가 게시 한 것과 거의 같은 대답, 약 5 초 전에갑니다.
quick_now

2
"당신은 성가시다 !! 나는 여기 바쁘다, 너 스스로 생각할 수 없어?" 운이 좋지 않으면 !! haha
Sufendy

4
+1-이 하위 사례는 설명 후에 다시 묻지 않습니다. 내가 중학교에 몇 가지 작업을 설명 할 때 정말 날 화나게 않았다, 그는 고개를 끄덕였다 나는 그가 그것을 가지고하고 작업에 도착 것이라고 생각하고 2 주 후에 그는 돌아 오면 다시 같은 질문을 한 후, 다시 다른 두 고개를 끄덕 몇 주 후 ... 충분히 공정한 것은 사소한 일이 아니었지만, 당신이하지 않으면 그것을 이해하는 척하지 마십시오. 그리고 무언가를 이해했다고 생각되면 2 주 후에 기억할 수 있도록 메모하십시오.
Péter Török

1
반면에 일부 사람들은 너무 많은 질문을합니다 (스택 오버플로).
BoltClock

1
@ SnOrfus : 자격이없는 사람들은 내가 말하는 사람입니다 : P
BoltClock

14

기본 원리를 이해하려고하는 대신 붙여 넣기 및 시행 착오를 복사하십시오.

많은 주니어 개발자들은 가까이서 보이는 코드를 복사 한 다음 작동하는 코드에 부딪 칠 때까지 무차별 대입 방식으로 수정의 다른 순열을 거의 무작위로 시도합니다. 왜 그런지 모른다면 작동 경우 경계를 이해하는 사람이 나중에 정리해야 할 버그가 발생할 가능성이 있습니다.

코드의 "첫 번째 초안"유지

숙련 된 개발자가 특정 복잡성의 새로운 기능을 작성하면 컴파일 만하는 스텁으로 시작한 다음 전체 알고리즘에 대한 상위 의사 코드 주석을 추가하기 위해 다시 작성하고 다음과 같이 주석을 다시 작성합니다. 실제 코드, 테스트에 필요한 더미 코드 추가 및 제거를 수행 한 다음, 구현 중에 발생한 중복성을 제거하기 위해 다시 작성하는 등 일련의 연속적이고 점진적인 개선이 이루어집니다.

주니어 개발자는 하나의 큰 덩어리로 작성하는 경향이 있으며, 거대한 무차별 대입 디버깅을 수행합니다. 편집기에 코드를 입력하면 코드 줄을 삭제하는 것을 좋아하지 않으며 결국 기능이 향상되지 않은 상태로 다시 작성하는 것을 싫어하기 때문에 작동하게되어 기쁩니다. 그래서 가장.


1
"이해하고자하는 대신 복사 및 붙여 넣기"+1. 물론 이것은 새로운 프로그래머에게는 고유 한 문제가 아니라 나쁜 프로그래머에게만 해당되는 문제입니다. 새로운 프로그래머는 적어도 성장할 가능성이 있습니다. 제가 수십 년 동안 프로그래머로 일해 왔지만 여전히 그렇지 않은 사람입니다.
톰 앤더슨

이 중 일부는 관리 스타일의 결과 일 수도 있습니다. 작업이 이미 예상보다 오래 이야기하고 있으며 관리자가 내일 귀하의 기능을 원합니다. 당신은 그것을 작동시키고 빨리 다음 작업으로 넘어 가기 위해 서두르고 있습니다. 모든 것이 미세한 작업 카드로 나뉘어져 있으므로 리팩토링하거나 물러서서 전체적으로 더 큰 문제를 살펴볼 시간이 없습니다.
Jamie McGuigan

14

당신이 가장 먼저 처한 상황이라고 생각하십시오.

당신이 직면하는 모든 프로그래밍 문제는 다른 일반적인 형태로 직면했습니다. 숙련 된 프로그래머로부터 많은 것을 배울 수 있습니다. Google 이전의 프로그래밍을 기억할만큼 나이가 들었습니다 . 우리가 검색 엔진을 가지고 있었을 때 더 나빴지 만 웹에는 아직 그다지 좋은 정보가 없었습니다. 몇 초 만에 글로벌 지식에 액세스 할 수 있으므로 프로그래밍이 훨씬 더 생산적입니다. 그것을 사용하지 않는 사람들은 위험에 처해 있습니다.

편집 :

분명히하기 위해, 나는 복사 / 붙여 넣기 프로그래밍을 옹호 하지 않습니다 . 그러나 올바른 결정을 내리기 전에 기존 지식을 검토해야합니다.


1
또한 개발자가 웹의 의심스러운 리소스에서 모든 코드를 복사하여 붙여 넣기를 원하지 않습니다. 검색은 아이디어를 얻거나 기본적인 이해 문제를 해결하는 데 도움이되지만 준비된 솔루션을 얻지 않는 것이 좋습니다. 또한 개발자를 어리석게 만듭니다. 어쩌면 그를 훌륭한 수집가로 만들지 만 발명가는 아닙니다.
Elijah Saounkine

엘리야는 어느 시점에서 코드를 복사하여 붙여 넣는 코드를 작성하는 데 시간을 들이지 않고 프로그래밍 기술을 가속화하지 않는다는 데 동의합니다. 최악의 상황은 인계를 받아 나쁜 습관이 될 것입니다.
setzamora

1
그러나 @Scott은 코드를 복사하여 붙여 넣는 것에 대해 아무 말도하지 않았습니다. 그는 당신이 처음으로 상황을 겪었다 고 가정하지 않습니다. 예 : 두 문자열이 비슷한 지 알고 싶습니다. 이 문제를 해결하기 위해 이미 알려진 알고리즘이 있습니까? 개발자 가 응답이 이미 존재한다는 사실 조차 모르고 자신의 롤링을 시작하기로 결정했다고 상상해보십시오 .
David Conrad

@David Conrad 맞아요, 요점은, 우리는 여기 같은 페이지에 있습니다.
Elijah Saounkine

10

그들이 모든 것을 알고 있다고 생각합니다.

나는 jr를 가지고 있었다. 자바 스크립트로 모든 것을 해결하려고 노력한 인턴. 몇 가지 개념을 설명하려고 노력했지만 항상 더 잘 할 수 있다고 생각했습니다. 이제 그는 PDF와 같은 인쇄 준비 기술 대신 HTML을 사용하여 인쇄 출력용으로 구축 한 주요 프로그램을 종료하고 재 작업하고 있습니다. 다른 주요 문제는 말할 것도 없습니다.

수업은 프로젝트 초기에 노인들에게 주요한 중요한지도를 요청하는 것입니다. 도움없이 건축가를 떠나지 마십시오. 코드와 세부 정보 만 작성할 수 있지만 최소한 올바른 기술을 사용해야합니다.


5

후배가 기초를 알지 못할 때 거의 화가 나지 않으며 대학의 SCC와 같은 산업 기술을 배우지 못합니다. 그들을 가르치는 것은 수석 개발자 일입니다. 나는 성격의 충돌에 의해서만 화가 난다. 그러나 나는 기본을 모르는 선임 개발자들에게 가장 화가납니다.


1
@Graig는 주니어에 관한 노련한 개발자들이 우리가 대학에서가 아니라 상업 환경에서 배워야 할 것들이라고 성가신 많은 것들입니다.
Nickz

5

저항을 최소화하기 위해 지식을 발전시키고 싶지 않습니다.

전날 그래픽 디자이너 (놀랍게도 프로그래밍에 능숙 함)와 함께 인턴이 jQuery에서 무언가를 구현하는 데 어려움을 겪어 도움을 요청했습니다. 닫을 수 없다면 클로저는 고통 스러울 수 있습니다.

나는 인턴과 함께 앉아서 무엇이 잘못되고 있는지 정확히 설명했습니다. 우리는 버그를 수정 한 다음, 몇 가지 추가 개선 사항 ( "여기에 있기 때문에")을 지적했으며 20 개가 아닌 10 줄로 버그가없는 유죄 기능을 다시 작성했습니다. 질문에 대답 한 후 세상의 모든 것이 한 번 더 정상이라는 것을 만족시키면서 떠났습니다.

그 다음날 인턴은 "음, 이해하기가 어려워서 약간의 변경을하고 기능을 다시 작성하고 싶다"는 질문을 받았습니다.

그는 대신 더 많은 노력을 기울 였을 수도있다 (추가 질문을하고 언급 한 개념을 읽음). 너무 짧은 코드 는 이해하기 어려울 수 없다 . 누군가 후자를 볼 때마다 슬퍼합니다.


흥미롭게도, 아마도 당신이 그것을 읽기 어렵게 만들 었는지 궁금합니다. 처음 두 명의 프로젝트 관리자가이 작업을 두 번 수행 한 것을 기억합니다 (그리고 다시 변경하는 것도 죄책감이 있습니다). 그의 접근 방식이 더 나아 졌다고 확신하지만 당시에는 그 이유와 방법을 이해할만큼 충분히 발전하지 못했습니다. .
Maxim Gershkovich

3

OOP를 이해하지 못합니다. 슬프게도 이것은 대부분의 사람들이 알고있는 것보다 훨씬 일반적입니다.

클래스를 생성하는 방법, 추상 클래스, 인터페이스 또는 다형성을 아는 것은 하나의 일입니다. 프로그램의 이익을 위해 그것들을 올바르게 사용하는 방법을 이해하는 것은 또 다른 것 입니다.


이 질문을 피하고 싶다면 다음 질문과 그에 대한 답변이 깨달았습니다.


기본 수준에서와 마찬가지로 객체, 클래스 및 무단 작성을 통해 무슨 의미인지 알지 못합니까? 또는 디자인 패턴을 사용하는 것과 같은 고급 기능 (물론 다른 책 / 가이드가 있지만 GoF 책은 매우 모호합니다)
Andrew M

@Andrew 나는 대답을 조금 확장했습니다.
Nicole

1
그리고 나는 그 반대를 봅니다. OOP 만 배우기 때문에 C에서 평범한 오래된 절차 코드를 작성하는 방법을 모른다. 그런 다음 다시 파서를 작성하는 법을 배우지 않은 사람들에 대해서는 lex와 yacc를 사용하여 해결할 수있는 모든 문제에 대해 이야기하지 마십시오.
quick_now

1
하지만 @quickly_now 즉, 좋은 지적입니다 writing code other ways than OOPwriting bad OOP두 개의 완전히 다른 일이 있습니다. 첫째, 나는 문제가 없습니다.
Nicole

대부분의 대학은 객체 지향 디자인을 가르치지 않습니다. 또한 많은 작업장이 주니어 개발자들과 마찬가지로 사일로처럼 작동하거나 객체 지향 프로그래밍이 무엇인지 모르는 "고급"개발자가 있습니다. x 년 동안 타이틀을 얻은 "노인"개발자와 자신의 지식을 아는 선임 개발자가 있습니다.
Cervo

3

당신이 모르는 것을 모르고 무지한 생각으로 당신은 모든 것을 알고 있습니다.

(그리고 그 사촌은 묻고 싶지 않다.)

부분적으로 이것은 조직적인 것입니다-적절한 들어오는 유도는 이러한 것들 중 일부가 문제가되는 것을 막기 위해 먼 길을 갈 것입니다. 그러나 들어오는 유도에 사용할 수있는 시간이나 인력을 보유한 회사는 거의 없습니다. 며칠에서 몇 주가 걸리고 개발자가 작업을 수행하지 못하게해야합니다. 그래서 우리는 대신 불을 꺼야합니다.


2

CS 프로그램에서 비교적 신입생이 많은 주니어 프로그래머가 알고리즘에 약한 것에 놀랐습니다. 열악한 알고리즘 선택은 실제로 업무용 응용 프로그램에서 눈에 띄지 않을 수 있지만 하루에 수십억 개의 웹 서비스 요청을 처리 할 때는 실제로 중요합니다.

거의 모든 주니어 프로그래머가 놓친 인터뷰 질문은 다음과 같습니다.

N 번째 피보나치 수 를 계산하는 코드를 작성하십시오 .

그들은 거의 항상 가장 비효율적이지만 비효율적입니다.

int Fib(int n)
{
    if (n == 0) return 0;
    if (n == 1) return 1;
    return Fib(n-2) + Fib(n-1);
}

알고리즘 복잡성에 대해 언급하도록 요청 받으면 보통 "O (N) ... uhm ... O (N logN)보다 나쁩니다." 실제로 그보다 (훨씬) 더 나쁘다 ...


1
완전성에 대한 귀하의 질문에 대답하기 위해, 재귀없이 피보나치 수를 계산하는 공식을 알고 있어야합니다.
P Shved

1
@Pavel : O (n)과 O (1) 솔루션이 있습니다 ... 사실 Like every sequence defined by linear recurrence, the Fibonacci numbers have a closed-form solution. en.wikipedia.org/wiki/Fibonacci_number#Closed-form_expression
Eric J.

1
나는 당신이 게시 한 솔루션이 완벽하다고 말하지 않습니다. 나는 단지 당신의 후속 질문과 그러한 해결책, 복잡성에 관한 질문과의 관련성을 질문하고 있습니다. 당신은 그것을 요구함으로써 무엇을 성취하고 싶습니까? 그리고 가장 중요한 것은 , 이전 질문에 대한 대답이 주어지면 당신이 원하는 것이 성취 될 것이라고 기대 하는 이유는 무엇입니까? (내가 요점을 말 했는가?)
P Shved

내 요점을 더 명확하게하기 위해 복잡성을 추정하는 대신 코드를 개선하는 방법에 대해 묻는 것이 좋습니다. 일부 CS 졸업생은 메모를 제안하거나 수식을 알고 있지만 스마트 어셈블리라고 생각하기 때문에 한 번에 표시하고 싶지 않다고 확신합니다.
P Shved

실제로는 이러한 기능을 프로파일 러를 사용하여 검색하고 메모리 캐시에 추가하여 최적화 할 수 있습니다. 비 효율성은 실제로 N 값이 큰 경우에만 문제가됩니다. 주니어에게 이러한 코드를 가르치는 가장 좋은 방법은 디버거를 사용하여 전체 코드 실행을 단계별로 수행하는 것입니다. N 정말 큰 값의 경우, 수학 식있다 밝혀 maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/...
제이미 맥기

1

거꾸로 코드 들여 쓰기!

물론 "일반적인"것은 아닙니다. 나는 그것이 가능하다는 것을 결코 믿을 수 없었지만, 정상적인 개발자는 다음과 같이 쓸 것입니다.

try {
    switch(action){
        case case1:
            ...
            break;
        case case2:
            ...
            break;
        default:
            break;
    }
}
catch(Exception e) {
    e.printStackTrace();
}

그녀는 다음과 같이 쓸 것입니다 (하나님, 그것은 여전히 ​​불가능합니다!)

            try {
        switch(action){
    case case1:
...
break;
    case case2:
...
break;
    default:
break;
        }
            }

답답하지 않습니까?


무엇의 이름으로 ...
마이크 속도

1
매우 놀랍습니다 !!!
javanna

마치 왼쪽에서 오른쪽의 서양식이 아닌 아랍어, 히브리어 또는 중국어가 오른쪽에서 왼쪽으로 읽는 곳과 거의 같습니다. 코드를 완벽하게 들여 쓰기하는 가장 효과적인 방법이지만 가장 깊은 중첩 수준을 기준으로 전체 파일을 다시 들여 쓰기해야하며 이는 반대 규칙을 공유하는 모든 사람과 코드가 호환되지 않게합니다.
Jamie McGuigan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.