왜 학교에서 이런 것들을 가르치지 않습니까? [닫은]


118

여름 동안 나는 Google Summer of Code에 들어갈만큼 운이 좋았습니다. 나는 많은 것을 배웠습니다 (아마도 모든 대학 교과 과정을 합친 것보다 더 많이 배웠습니다). 나는 그들이 내가 학교에서 더 일찍 배운 것들을 가르치지 않는 이유를 정말로 궁금합니다. 몇 가지를 예로 들면 :

  • 단위 테스트
  • 버전 관리
  • 애자일 개발

데이터 구조 및 알고리즘과 같은 다른 것들을 가르치는 데 상당한 시간을 소비하는 것 같습니다. 나는 그것들이 초기에 배우는 것이 매우 중요하다고 생각하지만, 왜 그들보다 먼저이 세 가지를 더 가르치지 않습니까? 아니면 이런 것들을 많이 가르치지 않는 것은 단지 우리 학교입니까?

오해하지 마세요. 대학이 항상 가장 유행하는 프로그래밍 유행을 가르치는 것이 바람직하다고 생각하지 않습니다.하지만 교수님이 "코딩을 시작하기 전에 다이어그램을 그리는 것"이외의 다른 것을 가르쳐서는 안됩니다.


47
대부분의 교사는 버전 제어 및 단위 테스트와 같은 최신 트렌드에 대한 최신 정보를 얻지 못할만큼 충분히 오랫동안 현실 세계를 벗어났습니다.
Ryu

14
버전 제어를 "최신 트렌드"라고 부르는 것이 공정한지 모르겠습니다. - SCCS는 1972 년에 개발 된 en.wikipedia.org/wiki/Source_Code_Control_System
JeffH

2
그들은 RIT에서 이러한 것들을 가르칩니다.
geowa4

6
네가 옳아. 그들은 데이터 구조, 알고리즘, 동시성, 네트워킹 및 데이터베이스 대신 이러한 것들을 가르쳐야합니다. 내 말은, 누가 .
Humphrey Bogart

1
나는 이것이 당신이 등록한 대학에 크게 달려 있다고 생각합니다. 적어도 내가 방문하는 대학의 경우 단위 테스트는 처음부터 모든 CS 숙제 (모범 사례를 따르지 않지만 시작 일지라도)와 버전 관리에 대한 요구 사항이라고 말할 수 있습니다. 그 외에는 대학이 보편적이고 추상적 인 개념을 가르쳐야한다는 의견에 동의합니다. 테스트를 제대로 이해하려면 버전 제어와 애자일 개발에는 많은 직접 경험이 필요하며, 어쨌든 전체 커리큘럼에 맞지 않을 것입니다.
Johannes Rudolph

답변:


188

귀하의 질문에 대한 가장 간단한 대답은 컴퓨터 과학 및 소프트웨어 개발 분야가 모두 매우 새롭고 잘 이해되지 않았다는 것입니다. 모든 과학 및 공학 분야가 현대에 더 빠르게 발전하고 있지만 다른 분야는 더 많은 경험을 가지고 있으며 작동 방식에 대한 이해가 훨씬 넓습니다.

예를 들어, 최근 재료 과학의 발전에도 불구하고 토목 공학자들은 넘어지지 않는 아치를 만드는 방법을 약 2000 년 동안 알고 있었으며 이것은 비교적 논란이 적은 대학에서 가르치고 배울 수있는 것입니다. 소프트웨어 개발자가 배워야하는 기술에 대해 전적으로 동의하지만이 계약은 개인적인 경험과 비공식적 인 추론을 기반으로합니다. 사회적으로 받아 들여지는 "모범 사례"가 되려면 수집하는 데 매우 많은 비용이들 수있는 정량적 데이터가 필요합니다. 버전 제어가 얼마나 도움이됩니까? 어떻게 도움이 되나요? 단위 테스트? 우리는 다양한 기술의 효과에 대해 추론 할 수 있지만 실제로 그 효과를 결정적으로 입증하는 것은 매우 비쌉니다. 우리는 처음부터 끝까지 완전하고 현실적인 소프트웨어 프로젝트를 실행해야합니다. 다양한 기술을 사용하여 동등한 전문 지식을 가진 프로그래머 그룹과 함께 여러 번. 최소한 우리는 해당 프로젝트가 공개하지 않을 기존 프로젝트에 대한 많은 데이터가 필요합니다.

토목 기술자는 많은 정보와 함께 수천 년의 다리를 볼 수 있습니다. 반면에 소프트웨어 개발자는 정보를 수집하는 경우에도 조직이 개발자의 효율성에 대한 정보를 수집하고 게시 할 동기가 거의 없기 때문에 대부분의 정보는 비밀로 유지됩니다. '티).

분야의 혼란도 있습니다. 소프트웨어 개발 또는 소프트웨어 "엔지니어링"은 컴퓨터 과학과는 정말 다릅니다. 소프트웨어 개발자는 컴퓨터 과학에 대한 실무 지식이 필요하지만 알고리즘 복잡성의 경계에서 일하거나 병렬성에 대한 추론은 일하는 프로그래머가 매일하는 일이 아닙니다. 마찬가지로, 실제 "컴퓨터 과학자"는 작동하지 않거나 흥미로운 작업을 수행하지 않는 수많은 일회용 코드를 작성하며 실제 소프트웨어 제품이 수행 할 수있는 엄격한 종류의 이점을 얻지 못할 것입니다.

인터넷과 오픈 소스 커뮤니티의 출현은 이러한 질문에 대한 답을 결정적으로 시작할 수있는 충분한 데이터를 제공 할 수 있지만, 내일 답변이 가능하더라도 모든 사람이 동의하는 지점까지 국제 사회에 침투하려면 100 년이 걸릴 것입니다. 학교에서 가르쳐야합니다.

마지막으로 몇 가지 경제적 고려 사항이 있습니다. 소프트웨어 개발에 참여한 거의 모든 사람들이 원하는 개발 도구를 실행하기 위해 전용 머신에 저렴하고 쉽게 액세스 할 수 있었기 때문에 비교적 짧은 시간이었습니다. 수십 년 전만해도 테스트를 실행하기 위해 머신을 완전히 사용하거나 소스 코드의 무한한 기록을 저장하는 것은 많은 사람들에게 경솔한 비용으로 보였을 것입니다.


44

우리 선생님들은 :

  1. 단위 테스트를 시도하지 않았습니다.
  2. 버전 제어 사용 방법을 모르고
  3. "애자일 개발"에 대해 들어 본 적도 없습니다.

학생들은 스스로 문제를 해결해야합니다. 우리는 그렇게했고 괜찮은 것으로 판명되지 않았습니까?


3
"우리는 그렇게했고 괜찮은 것으로 판명되지 않았습니까?" -우리 중 일부는 ... 일부는 교사가 할 수있는 모든 것을하지 않았기 때문에 길을 잃었습니다.
Andrei Rînea

12
교사들이 무엇을하든 사람들은 여전히 ​​불평 할 것입니다. 샤프는 항상 지식에 굶주리고 잘 될 것 입니다.
Jeffrey Jose

