인터뷰에서 데이터 구조가 중요한 이유는 무엇입니까? [닫은]


106

대학을 졸업했을 때 데이터 구조가 그렇게 강하지 않았다고 고백해야합니다. 졸업하는 동안 캠퍼스 전체에서 Amazon, Microsoft 등과 같은 가장 큰 기술 회사가 주로 데이터 구조에 집중하고 있음을 목격했습니다. 마치 데이터 구조 만 졸업생에게 기대하는 것처럼 보입니다.

솔직히 말해서, 나는 그것에 대해 기분이 나빴습니다. 좋은 코드를 작성합니다. 나는 코딩의 표준 디자인 패턴을 따르고, 데이터 구조를 사용하지만 ArrayList, LinkedList 등과 같은 Java 노출 API에서와 같이 피상적 인 수준에 있습니다. 그러나 회사는 일반적으로 포인터 기반 메모리 조작 및 시간 복잡성과 같은 데이터 구조의 복잡한 측면에 중점을 두었습니다.

아마도 Java 배경 때문에 당시에는 객체, 인스턴스 등과 같은 객체 지향 프로그래밍과 관련하여 이야기 할 때만 코드 효율성과 논리를 이해했지만 결코 비트와 바이트 수준으로 드릴 다운하지 않았습니다. 나는 데이터 구조에서 내 지식이 부족하다는 것을 사람들이 나를 내려다보고 싶지 않았습니다.

그렇다면 왜이 모든 것이 데이터 구조에 중점을 두는가?


36
나는 정말로 당신의 질문을 얻지 못합니다. "좋은 코드를 작성합니다"라고 말하면 어떻게 데이터 구조가 좋은 코드의 일부가되지 않을 수 있습니까? 그리고 나는 진실한 면접관이 그들에게 지나치게 집착하는 것을 의심한다.
treecoder

6
@greengit : 해시 맵을 구현하는 것과 API를 사용하는 것에는 차이가 있습니다. 인터뷰에서 내가 중요하게 생각하는 것은 그들이 나를 위해 응용 프로그램을 설명하고 중앙 데이터 구조를 구축하고 내 선택을 설명하도록 요청한 것입니다.
György Andrasek

7
무엇을 물어보고 싶은가?
temptar

13
@Jurily-컨테이너 라이브러리 사용시기를 이해하려면 기본 데이터 구조의 작동 방식에 대한 지식이 필요합니다. 사용중인 라이브러리의 시간 및 공간 복잡성을 모르는 경우 코드의 효율성에 대해 알고 있다는 것은 받아들이 기가 어렵습니다. 작은 테스트 데이터 세트에서 잘 작동한다고해서 큰 데이터 세트로 확장 할 수 있다는 의미는 아닙니다. 현실 세계에서. 시간과 공간의 복잡성을 이해하는 IMO는 클래스와 메소드 이름을 아는 것만 큼 API를 이해하는 데 많은 부분을 차지합니다. 아마도 인텔리전스가 복잡성을 말해주지 않을 것입니다.
Steve314

2
좋은 데이터 구조는 깨끗하고 간단한 코드를 제공합니다. 잘못된 데이터 구조는 복잡한 코드를 제공합니다. 올바르게하는 것이 중요합니다.

답변:


121

Microsoft와 같은 가장 큰 기술 회사는 주로 데이터 구조에 중점을 둡니다. 마치 데이터 구조 만 졸업생에게 기대하는 것처럼 보입니다.

아니요, 더 있습니다. 예를 들어, 우리는 또한 당신이 짧은 시간 내에 새로운 프레임 워크의 API 또는 프로그래밍 언어를 배울 수있는 빠른 학습자가 될 것으로 기대합니다. 최소한의 바입니다. 새로운 프레임 워크, API 또는 언어를 배우는 데 오랜 시간이 걸리는 사람은 대부분의 Microsoft 팀에서 성공적인 개발자가 될 수 없습니다.

물론 데이터 구조에 대한 단순한 지식 이외의 인터뷰에서 우리가 집중해야 할 더 많은 측면이 있습니다. 예를 들어, 모호한 사양을 처리하는 기능 또는 안전하지 않은 코드를 생성하는 코딩 패턴을 인식하는 기능 또는 12 가지 이상의 기능. 그러나 데이터 구조를 확실히 이해하는 능력은 매우 큰 것입니다.

