학부생이 알아야 할 CS 과목 [폐쇄]


34

대학에서는 이론에 관심이 없었습니다. 나는 그것을 읽지 않았다. 아무리 노력해도 내용을 읽을 수 없었으며 실제로 실제로 무슨 일이 있었는지 알 수 없었습니다. 예를 들어, 오토마타 이론에 관한 과정에서 교수님은 수학적 측면과 관련된 모든 것을 말해 주셨지만 실제로는 어디에 사용될 것인지 언급하지 않았습니다. 이것은 단지 예일뿐입니다.

나는 대학에 진학하고 회사와 인턴을 맺고 프로젝트를 진행했으며 고맙게도 평균 이상으로 성적에 신경 쓰지 않았습니다.

이제 CS 학생이 어떤 과목을 절대적으로 그리고 긍정적으로 알아야하는지 알고 싶습니다. 업계와 관련이있을 수있는 과목. 손에 자유 시간이 있기 때문에 더 잘 이해하는 데 도움이 될 것입니다.

당신의 제안은 무엇입니까? 하나는 알고리즘이 하나의 주제입니다.


3
정규식은 오토마타 이론을 기반으로하며, 구문 분석해야 할 경우 도움이됩니다. 나는 학교에서 내가 해왔 던 일과 관련이없는 것을 행하고 배웠지 만, 적어도 내가 한 일에 대해 배운 것만 큼 많은 것을 말합니다. 내가 배운 것은 모든 상황에서 현장에서 쓸모가 없을 것입니다.
David Thornley

2
나는 당신의 유형 ... jk (일종의) 작업을 싫어. 내가 너라면, 먼저 학교에서 알아야 할 것들을 검토하는데 시간이 걸릴 것입니다. 그러면 다음 인터뷰에서 바보처럼 보이지 않을 것입니다. 그 후 나는 실제 세계에서 사용될 수있는 것처럼 보이는 합리적인 양의 데이터 구조와 알고리즘을 배울 것입니다. 당신이 원하는 곳을 알아 내야합니다. 게임 개발자라면 아마도 선형 대수, 3D 그래픽, 계산 기하학이 필요할 것입니다. 일반적으로 데이터 str, alg, 데이터베이스, os 및 컴파일러를 최소한 검토하고 학습을 계속해야합니다.
Job

산술을위한 특정 응용 프로그램의 이름을 지정하는 것과 같은 방식으로 자동화 응용에 대한 특정 응용 프로그램의 이름을 지정하는 것은 어렵습니다. 과장 일 수도 있지만 그 정도는 아닙니다. 상태 다이어그램은 종종 유용하며 코드에서이를 조작하는 것은 많은 목적에 유용합니다. 의사 결정 트리 (digraphs로 최소화 됨)는 비교적 최근의 예이며, 컨테이너의 키로 상태 모델 (표준 형식)을 사용해야했습니다. 응용 프로그램 내에서 응용 프로그램을 볼 수 없다면 간접 코드 계층을 추가하는 측면에서 생각하십시오.
Steve314

1
아래에 훌륭한 CS 답변이 많이 있지만 BSCS를 얻은 후 15 년 동안 가장 유용한 몇 가지를 놓친 것처럼 질문을 제한함으로써 사람들을 차별화 시켰습니다. 소그룹 커뮤니케이션 및 팀워크 기술 : 어리석은 것처럼 말 / 언어 / 극장 부서로 가서 "소규모 그룹 커뮤니케이션"또는 "팀 / 그룹 리더십 / 관리"와 같은 수업을 들으십시오. 경영진을 계획하지 않더라도 거기에서 선택한 기술은 더 나은 엔지니어와 팀원이 될 것입니다.
cabbey

답변:


41

믿거 나 말거나, 나중에 나에게 매우 중요한 것으로 밝혀진 것 중 하나는 컴파일러 구성이었습니다. Lex와 Yacc를 사용하는 최신 namby-pamby 버전은 아닙니다.

자신 만의 심볼 스캐너와 파서를 처음부터 작성하는 REAL 컴파일러 구성.

이것은 결코 다시는 사용하지 않을 것이라고 생각한 것입니다. 그러나 지난 20 년 동안이 과정은 4 배가 넘는 금 무게를 입증했습니다. 내가받은 명령 프로세서, 모든 수신 메시지 스캐너, 모든 사용자 디스패처, 모든 스크립트 인터프리터는 해당 과정의 원칙을 사용했습니다. 그렇게하면 삶은 달콤하고 명확하며 단순합니다. 그리고 나는 그것을하지 않은 동료에게 모든 정보를 주었다. 그는 실제로 추상 기계를위한 컴파일러를 작성해야했다. 내가 추가 할 수있는 것은 상업적으로 매우 성공적이었습니다.

만약 내가 한 과목에서 대학 강의 강사에게 감사를 표했다면, 이것이 그럴 것입니다. 그것 없이는 내가 가져 갔지만 솔루션은 훨씬 더 나빴을 것입니다.

(누군가가 뛰어 오르기 전에 "잘 말하면 lex와 yacc를 사용할 수 있었다 ..."라고 대답 할 수 있습니다. 아마도 시스템에 따라 크게 달라집니다. 어떤 경우에는 프로그래밍 언어가 C가 아니 었습니다 (예 : PL / M 및 Ada), 어떤 경우에는 플랫폼에서 쉽게 구할 수있는 Lex 또는 Yacc를 사용할 수 없었습니다. 기본 사항을 알면 문제를 해결하기 위해 일부 도구를 구부리는 방법을 찾으려고 손을 짜는 대신 솔루션을 사용할 수 있습니다.)


