[computer-science] 어떤 컴퓨터 과학 개념을 알아야합니까? [닫은]

컴퓨터 과학의 어떤 개념이 당신을 더 나은 프로그래머로 만들었 을까요?

제 학위는 기계 공학을 전공했기 때문에 결국 프로그래머가 되었기 때문에 기초가 조금 부족합니다. 제가 최근에 배운 몇 가지 표준 CS 개념이 있는데 특히 제가하고있는 일에 대해 훨씬 더 깊이 이해하게되었습니다.

언어 특징

  • 포인터 및 재귀 (Joel에게 감사합니다!)

데이터 구조

  • 링크 된 목록
  • 해시 테이블

알고리즘

  • 버블 정렬

분명히 목록은 현재 약간 짧기 때문에 다음과 같은 제안을 기대했습니다.

  1. 내가 이해해야하는 개념,
  2. 그것들을 적절하게 이해하기위한 모든 좋은 자료들 (위키 백과는 때때로 약간 조밀하고 학문적 일 수 있기 때문에).



답변

Steve Yegge (이전의 Amazon, 현재는 Google)의 블로그 게시물을 살펴보십시오.

개발자가 알아야 할 가장 중요한 5 가지 개념에 대해 자세히 설명합니다.

  1. 기본 프로그래밍 (재귀, 파일 I / O, 형식화 된 출력, 루프 등 포함)
  2. 객체 지향 디자인 (디자인 패턴 등 포함). 감각적 인 OO 디자인을 제작하고 개념을 이해할 수 있어야합니다.
  3. 스크립팅 및 정규식.
  4. 데이터 구조 (목록, 집합, 해시 테이블, 트리, 그래프 등)와 Big O 표기법 및 알고리즘 복잡성.
  5. 비트, 바이트 및 이진수-컴퓨터 내에서 숫자가 표현되는 방식 및 조작 방법.


답변

알고리즘 의 Big-O 표기법과 Big-O 추정을 확실히 이해해야합니다. 알고리즘의 정의, 사용 방법, 중요한 이유, Big-O 추정치가 주어진 두 알고리즘을 비교하는 방법, Big-O 추정을 구축하는 방법 간단한 알고리즘을 위해.


답변

나는 당신이 컴퓨터 과학 과목을 찾고 있다는 것이 조금 웃기지 만 위키피디아가 너무 학문적이라고 생각합니다 : D

어쨌든, 여기에 특별한 순서는 없습니다.


답변

내 개발에 도움이 된 몇 가지 개념 (지능 및 코드) :

  • Lexing, Parsing, String matching, Regex
  • 메모 화
    • 캡슐화 / 범위 지정 / 폐쇄
    • 캐싱
  • 재귀
  • 반복기 / 생성기
  • 함수형 프로그래밍-John Hughes의 놀라운 기사 는 “왜”에 대해 설명했습니다.

이것들은 이산 수학의 전체 영역이지만 CS를 위해서는 진지한 소개가 필요합니다.

  • 행렬 / 선형 대수
  • 그래프 이론

하지만 마크 제이슨 – 도미 누스 강연 및 기사는 종종 펄 해커로 보내집니다, 나는 어떤 프로그래머가 특히 자신의 명확한 발표 및 실제 코드, 혜택을 누릴 것이라고 생각 높은 주문 펄 .


답변

요즘에는 매일 사용할 필요가 없더라도 객체 지향 프로그래밍에 대한 이해가 필수라고 말하고 싶습니다.

이것으로부터 나는 또한 가장 일반적인 패턴을 이해하는 것도 도움이 될 수 있다고 말할 것입니다.


답변

몇 가지 좋은 CS 개념이 확인되었지만 수학에 대한 이야기는 거의 없습니다.

나는 당신이 이산 수학 을 살펴볼 것을 제안합니다 . 코드에서 조건을 작성하는 데 도움이되는 논리적 증명으로 시작하는 다양한 유용한 문제가 있습니다. 그래프 이론과 조합은 복잡한 문제 해결 및 알고리즘 최적화에도 도움이됩니다.

우리가 수학을 공부하는 동안 선형 대수는 일반적으로 고급 컴퓨터 그래픽 클래스의 전제 조건입니다.


답변

프로그래머 역량 매트릭스 는이를 자세히 다루었지만 몇 가지를 강조하겠습니다.

  • 데이터 구조
    • B- 트리, 이항 및 피보나치 힙, AVL / 레드 블랙 트리, 스플레이 트리, 스킵 목록, 시도 등과 같은 고급 데이터 구조
  • 알고리즘
    • 트리, 그래프, 단순한 욕심쟁이 및 나누기 및 정복 알고리즘은이 매트릭스 수준의 관련성을 이해할 수 있습니다.
  • 시스템 프로그래밍
    • 전체 프로그래밍 스택, 하드웨어 (CPU + 메모리 + 캐시 + 인터럽트 + 마이크로 코드), 이진 코드, 어셈블리, 정적 및 동적 연결, 컴파일, 해석, JIT 컴파일, 가비지 수집, 힙, 스택, 메모리 주소 지정…
  • 소스 코드 버전 관리
    • 분산 된 VCS 시스템에 대한 지식. Bzr / Mercurial / Darcs / Git을 사용해 보았습니다.
  • 빌드 자동화
    • 스크립트를 설정하여 시스템 및 설명서, 설치 프로그램을 빌드하고 릴리스 정보를 생성하고 소스 제어에서 코드에 태그를 지정할 수 있습니다.
  • 자동화 된 테스트
    • 자동화 된 기능,로드 / 성능 및 UI 테스트를 이해하고 설정할 수 있습니다.
  • 문제 분해
    • 적절한 데이터 구조 및 알고리즘을 사용하고 변경 될 수있는 문제의 측면을 캡슐화하는 일반 / 객체 지향 코드를 제공합니다.
  • 시스템 분해
    • 여러 제품 라인 및 외부 시스템과의 통합으로 복잡한 시스템을 시각화하고 설계 할 수 있습니다. 또한 모니터링,보고, 장애 조치 등과 같은 운영 지원 시스템을 설계 할 수 있어야합니다.