그것은이다 특히 인터뷰는 최근 CS 졸업생에 대한 데이터 구조의 시험 지식에 편중되어있는 경우. 실제 경험이 많지 않은 최근 졸업생들은 15 년의 업계 경험을 가진 사람이 좋아할만한 종류의 일을 잘하지 못할 것으로 예상됩니다.

데이터 구조가 그렇게 강하지 않다고 고백해야합니다

자신에 대해 아는 것이 좋습니다. 본인에 대한 정보를 변경할 수 없거나 변경하지 않으려는 경우 데이터 구조가있는 기능이 필요한 작업을 신청하지 않는 것이 좋습니다.

좋은 프로그래머는 반드시 데이터 구조에 대해 잘 알고 있어야한다는 일반적인 관점이 있습니다.

좋은 프로그래머는 구축해야 할 프로그램을 만드는 데 능숙한 프로그래머라는 것이 타당합니다. 많은 프로그래머가 데이터 구조에 대한 깊은 지식이 필요없는 작업을 수행합니다. 예를 들어, 일부는 사용자 인터페이스 디자인에 대한 깊은 지식이 필요한 작업을 수행합니다. 또는 데이터베이스 정규화. 또는 무엇이든. 그 사람들은 여전히 ​​자신의 영역에서 "좋은 프로그래머"가 될 수 있습니다.

왜이 모든 것이 데이터 구조에 중점을 두는가?

팀에서는 매일 개발자들이 복잡한 데이터 구조를 설계, 구현 및 조작 하기 때문에 데이터 구조에 대한 인터뷰 질문을 합니다. 어제 우리는 4 시간 동안의 회의에서 6 명의 개발자가 특정 트리 노드에 단일 부울 필드를 추가하는 장단점을 주장했습니다. 데이터 구조를 심층적으로 이해하는 능력보다 팀에 더 중요한 기술은 없을 것입니다. 인터뷰를하지 않는 것은 어리석은 일입니다. 그것이 우리가하는 일이기 때문입니다.

데이터 구조에 대한 지식이 없어도 프로그래밍 경력에 실제로 영향을 미칩니 까?

확실히 그것은 당신이 내 팀에서 일자리를 얻지 못하게 막을 것입니다. 그러나 앞에서 말했듯이 프로그래밍은 분야입니다. 데이터 구조에 대한 지식이 필요없는 많은 종류의 컴퓨터 프로그래밍이 있습니다.

이 주제에 대한 지식은 선과 악의 프로그래머를 차별화 할 수있는 충분한 근거입니까?

아니요. 그러나 Microsoft에서 성공하지 못할 가능성이있는 개발자를 감지하는 것만으로도 충분합니다. 그것이 내가 주로 감지하는 데 관심이 있기 때문에 데이터 구조에 대한 지식은 인터뷰에서 테스트하는 요소 중 하나입니다.


10
톤 Eric에게 감사합니다! 이것은 내 질문에 대한 가장 동기 부여가 적은 답변입니다. :-)
Vamsi Emani

2
@EricLippert,이 훌륭한 답변에 감사드립니다. 데이터 구조에 대한 공식적인 지식이 부족하여 아직 물리지 않은 독학 개발자로서 내가 잃어버린 것을 보여줄 수있는 책을 추천합니까?
폐쇄 카우보이

5
@Closure Cowboy : Cormen, Leieserson 및 Rivest의 "알고리즘 소개"는 데이터 구조 및 알고리즘의 기본 사항으로 표준 교재입니다. 기능적 스타일 데이터 구조에 관심이 있다면 Chris Okasaki의 책은 매우 훌륭하지만 상당히 발전되었습니다.
Eric Lippert

2
@ClosureCowboy Princeton에서 제공하는 Coursera의 'Algorithms I'코스를 확인하십시오. 저도 스스로 가르치는 프로그래머이며 CS 이론 지식의 격차를 메우기 위해 많은 노력을 기울이고 있습니다.
Evan Plaice

133