우리 선생님들은 소프트웨어 개발자가 아니었고 소프트웨어 개발 학위를 취득하지도 않았습니다. 우리는-대체로-다른 짐승 인 컴퓨터 과학에 갔고, 실제보다는 이론에 더 집중했습니다.
Dean J

1
@mislav : 선생님은 누구 였나요?
CesarGon 2011 년

43

레오나르도 다빈치는 이렇게 썼습니다.

과학없는 연습에 매혹 된 사람들은 방향 타나 나침반없이 배에 타서 그가 어디로 가는지 확신 할 수없는 조종사와 같습니다. 연습은 항상 이론에 대한 건전한 지식을 기반으로해야합니다.

좋은 학교는 이론 (데이터 구조, 알고리즘 등)과 실습 (단위 테스트, 버전 제어 등)을 모두 가르칩니다. 이 동전의 양면을 올바르게 가르 칠 수 있도록 적절한 교수진이 필요합니다. 실제 경험이없는 이론적 유형으로 만 구성된 교수진은 그렇게하지 않습니다. 마찬가지로 전적으로 실무자로 구성된 교수진은 그렇게하지 않습니다. 당신은 혼합이 필요하고 좋은 학교는 그것을 가지고 있습니다.


1
나는 당신이 말하는 주요 요점에 동의하지만 동시에 여러 버전을 관리하는 문제는 이해해야 할 핵심 이론 요소라고 주장합니다. 반대로이 문제를 해결하기 위해 CVS 및 SVN과 같은 도구를 사용하는 것은 "연습"영역에 확실히 속한다는 데 동의합니다.
Andrew Swan

그러나 일반적인 "Intro to Software Engineering"유형의 강의에서 두 개 이상의 강의에서 버전 제어를 다루는 것은 아마도 필요하지 않을 것입니다. 그것이하는 일, 기본 사용, 아마도 분기 / 병합에 대해 조금 다루십시오.
Adam Jaskiewicz

저는 "팀 소프트웨어 프로젝트"라는 수업이있었습니다. 버전 제어는 다루지 않았지만 UML, 소프트웨어 개발 방법론, 요구 사항 수집, 단위 테스트 등은
다루었습니다

@Alan, 어떤 학교에 대해 이야기하고 있습니까?
lifebalance

40

컴퓨터 과학은 항상 다소 모순적이었습니다. 컴퓨터에 관한 부분은 과학이 아니고 과학에 관한 부분은 컴퓨터에 관한 것이 아닙니다.

대학은 '과학'쪽 (알고리즘, 데이터 구조, 컴파일러 등)에 더 의존하는 경향이 있습니다. 이러한 것들은 해마다 진화하고 변화하는 경향이있는 현재의 업계 모범 사례보다 훨씬 더 '영원한'것이기 때문입니다. 예를 들어 버전 제어는 지난 5 년 또는 10 년 동안 놀라운 변화를 겪었지만 big-O는 여전히 big-O이며 해싱, btree 및 재귀는 40 년 전처럼 여전히 유용합니다. 그들의 아이디어는 일반적으로 git과 같은 도구를 선택하고 기본 데이터 구조가 SHA-1 해시의 비순환 방향 그래프이며 개발자가 열심히 일했다고 들었을 때 그것이 의미하는 바를 이해할 수있는 충분한 기초를 제공하는 것입니다. io 바인딩되도록 syscall의 수를 최적화합니다.

이제 마지막 문장을 이해하기 위해 알아야 할 모든 것을 어디서 배웠는지 생각해보세요. 답이 '대학'이면 그들은 괜찮은 일을하고있는 것입니다.


13

모든 것이 지나가는 유행입니다. 대학을 졸업 한 모든 해보다 대학 졸업 첫해에 더 많은 것을 배울 것입니다. 컴퓨터 과학은 컴퓨터와 관련이 없습니다.

College는 도구로 가득 찬 도구 상자를 제공합니다. 이것은 스크루 드라이버, 즉 초승달 렌치입니다. 대학에서 각 도구를 한 번씩 사용할 수 있습니다. 당신이 현실 세계에 들어갈 때 당신이 가지고있는 것을 정말로 발견 할 때입니다. 나머지 것 중에서 유용한 것, 만일을 대비하여 집에두고 싶은 것, 혹시라도 집에두고 싶은 것, 매일 주머니에 보관하는 것 등을 분류합니다.

Tqm, Iso, Cmm, Agile, 등등. 이것들은 그들이 올 것이고 갈 것입니다. 성공적인 것 중 어느 것도 상식 이상이 아닙니다. 모든 성공적인 엔지니어와 회사는 상식을 사용하여 성공을 거두었으며 이름이 필요한 사람은 거의 없습니다. 문제는 당신이 상식을 팔 수없고, 관리자가 눈에 띄는 이름 없이는 상식을 훈련하고 사서 회사에 그들의 가치를 증명할 수 없다는 것입니다. 상사가 뉴스 기사 나 잡지에서 읽은 이름을 붙이면 관리자는 일을 계속하고 당신은 당신의 일을 계속합니다. 이러한 관행을 따르고 있다고 주장하는 회사는 실제로 거의 없습니다. 대부분은 컨설턴트에게 수표를 쓰고 연간 및 또는 평생 인증서를 일부 클럽에 전달하여 웹 사이트에 그래픽을 표시하거나 제품이 들어있는 상자에 라벨을 붙일 수 있습니다. 많은 사람들은 이것이 드문 일이라고 주장 할 것입니다. 이것은 모두 사업의 일부입니다. 수익성을 유지하고 문을 열고 조명을 켜두 기 위해 때때로 모서리를 잘라야합니다. 이 모든 관행의 열성적인 추종자들은 모두 마지막 것은 유행이고 이건 그렇지 않다고 주장했습니다. 마지막 것은 정말 따라 가기에는 너무 비싸고 이건 아닙니다. 마지막은 가짜 였어요 방금 컨설턴트를 고용했는데 이건 진짜예요 프로그래밍 언어와 마찬가지로 이것들도 진화 할 것입니다. 마지막은 가짜 였어요 방금 컨설턴트를 고용했는데 이건 진짜예요 프로그래밍 언어와 마찬가지로 이것들도 진화 할 것입니다. 마지막은 가짜 였어요 방금 컨설턴트를 고용했는데 이건 진짜예요 프로그래밍 언어와 마찬가지로 이것들도 진화 할 것입니다.

비즈니스의 현실, 대학 시스템 및 그 안에서 자신의 역할을 이해하는 능력이 핵심입니다. 인생의 모든 것과 마찬가지로 전투를 선택하십시오. 당신이 필요로하거나 알고 싶어하는 것을 가르치는 것은 대학이나 기업, 정부 또는 다른 사람의 직업이 아닙니다. 1 위를 찾는 것이 당신의 일입니다. 마찬가지로 당신은 이것을 할 시간을 제공 한 것에 대해 다른 사람을 비난 할 수 없습니다. 당신은 그것을해야합니다. 당신은 말에서 떨어질 것입니다. 당신은 희생자가 아닙니다. 일어나서 다시 타십시오. 변명 할 필요도 없습니다. 삶은 공정한 거래가 아닙니다. 유인물을 활용하고 독립적 인 척하지 마십시오. 그리고 확실히 당신의 회비를 지불하고, 회사에 유인물을 흘리지 마십시오.

