태그 보관물: programming-practices

programming-practices

인터뷰에서 데이터 구조가 중요한 이유는 무엇입니까? [닫은] ArrayList, LinkedList 등과 같은 Java

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

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

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

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



답변

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

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

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

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

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

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

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

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

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

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

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

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

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

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


답변

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

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

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

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

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


답변

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

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

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

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


답변

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

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

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

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


답변

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

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

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

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

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


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


답변

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

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

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

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

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


답변

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

두 가지 이유가 있습니다.

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

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