데이터 구조에 대한 중요한 점 중 하나는 최소한 실제적인 목적을 위해 보편적이고 시간이 없다는 것입니다. 지난 30 년 동안 개발자였던 사람은 단일 / 이중 연결 목록, 이진 트리 또는 그래프와 같은 기본 데이터 구조를 알아야합니다. 두 개발자에게 물어 보면 개발자의 지식을 답변으로 비교할 수 있습니다. 프레임 워크 나 언어에 대해서는 거의 말할 수 없습니다. 두 개발자에게 Rails에 대해 물어 보면 한 사람이 다른 사람보다 많은 것을 알고 있다면 실제로 무엇을 알 수 있습니까? 질문에서 알 수 있듯이 똑똑한 개발자는 새로운 프레임 워크를 충분히 빨리 배울 수 있으므로 현재 지식을 테스트하는 것은 의미가 없습니다.

데이터 구조에 대한 지식이없는 것이 실제로 프로그래밍 경력에 영향을 미칩니 까?

예. 명확히. CRUD 응용 프로그램을 작성하는 데 평생을 보내고 싶지 않다면.

아니면이 주제에 대한 지식이 선과 악의 프로그래머를 차별화 할 수있는 충분한 근거입니까?

아니요, 충분하지 않습니다. 그러나 면접에서 충분한 것을 요구할 수있는 것은 거의 없습니다. 그리고 알고리즘 지식은 적어도 학교 밖에서 신입생에게있어 업무 경험에 대해 물어볼 수없는 더 좋은 지표 중 하나라고 말하고 싶습니다.


작은 이쑤시개, 데이터 구조 자체가 영원한 것이라고는 말할 수 없습니다. 오늘날의 하드웨어 문제를 해결하기 위해 많은 구조가 모델링되었습니다. 예를 들어 B + 트리를 사용하여 파일 페이지 검색을 최적화하지만 기본 하드웨어가 변경됩니다. 아마도 SSD에는 다른 알고리즘이 필요할 수도 있고 디스크 io보다 RAM 액세스로 더 많이 이동할 수 있습니다. 따라서 알고리즘 자체는 "영원한"알고리즘이 될 수 있지만 그 위치와 목적은
다릅니다.

3
@konrad : 그것이 "실제적인 목적"이라는 의미입니다. "더 이상 사용되지 않는"데이터 구조 나 알고리즘을 생각할 수 없으며, 면접에서 하나를 만나게 될 것 같지는 않습니다. 그리고 대부분의 알고리즘 / 데이터 구조는 현재 하드웨어보다 오래 전에 개발되어 여전히 유용하기 때문에 새로운 하드웨어 개발이 우리가 알고있는 데이터 구조에 의해 인도되는 일종의 공동 발전이 진행되고 있다고 생각합니다.
nikie

동시성이 사실상 필수가되면 사용되지 않는 많은 데이터 구조를 생각할 수 있습니다. :
Homde

9
@konrad : 그리고 만약 양자 컴퓨터가 표준이되면 몇 가지를 더 생각해 볼 수 있습니다. 그러나 나는 OP가 그때까지 그의 면접을 기다리기를 원하지 않는다고 가정한다. ;-)
nikie

3
... 또는 새로운 AI 대군
주가

45

나는 빠른 학습자이며 상당히 짧은 시간 내에 새로운 프레임 워크, API 또는 프로그래밍 언어를 배울 수 있습니다.

너무 거칠게 들리지는 않지만 반 정도 괜찮은 개발자는 비교적 짧은 시간 안에 새로운 언어 나 프레임 워크를 선택할 수 있습니다.

데이터 구조는 보편적이며 컴퓨터 과학의 기본 구성 요소입니다. 빨간색 나무는 Java, Python, PHP 등에서 구현 되든 기본적으로 동일합니다. 따라서 특정 언어 또는 특정 프레임 워크를 테스트하는 대신 고용주 (최소한 뛰어난 개발자를 찾는 고용주)는 월별 맛이 아닌 컴퓨터 과학 의 기초 를 알고 있는지 테스트합니다. 현재 사용 중입니다.

(적어도 그들은 현재 사용하고 있는 것 외에도 기본 사항 테스트해야합니다 ... 인생에서 코드 라인을 작성하지 않은 경우 컴퓨터 과학 마법사를 고용 할 필요는 없습니다)


1
컴퓨터 과학은 여기서 키워드 중 하나입니다. 데이터 구조는 일반적으로 석사에서 심층적으로 볼 수 있으며 분명히 중요한 주제입니다.
James P.