6
+1 컴파일러는 uni에서 가장 좋아하는 과정 중 하나이며 항상 유용합니다. 나는 lex / yacc / bison을 거의 사용하지 않았다. 기본은 훨씬 더 구체적으로 사용된다.
Orbling

다른 이유로도 전적으로 동의합니다. Lex와 Yacc를 사용해도 코드 생성기를 작성하는 방법을 알게 된 것은 객체 지향 프로그래밍에서 처음이자 최고의 몰입이었습니다.
피터 터너

코드 생성기를 일반 C 또는 다른 비 OO 언어로 작성할 수 있습니다 (및 방법도 알고 있어야 함). 그런 다음 매우 큰 절차 코드를 작성하고 파서 / 스캐너 / 코드 생성을 알기 쉽고 이해하기 쉬운 단계로 나누는 교훈을 얻었습니다.
quick_now

+1 컴파일러에는 너무 많은 패턴과 원리가 통합되어있어 디자인과 코드를 완성한 후에 완전히 다른 시각으로 볼 수 있습니다.
Andrew T Finnell

2
"이것은 결코 다시는 사용하지 않을 것이라고 생각한 것입니다." 내가 젊었을 때마다 내가 달러를했다면 나 자신에게 말했다 ....
Nick Spreitzer

37
  1. 데이터 구조 / 알고리즘 특히 그래프. 그래프 관련 알고리즘을 사용한 실제 상황은 놀랍습니다. 데이터 구조 또는 알고리즘이 적절한시기의 특성을 아는 데 중점을 둡니다. 예를 들어 문제를보고 동적 프로그래밍 / 욕심 많은 알고리즘을 사용하는 것을 아는 것이 중요하며 많은 시간을 절약 할 수 있습니다.

  2. 계산 복잡성에 대한 실무 지식. 기수 정렬의 하한이 무엇인지 머리 꼭대기에서 알 필요는 없지만, 특히 성능이 중요한 프로젝트의 경우 쓰기 작업의 최악의 실행 시간이 중요한지 파악하는 방법을 알아야합니다.

  3. OS 개념. 메모리 관리, 스케줄러 등 모든 개발자가 작성하는 코드가 지속적으로 상호 작용한다는 점을 감안하면 운영 체제에 대한 확실한 이해가 필요합니다.

  4. NetSec. 개발과 관련된 기본 보안 문제 (버퍼 오버플로, xss, SQLI 등)에 대해 잘 알고있는 개발자는 거의 없었습니다. 업계에서 성공하기를 원한다면 이것은 필수입니다. 다음 큰 것을 쓸 수 있다면 좋지만 데이터를 보호하지 않으면 오랫동안 많은 사용자가 없습니다.

  5. 프로그래밍 패러다임. OO / 기능 / 프로시 저럴 프로그래밍의 특징과 차이점을 알아야합니다. 내가 가진 최고의 저학년 수업 중 하나는 언어 자체로 fortan, scheme, prolog 등을위한 간단한 20 개의 통역사를 작성하는 것이 었습니다. 노출 자체만으로도 소프트웨어 개발의 기본 개념을 이해하는 데 실제로 도움이됩니다.


1
+1 전체 목록은 거의 필요합니다. (4) 특히 현대의 분산 시대에는 그 어느 때보 다 중요합니다.
Orbling

1
데이터 구조 / 그래프 +1 Hashtable을 올바르게 사용하는 방법을 모르는 사람 또는 링크 된 목록 대신 어떤 경우에 간단한 배열이 매일 나를 놀라게하는 이유를 알고있는 프로그래머의 수입니다.
Machado

패러다임 프로그래밍의 경우 +1 다른 유형의 언어 간의 대비를 잘 이해하면 많은 도움이됩니다.
apoorv020

19

