라이브러리없이 작업을 수행 할 수있을 때 라이브러리를 사용해야합니까? [닫은]


33

오픈 소스 JavaScript 플러그인을 사용하여 작업을 수행 할 수있는 상황에 처해 있습니다. 그러나 그것을 사용하려고 할 때, 나는 이미 내가 한 일을 많이 재 설계해야한다는 것을 알았습니다. 그리고 그것은 겸손한 견해로 프로젝트에 특정 복잡성을 추가합니다. 깨끗한 코드로 동일한 작업을 수행 할 수있는 반면, 지금까지 수행 한 작업을 변경할 필요없이 직접 만들 수 있습니다.

이 상황에서 어쨌든 라이브러리를 선택해야합니까 (예 : 더 나은 품질의 코드를 위해)?


3
"품질"을 어떻게 측정하고 있습니까? 코드 줄 수만큼? 수업? 복잡성? 유지 보수성? 탄력성?
Laiv

3
품질을 어떻게 생각하든 아니든 대답은 아니요입니다. 그러나 품질에 대한 아이디어를 제공 할 경우, 도서관 수에 따라 품질이 개선되는 이유를 설명하는 답변이 제시됩니다. 세차의 문제 일뿐입니다. 지금부터 간단한 NO는 설명이 필요없는 질문에 대답합니다.
Laiv

4
귀하의 질문에 대한 직접적인 대답은 아니지만 "이 숫자"는 필연적으로 코드 품질 향상의 어려움을 인정하면서 "더 나은 품질"을 보장한다는 생각입니다. 품질을 보장하기위한 빠른 수정은 없습니다. 있다면 문제가 존재하지 않았을 것입니다. 어떤 단순한 접근 방식이 최후의 해결책이라고 주장하는 사람은 (최고의) 지나치게 일반화되거나 (최악의) 결함 아이디어를 진실로 추진하는 것입니다.
Flater

3
라이브러리를 사용하면 코드 품질이 향상된다고 생각하는 것은 무엇입니까?
Monica에 대한 피해를 막으십시오

1
질문이 크게 재구성 된 것으로 보이며 상단 답변이 이전 버전에 대한 답변으로 인해 종료되도록 투표함 "투표) ...
AnoE

답변:


54

엔지니어는 아마도 이것을 최적화 문제로 생각하는 것이 적합 할 것입니다. 당연히 우리는 최적화 목표가 있어야합니다 . 이런 종류의 상황에서 일반적인 것은 총 소유 비용 을 최소화하는 것 입니다.

타사 구성 요소를 추가하면 장기적으로 비용을 절약 할 수 있다고 생각되면 사용해야합니다. 그렇지 않으면 안됩니다. 지속적인 유지 관리 비용을 고려해야합니다 (예 : 새 버전의 O / S가 릴리스되거나 보안 결함이 발견되거나 일부 새로운 W3C 사양이 릴리스 된 경우).

많은 사소한 문제의 경우 자체적으로 성장하는 데 드는 비용이 저렴하지만 조직의 핵심 역량 외부에서 약간 복잡한 문제의 경우 종종 타사로 이동하는 것이 좋습니다.

고려해야 할 다른 목표도 있지만 (예 : 위험) TCO가 큰 목표입니다.


1
이 답변에는 더 많은 투표가 필요하다고 생각합니다. -라이브러리의 장기적인 안정성은 큰 문제가 될 수 있습니다. 라이브러리가 존재하더라도 API가 변경 될지 누가 알 수 있습니까? 라이브러리는 단기적으로 쉽지만 장기적으로 문제를 일으킬 수 있습니다. (측면 참고 : 소스 코드 인 라이브러리는 일부 문제를 완화합니다.)
DetlevCM

6
@DetlevCM 대답은 또한 다른 방향으로 매우 쉽게 갈 수 있다고 말합니다. 사소하지 않은 라이브러리에는 유지 보수 비용이 부과되어 라이브러리의 사용자로서 지불하지 않아도되며, 지불해야 할 경우 (즉, 라이브러리의 소유자 인 경우) 지불하지 못할 수도 있습니다.
큐빅