1
순수하게 기능적인 프로그래밍에 푹 빠질 때까지 데이터 구조는 보편적입니다. : P.
Tikhon Jelvis

30

F1 레이서가 빠른 차를 운전 한다고 믿 습니까? 아니요, 그들은 운전하는 자동차를 이해하고 정비사 / 엔지니어와 협력하여 자동차를 튜닝합니다. 물론 일반 드라이버 만 운전합니다.

코드를 작성 하는 일반 / 평균 프로그래머가 될 수 있습니다 . 당신은 뒤에 무엇이 있는지 이해하지 못합니다. 당신은 일을 끝냅니다. 그게 다야, 다음날에 보자.

그러나 많은 회사에서 F1 개발자를 찾습니다. 자신의 코드 뒤에 무엇이 있는지 알고 개발할 사람들. 회사가 더 나은 무언가를 만들도록 도울 사람들.

데이터 구조를 "사전 조리 된"형태로 많이 사용하기 때문에 데이터 구조를 아는 것이 좋습니다. 그들의 아이디어에서 파생 된 무언가를 만들 것이기 ​​때문에 또한 좋습니다.



잠깐, 내 프로그래머와 자동차를 운전하기 전에 친밀하게 알아가는 이상한 습관 사이에 상관 관계가 있다고 말하는가?
로비

@ 로비 : +1 LOL 당신은 물건을 분해 좋아합니까?
graffic

2
예. 아빠는 나에게 무언가를 빼내는 법을 가르쳐 주셨다 그는 일을 다시 정리하는 방법을 가르쳐주지 않고 내 평생 그것을 알아 냈습니다.
로비

17

데이터 구조에 관한 수업에서 교수가 가장 먼저 말한 것은 :이 수업 은 정말 빠르게 검색 할 수 없다는 것입니다. 그런 다음 반년 동안 최대한 빨리 검색 할 수있는 최상의 데이터 구조와 알고리즘을 찾았습니다.

여전히 그는 옳았습니다. 데이터 구조를 분석하고 주어진 문제에 올바른 데이터 구조를 적용하거나 새로운 데이터 구조를 만들려면 많은 엔지니어가 필요합니다.

  • 구체적인 문제를 모델링하기위한 추상화 찾기
  • 문제를 분해 할 수있는 것
  • 논리적 / 공식적으로 추론 가능
  • 창의성
  • 기타

Amazon과 Microsoft는 직원을 고용 할 때 다음 퀵 정렬을 발명 하기 때문에 데이터 구조에 대한 질문을 하지 않습니다 . 그들은 위에서 언급 한 특성을 가진 사람을 고용하기를 원합니다.

물론 이러한 특성을 많이 보유하고 여전히 데이터 구조를 빨아 들일 수 있습니다. 그러나 그 경우라면 데이터 구조 전문가가되기까지는 시간이 오래 걸리지 않습니다.


즉, 아직 ArrayList확장되지 않은 문제가 여전히 있습니다. 시스템이 커지면 작업을 수행하는 데 더 적합한 솔루션이 필요합니다. 또한 데이터 구조를 잘 이해하지 못하면 구체적인 시나리오에서 크게 확장되는 구조와 알고리즘을 찾아 구성 할 수 없습니다.


3
그리고에 대한 ArrayList데이터 구조를 잘 이해하지 않고 당신도하지 않을 수 있습니다 실현ArrayList꽤 스케일을 수행하고 당신은 구조와 규모의 알고리즘을 발견하고 구성해야합니다.
phoog

12

일반적으로 알고리즘과 데이터 구조는 프로그래밍에서 가장 "하드 코어"주제 중 하나로 간주됩니다. 이것은 컴퓨터 과학에 관한 많은 연구와 연구가 있기 때문입니다. 또한 수학과 과학 (많은 프로그래머)과 같은 것을 좋아하는 전형적인 "left-lobe"프로그래머를 끌어들입니다.

즉, 이러한 정보는 특히 Google과 같은 엔지니어링 중심의 직장에서 인터뷰하는 경우 인터뷰 측면에서 경력에 영향을 줄 수 있습니다. 그러나 다른 회사들은 이제 그 측면에 전혀 관심이있을 수 있습니다.