졸업 요건을 충족한다고해서 반드시 최고의 컴퓨터 과학자가되는 것은 아닙니다. 일반적인 대학 커리큘럼의 경우, 반드시 배워야 할 10 가지 사항은 다음과 같습니다.

  1. 경제의 기초 - 보완 및 대용품 과 같은 주제를 다루는 입문 과정 은 더 큰 경제에서 일하거나 단순히 이해하는 데 필수적입니다. Giffen Good의 개념이 반드시 도움이되는 것은 아니지만 외부 성에 대해 아는 것이 좋습니다. 또한 당신이 생각했던 것보다 더 많은 상황이 윈윈이라는 것을 이해하는 데 도움이 될 수 있습니다.

  2. 증거를 작성하는 방법 -모든 컴퓨터 과학 전공은 증거를 작성하는 방법을 알아야합니다. 균형 잡힌 아침 식사의 일부인 이산 수학은 중요하지 않습니다. [유도는 하나의 증명 기법 일 뿐이며 실제로 증명에 대해 많이 몰라도 얻을 수 있습니다.] 실제로 증명을 작성하려면 대수 또는 실제 분석 과정이 필요합니다. 그리고 대수학이란 여러분이 고등학교에서 수강 한 과정이 아니라 그룹 이론 또는 추상 대수학을 의미합니다. 완전한 이점을 얻으려면 같은 용어로 대수와 실제 분석을 수행하십시오.

    증거 작성이 필수적인 이유는 무엇입니까? 프로그래밍 이니까! 프로그래밍 방법을 처음 알게 된 시점을 생각해보십시오.if그리고 루프, 당신은 서로 관련하여 어디에 배치 해야할지 직감이 없었을 수도 있습니다. 그러나 이제는 같은 일이 완전히 자연스럽게 느껴질 것입니다. 증명을 작성하는 것은 매우 유사합니다. 당신이 배우는 트릭 세트가 있으며, 일단 배우면 아주 다르게 보입니다.

  3. 작성하는 방법 - 서면 의사 소통 능력은 업계 또는 학계에서 일 것이다 여부, 필수적이다. 다른 주제에 관한 글쓰기 과정이 아니라 기계공 과정을 찾을 수 있다면 가장 좋습니다. 즉, 많은 학교들이 작문 코스를 특별한 주제로 만들어서 관련성이 높거나 흥미롭게 만들려고합니다. 코스의 "지루한"버전으로 가십시오.

  4. 확률과 통계 -코스를 통해서만 올릴 수있는 것들이 있습니다. CS 주요 요구 사항 (이산 수학, 단일 변수 및 다중 변수 미적분학 및 선형 대수를 제공해야 함) 및 대수 및 / 또는 실제 분석과 함께 통계를 선택하면 수학에 약간의 도움이 될 수 있습니다. 학습 통계는 프로젝트에서 다른 과학자들과 협력하는 데 도움이 될 수 있습니다.

  5. 현재 인기있는 주제 -지난 수십 년 동안 데이터베이스 나 객체 지향 프로그래밍 일 수있었습니다. 오늘날에는 웹 프로그래밍 또는 서비스 지향 아키텍처 일 수 있습니다. 현재 유행하는 것이 무엇이든, 그 과정을 밟아야합니다. 유행이 무엇인지 볼 수 있다면.

  6. 정지 문제 -대부분의 문제는 기계로 해결할 수 없습니다. 이것은 우리 문화가 더 이상 충격을받지 않도록 잘 흡수했다는 상당히 깊은 생각입니다. 라디오, Goedel 및 원자 폭탄도 마찬가지입니다. 포스트 모더니즘 예술과 냉전이 되어서야 다시 한 번 이러한 개념에 대처할 수있었습니다. 그러나 계산 성 이론을 이수하면이 놀라운 증거에 다시 민감해질 수 있습니다.

  7. 순수 기능 프로그래밍 -연구를하거나 일부 소수의 회사에서 일하지 않는 한 순수 기능 프로그래밍에 들어 가지 않을 것입니다. 그러나 이것이 더 나은 프로그래머가되는 데 도움이 될 것입니다. 그 이유는 많은 새로운 형태의 추상화와 교회 번호, 연속 및 모나드, 재귀와 같은 개념을 배우고 이러한 도구를 다음 Java 프로그램에도 적용 할 수 있기 때문입니다.

  8. P와 NP- 좋아, 이것은 이미 중요한 길에 있지만 어쨌든주의하십시오. 다른 사람이 NP를 "비 다항식"이라고 잘못 부를 때이를 바로 잡을 수 있기를 원합니다.

  9. 싫어하는 과정의 주제 -이 과정은 너무 낮은 수준의 이론, 너무 이론적 인 과정 또는 CS가 아닌 과정으로 너무 불쾌하거나 지나치게 힘들거나 지루한 과정 일 수 있습니다. . 이와 같은 과정이 문제가되고 다른 사람들에게 자신이 왜 그렇게 기쁘지 않은지 다른 사람들에게 설명하면 스스로 배울 필요가 없다는 것을 알게됩니다. 과정을 수강함으로써! 아마도 당신은 코스의 자료를 배우지 않을 것이지만, 자신의 한계에 대해 배우고 아마도 자신에게 부여한 정당성에 대해 더 많이 배울 것입니다. [힌트 : 보통 약합니다.]

  10. CS가 아닌 코스는 당신이 좋아할 것입니다 -결국, 당신은 약간의 재미를 가져야합니다. 이 과정은 아마도 당신이 가장 적게 얻을 수있는 과정이지만 어쨌든 가져 가십시오. 한 번 해봐 많은 과정을 좋아한다면, 당신에게 좋을 것이지만,이 목록의 나머지 과정을 다루지 않는지 확인하십시오.

나의 접근 방식은 실제로 수강 할 수있는 과정을 바탕으로 실용적이었습니다. 그리고 배우기 쉬운 학습 목표에 중점을 두었습니다. 참고 :이 답변은 모든 컴퓨터 과학 전공이 배워야 할 10 가지 사항 에 대한 블로그 게시물에서 수정되었습니다 .


downvote에 대한 설명이 도움이 될 것입니다. 아마도 대답을 바꿀 수 있고 마음을 바꿀 수 있습니다.
Macneil

교수님, 저는 귀하의 답변에 투표하지 않겠습니다.하지만 문제를 해결해야 할 것이 있습니다. 증빙 서류 : 현재까지 나는 숫자가 홀수인지 짝수인지를 묻지 않으면 여전히 불연속 증거를 쓸 수 없습니다. 나는 이것과 산업 사이의 연결을 보지 못합니다. "문제 해결 측면이 있습니까?"가 누락되었을 수 있습니다. 나는 수학적 유도 또는 펌핑 렘마로 뇌를 감쌀 수 없었습니다. 나는 그것이 속도를 늦출 것이라고 생각하지 않습니다.
Bryan Harrington

