경험이 부족한 개발자가 생각하는 것 중 최악의 것은 무엇입니까? [닫은]


15

어린 개발자 인 저는 고품질 응용 프로그램을 개발하기 위해 고려해야 할 사항에 대한 조언을 얻는 것이 유용하다는 것을 알게되었습니다. 대학 과정에서 대부분의 교사는 입력 유효성 검사를 강조하고 일부는 보안 문제에 대해 이야기했지만 아무도 로깅과 같은 다른 특정 사항의 중요성을 다루지 않았습니다.

경험이 부족한 개발자가 경험이 많은 개발자에게 좌절감을 줄 수있는 실수는 무엇입니까?


1
보안을 "체크리스트 (checklist)"로 옮기기 위해 정확히 무언가를 부르지는 않을 것입니다. 보안은 디자인의 모든 수준에서 고려되어야하며, 나중에 고려되지 않아야합니다. 보안 기능! = 보안 기능!
Billy ONeal

"체크리스트"는 잘못된 것을 의미 할 수 있습니다. 개발이 끝날 때 고려해야 할 사항을 찾고 있지 않습니다. 나는 고려되어야 어떤 것들이 궁금 으로 응용 프로그램을 개발하고 있습니다. 내 질문을 다시 설명 할 수있는 방법에 대한 제안이 있습니까?
awmckinley

@awmckinley : 그렇다면 귀하의 질문은 "어떻게 응용 프로그램을 개발합니까?"입니다.
Billy ONeal

@ 빌리 ONeal : 그냥 내 질문을 편집했습니다. 더 이해가 되나요?
awmckinley

1
더 의미가 있지만 불행히도 여전히 모범 사례의 세탁 목록보다 더 많은 것을 요구하지는 않습니다. 건설적인 질문은 실제로 특정 문제 에 관한 것이 거나 최소한 한 줄 이상의 의견을 가진 답변이어야합니다.
Aaronaught

답변:


12

새로운 개발자가 잊어 버린 주요 사실은 실제로는 팀의 일원으로 일한다는 것입니다. 이것은 그 자체로 ..

  • 빌드를 방해하는 코드 체크인
  • 이미 존재하는 코드를 재사용하지 않음
  • 유지 보수 비용이 많이 드는 다른 모든 사람과 동일한 방식이 아닌 방식으로 일을 수행

그것은 그들의 코드가 고립되어 처음부터 시작되지는 않지만 더 이상 고립되어 작동하지 않는다는 것은 아닙니다.


+1 : 기본적으로 이러한 문제는 다음과 같습니다. 주니어 코더는 코딩에 열악하지만, 일부 숙련 된 코더는 코딩에 열악합니다. 주요 차이점은 이와 같은 항목입니다.
gbjbaanb

8
  1. 테스트.
  2. 테스트.
  3. 더 많은 테스트.
  4. 소스 컨트롤
  5. 타겟팅하는 모든 프로그램에 적합한 세금.