내 경험에 따르면 알고리즘 / 데이터 구조 요구는 때때로 알파 괴짜가 누가 가장 똑똑한지를 보여주기 위해 "프로그래머 엘리트주의"로 나타날 수 있습니다. 항상 무엇이 있는지 아는 것이 좋지만 빨강 / 검정 트리를 사용하거나 보이어-무어 검색을 코딩하는 방법을 알 필요가없는 다양한 프로그래밍 작업이 많이 있습니다.

주제가 흥미롭고 관심을 가질 수있는 개인적인 프로젝트가 있다면 주제에 대해 더 많이 배우는 것이 좋습니다. 그렇지 않으면 지금은 주제없이 얻을 수 있습니다.

추신. 기초적인 데이터 구조 (링크 된 목록, 사전, 해시 테이블 등)에 대한 유창성 은 모든 프로그래머 DS에 대한 필수 지식이어야합니다.


7

그렇다면 왜이 모든 것이 데이터 구조에 중점을 두는가?

두 가지 이유가 있습니다.

우선, 특정 프로그래밍 언어가 아닌 추상적 용어로 문제에 대해 생각할 수 있음을 보여줍니다. 기본 구현에 관계없이 주어진 상황에서 해시 테이블이 레드 블랙 트리보다 나은지 또는 나쁜지 선택하는 이유 를 알고 있습니까?

다른 사람들에게는 경험에 대해 단순히 거짓말을 하고 프로그래밍 능력이 거의없는 직업에 대한 인터뷰를하는 사람들 이 무섭습니다 . 데이터 구조 질문은 이러한 사람들을 제거하는 빠른 방법입니다.


논란의 여지가있는 의견을 제시하겠습니다. 한 데이터 구조 또는 다른 데이터 구조 가 효율성과 성능에 영향을 미치는지에 대한 질문입니다 . 개발자에게하지 말라고하는 것은 무엇입니까? 조기 최적화가 없습니다! 데이터 구조의 선택으로 인해 성능 문제가 발생한다는 것을 프로파일 링하여 알지 않는 한 , 선택하는 '올바른'것이 가장 익숙한 것입니다. 다른 결정은 조기 최적화이므로 악입니다!
Tom W

2
적절한 데이터 구조를 피킹 정면 적용에 기초하여 예상되는 성능 특성 독립적 기본 구현은 이다 하지 조기 최적화의 예.
John Bode

이진 힙을 통해 피보나치 힙을 선택할 수 있습니다. 힙 대 목록 사용 (힙이 적절한 경우)은 아닙니다.
user470365

5

그것들은 기본적이지만, 또한 당신은 퀴즈 졸업생들에게 무엇을 하시겠습니까? 학생들은 자신의 코스 업무 이외의 경험이 있거나 없을 수도 있습니다. 그들의 과정은 Java보다 Microsoft 기술 이상을 다루었을 수 있으며 그 반대도 마찬가지입니다. 데이터 구조는 공통점입니다.


모든 과학 공과 대학 졸업생들이 당신도 알고 있다는 것을 알아야 할 것이 없기 때문에, 다른 졸업생들을 위해 +1하십시오 .
Ian

4

종종 최상의 코드는 낮은 수준의 데이터 구조를 재발 명하지 않습니다. 이것은 특히 고급 언어에 해당됩니다. CRUD 작업에서도 낮은 수준의 데이터 구조 질문으로 향하는 경향을 발견했습니다. YMMV, 그러나 해커 과학자의 전문 지식에 중점을 둔 것은 훌륭한 개발자를 만드는 다른 기술을 어둡게합니다.

  • 프로젝트 / 시간 관리 : 1 % 더 빠르게 작동하는 새로운 연결 목록이 아니라 비즈니스가 주도하는 실제 환경을 유지할 수 있습니다.
  • 최소한의 사회적 기술 : 거만하고 만날 수없는 개발자는 앵커 일뿐입니다.
  • 새로운 것을 빠르고 지속적으로 배울 수있는 능력 : 데이터 구조는 수년에 걸쳐 거의 변하지 않지만 다른 모든 것은 변합니다. 데이터 구조는 훌륭한 기본 요소이며 모든 개발자는 데이터 구조를 잘 알고 있어야하지만 회계 담당자는 인터뷰에 참여할 때 긴 분할 기술을 테스트하지 않습니다. 훌륭한 개발자는 새로운 것을 알아 내고 좋아할 수있는 사람들입니다.