사람들은 왜 cmm이나 애자일 또는 다른 것들이 유행이라고 생각합니까? 왜 그렇지 않다고 생각합니까? 교수님이 왜 그런 식으로 프로그램을 가르쳤나요? gotos를 피하거나 상수를 피하거나 이것 저것을 피하려면? 더 안정적인 코드를 생성하기 때문입니까? 더 나은 성능의 코드? 인적 오류 감소? 아니면 연구에 더 많은 시간을 할애하는 논문 / 프로그램을 채점하는 것이 더 쉽기 때문입니까? 그들은 프로그래밍 방법을 모르고 주제에 대한 다른 사람의 책을 따르기 때문입니까? 유지 보수가 가능하고 신뢰할 수있는 고성능 코드를 가질 수 없다고 가르쳤습니까? 당신은 신뢰성과 고성능 모두를 방해하는 유지 보수를 "둘 중 하나를 선택"할 수 없습니까? 때로는 성능을 위해 안정성을 희생합니다. 때로는 안정성이나 성능에 신경 쓰지 않고 버전 117.34에서 얻고 싶을 때가 있습니다. 버전 118.0.0에 대한 또 다른 회계 소프트웨어 프로그램의 2 개. 귀하의 비즈니스 모델은 버전 업그레이드 및 기술 지원 판매에서 비롯되며 소프트웨어 개발자는 동일한 코드를 동일한 방식으로 작성할 수있는 모든 오래된 로봇이 수행합니다. 불에 타 버린 것을 새로운 대학 졸업생으로 교체하고 업그레이드를 계속 판매하십시오.

이 질문에 대한 보편적 인 답은 없습니다. 당신의 의견이 무엇인지 알아 내고, 그것에 따라 생활하고, 그것을 방어해야합니다. 마음을 바꾸고, 함께 생활하고, 방어하십시오.

모든 것에 의문을 가지십시오. 스토브에있는 전골을 만지면 정말 화상을 입을까요? 두려워하는 심리적 효과가 단순히 화상을 입는 것보다 더 많은 피해를 입힐까요? 다 치지 않고 답을 테스트 할 수있는 안전한 방법이 있습니까?

내가 그것을 감당할 수있을 때 나는 내 기숙사 방에있는 트랜지스터, 캡, 저항기 등을 사서 결국 녹이 곤했다.이 모든 것들은 독특한 악취가 난다. 첫 번째 트랜지스터 수업 다음날 빌드하는 것보다 스테레오 용 앰프를 구입하는 것이 훨씬 저렴하고 쉽습니다. 물론 Linus는 운영 체제를 작성하는 것보다 구입하는 것이 더 쉬운 예외입니다 ... 그 시간에 배운 내용이 Linus가 배운 내용과 다르더라도 더 많은 일을 할 수 있습니다.

대학 안팎의 세계는 문제를 해결하기 위해 이러한 공식 (cmm, agile 등)을 채택 할 것이며 다음 문제가 나오면 빠르게 떨어 뜨릴 것입니다. 성공하기 위해 버전 제어를 사용할 필요가 없습니다.없는 것만큼이나 많은 성공이 있습니다 (실제로 산업 시대로 인해 지금까지 버전 제어없이 더 많은 성공이있었습니다). 마찬가지로 최소한의 테스트로도 성공할 수 있습니다 (컴퓨터 업계에서 정말 큰 이름을 예로 들어보십시오). 자신의 코드를 테스트하여 성공할 수있을뿐만 아니라 자신의 코드를 절대 테스트해서는 안된다는 규칙을 따르면 성공할 수 있습니다. emacs를 사용하여 성공할 수 있고 vi를 사용하여 성공할 수 있습니다. 어떤 믹스가 자신에게 적합한 지 결정하고 운이 좋으면 자신에게 맞는 일할 장소를 찾아야합니다.

대학을 졸업하고 현실 세계에 접어 들면 "오래된 타이머"의 말을 듣고 함께 일하며 논쟁하십시오. 그들은 수십 년에서 수세기의 결합 된 경험을 가지고 있으며, 당신이 피하거나 스스로 테스트 할 수있는 함정에 빠졌습니다. 대부분의 사람들은 이러한 유행 중 적어도 한두 개가 왔다가 사라지는 것을 보았을 것이며, 특히 얼마나 심하게 태워 졌는지, 그리고 회복하기 위해 무엇을했는지를 보았습니다. 그들은 사물을 테스트하는 여러 가지 방법을 알고 있으며 테스트 스타일의 이름도 알고 있습니다. 작동하는 것과 그렇지 않은 것. 위험이있는 곳과 접선에서 시간 낭비를 피하는 방법. 당신이 성숙하고 낡은 타이머가 될 때, 그것을 앞으로 전달하십시오. 당신을 따르는 사람들을 가르치려고 노력함으로써 당신이 배운 것을 지불하십시오. 낚시하는 법을 가르치는 것을 잊지 마십시오. 그들에게 물고기를주지 마십시오. 그리고 때로는 성공하기 전에 실패하도록해야하며 너무 심하게 타지 않도록해야합니다.

제가 여기서 정말로 말하고 싶었던 것은 지금 우리가 평행 우주의 진화를 목격 할 수있는 (아마도 영향을 미칠 수있는) 드문 상황에 처해 있다는 것입니다. 예, 컴퓨터 과학은 물리학에 비해 젊은 과학입니다. 그러나 동시에 그것은 여러 번 진화했습니다. 당신이 어디에서 일하고 누구와 함께 일하는지에 따라 하드웨어 엔지니어를 관찰 할 수 있습니다. 하드웨어 세계의 프로그래밍 언어는 확실히 새로운 것은 아니지만 소프트웨어 세계만큼 빠르게 발전하지 않았습니다. 소프트웨어는 수십 년 전에 시작되었습니다. 하드웨어는 항상 소프트웨어 엔지니어를 2 급 시민으로 생각했습니다. 우리의 일은 쉽고 그들의 일은 어렵습니다. (참고로 저는 실제로 하드웨어 및 소프트웨어 엔지니어입니다.) 흥미로운 점은 지금도 우리가 초등 또는 유아 문제로 간주하는 문제를 다루고 있다는 것입니다. 버전 제어를 사용해야하는 이유는이 칩에서 작업하는 유일한 사람입니다. gcc 또는 기타 저렴한 컴파일러 또는 무료 IDE에 대한 귀하의 경험은 내가 사용하는 값 ​​비싼 도구와 비교할 수 없을 것입니다. 만약 회사가 귀하가 그것을 사용할 가치가 있다고 생각하거나 심지어 그것을 사용하는 방법을 알고 있다면 사본을 사줄 것입니다. 그리고 다른 변명의 긴 목록. 나는 vhdl과 verilog를 둘 다 배우고 1 주일 만에 하드웨어 엔지니어로부터 거의 감히 생산적이되는 것을 즐겼습니다 (전기 엔지니어가 내 직책이 소프트웨어 엔지니어라고 말 했음에도 불구하고). 나는이 언어들을 배우고 싶었고, 도구를 사용할 수있을 때 나는 밤까지 사무실에 머물면서 스스로 가르쳤습니다. 그때부터 그 엔지니어는 제가 말한 것이 사실이라는 것을 깨달았습니다. 언어는 단지 구문 일뿐입니다. 프로그래밍 기본 사항은 동일하며 도구는 모두 동일한 작업을 수행합니다. 그 사과와 사과는 사과와 오렌지가 아닙니다.