증명을 작성하는 것은 프로그램을 작성하는 것과 같습니다. 예를 들어, a * 0 = 0을 증명하는 방법을 배우는 것은 수학의 FizzBuzz와 비슷합니다 (물론 조금 어려울 수도 있습니다). 처음에는 위협적인 것처럼 보이지만 곧 프로그래밍을 배우는 것처럼 작은 트릭을 선택합니다. 증명에는 재귀 적 및 구조적으로 생각하는 데 도움이되는 다양한 구조가있을 수 있습니다. 내가 말했듯이, 이산 수학 과정은 실제 증거를 배우기 위해 그것을 자르지 않습니다. 이를 위해서는 그룹 이론이나 실제 분석이 필요합니다.
Macneil

칭찬에 대한 지식은 확실히 유용하지만 보완에 대한 지식은 경제학과 더 관련이 있다고 생각합니다.
ijw

1
@ijw : CS 학생들의 경제학에 관한 Joel은 다음과 같이 읽을만한 가치가 있습니다 : joelonsoftware.com/articles/CollegeAdvice.html
Macneil

8

인터뷰가 많은 회사 대표 및 친구들과 대화 한 후 :

  • 데이터베이스
  • 죄송합니다
  • 알고리즘
  • 데이터 구조

신입 사원 에게는 "필수"인 경향이 있습니다 (또는 "강력 추천"과정).

유용한 다른 과정은 컴퓨터 보안, 조립 및 기계 아키텍처입니다. 많은 교수님들도 저에게 컴파일러 과정을 추천했습니다. 또한 시간이 있다면 그래프 이론, 이산 수학 및 조합과 같은 수학 과정을 강력히 추천합니다. 대부분의 CS 과정이 선호하는 수업에서 많은 추론 기술을 배우지 만 매우 복잡한 프로그램을 작성할 때 매우 유용합니다.

희망이 도움이됩니다!


1
OOP 및 데이터 구조에 동의합니다.
apoorv020

4
기본 데이터 구조 ... sooooooooooo가 중요합니다. OOP보다 더 중요하다고 생각합니다. 정보를 저장하고 구성하는 방법에 대해 생각할 수 있어야합니다. 또한 임베디드 시스템에서 데이터 구조의 메모리 내 레이아웃은 생명을 위협하는 요소입니다.
quick_now

3
수학 수업 +1 또한 큰 문제 / 시스템을 추적하는 법을 배우는 데 도움이됩니다.
Michael K

1
네트워킹도 좋은 방법입니다.
Keyo

응? OOP없이 Haskell 또는 C로 프로그래밍 할 수 있습니다 ... 널리 사용되지만 기본이라고 생각하지는 않습니다. 반면에 다양한 패러다임에 노출되는 것은 매우 유용합니다.
Matthieu M.

6

그것은 학위로 무엇을 계획 하느냐에 달려 있습니다. 대부분의 CS 전공은 어떤 종류의 소프트웨어 엔지니어로 끝납니다. 이를 염두에두고 왜 더 많은 사람들이 소프트웨어 엔지니어링을 전공하지 않는지 잘 모르겠습니다. 특히 공공 기관에서 사용할 수있는 소프트웨어 엔지니어링 프로그램이 충분하지 않은 것 같습니다.

나는 뒤에서 삽니다. 제가 함께 일하는 모든 개인은 EE 학위 또는 CE 학위를 받았으며 이는 부분적으로 대학에 진학 할 때 "오래된 녀석들"이 많은 CE 프로그램을 이용할 수 없었기 때문입니다. 따라서 임베디드 필드에서 작업하려면 하드웨어 배경이 바람직하다는 것이 분명합니다.

그러나 당신이 일하고자하는 분야에 관계없이 모든 프로그래머가 프로그래밍 과정을 수강해야한다고 생각합니다. 당신은 그것을 사용하지 않을 수도 있지만, 함수 호출 중에 프로세서 레벨에서 일어나는 일, 인터럽트 처리 방법, 메모리 구성 방법 또는 다른 주소 지정 모드 사용 방법을 정확하게 알려줍니다. 이 모든 것이 당신을 더 나은 프로그래머로 만들 것이라고 믿습니다.

또한 분명하지는 않지만 특정 플랫폼에 대한 데이터 구조 및 알고리즘을 고려할 때 이들 모두가 중요한 주제입니다.


+1 컴퓨터 과학 학위는 다양한 주제 / 기술에 대한 경험을 제공하기 때문입니다. 소프트웨어 설계 과정에주의를 기울여야합니다.
Mr. Ant

+1 조립시 항상 스택 맨 아래에서 발생하는 일을 진정으로 이해하는 것이 좋습니다. 모두가 하드웨어를 알고 있다면 좋을 것입니다. 그러나 많은 사람들에게는 너무 한 걸음이 될 것입니다.
Orbling

5

귀하의 질문에 답변하는 두 가지 방법이 있습니다. 두 가지를 모두 시도하겠습니다. 첫 번째 방법은 잠재적 인 취업 시장 관점, 코딩 기술 등을 살펴 보는 것입니다. 여기 내 목록이 있습니다.

  1. 데이터 구조
  2. 알고리즘 분석
  3. 객체 지향 프로그래밍
  4. C ++ 또는 Java의 특정 과정
  5. 운영체제
  6. 사용자 인터페이스 디자인
  7. 병렬 프로그래밍