데이터 구조가 훌륭합니다. 데이터 구조가 중요합니다. 모든 프로그래머는 이해해야합니다. 그러나 우리는 이러한 기본을 제자리 밖으로 밀어내는 것에 집착했습니다. 데이터 구조에 관한 것은 아닙니다. 99 %의 경우에는 데이터 구조의 기본을 넘어서는 질문을 할 필요가 없습니다. 회계사와 면담을한다면 81을 9로 나눈 값이 무엇인지 물어보십시오. 그러나 "계산없이 큐브 루트는 98425454242412 * 4512324입니까?" 그러면 당신은 당신이 가질 수있는 합리적이고 똑똑하고 재능 있고 훌륭한 사람들의 좋은 비율을 두려워하게 될 것입니다. 기본 관계형 데이터 모델을 구축 할 수 있는지, 관련 프레임 워크에서 제공하는 향상된 배열 구조를 사용할 수 있는지 묻고, 바이너리 검색이 플랫 검색보다 빠를 때 설명 할 수 있는지 물어보십시오. 그들이 그 일을 할 수 있다면, 가장 훌륭하고 전문적이고 가장 창조적 인 것을 찾으십시오.

나는 Joel의 글을 좋아하지만 그의 "Java Schools"가 잘못되었다고 생각합니다. 누군가가 C ++ 마스터 링을 넘어서 똑똑하다는 것을 증명할 수있는 많은 것들이 있습니다. 생각해보십시오. 포인터 산술에 대해 묻지 않고 10 분 동안 누군가와 이야기 할 수 있으며, 일을 끝내고 물건을 알아낼 수있는 유형인지 아닌지에 대한 좋은 아이디어를 얻을 수 있습니다. 우리는 이런 식일 필요는 없습니다 :

면담 자 : "당신의 업적에 대해 말해주세요."

코더 : "마지막 위치에서 저는 10 억 달러 규모의 금융 회사를위한 맞춤형 ERP 시스템의 유일한 개발자였습니다. 우리는 일정보다 몇 달 앞당겨서 시스템은 지난 3 년간 생산되었습니다."

면담 자 : "명확하게 해주세요. 프로그래밍 성과 에 대해 말씀해주세요 "

코더 : "음 ..."

면담 자 : "예를 들어, 자신의 링크 된 목록을 만든 적이 있습니까?"

코더 : "... [나가기]]"


흥미있는-좋은 목록. 조금 다른 모습은 어떻습니까? 1. 프로젝트 / 시간 관리 : 데이터 구조가 인터뷰 시간의 작은 부분 만 낭비하는 방식으로 일 준비 할 수 있습니다. 2. 최소한의 사회적 기술 : 면접관이 일반적으로 더 흥미로운 영역으로 진행하기 전에 기본 데이터 구조를 신속하게 확인하기를 원한다는 것을 이해할 수 있는 개발자 . 3. 데이터 구조의 기초에 대한 지식이 부족하여 생길 수있는 방해없이 새로운 것을 빠르고 지속적으로 배울 수있는 능력 .
gnat

@ gnat-너무 좋습니다. 내가 얻는 것은 기본에 대한 가장 심층적 인 이해가 특정 시점을 넘어서는 전체적인 능력에 대해 말하지는 않지만 그 반대의 경향이 있다는 것입니다. 데이터 구조는 대부분의 사람들이 다른 사람 (보통 교사)이 가르치는 것입니다. 저는 그들이 실제로 배울 수있는 것이 무엇인지 알고 싶습니다. 좋은 프로그래머는 모범 사례를 기반으로 합리적인 시스템을 설계 할 수 있습니다. 훌륭한 프로그래머는 최악의 방법을 사용하여 끔찍한 프로그래머가 작성한 미친 시스템을 배우고 작동시킬 수 있습니다.
Morgan Herlocker

1
ERP 시스템에서 일한 사람이 팀에 적합하지 않다고 생각할 수 있습니다.
Christopher Mahan

4