일반적으로이 두 병렬 산업 중 하나가 다른 산업보다 언어, 프로그래밍 습관, 소스 제어, 테스트, 도구, 프로그래밍 환경 등에 대한 경험이 훨씬 많다는 메시지를 보내는 것은 여전히 ​​어렵습니다. 제가 해결하고자하는 문제는 하드웨어 설계가 개발 될 때 가져 와서 프로세서의 시뮬레이션 (가상 머신)과 연결할 수있는 저렴한 기능 시뮬레이터를 만들어 하드웨어 테스트를 시작하고 테스트를 개발할 수 있도록하는 것입니다. 우리가 실리콘으로 가기 훨씬 전에 제공 가능한 소프트웨어. 이에 대해 "새로운"것은 없지만 최신 코드를 가져오고 코드 변경 사항을 추적하여 시간을 집중해야하는 부분을 확인할 수있는 메커니즘이 없습니다. 하드웨어에 대한 사용자 (프로그래밍) 인터페이스를 정의하는 문서를 추적하는 메커니즘이 없습니다. 골든 카피는 누군가의 이메일받은 편지함에 바이너리 형태로 들어 있고, 그럴 때만 변경됩니다. 무슨 일이 일어나고 있는지 확인하기 위해 verilog를 읽을 필요가 없습니다. 잠깐, 그 verilog는 몇 살입니까? 내가 일주일 내내 당신에게 보낸 그 버그는 3 주 전에 알아 내고 고쳤나요? 그래서 우리는 단지 6 개월 동안 휴가지와 파티로 날아가서 하드웨어 직원이 작업을 끝내고 벽에 던져 넣을 때까지 기다리거나,이 기회를 통해 인내심을 갖고 낙관적으로 그들에게 가르치려고 노력합니까? 작업을 수행하고, 작업을 백업하고, 동료 검토를 위해 자신의 물건을 공유 할 수있는 방해가되지 않는 상식적인 방법이 있습니다. 그 verilog는 몇 살입니까? 내가 일주일 내내 당신에게 보낸 그 버그는 3 주 전에 알아 내고 고쳤나요? 그래서 우리는 단지 6 개월 동안 휴가지와 파티로 날아가서 하드웨어 직원이 작업을 끝내고 벽에 던져 넣을 때까지 기다리거나,이 기회를 통해 인내심을 갖고 낙관적으로 그들에게 가르치려고 노력합니까? 작업을 수행하고, 작업을 백업하고, 동료 검토를 위해 자신의 물건을 공유 할 수있는 방해가되지 않는 상식적인 방법이 있습니다. 그 verilog는 몇 살입니까? 내가 일주일 내내 당신에게 보낸 그 버그는 3 주 전에 알아 내고 고쳤나요? 그래서 우리는 단지 6 개월 동안 휴가지와 파티로 날아가서 하드웨어 직원이 작업을 끝내고 벽에 던져 넣을 때까지 기다리거나,이 기회를 통해 인내심을 갖고 낙관적으로 그들에게 가르치려고 노력합니까? 작업을 수행하고, 작업을 백업하고, 동료 검토를 위해 자신의 물건을 공유 할 수있는 방해가되지 않는 상식적인 방법이 있습니다.

하드웨어 엔지니어는 당신처럼 반짝이는 새로운 도구 상자를 가지고 대학을 떠났다는 것을 기억하십시오. 17 개의 다른 프로그래밍 언어를 배웠으며 그중 하나만 사용할 수 있으며 나머지 언어는 대학을 졸업 한 후에 발명 될 것입니다. 그들이 대학을 떠났을 때 그들은 미적분과 상대성 이론에 대해 알고있는 것을 말할 수 있고 각 원소에 얼마나 많은 전자가 있는지 가우스 표면 주위의 전하를 계산할 수 있습니다. 그러나 그들의 경력의 대부분은 1, 0, 또는 아닙니다 (공통적으로 컴퓨터, 1, 0 및 하드웨어 또는 소프트웨어 엔지니어가 아닌 컴퓨터에 대해 알아야 할 모든 것). 물리, 미적분, 전자의 기본 법칙은 프로그래밍 언어만큼 빠르게 변하지 않을 것입니다. 그러나 프로그래밍의 기본은 모든 언어에서 동일하며 앞으로도 계속 될 것입니다. 당신은 그것을 알고 대학을 떠났거나 자바가 C ​​++보다 다르고 더 낫다고 생각 했습니까?

다른 사업과 마찬가지로 대학의 업무는 수익성을 유지하는 것입니다. 그들은 대학의 수익성을 높이기 위해 적절한 학생과 적절한 연구 비용과 적절한 종류의 연구를 모두 제공하기 위해 적절한 학자를 고용해야합니다. 그들은 올바른 학생들을 데려오고 올바른 졸업생을 배출하기 위해 올바른 수업을 제공해야합니다. 그래야 수십 년 동안 대학 근처에서 고용주가지나 갈수록이 대학이 생산적이고 수익성있는 직원을 배출한다는 사실을 알게 될 것입니다. (예, 때로는 적절한 TV 시청 시간과 적절한 이름 인식 및 스포츠 수익을 얻기 위해 적절한 스포츠에서 적절한 운동 선수를 유치해야합니다). 일부 대학은 C ++ 및 Java를 가르치지 만 일부는 결코 가르치지 않습니다. 일부는 CMM을 발명하고 일부는 Agile을 가르치고 일부는 둘 다하지 않습니다. 대학에 가치가 있다면 배울 것이 있습니다. 그들은 당신에게 배워야 할 모든 것을 가르치지는 않을 것이지만 유용한 것을 가질 것입니다. 거기에있는 동안 무언가를 배우고, 적절한 수의 다양한 형태의 도구를 도구 상자에 모으십시오. 대학을 떠나 일자리를 구하십시오. 도구 상자가 좋지 않으면 다른 대학을 찾고 첫 번째 대학을 언급하지 마십시오. 괜찮은 도구 상자라면 해당 도구를 사용하고 자신의 시간에 새로운 도구를 만드십시오. 그것이 꽤 좋은 도구라면, 그 대학과 당신이 이것을 배운 좋은 학자에 대해 좋은 것을 말하고 그들이 당신에게 준 것에 대해 학교에 갚으십시오. 대학 도구의 범용 카탈로그에서 가능한 모든 도구를 얻지는 못했지만 특정 하위 집합을 사용하게 될 것입니다. 졸업하지 않아도 ...


12

저는 Oregon Institute of Technology의 부교수 였을 때 이러한 것들을 가르쳤습니다. 그들은 드물게 가르칩니다.


수업 제목은 무엇입니까?
Dean J

11

가장 간단한 대답은 당신이 컴퓨터 과학을 공부하고 있고 당신이 나열한 것들이 컴퓨터 과학의 학문 분야와 실제로 관련이 없다는 것입니다. 소프트웨어 개발은 당신이 뭔가 수 있습니다 컴퓨터 과학, 당신이 배운 내용의 블록을 기반으로 구축 뭔가를 ...하지만 컴퓨터 과학 및 소프트웨어 개발은 같은 것이 아니다.