두 번째 방법은 약간 추상적 인 관점에서 사물을 보는 것이며, 아는 사람도 약간 철학적 일 수 있습니다. 다음 목록은 직업 시장에서 요구하는 가장 인기있는 기술을 가지고 있지 않을 수도 있지만,이 과정에서 나올 때까지는 소프트웨어 개발 기술에 대해 깊이 이해할 것입니다.

  1. 유한 언어 및 오토마타 이론
  2. 컴파일러 구성
  3. 그래프 이론
  4. 인공 지능

자신의 의견으로는 필수적이라고 생각하는 일련의 과정을 열거하지 말고, 목록을 지시 한 이유와 경험을 제공하십시오.

2

또한 소프트웨어 엔지니어링 또는 디자인 실습을 목록에 추가하지만 그 내용은 일반적으로 업계의 학생들이 선택합니다.

또한 제 생각에 (많은 경험으로 뒷받침되지는 않지만) 회사는 데이터베이스와 같은 과정에서 가르치는 대부분의 이론적 인 것들을 실제로 원하지 않기 때문에 사람들 이 이러한 것들을 이해하고 사용할 수 있기를 바랍니다 .

편집 : downvote 때문에 내 대답을 설명하고 싶습니다. 저는 전년도 컴퓨터 과학 학생이며 제 경험은 현장의 주요 회사와의 인턴쉽 및 면접을 바탕으로합니다. 내 경험상 사람들은 인터뷰 나 직장에서 복잡한 알고리즘을 사용하거나 매우 복잡한 데이터 구조를 코딩 할 필요가 거의 없습니다.

데이터베이스를 생성하고 사용하고, 소스 컨트롤을 사용하고, 올바르게 디버깅하는 방법을 알고, 디자인 패턴을 사용하는 방법을 알고 있다면 더 유용합니다. 그러나 앞서 말했듯이 이러한 기술은 일반적으로 업계에서 선택되며 과정에서 다루지 않습니다. 소프트웨어 엔지니어링 / 디자인 실습에는 일반적으로 모든 규모의 기술을 익히는 데 유용한 중간 규모의 프로젝트를 구축하는 것이 포함됩니다.


귀하의 경험과 다른 사람들이 왜 그러한 과정을 수강해야하는지에 대한 자세한 내용을 알려주십시오.

@Mark : downvote의 근거를 설명 할 수 있습니까?
apoorv020

@ apoorv020 소프트웨어 엔지니어링 또는 설계 실습을 권장하는 이유 를 설명하지 않으면 답변이 유용하지 않습니다. 편집 한 내용에 여전히 추천 이유가 설명되어 있지 않습니다.

@ apoorv020 소프트웨어 엔지니어링 또는 디자인 실습을위한 유일한 상환 가치는 일반적으로 중간 규모 (무엇이든) 프로젝트를 빌드한다는 것입니까? 이 과정을 수강하면서 개인적으로 무엇을 배웠습니까?

그들은 잘 알고 있지만 이것들은 CS 과목이 아닙니다.
Thomas Owens

2

내가 매일 사용하는 대학에서 배운 것들 :

  • 객체 지향 설계 방법론
  • 디자인 패턴
  • 정규식
  • 기본 알고리즘 및 분석
  • 데이터 구조

데이터베이스 과정을 수강했으면 좋겠습니다. (졸업 한 이후로 충분히 배울 수 있었지만 더 많이 알고 싶습니다.) 또한 버전 관리가 가르쳐지기를 원합니다. 이것은 보편적이고 유용하며 학교 교과 과정에서 완전히 무시되었습니다.

몇 가지 수학 과정을 수강해야했습니다. 졸업 한 후에 미적분학을 사용하지 않았습니다. 통계 과정을 수강했으면 좋겠습니다. (다시, 나는 졸업 후 갈 수있을만큼 줍었지만 더 알고 있었으면 좋겠다.)

CS 부서 외에도 작문 코스를 수강하십시오. 성공적인 서면 의사 소통 기술은 성공을 위해 필수적입니다.


+1 데이터베이스가 강의에서 필수 요소가 아니며 보통 필수 구성 요소로 간주된다는 사실에 놀랐습니다.
Orbling

그렇습니다. 나는 기술에서 그것을 꺼내서 후회한다.
pwc

@Orbling : 큰 주립 학교와는 달리 소규모 부서에는 모든 주요 주제를 요구하는 강사가 충분하지 않습니다. 예를 들어, 우리 학교에서는 데이터베이스가 선택 과목이었습니다.
Macneil

@ Macneil : 내 과정에서 기본 데이터베이스 과정은 전제 조건이었습니다 (ER 기본 모델링, 일반 양식, SQL (기본 SQL, 복합 / 중첩 등이 아님), 인덱스 배치 등). 데이터베이스 과정은 선택 과목이었습니다 (총 3 가지가 있다고 생각합니다). 나는 내가 놓칠 다른 코스보다 더 쉽게 독립적으로 흡수 할 수있는 물건이라고 생각했기 때문에 나는 그들을 선택하지 않았습니다. 내가 대신 고급 수술을 받았다고 생각하십시오.
Orbling

