초보 프로그래머로서, 타사 라이브러리를 사용하는 것보다 내 라이브러리를 구축하는 것을 선호해야합니까?


12

Python 프로그래머를 처음 시작할 때 필요한 기능이 포함 된 고급 타사 라이브러리로 이동하기 전에 내 라이브러리를 작성하고 이해하는 것이 좋습니다.

일부 프로젝트 (예 : Django와 같은 웹 프레임 워크)는이 방법에 비해 너무 클 수 있습니다. 그러나 다른 프로젝트 (예 : 웹 크롤러, 그래프 라이브러리, HTML 파서)는 실행 가능한 것으로 보입니다.

타사 라이브러리에 대한 초기 의존이 내 성장을 방해 할 것이라고 걱정합니다.

참고 : 이 문제이 문제는 보다 아마 더 학습 효과보다는 재사용의 효율성에 초점을 맞추고있다 경험이 풍부한 프로그래머, 초점을 맞출 것으로 보인다. 내 질문은 초보자에 초점을 맞추고 있다고 생각합니다.


5
"프로그래머가 아닌 라이브러리 통합 자 이상의 것": 고객은 생산성을 원합니다. 기존 라이브러리를 평가하고 통합 할 수 있다는 것은 생산성을 높여야하는 중요한 기술입니다. 필요에 맞는 사용 가능한 라이브러리가없는 경우 ... 그렇지 않으면 응용 프로그램이 해결하는 비즈니스 문제를 해결하는 데 중점을 두십시오
Hamish Smith

2
"라이브러리 통합 자"와 "프로그래머"의 차이점은 무엇입니까? 내장 된 칩 수준의 장치 컨트롤러를 만드는 경우에도 30 년 안에 라이브러리 없이는 일한 적이 없습니다. 이 차이점을 설명해 주시겠습니까?
S.Lott

잘못 표현되었습니다. 편집했습니다.
MikeRand

오히려 도서관 통합자를 고용하고 싶습니다. 기능에 집중할 수있는 방법에 집중해야하는 이유는 무엇입니까? 수십 개의 심하게 재개발 된 자전거를 본 후 나는 또 다른 자전거를 볼 생각에 울었습니다. 도서관 디자인은 열심히 일하고 균형을 잡는 행위입니다. 일반적인 소프트웨어 샵은 라이브러리 디자인에 특화되어 있지 않으며 적절한 기술, 리소스 및 인내심을 가지고 있지 않습니다. 다시 쓰기에주의하십시오. 처음부터 시작하는 것보다 다른 사람이 테스트 한 코드를 사용하는 것이 좋습니다. 진공이있을 때만 IMO를 발명해야합니다.
직업

답변:


12

이것은 항상 절충안입니다.

초보 프로그래머로서 코드 재사용과 스퀘어 휠 재개발을 고려할 때 두 가지 질문을해야합니다.

  1. 처음부터 모든 것을 작성하거나 문제 영역에 집중하고 관심있는 문제에 중요하지 않은 복잡성을 제거함으로써 해결하고자하는 문제에 대해 더 배울 수 있습니까?
  2. 당면한 문제를 해결하는 것이 더 중요합니까, 아니면 몇 가지 기본 개념을 이해하는 것이 더 중요합니까?

프로젝트를 끝내지 않아도 되더라도 다른 사람들이 이미 해결 한 복잡한 문제에 대해 바퀴를 돌리는 것이 좋습니다. 무언가를 배우기 때문입니다. 그러나 "종료"하기 전에 다른 것으로 넘어갈 수 있습니다. 복잡한 도메인에서 작업을 시작하면 스스로 해결할 때까지 단순 해 보이는 다른 프로젝트가 빠르게 빛나기 시작합니다.

다른 사람의 사고 방식을 연기하고 있기 때문에 통제를 포기하는 것에 집착하지 마십시오. 달성하려는 것에 더 집중하십시오.

파서의 작동 방식을 이해하고 싶기 때문에 HTML 파서를 작성하는 것이 목표라면 그렇게하십시오. 사용자 입력을 삭제하거나 임의의 HTML 비트를 변환하기 위해 HTML 구문 분석기를 작성하는 것이 목표 인 경우, 구문 분석 자체보다는 구문 분석 응용 프로그램에 더 관심이 있기 때문에 아마도 잘못된 것에 집중하고있을 것입니다. . 다른 사람의 라이브러리를 이해하는 데 시간이 걸리지 않기 때문에 HTML 파서를 작성하고 싶다면 적어도이 경우에는 다른 사람이 더 많은 시간을 보냈기 때문에 시간을 낭비하고있을 것입니다 이 문제를 효과적으로 해결할 수 있습니다. 아주 사소한 경우에는 코드를 재사용하지 않고 복잡한 라이브러리에서 시간을 절약 할 수 있지만 사용하는 라이브러리가 짜증나거나 문서 및 코드 샘플을 읽는 능력이 떨어지지 않으면

반면에, 나는 당신이 결국 사용하더라도 다른 도메인에 적용 할 수있는 전송 가능한 기본 알고리즘과 데이터 구조에 더 집중할 것이기 때문에 자신의 그래프 라이브러리를 작성하는 것이 가치 있다고 말합니다. 당신이 그 문제에 대해 일할 때 다른 사람의 도서관.


문제를 생각하기위한 환상적인 프레임 워크. 매우 감사.
MikeRand

8

대부분의 초보 프로그래머는 문제의 복잡성을 크게 과소 평가합니다. 이로 인해 많은 불쾌한 상황이 발생하지만 한 가지에만 초점을 맞출 것입니다. "부풀어 진"또는 "너무 복잡한"많은 타사 라이브러리를 닫습니다. 그런 다음, 동일한 작업을 수행하기 위해 자체 코드를 작성하고 처리해야 할 모든 것을 예상하지 못했기 때문에 코드를 완전히 엉망으로 만듭니다.