나는 라이브러리, 비용뿐만 아니라 버그, 컨트롤 외부의 디자인 변경 및 단일 함수를 가져 오기 위해 사용하지 않는 많은 코드를 고려해야한다는 것에 동의하지만 잊지 마십시오. 또한 라이브러리는 종종 주어진 문제에 대한 해결책만큼 표현력이 좋지 않습니다. 또한 외부 라이브러리를 쉽게 디버깅 할 수 없으며 나중에 더 많은 병합 문제를 처리해야합니다. 라이브러리 솔루션이 더 가볍다 고 가정하지 말고 모든 요소를 ​​고려하고 라이브러리가 적합하지 않은 경우 자신의 솔루션을 코딩하는 것을 두려워하지 마십시오!
Bill K

36

빌 게이츠는 한때 유명하게 말했다.

"코드 라인별로 프로그래밍 진행 상황을 측정하는 것은 무게로 항공기 건물 진행 상황을 측정하는 것과 같습니다."

이 인용문은 여러 라이브러리에 대해 궁극적으로 같은 말을 할 수 있기 때문에 염두에 두어야합니다. 일반적으로 다음과 같은 경우가 아니면 라이브러리를 사용하지 않습니다.

  1. 다른 방법으로는 할 수 없습니다. 시간과 예산에 맞춰 제품을 생산하는 데 더 이상 경제적으로 실행 가능하지 않습니다.
  2. 라이브러리의 많은 기능을 필요로하므로 상당한 시간을 절약 할 수 있습니다.
  3. 도서관은 잘 사용되며 잠재적 인 문제는 잘 정리되어 있습니다.

이상적으로 세 가지 조건이 모두 충족되지만 두 가지 조건에 만족합니다. 결론은 목적에 맞지 않는 한 프로그램에 라이브러리를 추가해서는 안된다는 것입니다. 그 목적이 무엇인지 물어봐야하는 경우에는 프로그램에 추가해서는 안됩니다. 코드 품질따라서 프로그램 은 프로그램 내부의 라이브러리를 반드시 다시 작성할 필요가 없어도 각 라이브러리를 우아하게 호출하기 때문에 이점이 있습니다.

행운을 빕니다!


4
@BillalBegueradj 의미있는 견적입니다. 충분하지 않습니다. 우리는 진보에 대해 이야기하지 않고, 소프트웨어 품질에 대해 이야기하고 있으며, 코드 라인은 발견 된 결함 수와 매우 밀접한 상관 관계가 있습니다. LOC로 조정 한 후 발견 된 결함에 대한 예측력이 없음을 나타내는 다른 모든 메트릭객체 지향 메트릭의 유효성에 미치는 클래스 크기의 혼란 효과 (Confounding Effect) 클래스를 참조하십시오 . 2001). 그런데 과학 논문은 유명한 인용을 능가합니다.
Theraot

5
@Theraot 당신은 줄의 수가 큰 프로그램이 작은 프로그램보다 코드 품질이 나쁜 결함의 수를 결정하기 때문에 제안하고 있습니까? 측정 항목에 동의하지 않습니다. 죄송합니다. 또한 인용문이 실제로 귀찮다면 무시하십시오.
Neil

3
@Neil은 명확하지만, 줄 수는 결함 수를 결정하지 않으며, 발견 된 결함 수와 강한 상관 관계가 있습니다. 이해하기 쉽습니다. 코드가 클수록 결함이 발생할 가능성이 높아집니다. 물론 결함의 수를 찾아 수정 한 후에는 결함 수가 줄어 듭니다. 이것은 결국 상관 관계입니다. 부록 : LOC는 많은 공통 메트릭을 능가합니다. 자세한 내용은 논문을 참조하십시오.
Theraot