버전 제어 또는 효과적인 단위 테스트를 작성하는 방법을 가르친 수업 ... 거래 , 즉 (좋은) 소프트웨어 개발을 가르 칠 것 입니다.


10

오 이런 날 시작하지 마

나는 한때 유명한 대학의 CS 학장이 객체 지향 프로그래밍이 단지 '유행'이라고 말 했으므로 C ++와 같은 팬시를 통과하는 수업을 제공하지 않았습니다.

왜 그들이 이런 것들을 가르치지 않는지에 대해, 대학은 반드시 업계의 모범 사례가 아니라 학문의 기초를 가르치기 위해 거기에 있습니다.


2
달리 말하면 대학은 직업 훈련이 아닌 학업 교육을 제공하는 것으로 대학의 역할 (옳든 그름)을 봅니다. 그렇기 때문에 많은 신입생들이 실제 프로그래밍 기술 (예 : 유지 관리 가능한 코드 작성)에 대해 거의 알지 못합니다.
Andrew Swan

그리고 이제 그들이 가르치는 모든 것은 (적어도 첫 몇 년 동안) 많은 대학에서 Java입니다. 아, 아이러니.
Matthew Schinckel

그는 언제 OOP가 유행이라고 말했습니까? Java가 등장하기 전까지 OOP는 필요한 지식보다 유행에 가까웠습니다.
Andrew Prock

@ [drewster] : 1994 년, Java에 너무 많은 공을 돌린다 고 생각합니다. OOP는 프로그래밍 언어 진화의 논리적 진보입니다. 역사의 어느 단계에서든 (1994 년에 훨씬 덜) 그것을 "유행"이라고 부르는 것은 CS 학장에게 창백한 수준 이상의 무지 함을 나타냅니다.
Steven A. Lowe

2
학문과 실제 / 실무 사이의 잘못된 이분법은 무엇입니까? "실제"작업에서 사용하는 거의 모든 아이디어는 학계에서 나왔거나 그에 의해 개선되었습니다. GOTO가 부족한 이유는 어디일까요? 객체는 1967 년 컴퓨팅 과학자들로부터 나왔습니다. 많은 CS 직원들은 OOP의 장점에 대해 명확하지 않았으며 여전히 결정되지 않은 것입니다. 업계에서는 도움이된다고 생각하지만 그렇지 않은 것으로 입증되는 실패한 프로젝트가 많이 있습니다.

9

대학은 정말 보편적 인 것을 가르쳐야합니다. 애자일 개발과 같은 것은 여전히 ​​꽤 새롭고 인터넷에서 얼마나 많은 이야기가 나왔는지에도 불구하고 모든 곳에서 사용되지 않고 있으므로 전체 학급 학생들에게 가르치는 것은 잠재적으로 애자일 상점에 도착한 소수의 사람들에게만 도움이 될 것입니다.

그러나 버전 제어는 요즘 용납 할 수없는 것입니다. 컴파일러만큼이나 유용한 도구이며 CVS는 약 20 년 이상 사용되어 온 도구라는 사실을 모든 사람이 이해해야합니다. 최소한 대학을 떠나는 프로그래머는 개념을 이해해야합니다. 다행히 대학에서 그룹 작업을한다면 버전 관리에 대해 이미 알고 있고 그룹이이를 사용하도록 설득 한 사람과 함께 할 수있을만큼 운이 좋을 것입니다. 그 사람이 내 그룹에있어 기쁘다는 것을 알고 있습니다.

단위 테스트도 거의 변명 할 수 없습니다. 내가 말할 수있는 유일한 것은이 책이 아직 테스트 주도 개발에 있으며 100 % 코드 커버리지를 추구하는 것은 때때로 가치있는 것보다 더 많은 문제가 될 수 있다는 것입니다. 그러나 단위 테스트는 매우 가치가 있으며 소프트웨어 엔지니어링 과정에서 다루어야합니다. 나는 이런 것들 중 일부가 일부 대학에 들어가고 있지만 아직 모든 대학에 도달하지 못했다고 생각합니다.


대학 과정에서는 버전 관리가 필요하지 않습니다. 그들은 "비주얼 스튜디오를 사용하는 방법"을 가르 칠 수도 있습니다. 직장을 구할 때 남겨 두는 것이 가장 좋습니다. 테스트에 관해서는 단위 테스트가 반드시 최선은 아니지만 최소한 모든 형태의 테스트 관행을 조금씩 가르쳐야합니다.
gbjbaanb

@gbj는 동의했습니다. 직업을 얻기 전까지는 버전 관리가 무엇인지 몰랐고, 혜택을 즉시보고 하루 만에 배웠습니다. 학교 IMO에서 가르치는 것이 훨씬 더 중요합니다.
temp2290

7

왜 그렇지 않습니까? CS 학위를 취득한 경험은 거의 동일했습니다. 그 이유는 프로그래밍을 가르치는 사람들은 내가 말할 수있는 한 프로그래밍을하지 않기 때문입니다. 인정을 위해 그 물건을 가르 칠 필요가없고, 교사들은 그것에 익숙하지 않으며, 학생들은 수업 과정의 일부로 중요한 프로젝트를 개발하지 않습니다. CS 이론이나 Java 구문을 가르치는 것과 달리 실제로 프로그래밍을 가르 칠 동기는 없습니다.


6

컴퓨터 과학자들은 그들이 엔지니어가 아닌 수학 자라고 생각하기 때문에 공학 부분보다 수학 부분을 가르치는 것을 선호합니다. 테스트, 버전 제어 및 문서화는 다른 엔지니어링 분야에서보다 더 이상 유행을 전달하지 않습니다.


그렇다면 컴퓨터 과학자가 아닌 소프트웨어 엔지니어 만 고용해야합니까? ;-)
Andrew Swan

이런 것들이 '엔지니어링'의 정의에 부합한다고 생각한다면 걱정이됩니다. 그들은 엔지니어링이 아닌 스킬 렛의 정의를 충족합니다.
벤자민 R

6

대학에 따라 다릅니다. 저는 2003 년에 호주 대학을 졸업했습니다. 그 당시 우리는 Z, 알고리즘 및 데이터 구조, 운영 체제 등과 같은 모든 공식적인 내용과 함께 UML, 단위 테스트, XP (및 기타 애자일 방법론)를 배웠습니다.

그들은 단위 테스트를 아주 자세하게 다루지 않았고, 더 많은 것은 한 강의에 대한 서비스를 통과했습니다. "단위 테스트 란 무엇인가"가 아닌 효과적인 단위 테스트를 작성하는 방법을 배웠다면 좋았을 것입니다.

버전 제어에 관한 한, 우리는 2 년차부터 프로그래밍 프로젝트에서 CVS (버전 제어)를 사용했습니다.

나는 Glyph가 말한 것에 강하게 동의합니다. CS는 너무나 미성숙 한 분야입니다. 지난 50 년 동안 우리는 우리가 무엇을 배워야하는지, 그리고 무엇이 지나가는 유행인지 알지 못합니다. 150 년만 주면 상황이 더 안정 될 수 있습니다. 실패한 실제 프로젝트의 수는 이것이 미성숙 한 산업이라는 것을 분명히 보여줍니다. 건축 프로젝트의 80 %가 실패했다고 상상해보십시오!


