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

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

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

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

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



답변

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

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

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

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

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

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


답변

우리 선생님들은 :

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

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


답변

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

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

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


답변

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

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

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


답변

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

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을 가르치고 일부는 둘 다하지 않습니다. 대학에 가치가 있다면 배울 것이 있습니다. 그들은 당신에게 배워야 할 모든 것을 가르치지는 않을 것이지만 유용한 것을 가질 것입니다. 거기에있는 동안 무언가를 배우고, 적절한 수의 다양한 형태의 도구를 도구 상자에 모으십시오. 대학을 떠나 일자리를 구하십시오. 도구 상자가 좋지 않으면 다른 대학을 찾고 첫 번째 대학을 언급하지 마십시오. 괜찮은 도구 상자라면 해당 도구를 사용하고 자신의 시간에 새로운 도구를 만드십시오. 그것이 꽤 좋은 도구라면, 그 대학과 당신이 이것을 배운 좋은 학자에 대해 좋은 것을 말하고 그들이 당신에게 준 것에 대해 학교에 갚으십시오. 대학 도구의 범용 카탈로그에서 가능한 모든 도구를 얻지는 못했지만 특정 하위 집합을 사용하게 될 것입니다. 졸업하지 않아도 …


답변

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


답변

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

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