5
@Theraot 내 주장은 결함 수와 라인 수의 상관 관계가 아닙니다. 내 주장은 나쁜 코드 품질과 같은 수많은 결함에 관한 것이었다. 크롬은 수년에 걸쳐 결함을 가지고 있었지만 github에 잘못 작성된 10 줄 jQuery 플러그인보다 더 잘못 작성되었음을 암시하는 주장의 정당성을 주장합니다.
Neil

3
@Theraot "과학 논문은 유명한 인용을 능가합니다." -당신의 종이가 실제로 이길 것이 아니라 견적을지지하는 것처럼 들립니다 ...
npostavs

14

(참고 : 원래 질문은 : 라이브러리 수가 코드 품질을 향상 시킵니까?)

당신은 아마 스스로 대답 할 수 있습니다 : 아니요, 물론 라이브러리를 사용한다는 사실만으로 코드가 향상되지는 않습니다. 그렇다면 모든 노력을 기울이지 않고도 훌륭한 코드를 쉽게 작성할 수 있습니다.

사람들이 롤업을 통해 재사용을 권장 할 때 잘 알려진 라이브러리의 코드는 아마도 저자가 훨씬 더 많은 시간을 보냈기 때문에 자신이 생각하는 것보다 더 정확하고 효율적이며 사용 가능하다는 의미입니다. 전체 프로젝트에 대한 기한을 정할 수있는 것보다 하나의 특정 기능 영역에서

그러나 그것은 법이 아니라 추세 일뿐입니다. 롤-롤 방식만큼 유용하지 않은 라이브러리가있을 수 있습니다. 이것은 종종 라이브러리가 실제로 필요한 것보다 훨씬 많은 것을 수행 할 때 발생하며 자신의 코드 기반을 합리적 수준보다 훨씬 더 많은 규칙에 맞게 조정하는 방식으로 수행됩니다. 이것이 바로이 인스턴스에서 찾은 것과 같습니다.


4

올바른 라이브러리를 사용하면 많은 작업을 줄일 수 있지만 숨겨진 비용도 많이 있습니다.

  • 라이브러리는 최신 상태로 유지해야합니다. 업데이트가 있는지 (보안과 관련이있을 수 있음) 정기적으로 확인하고 적용해야합니다. 각 라이브러리 업데이트로 인해 응용 프로그램에서 문제가 발생할 수 있습니다. 즉, 나중에 완전한 통합 테스트를 수행해야합니다. 따라서 프로젝트에 의존하는 모든 라이브러리는 장기적인 유지 관리 오버 헤드를 증가시킵니다.
  • 일부 Javascript 라이브러리는 매우 강력하고 고유 한 패턴을 사용하여 사람들이 별도의 전문 기술 영역으로 인식하기 시작합니다. 따라서 추가하는 각각의 추가 라이브러리는 익숙하지 않은 프레임 워크에 의존하는 자신감있는 편집 코드를 느끼지 못하는 개발자를 놀라게 할 수 있습니다. 사용하는 모든 라이브러리에 익숙한 새로운 유지 관리 프로그래머를 고용하는 것은 어려울 수 있습니다.
  • 웹 사이트에 라이브러리를 추가하면 사용자가 라이브러리의 일부만 사용하더라도 전체 라이브러리를로드해야하므로로드 시간이 늘어납니다. 다운로드 사용자가 필요한 기능 만과 빌드에 일부 인기있는 라이브러리를 허용하지만 그렇다하더라도 여전히 (실행되지 않습니다 코드를 많이 포함 보통거나 더 악화 : 코드 않습니다 실행할 수 있지만 아무것도 유용하지 않습니다, 사용하지 않는 기능을 위해 데이터 구조를 준비하기 때문입니다).

따라서 프로젝트에 다른 종속성을 추가하기 전에 직접 작성하고 비용 / 혜택 분석을 수행 할 수있는 것을 포함 시키십시오.


실제 데이터가있을 때 분석을 반복하십시오. 비용을 과소 평가했거나 이익을 과대 평가했거나 상황이 변경되었을 수 있습니다.
중복 제거기