@ pwc : 나는 내기, 왜 당신이 그것을 반대했는지, 어떻게 반대했는지 기억합니까?
Orbling

2

어느 방향으로 가고 있는지에 따라 많은 중요한 과정이 있습니다. 그러나 프로그램을 전혀 할 수 없다고 가정하면 가장 중요한 과정은 다음과 같습니다.

  • 데이터 구조 및 알고리즘

    컴퓨팅의 거의 모든 것은 알고리즘을 사용하여 데이터를 처리합니다. 배열과 해시 테이블은 일반적으로 가장 유용한 데이터 구조이므로 배열과 해시 테이블에 특히주의하십시오.하지만 목록과 트리 및 그래프 (목록은 제한된 유형의 트리이고 트리는 제한된 유형의 그래프입니다) 중요하다. 더욱이, 알고리즘 이해는 끔찍한 코드를 생성하는 데 필수적입니다. (그렇지 않으면 O ( n log n ) 알고리즘이 사용되는 O ( n 3 ) 알고리즘을 사용하는 것과 같이 끔찍한 작업을 수행하게됩니다. CS 학위에 필수 DS + A 과정이없는 경우, CS가 아닙니다. 또는 소프트웨어 공학. 또는 프로그래밍 만해도됩니다.

그 외에도 여러 분야에서 수년 동안 가장 유용한 과정은 다음과 같습니다.

  • 동시성

    동시성에는 여러 가지 측면이 있지만 공유 메모리와 메시지 전달의 차이점에 대한 이해를 기대합니다. 또한 잠금 전략 (뮤텍스, 세마포 등) 및 트랜잭션에 대한 강력한 적용 범위를 원합니다.

    물론 병렬화를 이해하는 데 중요하지만 분산 된 모든 항목 (예 : 클라이언트가 비동기식이므로 단일 스레드 인 경우에도 인터넷에 노출되는 서비스 작성)에도 중요합니다 . 또한 게임 (일반적으로 멀티 스레드)을 작성하고 내장 장치로 작업 할 때 유용하다는 것을 알고 있습니다.

그 외에도 가능한 한 많은 아이디어에 노출되는 것이 대부분의 학부생들의 가장 큰 관심사라고 생각합니다. 많은 프로그래밍 언어와 패러다임. 다양한 응용 분야. 합리적 인 수학 (다시 유용하기 때문에)과 인적 요소 및 심리학에 대한 노출 (사용자와 상호 작용하는 소프트웨어가 사람들을 다루기 때문에). 결국, 당신은 미래에 무엇을할지 정확히 알지 못하므로 유연성을 계획하는 것은 훌륭한 인생 전략입니다.


1

대학에 다닐 때 실생활에서 사용하지 못하고 직관이 옳은 것으로 입증 된 주제가 꽤 많았습니다 (공식적인 방법은 대부분 사소한 문제에만 실용적 임). 완전히 잘못되었습니다 (Big-O 표기법은 매우 유용합니다).

@ K-Ran이 위에서 권장하는 것 외에도 실제 세계를 준비하고 싶다면 Code Complete를 읽고 그것을 어렵거나 느끼지 않는 주제에 대한 심층 연구의 기초로 사용하는 것이 좋습니다. 충분히 덮었다.


때로는 작은 구성 요소에서만 공식적인 방법이 유용하다는 것을 알았습니다. 나는 Dijkstra et al. "완벽한 수학자라면 좋은 프로그래머가 될 수 있습니다."
David Thornley

나는 당신이 삶에 의존 할 코드를 작업하고 있다면 기본적 으로이 물건을 단단히 파악해야한다고 생각합니다. 그러나 내가 한 일을 위해 그것은 결코 필요하지 않았습니다. 지금 필요하다면 돌아가서 처음부터 다시 배워야 할 것입니다.
glenatron

Z와 같은 것은 실제로 생명이 위험에 처한 조직의 미션 크리티컬 소프트웨어에만 사용됩니다. 그러나, 그것들을 배우면 코드 정확성에 대한 인식이 훨씬 높아지고 모든 종류의 사양에서 완전히 다시 깊이 생각할 수 있다고 생각합니다. 때때로 당신이 배우는 것은 그 자체를 위해서가 아니라 위에있는 것을 확실히하는 데 도움이됩니다.
Orbling

그것을 더 큰 빌딩 블록으로 만드는 것으로 생각하십시오. 구성 요소가 올바른지 확인한 후 (디자인 및 증명에서 실수 한 실수를 찾기 위해 테스트 한 경우) 작성 및 디버깅 할 때 걱정할 사항이 줄어 듭니다.
David Thornley

1

다음을 공부해야한다고 생각합니다.

운영 체제 :-프로그래머로 작동하는 데 필요하지는 않지만 운영 체제 작동 방식을 알고 가치가 있으며 CS 등급에서 기대됩니다. 좋은 책이라면 도움이 될 것입니다.

OOP :-빵과 버터입니다. 필수. 당신이 요구하고 싶은 책들 : 당신의 첫 번째 책은 다음과 같아야합니다 :-먼저 OOAD로 가십시오.

데이터 구조 및 알고리즘 :-논리적 사고와 사고 방식을 개발하는 데 매우 중요합니다.

나에게이 정도면 충분하다. 너무 늦었 결코. :)


1