좋은 프로그래머가되는 것은 언어와 프레임 워크를 배울 수있는 것이 아닙니다. 복잡한 문제에 대한 솔루션을 구축 할 수 있어야합니다. 이러한 솔루션이 효율적이고 신뢰할 수 있으려면 거의 항상 좋은 알고리즘과 적절한 데이터 구조 사용이 필요합니다. 데이터 구조를 아는 것만으로는 충분하지 않습니다. 데이터 구조가 문제에 적합한 것을 사용하기에 충분하다는 것을 이해해야합니다. 목록과 맵은 몇 가지 유용한 기능을 제공하지만 비용이 많이 들며 잘못된 기능을 사용하면 소프트웨어 성능이 크게 저하 될 수 있습니다.

좋은 면접관이 이것을 알고 당신이 그의 팀이나 회사에 가치가 있는지 판단하려고합니다. 2 년 후에 사용하게 될 언어는 매우 다를 수 있지만 효과적인 알고리즘과 데이터 구조에 대한 요구는 변하지 않습니다.


2

데이터 구조, 시간 복잡성, 메모리 조작 및 포인터는 모두 컴퓨터 과학자라고하는 사람이 선천적으로 알아야하는 기본 사항입니다. 모든 코드 원숭이는 언어를 배우고 사용하는 방법을 배울 수 있지만 CS 전문가와 학생들이 자신을 차별화해야하는 곳은 링크 된 목록이나 해시 맵을 사용하는 방법뿐만 아니라 WHY를 아는 것입니다.

WHY는 기본 스크립트 키디, 코드 원숭이 및 컴퓨팅 세계의 그런지와는 별개로 우리를 실제로 차별화시킵니다. 연결된 목록 대신 해시 테이블을 사용하는 이유, 내 해시 테이블의 클러스터 밀도가 약 .6-.8이어야하는 이유는 여기에 이중 연결 목록 대신 순환 연결 목록을 사용해야하는 이유입니다. 왜 내 코드가 최악의 경우 효율 'x', 평균 경우 'y'로 실행되어야합니까?

이러한 기본 데이터 구조와 사용 방법에 대한 지식 (어쨌든 모든 프로그래머가 어떻게해야하는지)뿐만 아니라 사용되는 언어에 구애받지 않는 이유는 이러한 경우에 더 많은 것을 찾는 경향이 있습니다.

많은 곳에서 당신이 더 익숙한 언어로 코드를 작성하게 할 것입니다. 그러나 C는 더 이상 프로그래밍 세계의 언어가 아니기 때문에 의사 코드를 구성하는 것은 엉망이 될 수 있습니다. 대부분의 경우 의사 코드 / p & p 코드가 실제로 가르쳐지지 않은 경우 처리가 불가능합니다.


0

데이터 구조는 모든 프로그램의 기본 기반입니다. 반드시 그들에 대해 깊이 이해할 필요는 없지만, 그들이 어떻게 작동하는지 반드시 알아야합니다.

왜? 모든 코드가 데이터와 상호 작용하고 데이터를 조작하기 때문입니다. 데이터 세트를 구조에 저장할 수 없으면 사용할 수 없습니다. 데이터는 집의 건축 자재와 같습니다. 그것을 구조에 넣을 때까지 쓸모없는 보드 더미가 있습니다.

당신이 생각하고 데이터 세트를 정의하는 방법에 대한 결정하면, 다음, 당신은 일, 듀오의 고전적인 알고리즘 부분을 수행하는 데 사용할 수 있습니다. 작성하는 모든 단일 프로그램 은 데이터 구조를 사용하지만 대부분의 경우이 구조는 거의 존재하지 않을 정도로 단순합니다. 상태 데이터에 대한 몇 가지 변수가 완료되었습니다!

사소한 프로그램을 넘어 서면 거의 모든 데이터 구조가 필요합니다. 모범 사례와 수학으로 마천루를 설계하는 전문 건축가 또는 즉시 건축을 시작하는 조 밥 삼촌 중 어느 것을 선호하십니까?


-2