웹 크롤링 및 HTML 구문 분석을 수행하십시오. 당신은 그 일들에 대해 아주 우연한 태도를 취하는 것 같습니다.-당신이 아주 작은 규모 이외의 일을 시도하지 않았다고 믿게 만듭니다. 다음은 실제 웹 크롤러가 처리해야 할 잠재적 문제에 대한 짧고 포괄적 인 목록입니다.

  • 잘못된 HTML.
  • 여러 문자 인코딩 (전 세계가 ASCII에서 실행되지 않음)
  • JavaScript에 의해 생성되거나 수정 된 링크
  • 멀티 기가 바이트 이진 파일에 연결합니다.
  • 잘못된 MIME 유형.
  • 크롤링 세션 중에 충돌이 발생했습니다.
  • 타르 구덩이.
  • SEO 컨설턴트.
  • 마이크로 소프트.

6

타사 라이브러리에 대한 초기 의존이 성장을 방해하고 프로그래머가 아닌 라이브러리 통합 자에 지나지 않을 것이라고 걱정합니다.

그건 틀렸어

타사 라이브러리에 대한 조기 의존은 우수한 라이브러리 작동 방식을 알려줍니다.

조기 개발은 항상 시간 낭비입니다. 기존 라이브러리를주의 깊게 연구 (즉, 사용)하지 않고 자신의 라이브러리를 작성하면 남은 경력 동안 바퀴를 재발 명 할 수 있습니다.

나는 그 혼란을 청소하기 위해 많은 시간을 보냈습니다.


확실하지 않습니다. 전적으로 제 3 자 라이브러리가 잘못 작성되어 실제로 나쁜 습관을 가르 칠 수 있습니다. 기본 알고리즘을 잘 이해했다면 휠을 다시 발명하는 것이 좋은 생각 일 수 있습니다. 그런 다음 다른 라이브러리 와 비교하여 다른 알고리즘과 얼마나 잘 또는 잘 스택되는지 확인하십시오. 두 경우 모두 분명히 어떤 형태의 멘토
Demian Brecht

데이, 말했다 입니다 :) 기존의 API를 공부하는 혜택
데미안 브레히트

2
@Demian Brecht : "때때로 써드 파티 라이브러리는 제대로 작성되지 않았고 실제로 나쁜 습관을 가르 칠 수 있습니다."이것이 사실 일 수는 있지만 대부분의 오픈 소스 프로젝트는 사용자 커뮤니티에 의해 심하게 심사를 받고 나쁜 아이디어는 대중의 지혜를 견뎌 내지 못합니다. 또한, "잘못 작성된"것은 n00b가 효과적으로 할 수없는 판단이다.
S.Lott

@ S.Lott : 잘 말했다 (re : n00b) :) 그리고 나는 당신이보고 있는 제 3 자 라이브러리 에 대해 조심해야한다고 생각합니다. 일부는 매우 작은 커뮤니티가 있습니다. 예를 들어 github에서 임의의 프로젝트를 탐색하면 잘못된 경로로 이어질 수 있습니다.
데미안 브레히트

2
@Demian Brecht : 다양한 라이브러리를 볼 때까지 판단을 내릴 수 없습니다. n00b가 사용할 라이브러리를 "사전 필터링"할 수있는 방법은 없습니다. 모든 라이브러리이거나 라이브러리가 없습니다.
S.Lott

4

첫 번째 문장 인이 문장은 나에게 매우 논리적으로 문제가있다.

Python 프로그래머를 처음 시작할 때 필요한 기능이 포함 된 고급 타사 라이브러리로 이동하기 전에 내 라이브러리를 작성하고 이해하는 것이 좋습니다.

기존 라이브러리와 마찬가지로 정확하고 완벽하며 완벽하게 테스트되는 초보자로서 고급 (단어) 기능 라이브러리를 효과적으로 작성할 수 있다고 어떻게 믿을 수 있습니까?

이것은 초보자로 이해하지 못하는 바퀴를 재발 명하는 데 낭비하는 막대한 시간을 언급하지도 않고 운이 좋으면 머리를 숙이고 깨달았을 때 결국 버려 질 것입니다. 어쨌든 라이브러리를 종료합니다.

예를 들어 HTML 구문 분석을 예로 들어 이것을 실현 가능하다고 언급하면 ​​초보자로서 Beautiful Soup보다 더 나은 작업을 수행 할 수있는 방법이 없습니다. 평범하고 단순하게 실패 할 것입니다. 당신이 타당하다고 생각하는 것은 당신이 고려하지 않은 거대한 복잡성 문제를 가지고 있습니다. 당신은 복잡성을 이해하기에 충분히 상세하게 문제 영역을 알지 못하며, 그로부터 실패 할 운명입니다.

내 의견은 다른 사람들이 당신의 문제를 해결하는 것을 찾을 수 없을 때까지 당신의 문제를 해결하고 이미 해결 한 것을 배우는 것입니다.


1

이것은 단지 내 의견이지만, 간단하고 재사용 가능한 코드를 위해 자신의 라이브러리를 작성하는 것이 좋습니다. 좀 더 복잡한 작업을 위해 철저하게 구축하고 테스트 한 타사 라이브러리를 사용할 수 있습니다. 강력한 라이브러리를 생성 할 수 있습니다 매우 시간이 많이 소요 그것이 무엇인지에 따라. 응용 프로그램을 작성하는 것만으로도 많은 프로그래밍 연습을 할 수있을 것입니다.


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