프로그래밍 작업을 위해 후보자를 정기적으로 인터뷰하는 사람과 12 년 이상 업계에 근무한 후 합리적으로 성취 된 사람은 다음과 같이 제안합니다.

  • 데이터베이스 디자인 및 SQL : 간단한 SQL을 모르는 프로그래머가 몇 명인지 놀랍고 SQL 기술이 뛰어난 사람들은 매우 귀중합니다. 좋은 데이터베이스를 설계 할 수있는 것은 데이터베이스 구조가 정립 된 회사에서 유용하지 않을 수 있습니다. 스타트 업 및 변화를 겪고있는 회사에게는 필수입니다!
  • 디자인 패턴. 좋은 디자인에 대한 더 나은 결정을 내리는 데 도움이됩니다.
  • OOP : 일반적으로 대부분의 과정에서 사전 요구 사항이지만 도움이됩니다.
  • 알고리즘 : 재귀가 무엇인지 아는 사람이 거의 없으므로 복잡한 코딩을 많이 저장할 수있는 시점을 이해해야합니다.
  • 데이터 구조 : 대부분의 현대 언어는 이러한 것들을 다루지 만,이를 이해하는 것이 좋은 디자인의 열쇠입니다.

그런 다음 추가 교과 과정을 읽으십시오.

  • 인증 형 도서. 그들은 종종 커버 타입의 구문과 연산자 아래에 당신을 가르칩니다. 왜 그렇게 작동 하는가보다는 왜 일을하고 있는지 아는 것이 훨씬 더 중요합니다.

1

IT 'S 따라 달라 ,이 질문에 대한 하나의 좋은 대답이 없다.

프로그래머는 컴퓨터 소프트웨어를 작성하는 사람을 식별하는 일반적인 세계입니다.

이제 모든 종류의 소프트웨어가 있습니다. 예를 들어, 위키피디아를 일반화의 소스로 사용하면 3 가지 훌륭한 일반화를 만날 수 있습니다 .

  • 시스템 프로그래밍
  • 프로그래밍 소프트웨어
  • 응용 소프트웨어

첫 번째 현장 시스템 프로그래밍 에서는 장치 드라이버, 운영 체제, 서버를 개발하므로 운영 체제 과정을 따를 수 있습니다.

그러나 프로그래밍 소프트웨어는 어떻습니까? wikipedia에서 작성한 것처럼 컴파일러, 디버거, 인터프리터, 링커, 텍스트 편집기를 코딩 할 수 있으므로 자동화 이론, 언어 이론, 언어 및 컴파일러 과정이 유용 할 수 있습니다.

우리는 어떤 종류의 응용 소프트웨어에 대해서도 이야기 할 수 없습니다 :
-비디오 게임 : 대수, 물리, 객체 지향 과정?
-수학적 소프트웨어 : 수학적 과정?
-이미지 편집 : 수학, 물리, 알고리즘 과정?
-산업 자동화 : 수학, 물리, 알고리즘, 로봇 코스?
-의료 소프트웨어 : 생물학, 의료, 다른 코스?
-여기에 많은 것들 : 여기에 많은 과정.

당신이 볼 수 있듯이 많은 과정이 있으며 당신이 할 수 있고 당신의 일에 유용 할 것입니다.

내 경험상, 나는 프로그래밍에서 약간의 경험을 시작으로 보안 (보안 코스를 따르고 싶습니까?) 분야 의 시스템 소프트웨어 엔지니어링 및 응용 프로그램 소프트웨어입니다. 알고리즘과 분산 시스템에 더 흥미를 느끼고 있습니다. 내가 작성한 범용 애플리케이션 (스니퍼, 네트워크 침입 탐지 시스템, 프로토콜 분리기 및 탐지기 등)의 단순성에 불편 함.

이론적 컴퓨터 과학에서 신기하게 배운대로! 이 과정을 진행했습니까? :피

예를 들어 모든 컴퓨터 언어가 계산 가능한 수학 함수 세트에 적합 할 수 있다는 것을 배웠고, 예를 들어 경험이 같은 길을 가고 있다면 곧이 작은 미적분학에 불편 함을 느끼게 될 것입니다. 같은 디자인 패턴이 다시 돌아와서 (디자인 패턴 코스를 따랐습니까?) 소프트웨어가 그렇게 매력적이고 놀랍지 않습니다. 예를 들어 WHY에 더 많은 관심을 가지기 시작하고 언어를 수학 함수로 번역하고 시작하는 방법 컴퓨터 언어가 그렇게 복잡하지 않다는 것을 배우십시오! 예를 들어 곧 사람과 심리학에 대해 더 놀랄 수 있고, 그것에 대해 더 많은 관심을 갖고 좋은 프로젝트 관리자가 될 수 있습니다! 소프트웨어 수명주기에 대한 과정을 따르셨습니까?

CS 경력의 필수 코스는 무엇입니까?

일반적인 작업 분야에서는 주변의 작은 복잡성에 대해 곧 지루함을 느끼고 풀 타임 노동자가되어 배우는 시간이 거의 없기 때문에 모든 분야에서, 특히 이론 분야에서 배울 수있는만큼 많이 배우는 것이 좋습니다. 이론적 지식이 강한 사람들이 어떻게 일을 계획하고 집에서 음식을 먹을 수 있는지 코드를 작성하는 방법을 알려줄 수 있습니다.

컴퓨터 과학에는 잘못된 현실감이 있습니다. 예를 들어 컴퓨터 과학자는 때때로 소프트웨어 개발자와 멀리 떨어져 있습니다.