1

이진 결정은 필요하지 않습니다. OSS 라이브러리 만 사용하거나 새로운 솔루션을 처음부터 프로그래밍하십시오. 라이센스가 허용하는 경우 라이브러리의 일부를 재사용하는 다른 옵션이있을 수 있습니다.

예를 들어, 내 분야 (숫자 소프트웨어)에서 라이브러리에는 훌륭한 코어 모듈과 80 % 만 만족하는 특수 모듈이있을 수 있습니다. 그래서 핵심 모듈을 사용하고 특수 모듈을위한 래퍼를 작성했습니다. 또는 OSS 모듈의 설계 및 코드를 사용하여 고유 한 특수 모듈을 개발할 수 있습니다. 가장 어려운 알고리즘 비트는 일반적으로 스캐 폴딩 코드 만 수정하여 다시 사용됩니다. 원래 코드 중 일부를 정리할 수도 있습니다. 이것은 처음부터 개발에 비해 좋은 학습 경험과 시간 절약으로 입증되었습니다.


0

누군가 당신을 위해 이미 작업을 수행했다면 물론 사용해야합니다.

규칙에 대한 예외는 javascript입니다. 그들은 다스 다른 라이브러리를 (물론 오래된 버전) 언어를 추가하는 기능을 가져온 것이다 어디 그들이 사용하려는 다음 당신을 위해 작업을 수행.

프레임 워크를 선택하고 그 안에 머물러 있어야합니다. 라이브러리가 프레임 워크 또는 일반 js와 함께 작동하는 경우 좋습니다. 그러나 다른 프레임 워크가 필요한 경우 다른 옵션을 찾으십시오.


4
여기에 많은 자바 스크립트 팬
FCin

0

라이브러리와 사용시기는 복잡한 결정입니다.

한편으로, 당신은 잘 작동하는 것으로 인정되고 지난 20 년 동안 표준적인 것들로 인정받은 거의 표준적인 것들 (내 분야에서는 FFTW가이 범주에 속하거나 libsndfile과 같은 것)을 잘 테스트했습니다. 모두가 사용합니다.

반면에 테스트 스위트가없고 유지 보수 담당자가 약 1 명인 github의 임의의 항목이 있습니다. 일반적으로 왜 귀찮습니까?

나를위한 산성 테스트는 먼저 라이브러리가 내 아키텍처에 맞는지 (때로는 주어진 라이브러리를 사용하려는 경우 그 주위를 디자인하는 경우가 있음), 다른 사람의 라이브러리 코드 디버깅을 중단 할 것이라고 생각합니다. ? 두 번째 질문에 대한 좋은 대리자는 "자동화 된 테스트 스위트가 있으며 문서는 무엇입니까?"입니다.

약간의 디버깅은 큰 문제가 아니지만 그 시점에서 유지 보수 관점에서 라이브러리 코드가 내 코드 크기와 비교하기 시작합니다 (더 많은 이유로 수정 사항을 업스트림으로 푸시 할 수없는 경우 더 그렇습니다).

또한 라이브러리와 프레임 워크를 구별 할 수 있습니다. 구별이 때로는 명확하지 않다는 점이 있습니다. 특히 (작은 코어, DSP 헤비) 세계의 프레임 워크는 특히 더 많은 정보를 병합하려고 할 때 논쟁에 고통을주는 경향이 있습니다. 하나 또는 줄 밖에서 약간의 작업을 수행하면 라이브러리가 유용합니다. 나는 이것이 웹 개발 현장에서 매우 다르게 보인다는 것을 알고 있습니다.

하루의 끝은 맛과 경험으로 내려지는 결정이며, 경험이 있더라도 때로는 적어도 라이브러리를 사용하여 가난한 사람들을 선택하기가 어렵습니다. 너무 성 가시면 언제든지 자신의 구현을 작성할 수 있습니다.

결정, 결정 ....

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