5

이 모든 것은 소프트웨어 개발 관행에 대한 단일 클래스에서 쉽게 다룰 수 있습니다. 그것은 대부분의 CS 커리큘럼의 일부가 아닙니다. 왜냐하면 그것이 CS에 관한 것이 아니기 때문입니다.하지만 그 내용에 대한 일부 커버리지가 유용하다고 생각합니다. 우리 학교에는 그런 수업이있었습니다. 버전 제어는 다루지 않았지만 UML, 요구 사항 수집, 개발 방법론 (다양한 애자일 및 워터 폴), 단위 테스트, 통합 테스트 등을 다루었으며 프로젝트 개발을 위해 4 ~ 5 명의 팀으로 작업해야했습니다. (자바에서 다소 간단한 단서 찢어짐). 추가 소프트웨어 엔지니어링 수업이 필요하다고 생각되면 선택 과목으로 제공되었습니다.

내가 수강 한 수업에서 버전 제어를 한 번도 언급하지 않았음에도 불구하고 대부분의 친구들은 개인 프로젝트, 수업 과제 등에이를 사용하고 있었기 때문에 노출되지 않은 것처럼 보이지 않았습니다. 스스로 집어 들지 않은 사람들은 팀 과제 과정에서 반 친구가 그것을 사용하도록 강요당했습니다.

대학은 개념과 이론을 가르치는 것을 의미합니다. 왜냐하면 그것들은 스스로 선택하기 어려운 것들이기 때문입니다. 버전 제어는 도구이며 선택하기 매우 쉽습니다. 조금 사용하고 웹에서 몇 가지 자습서를 읽으면 모든 설정이 완료됩니다. SVN에서 무언가를 확인하는 방법을 알아 내기 위해 강의와 숙제가 필요하다면 실제로 어려운 일에 많은 어려움을 겪게 될 것입니다.

수업 외에 대학에서 공부할 수있는 많은 방법이 있음을 기억하십시오. 그것을 활용하십시오. 수업에 참석하고 시설을 사용하기 위해 많은 비용을 지불하고 있으므로 가치가있는 모든 것을 착유하고 LUG 및 ACM 회의에 참석하고 프로젝트 팀에 참여하거나 (항상 프로그래머가 필요한 로봇을 구축하는 ME가 있습니다) 인문학과 서버를 관리하는 직업. 재료 공학 건물의 로딩 도크에서 컴퓨터를 휴지통으로 옮기고, 빠른 기숙사 인터넷 연결로 Linux iso를 다운로드하고 놀아보세요.


3

문제는 대학이 여러분이 전문가가되도록 가르 칠 필요가 있다고 생각하지 않고 대신 프로그래밍의 학문적 측면에 집중한다는 것입니다. 나는 적어도 업계에서 사용되는 최신 방법과 기술에 대한 언급이 있어야한다고 생각했을 것입니다. 이러한 것들은 학문적 관심도 있기 때문입니다.

우리 과정에서 우리는 개인 소프트웨어 프로세스를 배웠는데, 프로젝트에 소요 된 시간 기록, 좋은 댓글 작성 등과 같은 내용을 다루었지만 버전 관리와 같은 전문적인 기본 사항은 언급하지 않았습니다.


3

당신은 3을지었습니다. 그 중 일부는 컴퓨터 시스템 (예 : 버전 제어)을 이해하는 데 거의 중요하지 않다고 생각합니다. 이러한 것들은 직업의 일부이며, 당신은 그것을 알 필요없이 훌륭한 프로그래머 / 컴퓨터 과학자가 될 수 있습니다.

단위 테스트와 유사하게-왜 단위 테스트를 선택합니까? 확실히 사용성 테스트, 시스템 테스트, 사용자 승인 테스트 및 공장 승인 테스트가 더 중요합니까? 글쎄, 그들은 코드가 유지 보수 부서로 배송되면 작업이 완료되었다고 생각하지 않는 한입니다. :)

내가 매일 사용하는 다른 개념을 생각해보십시오. 소프트웨어와 컴퓨터 시스템의 기본을 이해하는 학생에게는 거의 쓸모가 없을 것입니다.

  • 좋은 논평 관행
  • 표준 준수 (국제 표준뿐만 아니라 팀 코딩 표준)
  • 선적 서류 비치
  • 변경 제어 (차이를 저장하는 버전 제어와 반드시 동일하지는 않습니다. 변경 내용과 변경 이유에 대한 자세한 내용입니다)
  • 유용성 개발

위는 좋은 코드를 작성할 필요 가없는 모든 "소프트 스킬"입니다 .

그러나 데이터 구조 및 알고리즘과 같은 "어려운"기술을 놓치고 있다면 좋은 코드를 작성할 가능성이 거의 없습니다.


2

나는 그 모든 것을 대학에서 배웠다. 선택하는 코스에 따라 다를 수 있습니까? 제 과정은 매우 다양했습니다 (소프트웨어 디자인, UI 디자인, 전자 상거래, AI, 기능적 프로그래밍 등). 소프트웨어 디자인은 디자인 패턴과 단위 테스트 (다양한 것을 포함하는 하나의 큰 프로젝트)에 노출되었습니다. UI 디자인 ... 우리는 프로젝트를 진행하는 3 인 그룹이었습니다. 버전 제어 없이는 아무것도 할 수 없었습니다. 그리고 애자일 개발은 우리 교수들이 계속해서 우리에게 말한 것이었지만, 그것을 사용하기 위해 각 그룹에 맡겼습니다.

나는 많은 대학생들이 높은 GPA를 줄 수있는 "쉬운"코스 나 코스를 택했다는 것을 알았습니다. 다른 사람들은 배우고 싶은 것에 초점을 맞추고 주로 관심을 가질 분야를 찾기 위해 탐구하고 있습니다. 그리고 그들이 무엇에 관심을 가지고 있는지 정확히 아는 사람들이 있습니다. 그들은 코스를 다양 화하지 않는 경향이 있다는 점을 제외하면 좋습니다.


문제는 그 수업이 적어도 우리 학교에서 더 높은 수준의 수업이라는 것입니다. 나는 그것들이 가장 먼저 배워야하거나 적어도 중급 수준에서 배워야한다고 생각합니다.
Jason Baker

2

이러한 것들이 가장 먼저 가르치는 것이 아닌 이유에 대한 답 : 학부 프로그램은 일반적으로 석사 과정 학생이되도록 훈련합니다. 자신의 코스를 선택하기 시작하면 (일반적으로 나중에 발생 함) 학계 밖에서 사용되는 것에 대해 배울 수 있습니다. 이것이 그들이 알고리즘, 데이터 구조에 초점을 맞추고 해결되지 않은 문제를 제시하는 이유입니다.

나는 개인적으로 그들이 이것을하는 것이 좋다고 생각한다. 프로그래밍은 우리 중 많은 사람들이 생각하는 것처럼 쉽지 않습니다. 많은 사람들이 그것으로 어려움을 겪습니다. 나는이 사람들이 Perforce가 괴물인지 알아 내기 전에 for 루프가 어떻게 작동하는지 먼저 이해하고 싶습니다.