무엇을 구축하기 위해 @Pelshoff는 말한다 , 그것은 당신이 무슨 일을하는지 알고 보여주는 것입니다. 모든 것에 LinkedList를 사용하면 현재하고있는 일을 모르거나 문제를 멈추고 생각하지 않는다는 것을 알 수 있습니다. 또한, 적어도 데이터 구조 과정에서는 대규모 데이터 세트를 처리 할 때 매우 중요한 데이터 구조에 대한 기본적이고 복잡한 이론을 다루었습니다. 아마존이나 마이크로 소프트와 같은 회사가 그런 일을하는 이유가 여기에 있습니다.

데이터 구조 클래스를 사용하기 전에 중요하지 않다고 생각했지만 링크 된 목록 (또는 ArrayList)이 실용적이지 않을 때 또는 그 단점이 중요한 점을 인식 할 수 있다고 생각했습니다.


"모든 것에 LinkedList를 사용한다면, 당신이하는 일을 모른다는 것을 보여줄 수 있습니다"또는 Lisp 프로그래머 인 :-)
Peter Alexander

@ 피터-내 요점을 증명할 것입니다 당신은 당신이 무엇을하는지 모른다! ;)
Jetti

이것은 삭제 된 답변 에 대한 데드 링크 (dead link)를 기반으로하는 것으로 보입니다 . 독자에게는 혼란 스럽습니다. 이 문제 를 해결하기 위해 편집을 하시겠습니까 ?
gnat

-2

좋은 코드 작성 여부는 주관적인 진술입니다. 기능 코드가 항상 좋은 코드를 만드는 것은 아니라는 점을 아는 것이 중요합니다.

즉, 데이터 구조는 프로그래머로서 지시하는 비하인드 작업자와 유사하기 때문에 중요합니다. 실제로 수행중인 작업을 이해하지 않고 구조에서 메소드를 호출 할 수 있으며 실제로 데이터가 저장되는 방식을 얻지 않고도 구조를 활용할 수 있지만 이러한 세부 사항을 알면 하나의 구조를 사용하는 것이 적절한 경우 더 잘 이해할 수 있습니다 다른.

예를 들어 이중 연결 목록을 통해 양방향으로 순회 할 수 있고 단일 연결 목록을 통해서만 전달하면 데이터를 저장할 때 중요한 구조를 결정하는 데 도움이됩니다. 단일 링크 목록은 잠재적으로 메모리 소비 측면에서 오버 헤드가 낮을 수 있으므로 (이전 요소에 대한 포인터가 없기 때문에) 더 많은 교육 결정을 내릴 수 있습니다. 적절한 구조를 사용하여 메모리를 절약 할 수 있습니다.

이것들은 단지 작은 예일뿐입니다. 궁극적으로 데이터 구조에 대한 친밀한 지식 없이도 경력을 쌓고 있다고 느끼면 더 배울 필요가 없습니다. 그러나 어떤 일이 벌어지고 있는지 이해하면 실제로 기능 코드를 좋은 코드로 바꿀 수 있습니다.


-3

데이터 구조는 당신이하고 싶은 많은 것들의 빌딩 블록입니다. 각 데이터 구조의 용도, 약점 및 장점을 알고 있으면 쉽게 문제를 해결할 수 있습니다.

예를 들어 수천 개의 객체를 관리해야했습니다. 가끔씩 ID에 따라 객체의 타임 스탬프를 업데이트해야합니다. 가끔씩 X 분 이상 업데이트되지 않은 객체를 제거해야했습니다.

데이터 구조를 알고 있으면 문제를 쉽게 정의 할 수 있으며 솔루션을 쉽게 찾을 수 있습니다. 충분한 데이터 구조를 모르는 프로그래머가 솔루션을 만들려고 할 때 그의 솔루션은 어색했습니다. 그는 당신과 같습니다-똑똑하고 코드 프로그래머이며 프레임 워크를 빨리 배울 수 있습니다. 그러나 데이터 구조에 대한 지식이 없으면 그는 스스로 바퀴를 발명해야했습니다. 더구나-그는 자신이 이해하지 못한 데이터 구조 (레드 트리 (자바의 TreeMap))와 같은 데이터 구조를 기반으로하기 때문에 간단한 솔루션을 이해하는 데 어려움을 겪었습니다.

따라서 중요한 것은 각 데이터 구조를 생각할 필요없이 언제 어떻게 사용해야하는지 아는 것입니다. 그러나 실제로 작동 방식을 이해하지 않고는 달성 할 수있는 방법이 없다고 생각합니다.

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