위키 백과 설명을보십시오.

인생과 즐거운 시간 되세요 :)

내 2 센트

정말 나쁜 영어로 죄송합니다.


1

CS 학생들이 유창해야 할 가장 중요한 것은 영어입니다.

구어체와 필기 영어를 모두 이해하지 못하면 영원히 불이익을 받게 될 것입니다.

스택 사이트에 나오는 수많은 질문을 살펴보십시오. 너무 많은 사람들이 해독하기가 어렵습니다. 어떤 사람들은 문자 메시지 l33t를 혼합하여 사용합니다 (올바른 용어는 확실하지 않습니다). 다른 사람들은 동사 나 형용사와 같은 중요한 작은 생각을 놓치면서 진술을하고 단순히 물음표를 추가합니다.

당신이 의사 소통을 할 수 없다면, 당신은 다른 사람들이 말하는 것을 훨씬 덜 이해하게 할 수 없습니다.

다른 모든 것은 단지 세부 사항입니다. 의사 소통을 할 수 있고, 최소한의 지능을 가지고 있으며 읽은 내용을 이해할 수 있다면 성공적인 커리어 프로그래밍을 할 수 있습니다.


1

나는 CS를 졸업하지 않았다는 점에서 약간 다른 관점 에서이 문제를 겪고 전자 공학을 전공했습니다 (미성년자).

이를 바탕으로 컴파일러 디자인 등에 대한 지식 없이도 (그리고 다른 많은 비 CS 졸업생들이 행복하게 살아 남기 때문에) 이해해야 할 것들의 목록 이 비교적 짧다고 생각 합니다 .

내가 말한 것은 유용하다고 생각했습니다.

  • RDBMS 디자인-RDBMS는 대부분의 시스템과 사이트 뒤에 있으며 최소한 현재 진행중인 작업의 기본 사항을 이해해야합니다.
  • 기본 UI 디자인-내가 함께 일한 최고의 프로그래머는 모두 못생긴 응용 프로그램을 만들 수있었습니다. 하나를 제외하고는 규칙을 증명하는 예외입니다.
  • 일부 기본 프로그래밍-기본을 의미합니다. 몇 가지 C (이미지 처리 및 임베디드 시스템 용), 일부 어셈블리 언어 (과정 수료 후 몇 주 내에 잊어 버린 언어) 및 일부 파스칼 (기본 컴퓨팅 과정은 모든 엔지니어에게 표준)을 배웠습니다. 인터뷰를 할 때 상업 조직이 유용하다고 생각하는 방식으로 CS 졸업생이 실제로 프로그래밍 할 수있는 사람이 얼마나 적었 기 때문에 크게 기대하지는 않지만 기본 사항을 알 것으로 기대합니다.
  • 논리-나는 디지털 전자, 이론을 통한 수학자, CS는 프로그래밍을 통해 배웠지 만 그것을 배운다면, 그에 대한 많은 이해가 필요합니다.
  • 의사 소통 기술-나는 실제 학위, 프레젠테이션 기술 및 주장 력 이외의 대학에서 몇 가지 과정을 밟았습니다. 많은 상식이 있지만 현명한 것들을 몇 번 들었다고 결코 아프지 않습니다.
  • 비즈니스 및 회계의 기초. 일부 프로그래머는 중요하지 않은 것처럼 행동하지만 회사에서 일하는 사람에게는 모두 중요합니다. 이것은 게임이 작동하는 방식이며 인생을 통제 할 것이므로 최소한의 기초를 알고 싶지 않은 이유는 무엇입니까? 어떻게 그리고 왜 일이 일어 납니까?

그리고 프로젝트 관리에 대해 배울 기회가 있다면 실제로 아프지 않을 것입니다. 그러나 많은 경우에 대학에서 아주 잘못 배운 것입니다. 프로젝트에서 일함으로써 직업에 대해 조금 배울 것입니다.


0

기본적인 인적 자원 / 심리학 코스도 목록에 추가했습니다.

이것은 이상하게 보일 수도 있지만, 직업의 일부는 전문적으로 자신을 팔고 협상하는 방법을 배우는 것입니다. HR- 드론의 동기에 대한 확실한 지식없이 첫 번째 '실제'인터뷰에 들어가는 것은 재난을위한 레시피이며, 학생이 저임금 급여에 빠지게 될 가능성이 높습니다.

자신을 보호 할 수 있도록 적을 아십시오.


-1

1 년차 :

  1. 고급 언어의 기본 OOP
  2. 데이터 구조

2 학년 :

  1. 컴파일러, 간단한 형태의 스크래치를 만듭니다.
  2. 동시성

3 년차 :

  1. 연산
  2. 운영 체제, 간단한 기능과 기능 향상
  3. 공식 언어

4 년차 :

  1. 네트워킹
  2. 분산 시스템
  3. 사용자 인터페이스
  4. 고급 컴파일러
  5. 고급 운영 체제
  6. 인공 지능
  7. 컴퓨터 그래픽

이러한 과정은 충분한 이론과 코딩 연습을 제공해야합니다.


-2

아무도 컴퓨터 아키텍처에 대해 언급하지 않은 것이 이상합니다.


메모리 캐시, 페이지 오류 등의 영향을 이해하려면 컴퓨터 아키텍처가 중요하다고 생각합니다.
apoorv020
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.