2

그들은 대부분의 학교가 무역이 아니라 학문적이기 때문에 그러한 주제를 가르치지 않습니다. 즉, 그들은 당신을 직업으로 훈련시키는 것이 아니라 아이디어와 이론을 가르치기 위해 고안되었습니다. QA의 전체 개념은 수학적 증명을 통과하는 것 이상으로 컴퓨터 과학과 관련이 없습니다. 게다가 QA 관행과 개발 워크 플로는 개발 하우스마다 크게 다르기 때문에 학교에서 가르치는 것은 시간과 돈을 낭비하는 것입니다.


2

애자일 개발을 제외하고 1 학년 때 모든 것을 배웠습니다.

그것은 바로 IMHO를 선택하는 것입니다. 상위 10 위를 차지하면 그 모든 것을 빠르게 배울 수 있습니다.

일반적으로 CS 교육에 관한 한, 우리는 기본적으로 교수들에게 많은 것을 가르치도록 요청하고 있습니다 (모든 언어, 데이터 구조, 런타임 효율성, 실제로 비트 수준에서 작동하는 방식). 저는 질문을하고 싶습니다. 아이들이 소프트웨어 엔지니어링에 대해 더 많이 배우기 위해 스스로 받아들이지 않는 이유는 무엇입니까?


2

학생들처럼 대학마다 다릅니다. 일부 대학, 또는 더 정확하게는 일부 교수는 변화에 저항하거나 게으르다. 다행히 대부분은 그렇지 않습니다. 이론, 개념, 역사 등은 CS 커리큘럼에서 중요하고 중요합니다. 그러나 학생이 작업 환경을 준비하는 것도 마찬가지입니다. 당연히 우리 지역의 커뮤니티 칼리지는 매우 최신의 적용 가능한 CS 과정을 제공합니다. 규모가 크고 확립 된 명문 대학에서는 그리 많지 않습니다.


2

데이터 구조와 알고리즘이 컴퓨팅의 핵심을 구성하므로 훨씬 더 중요하기 때문입니다. 단위 테스트, 버전 제어 및 애자일 방법론은 거래 도구 일뿐입니다 (필요한 경우 작업에서 선택해야 함).


1

좋은 CS 프로그램은 미래의 모든 프로그래밍 교육의 기초가 될 기초를 가르쳐야한다고 생각합니다. Agile과 같은 개발 방법론과 버전 제어 도구는 유행과 같습니다. 그들은 왔다가 간다. 또한 그들은 학업이 아닌 산업 환경에서 사용되는 경향이 있으므로 대학에서 아마도 직장에서 배울 것과 같은 것을 다루는 것은 드문 일이라고 생각합니다. 나는 그것이 옳다고 말하는 것은 아니지만 아마도 그것은 학문적 사고 방식 일 것입니다.


미안하지만, 애자일과 버전 컨트롤은 조립 라인이나 미적분의 발명이 유행이었다고 생각하지 않습니다. 현실 세계에서 우리는 프로그래밍을 근본적으로 바꾸는 것들을 디자인하고 있지만, 대학은 우리가 앞으로 나아 갔다는 것을 알지 못하는 작은 강의실에서 현실과 너무 멀리 떨어져 있습니다.
Austin

1

나는 당신이 말하는 것에 동의합니다. 저는 최근에 소프트웨어 개발 세계에서 일하기 시작했고 이미 대학에서 배운 적이없는 애자일 개발에 대해 배우기 시작했습니다.

문제의 사실은 대학 교수들이 필요한만큼 새로운 개발 기술을 따라 가지 못한다는 것입니다. 또한 커리큘럼에 다른 더 중요한 것이 있다고 느낄 수도 있습니다.


1

대학 강사는 소프트웨어를 작성하는 방법에 대해 모르고 연구하고 가르치고 때로는 논문이 출판 될 때까지만 작동해야하는 일부 코드를 공격합니다.

Titus와 같은 사람들 덕분에 우리가 진정으로 프로그래밍을 배우는 학자를 얻었 습니다. 여기에서 해당 주제에 대한 그의 의견을 읽으십시오.

제가 학생이었을 때 저는 도서관에서 Extreme Programming에 관한 책을 읽었습니다. 우리는 클래스에서 간략하게 토론했습니다. 소프트웨어 개발의 "Waterfall Model"을 준수하도록 요구했던 동일한 클래스에서 "컴파일"이 그 단계입니다. 개인적인.

당신의 경력에 ​​최선을 다해 학위를 졸업하기를 바랍니다. 당신의 이름 뒤에 편지를 쓰는 것이 좋습니다. :)


1

언급 한 세 가지 (단위 테스트, 버전 제어, 애자일 개발)는 모두 Groningen 대학의 컴퓨팅 과학 프로그램에서 어느 정도 가르칩니다. 그것이 좋은 것인지 아닌지는 공개 질문으로 남겨 둘 것입니다. 그러나 "실용적인 것"을 가르치는 대학이 없다는 것은 사실이 아닙니다.


1

이는 제가 전공으로 전환하기 전 CS 프로그램에서 제한된 경험과 대규모 소프트웨어 회사에서 인턴으로 일한 경험을 기반으로합니다. 생성해야하는 대부분의 프로그램이 자동화 된 테스트를 필요로 할만큼 충분히 크지 않기 때문에 단위 테스트를 가르치지 않습니다. 특정 입력 집합을 보장하므로 모든 것을 수동으로 테스트 할 수 있습니다. 대부분의 프로젝트는 자동화 된 테스트를 실행하는 스크립트로 등급이 매겨지기 때문에 테스트를 자동화하는 방법을 가르치는 것도 프로젝트 등급 지정을 방해 할 수 있습니다. int foo2; 적절한 들여 쓰기를 사용합니다.

버전 관리가 왜 가르쳐지지 않았는지 모르겠지만 그 중 일부는 아마도 프로젝트의 규모 일 것입니다. 버전 관리를 위해 충분히 큰 프로젝트는 없었고, 대체로 1000 줄이 넘는 코드를 작성하고 한 학기 전체를 ​​작성했습니다. 나는 당신이 필요하다면 당신이 그것을 당신 자신에게 가르 칠 것이라고 생각합니다. 내가 가진 모든 그룹 프로젝트는 짝 프로그래밍 프로젝트 여야하는데, 둘 다 같은 컴퓨터에서 버전 제어를 사용하는 이유는 무엇입니까?

애자일 개발이 왜 가르쳐지지 않았는지 모르겠지만 아마도 프로그램 크기에 따라 같은 것으로 돌아갈 것입니다. 민첩한 개발은 개인용 컴퓨터 및 소규모 서버에서 실행되는 새로운 소프트웨어에서 일반적이지만 IBM 메인 프레임과 같은 시스템이나 문서가 왕인 은행이나 의료와 같은 문제 도메인에서는 일반적으로 사용되지 않습니다. 그것은 또한 많은 교수들이 훈련을 받았던 약 20 년 전에 애자일 개발이 아니었다는 사실과 관련이있을 것입니다.