Windows에서 이러한 세금은 다음 같습니다.

  • 높은 DPI 환경 처리
  • 로밍 사용자 프로필
  • 빠른 사용자 전환
  • 원격 데스크톱 (예 : RDP가 적용될 때 이중 버퍼링을 사용하지 않으려는 경우
  • 계층 적 스토리지 관리로 멋지게 재생
  • 다중 모니터
  • 64 비트 Windows

거의 모든 플랫폼에서 다음을 처리해야합니다.

  • 유니 코드
  • 현지화
  • 전력 관리

미안해 빌리 어쩌면 내가 질문 한 방식이 명확하지 않았을 수도 있습니다. 소스 관리와 같은 개발 관행을별로 찾고 있지 않습니다. 이 소프트웨어 개발 프로젝트 점검 목록무엇을 추가 하시겠습니까? . "세금"섹션은 확실히 도움이됩니다.
awmckinley

3
@awmckinley : 소스 제어를 제공하는 이유는 개발자가 여러 명인 경우에도 여러 개발 책임자가 없어도 릴리스를 효과적으로 관리 할 수 ​​없기 때문입니다. 릴리스 n을 작업 할 때에도 릴리스 n + 1을 고려해야합니다.
Billy ONeal

5

내 경험상 거의 모든 경험이 부족한 개발자가 염두에 두지 않는 것은 상업적 환경에서 (거의 항상) 일하고 있다는 것입니다. 코드는 훌륭해야하지만 완벽하지는 않습니다. 가장 중요한 것은 완벽 함이 아니라 코드가 제공하는 것입니다.

다른 방법으로 말하면 회사가 파산 한 지 3 개월 만에 완벽한 코드를 제공하는 것은 누구에게나 좋지 않습니다.

제 생각에는 이것이 실제 세계의 발전이 대학에서 가르치는 발전과 다른 가장 중요한 방법 중 하나입니다.


3

정말 광범위한 질문; 세부적으로 대답하는 것은 ... 여러 권의 책입니다.

시작하기위한 일반적인 시스템 정의 점검 목록은 다음과 같습니다.

  • 시스템의 중요한 리소스는 무엇이며 수요는 어떻게 변할 수 있습니까?
  • 시스템의 성능 기능은 무엇이며 어떻게 확장해야합니까?
  • 어떤 요구 영역이 불필요하고 제거 가능하게 될 수 있습니까?
  • 다른 기능을 가진 다른 버전의 시스템이 필요할 가능성이 있습니까?
  • 확인 된 변경 사항이 발생할 경우 인력 및 컴퓨터 리소스에 미치는 영향은 무엇입니까?
  • 새 시스템이 기존 운영 체제에 어떤 영향을 미칩니 까?
  • 시스템에 대한 경험에 비추어 변화를 요구할 가능성이 큰 기능 영역은?
  • 시스템의 미래 사용자는 누구입니까?
  • 시스템의 미래 관리자는 무엇입니까?
  • 시스템의 미래 사용자가 식별 할 수있는 향후 개선 사항은 무엇입니까?
  • 시스템은 사용자의 전체 계획에 어떻게 부합하며 어떻게 개발 될 것으로 예상됩니까?

1

개발 머신과 대상 머신에서 시스템의 클린 디커플링으로 "자신의 머신에서 작동합니다"상황으로 끝나지 않습니다.

그리고 개발 머신을 얼마나 빨리 재구성 할 수 있습니까?

  • 어떤 패키지가 필요한지 알고 있습니까?
  • 데이터베이스를 재 구축하기위한 푸시 버튼 솔루션이 있습니까?
  • 소스 코드의 무결성을 테스트하기위한 푸시 버튼 솔루션이 있습니까?

1

아마도 디자인이라고 생각합니다. 즉, 수행하기 전에 무엇을할지 생각하는 방식입니다.

경험이 부족한 코더가 너무 많으면 (처음 시작할 때를 기억하십시오) 뛰어 들어 무언가를 얻은 다음 조금 더 추가하고 광고를 더 많이 추가하십시오. 이 방법은 당신이 그런 식으로 그것을 계획한다면 가능할 것입니다 (각 비트는 당신이 갈 때마다 테스트 할 수 있습니다). 위에. 그리고 우리는 모두 그렇게 진화 된 코드를 보았습니다!

조직은 다음 일이며, 종종 그들이 수행 한 방식과 필요한 것을 기억하기 위해 작성한 코드에 너무 집중되어 있습니다. 따라서 필요한 종속성을 묶거나 문서화하는 것을 잊습니다. 그들은 또한 그들이 떨어지는 곳에 물건을 넣는 경향이 있습니다. 저는 지난주에 3 개의 wsdls를 포함하여 루트 디렉토리에서 그의 코드를 확인한 3 명의 주니어를 비난해야했습니다. 하위 디렉토리 루트 디렉토리 코드는 생각할 수있는 표준으로 포맷되지 않았으며 존재했지만 호출되지 않은 몇 가지 기능이있었습니다.

분명히 그는 그것을 작동 시키지만 깔끔하지 않았으며, 이는 설치 및 유지 관리가 번거로운 일임을 의미했습니다.


1

가장 큰 차이점은 코딩 기술에 있다고 생각합니다. 모든 사람은 약간 다른 접근 방식을 가지고 있지만 경험이없는 개발자는 다음과 같은 코드를 생성하는 경향이 있습니다.

  • 경계 사례를 처리하지 않습니다
  • 필요한 것보다 훨씬 길다
  • 관련 시나리오에서 성능 특성이 좋지 않습니다
  • 우려의 분리가 나쁘다
  • const, sealed, readonly 등과 같은 자체 보호 기술이 부족합니다.
  • 데이터 및 데이터 콜렉션을 리턴하는 이상한 방법
    • 이것은 플랫폼에 대한 경험이 없음을 보여줍니다.

0

당신이 최악의 것을 요구했기 때문에, 나의 대답은 다음과 같습니다.

  1. 스파이웨어, 맬웨어 및 트로이 바이러스로부터 개발 시스템을 삭제하는 것을 잊어 버렸습니다.
  2. 다른 지리적 위치에있는 안전한 저장소에 정기적으로 백업하는 것을 생각하지 않았습니다.

0

가장 큰 것은 유연성을 계획하는 것을 기억하는 것입니다. 수업에서 요구 사항은 거의 항상 처음에 설정되며 변경되지 않습니다. 소프트웨어의 경우 종종 반대입니다. 모호한 요구 사항이 발생하고 자주 (매일) 바뀌기도합니다. 이를 돕기 위해 할 수있는 최선의 방법은 유연하게 코딩하는 것입니다 : 느슨한 커플 링, 여러 상황에서 안정적으로 사용할 수있는 작은 기능, 가능한 한 하드 코딩을 피하는 것.

시간이 지남에 따라 a) 변경 가능성이 가장 높은 항목과 반대로 변경되지 않을 사항 및 b) 변경 요청을 예측하고 계획하는 방법을 배울 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.