> 둘 다 같은 컴퓨터에서 버전 관리를 사용하는 이유는 무엇입니까? 나는 컴퓨터에서 내가 유일한 사람 일 때도 버전 관리를 사용한다! 그렇지 않으면 어떻게 브랜치 및 패치 릴리스를 관리하거나 파일의 이전 버전을 볼 수 있습니까 (마지막 변경으로 인해 파일이 손상되기 전)?
Andrew Swan

Andrew의 Ditto. 모든 작업이 랩톱에서 이루어지고 대부분이 단독으로 수행되지만 SCM 도구를 광범위하게 사용합니다. 백업, 개정 제어, 분기 및 병합, 이전 코드 패치. 그것들은 모두 소스 코드뿐만 아니라 제작 된 콘텐츠에 사용하는 이유입니다.
Matthew Schinckel

코드가 단위 / 수락 테스트를 통과했는지 여부에 대해 등급이 매겨지지 않는 이유가 없습니다.

1

주된 이유는 많은 (대부분?) 대학이 무역 학교와 다른 목표를 가지고 있다고 생각하기 때문입니다. 따라서 그들은 학생들에게 배우는 방법 과 훈육의 기본 원리 를 가르치기를 원합니다 . 또한 알고리즘과 데이터 구조는 모든 프로그래밍 언어에 적용되며 특정 도구에 의존하지 않습니다 (졸업시 사용하거나 사용하지 않을 수 있음).

컴퓨터 과학에서 이는 알고리즘, 데이터 구조, 컴퓨터 이론, 컴파일러 이론 등을 의미합니다. 나열하는 내용은 프로그래밍 방법, 문제 해결 방법 등에 대한 이해가 아닙니다. 프로그래밍 실습에 관한 것입니다. 부수적으로, 프로그래머로 일할 의사가있는 대학에서 누구에게나 놀라운 책입니다). 자, 이것의 대부분은 엔트리 레벨 코드 원숭이 위치에서 사용되지 않을 것이며, 일부 사람들은 그것이 유용하지 않다고 생각하게 만듭니다. 동의하지 않습니다. 매우 유용하다고 생각합니다. 그러나 CS 학위를받은 후에 프로그래머로 일하는 데 필요한 모든 것을 알고 있다는 의미는 아닙니다.

당신이 언급 한 것이 유용하지 않다는 것도 아닙니다. 그들은. 프로그래머를 배우지 않으면 프로그래머로 일하는 데 어려움을 겪을 것이며 적어도 어느 정도는 대학에서 가르쳐야한다고 생각합니다. 나는 미술에서 학부 프로그래밍을 보는 것과 같은 방식으로 버전 제어, 단위 테스트 등을 가르치고, 페인트 브러시가 무엇인지, 다양한 경우에 어떤 브러시를 사용해야하는지에 대해 가르 칠 것입니다.


1

어떤 유형의 컴퓨터 과학 프로그램에 참여하고 있는지에 따라 연구 및 과학 측면을 목표로하는 프로그램과 구현 측면을 지향하는 프로그램이 있다고 생각합니다. 나는 특별히 학계에 머무르는 교수 만있는 특정 학교를 거부했습니다. 그들이 가르치는 것을 "사용"하지 않은 교수가 없다면, 그 모든 것이 말 그대로 그들의 머릿속에 있습니다.

Plug : DePaul University에서 Comp Sci 학사와 Soft Eng 석사를 이수한 저는 대부분 시간제 강의를했던 강사 / 교수들에게 배웠습니다. 그리고 그것을 수업에 연결하십시오. 또한 이것은 대부분 통근 / 파트 타임 학교이기 때문에 대부분의 학생들은 자신이 배우는 것을 사용하는 직업을 가지고 있습니다.

학습 과정은 여전히 ​​모든 이론으로 시작되지만 일반적으로 "실제로이 작업을 얼마나 많이 사용합니까?"라는 질문을받습니다. 그리고 전형적인 대답은 "우리는 그것을 사용하지만 제거하거나 단순한 방식으로 사용한다"는 것입니다. 그리고 우리는 실제 현실 세계 시나리오로 들어갑니다.

학교에서 단위 테스트는 항상 존재했습니다. Java에서 시작했지만 모든 프로젝트에 ANT와 JUnit을 사용하게 만들었습니다. 빌드 구성 및 단위 테스트에서 좋은 시작이었습니다.

그리고 익스트림 프로그래밍은 제가들은 수업 중 약 3 ~ 4 개에 포함되었습니다. 나는 그들이 모두 쌍 프로그래밍에서 단위 테스트에 이르기까지 12 가지 다른 측면에서 시작했던 것을 기억합니다 (위 참조). 이제 초점이 애자일 인 것 같습니다.

따라서 빠른 대답은 그렇습니다. 다른 학교보다 더 실용적인 접근 방식을 가진 학교가 있습니다.


1

단위 테스트와 버전 제어는 제가 대학에 다니는 2 년차 컴퓨터 과학 과정에서 가르쳤습니다. 단위 테스트는 흰색과 검은 색 상자의 차이를 포함하는 테스트의 일부에 속했으며 3 년차 프로그래밍 과제의 좋은 마크는 단위 테스트에서 쉽게 올 수있는 좋은 오류 처리를 위해 사용되었습니다.

애자일 개발은 학업 환경에서 가르치기가 다소 어려울 수 있습니다. 이론상으로 폭포 수법에 대해 배웠지 만 졸업하고 학계와는 상당히 다른 현실 세계로 옮겨 가기 전까지는 현장에서 볼 수 없었습니다. 세마포어에 대해 가르쳐 주려고 시도한 과제의 핵심을 결코 건드리지 않은 과제를 거의 통과했습니다.

또한 애자일이 얼마나 오랫동안 사용되었으며 어떤 형태의 애자일을 의미 했습니까? 내가 본 것과는 많은 다른 구현이 있습니다.


1

애자일 프로그래밍이 유행이라고 생각하지 않지만 동시에 교사가 프로젝트를 통해 학습 할 수있는 방법을 생각하기 어려울 것입니다. 프로젝트 A 빌드 a를주지 않는 한, 프로젝트 B는 a에서 확장됩니다. 문제는 시간과 범위입니다. 4 개월 코스라면 어려울 것입니다.

버전 제어 및 단위 테스트 방법은 항상 변경되며 언어 또는이를 정의하는 사람에 따라 다릅니다.

데이터 구조와 알고리즘은 클래스 설정에서 작업 할 수있는 것입니다. 솔직히, 그들은 단위 테스트 및 버전 관리보다 이해하기 위해 훨씬 더 많은 노력을 기울입니다. 대학의 일부는 자신을 가르치는 것임을 기억하십시오. 콜라주에는 동일한 권한이 없습니다. 또는 적어도 같은 정도는 아닙니다. IMHO.


흠 대학과 대학이 같은 의미라고 생각했는데 .. 원어민은 아니 었습니다.

미국에서 (국가 현명한) 위치에 따라 동일하고 캐나다에서는 다릅니다. 나는 주에서 내가 콜라주라고 부르는 것이 실제로 주니어 콜라주라고 생각합니다. 호주에서는 Taff (철자 용서)라고합니다. 원어민이되지 않는 것은 이런 일을 매우 "재미있게 만듭니다"
baash05
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.