“컴퓨터 과학! = 소프트웨어 엔지니어링”은 프로그래밍을 잘못 가르치는 변명입니까?


23

우리는 모두 들었습니다. 개발 기술이 부족한 CS 졸업생에 대한 토론이있을 때마다 누군가가 말합니다.

컴퓨터 과학은 소프트웨어 공학이 아닙니다.

내가 보는 문제는 프로그래밍과 소프트웨어 개발 CS 과정에서 진행 된다는 것 입니다. 그들은 일반적으로 잘못 배웁니다. 그것이 가르치고 있다면, 왜 그것을 올바르게 가르칠까 요? *

그래서 나는 두 가지 질문에 대한 의견이 무엇인지보고 싶습니다.

  1. CS! = SE 논증은 프로그래밍 기술을 제대로 가르치지 못한 것에 대한 징계 나 변명인가?

  2. 질문 1에 대한 귀하의 답변에 관계없이; 그러한 결정을 내릴 수있는 전능 한 위치에 있다면 : CS 과정에서 프로그래밍에 대한 적절한 교수법을 강조 하시겠습니까?

*. 교육 기간 동안 얻은 일화 적 증거를 바탕으로 해당 분야의 대부분의 학자들은 유지 관리 및 유지 관리를 위해 코드를 작성할 필요가 없으며 결과적으로 지식 / 기술이 없다는 의혹이 있습니다. 효과적으로 가르칩니다.


7
나는 나의 의견을 명확히 할 것이다. 내 마음에, 그들은 다르다 (CS! = SE). 따라서 CS와 SE를 2 개의 다른 필드 A, B로 대체하면 A! = B, 볼링 레슨! = 일본 사와 같은 것을 얻을 수 있습니다. 그렇다면 당신의 주장은 다음과 같습니다. BL! = JH는 JH를 ​​올바르게 가르치지 않은 것에 대한 변명입니까? 이것은 현재 터무니없는 질문이므로 무시해야합니다. 연결된 목록에 해시 테이블을 사용하는 이유를 모르는 CS 등급을 본 사람은 제대로 학습되지 않았습니다. 작업 리팩토링 코드가 불량한 CS 등급을 확인한 경우에는 예외로합니다.
예레미야 Nunn

2
@Jeremiag Nunn : 당신의 비유를 사용하려면 : 일본 역사는 볼링과 함께 가르쳐지지 않습니다. 저는 모든 CS 프로그램이 실제로 프로그래밍을 가르치고 있으며 "CS! = SE"인수를 사용하여 잘 가르치지 않는다는 주장을하고 있습니다.
Steven Evers

2
또 다른 생각 : 특정 CS에 SE 기술이 부족하면 학교 또는 학생의 잘못이 있습니까? 각 수업마다 유능한 것에서 끔찍한 것으로 광범위하게 퍼진 기술이있을 것입니다.
Adam Lear

2
@SnOrfus 소프트웨어 엔지니어링은 소프트웨어 구축 기술입니다. 컴퓨터 과학은 소프트웨어의 이론입니다. 둘 다 아는 것이 이상적이지만 여전히 분리되어 있습니다. @ Jeremiah 's보다 더 나은 유추 (IMO)는 건축 악기와 연주 도구 중 하나 일 것입니다.
dash-tom-bang

5
유지 보수 가능한 코드를 작성하지 않아도되는 학자들에 대한 각주는 거의 정확히 요점입니다. CS가 관심을 갖는 것은 아닙니다.
dash-tom-bang

답변:


27

저는 이것이 코웃이 아니라 컴퓨터 공학 소프트웨어 공학이 아니라 프로그래밍이 아니라고 주장합니다 . 공식화 된 계산의 과학입니다. 본질적으로 수학입니다 (사실, 많은 CS 프로그램이 응용 수학 프로그램으로 시작되었습니다).

문제는 학계보다 산업계에 더 큰 문제라고 생각합니다. 업계는 이력서에 CS 학위가 표시되어 있으며 "컴퓨터에 능숙하다"고 생각하며 IT, 프로그래밍, 소프트웨어 개발 등 컴퓨터와 관련된 모든 일 을하기 위해 그를 고용합니다 . 이러한 것들이 반드시 CS 졸업생의 전문 지식 영역에있는 것은 아닙니다. 컴퓨터를 만들거나 비디오 게임을하는 것을 좋아하는 많은 사람들은 그런 종류의 일을 기대하는 CS 프로그램에 들어 와서 무례한 놀라움을 느낍니다. 즉, CS에 들어가는 많은 학생들은 실제로 거기에 속하지 않으며 좀 더 구체적인 학위 프로그램에서 더 나을 것입니다.

둘째, 전형적인 학부 커리큘럼에서 CS를 가르치는 데는 시간 이 매우 제한되어 있습니다. 저학년 커리큘럼에는 8 개의 CS 과정 (BA의 경우) 또는 12 개의 CS 과정 (BS의 경우)과 필요한 모든 수학 과정이 있습니다. CS 수학 , 프로그래밍 소프트웨어 공학 을 가르치는 데 많은 시간이 걸리지 않으므로 어느 시점에서 중요한 것과 학생이 스스로 선택할 수있는 것을 결정해야합니다.

마지막 요점은 중요합니다. 저는 어떤 과목 분야에서든 좋은 학생이 스스로 아이디어를 탐구 할 것이라고 생각합니다. 나는 CS 학위를 가지고 있지만, 나는 스스로 소프트웨어 공부하고 썼기 때문에 괜찮은 개발자로 대학을 떠났다고 생각 합니다. 대학은 수업에 관한 것이 아닙니다. 또한 학생들에게 반 자율적으로 기술을 개발할 수있는 시간을 제공하면서도 여전히 귀중한 지침을 제공합니다.

CS, 수학 등의 교수 이론은 특정 직무 관련 기술을 가르치는 것 보다 중요 하지는 않지만 중요합니다. 당신이 학생을 가르치는 경우 방법과 기술, 뒤에뿐만 아니라 무엇을 당신이 자신의 지식을 적용 할 때 훨씬 더 적응력이 사람과 함께하게 될 겁니다. 예를 들어, 나는 상당히 비뚤어진 "자바 학교"에 가서 자바로 가르쳤지만 프로그래밍 언어 이론 과정도 가지고 있었는데, 그 이유 는 여러 언어 의 이유 를 설명했습니다 . 결과적으로 그 배경이없는 것보다 훨씬 더 나은 소프트웨어를 작성하는 법을 배웠습니다. 물론, 저는 하스켈에서 제 일에 소프트웨어를 쓰지 않지만 많은 프로그래밍 언어 이론을 알면 통찰력을 얻을 수있었습니다. 프로그래머로서 내 직업에 적용되었습니다.

또한 산업계가 대학생들로부터 너무 많은 것을 기대하고 있다고 생각합니다. 산업계는 자체 비용을 절감하기를 원하기 때문에 일자리를위한 신입 사원 모집 대신 대학이 무역 / 기술 학교가되기를 기대합니다. 사실상, 그들은 대학들이 그들을 위해 훈련을하기를 원합니다. 대학 졸업생 은 대학 밖에서 신선한 것을 모두 알 수 없습니다 . 좋은 개발자가되는 것은 지식에 관한 것 (특히 소프트웨어 개발과 같이 비교적 젊은 분야)에 관한 것만큼이나 경험에 관한 것입니다.


이것은 내 생각이지만 내 대답보다 훨씬 잘 설명되었습니다.
Jeremiah Nunn

+1 : 여기서 아주 좋은 점은, 한 가지를 고르는 것이 싫지만 CS가 응용 수학으로 시작되었다는 점을 고려할 때 응용 프로그램의 중요성을 의미하지 않습니까?이 경우 프로그래밍입니까?
Steven Evers

2
@SnOrfus : 프로그래밍이 수학에 적용되는 정도까지 가능합니다. 그러나 컴퓨터 공학과 마찬가지로 소프트웨어 공학, 프로그래밍과 소프트웨어 공학도 마찬가지입니다.
mipadi

1
@David Thornley : 첫째, 내가 물리학을 습득 한 사람은 누구나 파도를 연구 할 때 오실로스코프를 사용했습니다. 그럼에도 불구하고 비유는 유지되지 않습니다. 학생들은 이미 CS 학위의 일부로 프로그래밍을 배우고 있습니다. 당신은, 나는, 부정에 참석 한 우리 모두였습니다. 한 코스의 일회성 섹션도 아니 었습니다. 한 학기당 최소 1-2 수업 의 필수 부분입니다 .
Steven Evers

2
학교 (대학, 대학 등)가 단순히 물고기를 줄뿐만 아니라 낚시하는 법을 가르쳐 주어야합니다.
Emiliano

25

여기서 문제의 일부는 4 년이 세련된 소프트웨어 엔지니어가 되기에는 시간이 충분하지 않다는 사실입니다. 우리는 학부생들이 수학과 CS 과정보다 더 많은 것들에 노출되기를 원하고 배울 수있는 많은 순수 역학 (알고리즘, 데이터 구조, 언어 구문)이 있다는 사실을 감안할 때 녹색 CS 전공이 될 것으로 기대할 수는 없습니다. 소프트웨어 엔지니어.

나는 CS! = SE에 동의하고 학교에 가서 SE가 될 수 있을지 확신하지 못한다


+! 1 : 당신의 요점을 알지만 그것은 단지 '광택'된 것이 아닙니다. 많은 사람들은 기본적인 기술이 부족합니다.
Steven Evers

나는 그것이 당신이 매우 기본적인 기술로 생각하는 것에 달려 있다고 생각합니다. 예를 들어 SQL은 내 기본 기술이지만 CS 등급이 실제로 약하다는 것을 알았습니다. 당신은 그들이 언어 구문 또는 기본 모듈화 또는 OOP 개념에 약한 말을하는 경우는, 그 큰 문제가 있고 난 다른 학교 중 졸업생을 찾고 시작 했죠
bigtang

저는 14 년 동안 전문적으로 프로그래밍했습니다. SQL을 살펴 보았고 기본 쿼리를 작성할 수도 있지만 이러한 기본 기술조차도 작년에 도착했습니다. SQL은 CS가 아닙니다. SQL은 데이터베이스 이론 (CS)의 구현입니다.
dash-tom-bang

@ dash-tom-bang : 명령형 언어의 제어 흐름 설명을 기본으로 고려 하시겠습니까? 나는 그들의 대부분을 모르는 새로운 CS 졸업생을 토팅하는 정도가 있음을 확인할 수 있습니다.
Steven Evers

특정 언어로 흐름 제어를 구현하는 것이 "컴퓨터 과학의 기초"에 속한다고 생각하지 않습니다. 그러나 누군가 흐름 제어 를 개념으로 이해하지 못하면 CS를 배우지 못했습니다.
dash-tom-bang

10

CS는 실제로 SE가 아닙니다. 그리고 사람들은 둘을 인정하면서도 항상 두 사람을 혼동하는 것 같습니다. 컴퓨터 과학은 실제로 컴퓨터 과학 또는 컴퓨팅 과학과 같은 이름으로 바뀌어야합니다. 실제로 컴퓨터 과학은 컴퓨터와 관련이 거의 없습니다. 그래프 이론, 알고리즘 분석, 데이터 구조 등

사람들은 새로운 CS 졸업생이 실제로 ITT 졸업생이라고 가정하려고합니다. 그들은 직업 훈련을받은 사람을 원합니다. 컴퓨터 과학은 과학이고 프로그래밍은 예술입니다. 이것들은 동일하지 않습니다.

이것은 신선한 물리학 대학원생이 왜 좋은 자동차 엔지니어가 아닌지 묻는 것과 같습니다. 바보입니다.


2
프로그래밍은 예술이 아닌 기술입니다.
dash-tom-bang

6
프로그래밍은 기술, 발전 예술입니다.
Maciej Piechotka

2
이름을 바꾸지 않겠습니다. 컴퓨터 과학이 아닌 컴퓨터 과학은 무엇입니까? 다시 말해, 계산 기계에 대한 연구는 계산에 대한 연구를 의미합니다.
Michael K

1
사람들이 당신과 혼동했기 때문에 이름을 바꿔야합니다. Edsger W. Dijastra를 알고 있습니까? "컴퓨터 과학은 천문학이 망원경에 관한 것보다 컴퓨터에 관한 것이 아닙니다." :)
boos

1
예술은 아름다움을 만듭니다. craft는 유틸리티를 만듭니다. 예술은 그 아름다움을 위해 창조되었습니다. 공예는 ​​그 유용성을 위해 만들어졌습니다. 예술은 유용 할 수 있습니다. 공예는 ​​아름답습니다. 소프트웨어 엔지니어링은 유틸리티를 만듭니다. 따라서 소프트웨어 엔지니어링은 기술입니다.
systemovich

8
  1. 적어도 미국에서는 교육 전체가 이익이되었습니다. 학교는 등록을 늘리기 위해 커리큘럼을 전반적으로 멍청하게 만들고 있습니다. 대학에는 그 어느 때보 다 소속되지 않은 사람들이 더 많습니다. 적절한 기술을 배우는 것은 쉽게 가르 칠 수있는 것이 아니기 때문에 쉽게 배울 수는 없습니다.
  2. 개인적으로 나는 일반적으로 존재하는 것보다 SE에 더 중점을 둘 것이지만, 프로그램으로서의 CS는 산업에 종사하고자하는 사람들에게는 적합하지 않다고 생각합니다. 더 많은 기관들이 실용적인 SE 프로그램을 제공해야한다고 생각합니다.

# 1의 경우 +1 학교에 갔을 때 나는 이것을 알아 차렸다. 영리 학교 였고 많은 학생들이 그곳에 갈 자격이 없다고 느꼈습니다. 또한 학교는 코스 당 돈만 받았으며 학생이 실패하면 더 이상 돈을 얻지 못 했으므로 교사는 종종 학생들을 합격시키지 못했습니다. 우리는 심지어 자신이 선택한 언어로 Hello World 프로그램을 작성할 수 없다고 생각하는 학위를 가진 한 사람 이상을 졸업했습니다!
Rachel

미국 교육 시스템과 이윤의 역할을 다루었으므로 여기에 필수 Milton Friedman Choir가 있습니다 : youtube.com/watch?v=W3Seg0JE1PM
Job

7

CS! = SE 논증은 프로그래밍 기술을 제대로 가르치지 못한 것에 대한 징계 나 변명인가?

CS는 SE가 아닙니다. 그건 변명이 아니라 사실입니다.

질문 1에 대한 귀하의 답변에 관계없이; 그러한 결정을 내릴 수있는 전능 한 위치에 있다면 : CS 과정에서 프로그래밍에 대한 적절한 교수법을 강조 하시겠습니까?

천문학 자들이 망원경을 만드는 데 대한 세부 사항을 배우도록 강요하는 것과 같습니다. 또는 프로그래머에게 컴퓨터 구축의 세부 사항을 배우도록 강요합니다. 관련 사항이지만 한 사람이 모든 것을 알 필요는 없습니다.


6

예, 이것은 나에게 쏟아져 나오는 것처럼 들리고, 학문 분야로서 CS의 미성숙의 신호입니다.

미국 화학 학회 공인 BS 프로그램은 이론 (강의 수업)과 실습 (실험실 수업) 모두에서 특정 능력을 입증하기 위해 특정 과정을 통과해야합니다. 현재 CS는 내가 아는 한 그런 것이 없습니다.

내 대학원 스콜 교수 중 한 명이 Magic Rocks가있는 어항보다 물리적으로 화학적으로 아무것도하지 않은 상아탑 이론가였습니다. .

내가 산업 페인트 화학자로 일할 때, 그들은 내가 학사를 가지고 실험실에서 무능하다는 생각에 머리를 비웃었습니다. 물론 실험실에서하고있는 일에 대한 세부 사항은 학교에서 실험실 수업에서했던 것과는 달랐지만 원칙은 동일했습니다. 우리는 비커와 자기 교반기보다는 페인트 믹서와 캔을 사용했습니다. .

CS에 동일한 접근 방식을 적용하려는 경우 CS / SE 커리큘럼에 대한 실질적인 소프트웨어 개발 기술로 가르 칠 수있는 세부 사항은 학교마다 다를 수 있으며 시간이 지남에 따라 달라질 수 있습니다. 그러나 누군가가 현장에서 학위를 취득하고 어떤 종류의 코드 를 작성, 디버깅 및 유지 관리 하는 데 능숙하지 않다는 것은 허용 됩니다. (물론 그것은 많은 CS 프로그램에서 실제로 일하는 방식이지만 여전히 미쳤습니다.)


미쳤지, 전염병이야 동료들이 작성한 코드의 약 90 %는 피사의 사탑만큼 유지 관리가 가능합니다.
Marcel Valdez Orozco

5

나는 4 년이면 성장할 수있는 좋은 기초를주기에 충분한 시간이라는 데 동의합니다. 그러나 실제로 도움이되는 한 가지는 업계의 사람들이 커리큘럼 개발에 참여하고 심지어 교실에서 가르치는 것입니다. 작년에 나는 지역 대학의 소프트웨어 개발 수업에서 업계 연구원이었습니다. 그것은 매우 눈에 띄는 경험이었습니다. 교수와 저는 과정 내용을 함께 연구했으며, 개발 과정, 업계 모범 사례 및 이전에 수행했던 "실제"상황에 대해 더 많은 정보를 제공했습니다. 우리가 발견 한 것은 대부분의 강사가 널리 사용되고 유지 관리되는 코드를 개발하지 않기 때문에 업계의 누군가를 데려 와서이를 수행하는 데 필요한 기술을 식별하고 가르치는 데 도움이되었다는 것입니다.


나는 그런 것을 시도하고 싶습니다.
ChaosPandion

지역 대학교에 연락하여 비슷한 것이 있는지 확인해야합니다. 당신은 어디 어디에 있습니까?
Beth Whitezel

3
  1. 그렇습니다. 100 % copout, 그들은 우리의 경력 전체에 도움이 될 장기 기술을 가르쳐야합니다. 학계 또는 산업계에 진학하려는 의도가 있든 없든 혼자서라도 유지 관리 할 수있는 방식으로 프로그래밍 할 수 있어야합니다.

  2. 그렇습니다. 적절한 과정에서만 스트레스를받을 것입니다. 개인적으로 알고리즘을 구현하려고 시도한 방법을 더 잘 이해하기 위해 당신과 이야기해야한다면 성적을 표시합니다.

순수한 CS 연구를 수행하더라도 아이디어를 보여주기위한 코드를 작성해야 할 것입니다. 적절한 프로그래밍 기술은 어느 시점에서 유용 할 것이므로 대학에서 시작하지 않는 것이 좋습니다.


장기 기술은 CS입니다. "자바"는 장기 기술이 아니며 .NET, SQL, Pascal 또는 COBOL도 아닙니다. "장기"가 아니라면 "레거시 시스템을 유지 관리 할 사람이 필요할 때 일자리를 얻게되어 기쁘다"는 의미입니다.
dash-tom-bang

기본 기술 (CS)이 필요하다는 것에 동의하지만 작성되는 프로그래밍 언어에 관계없이 유지 관리가 쉽고 읽기 쉬운 코드를 작성하는 것을 의미합니다. 장기적으로 사용되는 기술 이상의 기술을 의미합니다.
JustJohn

1
IMHO CS는 더 복잡한 문제에 접근 할 수 있어야하며, 주변의 많은 사람들이 코드를 작성하는 데 CS 학위가 필요하지 않지만 10x10 백만 개의 행렬을 처리하고 조작 해야하는 경우 어떻게 이해할 수 있습니까? SE는 CS 학위없이 처리 할 수 ​​있습니다.
boos

3

우리의 문제는 우리가 기꺼이 인정하는 것보다 의사와 훨씬 더 비슷하다는 것입니다. 우리는 4 년 정도가 학생들이 소프트웨어를 작성하도록 준비시켜야한다는 생각을 가지고 있습니다. 가깝지 않습니다.

우리의 직업은 다른 분야에 비해 초기 단계에 있습니다. 어쩌면 문제는 : 어떻게 학위를 졸업하여 학생들이 훨씬 짧은 시간 내에 실제 소프트웨어 개발 팀의 생산적인 구성원이되기에 CS를 향상시킬 수 있을까요?

아마도 우리는 약과 같아야 할 것입니다. 4 년간의 기본 작업 (CS 학위) 및 거주 –보다 숙련 된 소프트웨어 엔지니어의 감독하에 기술 연습. 어쩌면 그것은 우리가 이미 가지고있는 것이지만 덜 공식적인 것입니다. 저는 거주자처럼, 우리는 첫 직장 에서 직장 에서 가장 소중한 기술 배웁니다 .

아마도 훈련으로서 우리는 이것을 더 잘 공식화해야합니다.


또는 Master Craftsman / Apprentice program
Austin Salonen

1
MD 프로그램은 과학 프로그램이 아닙니다. 과학을 공부하고 싶고 생물학을 듣습니다. 하지만 의학적 문제가 있다면 생물 학자에게 가져 가지 않습니다.
David Thornley

이것은 매우 좋은 생각입니다. 소프트웨어 엔지니어링 또한 경험의 문제라는 사실을 공식화하는 것입니다. 변호사와 의사도 마찬가지입니다
Emiliano

그러나 우리는 다윗에 대해 무엇을 이야기하고 있습니까? 우리 중 얼마나 많은 사람들이 CS에서 학위를 취득한 후 실제로 "컴퓨터 과학"을하는 데 경력을 씁니까? 우리 대부분이 실제로하는 일은 세계로 나가 소프트웨어 개발 기술을 연습하는 것입니다. 그것은 MD와 동일합니다. 그들은 "의학을 실천합니다". 응용 프로그램 구축을 연습합니다.
Chris Holmes

@Chris Holmes : 저는 CSci 학위가 최신 핫 언어를 사용하여 취업 할 준비가 된 프로그래머로 당신을 전환시켜야한다는 생각에 정말 짜증납니다. 이러한 정도의 학위 또는 수료증을위한 충분한 여지가 있으며, 아마도 실제 CSci보다 훨씬 더 많습니다. 나는 소프트웨어 개발이 여기서 의학을 연습하는 것과 유사하다고 생각하지만, 당신은 당신의 MD를 생물학이나 심리학 부서에서 얻지 못하고, 의대에서 얻습니다. 매우 존경받는 학위이지만 박사 학위는 아닙니다.
David Thornley

3

나는 CS 학위를 가지고 있으며 일년 내내 프로그램은 프로그래밍이 아니라 이론 만 있습니다. 우리는 프로그래밍 학위가 아니라 컴퓨터 과학 분야에서 공부하고 있다고 들었습니다. 프로그래머가 되려면 커뮤니티 칼리지에 가십시오.

우리는 알고리즘, 디자인 패턴 및 언어를 사용하지 않고 문제를 해결하는 이론에 대해 배웠습니다. 프로그래밍 언어는왔다 갔다했지만 밑줄 이론은 동일하게 유지됩니다.

따라서 첫 번째 질문에, CS! = SE가 copout이라고 생각하지 않습니다. 사실이야.

당신의 두 번째 질문으로, 아닙니다. 프로그래밍을 어떻게 잘 가르 칩니까? 루프, if, 메소드, 클래스 및 OOP 외에도 '적절한 프로그래밍'은 무엇이고 어떤 프로그래밍 언어와 관련이 있습니까? 당신은 4 년 정도 당신을 위해 prepair 할 수없는 코드 작성 경험이 필요합니다.

그래도 한 가지 사실은 실제 세계에서 개발에 대한 수업을 제공하는 것입니다. 소스 제어, 티켓 / 버그 추적, 코드 추적 및 모든 재즈는 곧 새로운 직무에서 직면하게 될 것들에 대한 대학원생을 준비시키는 좋은 출발이 될 것입니다.

수상 경력이있는 코드를 작성하지 않을 것이라는 점을 이해하기 위해 새 졸업생을 고용 할 때 우리에게 달려 있다고 생각합니다. 그들은 지침과 지시가 필요합니다.


++-훌륭한 포인트. CS 커리큘럼이이 "실제 세계"에 클래스를 제공한다면 좋을 것입니다. 우리는 (1993 년) 우리 대학에서 그것에 대해 이야기했지만 아무데도 가지 않았습니다.
dash-tom-bang

프로그래밍 만의 이론이없는 해를 구성하는 수업에서 어떻게 실력을 입증 할 수 있었습니까? 순수 필기 시험?
Carson63000

@ Carson630000-쓰기 과제, 때로는 상태 다이어그램 쓰기, 문제에 어떻게 접근하고 해결하는지 또는 다양한 CS 개념을 적용하는 방법을 나타내는 에세이를 작성하기도합니다. 그것은 특정 프로그래밍 언어가 아닌 이론을 이해하도록 강요했습니다.
Tyanna

2

대학이 이론 지식과 실제 기술 사이의 균형을 잘 유지하는 것이 중요합니다. 다른 코스에 다니면서 두 가지를 모두 배웠습니다. 처음 몇 년 동안 많은 수학과 알고리즘 / 데이터 구조가있었습니다. 컴퓨터 과학을 계속 배우거나 (예를 들어 정교한 문자열 매칭 알고리즘을 사용하는 코스에 참석할 수있는 예술적 경로) 소프트웨어 엔지니어링에 집중할 수 있습니다. 이 기간 동안 여전히 견고한 프로그래밍 배경을 얻어야했습니다.

추상적 인 문제에 관심이 없었기 때문에 소프트웨어 엔지니어링을 선택했습니다. 그러나 순수한 컴퓨터 과학을 좋아하는 사람들조차도 다음을 수행해야했습니다.

  • 사용자 공간에 작은 파일 시스템을 프로그래밍하고, linux커널 모듈을 만들고 커널 자체를 수정하고, 순수한 객체 지향 게임을 작성하십시오 SmallTalk.
  • 자신의 의사 소통 프로토콜을 작성하고 교사가 선택한 의사 소통 프로토콜을 구현합니다 (두 명의 학생이 이전에는 공동 작업을하지 않았지만 쉽게 의사 소통 할 수 있었을 때 정말 좋았습니다).
  • Java4 명으로 구성된 팀으로 더 큰 프로젝트를 만들고
  • 함수형 프로그래밍 프로젝트를 구축하고
  • C병렬 프로그래밍 을 위한 몇 가지 견고한 프로그램을 작성하십시오 (아이디어는 추상적 이었지만 프로그램이 실패했을 때 좋은 유닉스처럼 program해야 할 적절한 출력을 제공하지 못하는 점과 같이 리뷰는 매우 가혹했습니다 ),
  • 일부 웹 프레임 워크를 사용하여 웹 포털을 만듭니다 (우리가 선택한 django이 프레임 워크를 좋아했습니다).
  • 를 사용하여 꽤 큰 프로그램을 만듭니다 LAMP(나는 여전히 악몽을 가지고 php있지만 postgresql대신에 사용 MySQL하고 DBMS지금 이것을 알게되어 매우 기쁩니다 ),
  • 누군가가 선택한 경우, 그는 자신의 석사 논문을위한 프로그램을 쓸 수 - 나는 10,000 선을 썼다 python사용하여 데스크탑 프로그램 PyQt.

다른 프로젝트가 있었을 수도 있지만 지금은 잊어 버렸습니다.

내 요점은 : 그것은 모두 학교에 달려 있습니다. 나는 Java주요 언어가있는 순수한 소프트웨어 엔지니어링 접근 방식에 대해 싫어 합니다. 그런 학교에 다니면서 병렬 프로그래밍을위한 프로그램을 작성해야하는 친구를 한 번 도와 줘야했습니다. 나는 그가하지만, 그 때문에, 기본적으로 그를 위해 그것을 써야했다 sizeof(some_string)에서이 C문자열의 길이를 제공합니다.

나는 정직 할 것이다 : 나는 수학을 싫어하고, 고통 스러웠다. 추상적 인 작업을 준비해야했을 때, 그것은 알고리즘 / 데이터 구조 시험에 제공 될 것이다. 그러나 그것은 나에게 확실한 우위를 준다 : 나는 매우 추상적 인 방식으로 생각할 수있다. 무술을 배우고 가드를 지키지 않을 때와 같습니다 (적어도 예상되는 곳에서는). 코치는 손을 내릴 때 잊어 버리거나 피곤해 지므로 머리에 계속 닿아 머리를 때립니다. 그러나 얼마 후, 당신은 단지 그들을 유지합니다. 그리고 얼굴에 당신을 때리는 것은 정말 어려워집니다. 추상 알고리즘 문제와 동일합니다. 알고리즘 소개의 내용을 이해 하면 실제로 놀랄 일이 거의 없습니다.


좋은 프로그램처럼 들립니다. 어떤 이론. 많은 연습.
Mike Dunlavey가

1

나는 대답이 그렇다고 생각합니다 (어떻게 든).

문제는 짧은 시간 동안 아이들에게 가르치는 것이 불가능하다는 것입니다. 프로그래머의 논리적 인 사고, 프로그래머의 문제를 (소규모로) 해결하는 방법을 강화해야합니다.

나는 학교 프로그램이 수정되어야한다고 확신한다. 나는 나의 아주 작은 "제 3 세계"국가이다. 우리는 OLPC 프로그램을 구현 한 최초의 국가입니다. http://laptop.org/en/


1

내 자신의 경험 (현재 학생입니다)에서 그렇습니다, 변명입니다. 모든 사람들은 CS를 컴퓨터의 모든 기본 사항을 가르치는 과학이라고 말하고 SE는 명시 적으로 프로그래밍을 가르치는 CS의 특별한 지점입니다. CS에 BS가있는 Imo는 프로그래밍이 전문 분야가 아니더라도 우수하고 최적화 된 코드를 작성하는 방법을 알아야합니다. 그렇습니다. 전 그런 결정을 할 수있는 전능 한 입장이라면 학생들에게 좋은 프로그래밍 기술을 습득하도록 강요 할 것입니다.


저의 학위는 컴퓨터 과학 및 소프트웨어 공학이라는 제목을 가지고 있으며, 여러분에게 유능한 프로그래머가 될 수있는 두 세계의 최고를 제공하고 대학원 또는 연구에 진학 할 수있을만큼의 이론을 알고 있습니다. 나는 그것이 좋은 접근 방식이라고 생각합니다.
Michael K

1

좋은 소프트웨어 엔지니어 (프로그래머)를 교육시키는 것이 목표라고 가정하면, 내가 가르쳐야 것을 말함으로써 대답해도 될까요?

첫째, 이것은 현재 지식 이전이 매우 비효율적이므로 중요합니다. 예비 프로그래머가 수업 중일 때, 그들의 마음은 열려 있고 그들이 가르치는 것을 흡수합니다. 동시에 교수들 (나도 하나 였음)은 난해한 과목을 공부할 수있는 학생들로 대학원 파이프 라인을 채우는 데 더 관심이 많습니다. 학생들이 실제 문제에 대비하고 있지 않다는 반대 의견이 제기 될 때 교수님은 그것이 자신의 직업이 아니라고 주장하는 것을 보았습니다 . 그것이 실제 세계의 일입니다.

그렇다면 학생들이 현실 세계에서 프로그래머가 될 때, 새로운 동료들로부터 배우기를 열망합니까? 내 경험이 아닙니다. 오히려 그들은 학교에서 얻은 복음을 전파하기를 간절히 원합니다. 나는 학생이자 젊은 실무자로서 오래된 친구들과 함께 새로운 아이디어를 육성하는 것이 얼마나 어려울 지 기억합니다. 나는 오래된 멍청한 친구이기 때문에 이론과 실제의 차이에 대해 새로운 프로그래머의 시선을 여는 것이 얼마나 어려운지 알 수 있습니다.

저는 기계 및 전기 공학 분야의 공학 학생이었습니다. 그것의 근본적인 부분은 a) 수학적 기초와 b) 실질적인 문제 해결이었다. 소프트웨어 엔지니어링은 프로그래밍 만이 아니라 그와 같아야합니다.

소프트웨어 공학 (프로그래밍)은 충분한 컴퓨터 과학으로 실무 지식 ( 기본 오토마타 이론 및 정보 이론 )이되도록 가르쳐야한다고 생각합니다 . 이것들은 심도있게 수행 될 필요는 없다. 기본 프로그래밍 기술을 가르치고 나면 사소한 규모의 협동 프로젝트가 있어야합니다. 이들의 필수 부분은 최신 종교 나 "다음 큰 것"또는 모든 규모에 맞는 것이 아니라 장단점을 분석하여 특정 문제에 대한 대안 솔루션을 제안하고 고려해야합니다. 마지막으로, 산업과 학계간에 협력과 파트너십이 있어야 아이디어와 개선 사항이 양방향으로 전달되어 품질 관리가 크게 향상됩니다.


0

할 수있는 것들; 가르 칠 수없는 사람들.

우리 대학에서는 교사의 지식 기반이 매우 부족합니다. 나는 교사들이 데이터베이스 디자인에서 PHD를 유지하면서 반 구조화 된 테이블을 XML로 표현하는 방법을 이해하려고 애쓰는 것을 보았다. 내 어셈블리 교사가 코드를 복사하여 붙여 넣을 때 코드의 작동 상태를 묻는 것을 보았습니다. 필자는 소프트웨어 설계 교사가 애자일 방법이 워터 폴 방법과 동일하고 반복 개발 프로세스 모델이 3 회만 반복 할 수 있다는 점을 설명했습니다. 선생님 중 한 명이 elseif 진술이 무엇인지조차 알지 못했습니다.

나는 그들이 '복구'하거나 변명한다고 믿지 않으며, 그들이 소중한 경험을 가지고 최선을 다하고 있다고 믿습니다.

나는 4 년이 노련한 프로그래머가 되기에는 충분하지 않다는 것에 동의하지만, 선생님들이 경험 한 것만으로는 그들도 노련한 것으로 만들 수 없습니다. 엔더 섀도우 (Ender 's Shadow)와 매우 비슷합니다. Bean이 전투 학교 교사들이 사용하는 메트릭이 가이드 규칙 인 마지막 전쟁이 실제로 필요한 것을 실제로 보여주기에는 너무 짧기 때문에 부족하다는 것을 알았습니다. 다시 말해, 교사들은 최선을 다했지만, 훌륭한 사령관 (또는이 경우에는 훌륭한 프로그래머)이되기 위해 실제로 무엇이 필요한지 알지 못한 경험이 없었습니다.


3
선생님의 사례가 자신의 이익을 위해 일을 단순화하려는 경우가 많습니다. Those that can, do; those that cannot, teach.나는 또한 이것에 전혀 동의하지 않습니다. 학업 및 산업 경력은 완전히 다른 생활 방식으로 이어집니다. 세계 연구의 대부분은 학계에서 비롯됩니다. 그리고 나는 당신이 원래의 질문에 대답 한 방법을 보지 못했습니다.
아무도

2
XML이 성능에 관심이없는 경우 XML을 데이터베이스의 백업 저장소로 사용한다는 사실 외에 데이터베이스 디자인과 XML의 관계는 무엇입니까? 말할 것도없이 어떤 교사들은 그 요점을 놓칠 수 있습니다 (저는 그 시점에 대한 커리큘럼이 "바람과 같은 코멘트"를 가르쳤을 때 "과도한 코멘트"로 인해 제거 된 포인트에 대해 강사와 논쟁하는 것을 기억합니다). 누군가가 Java를 배우고 싶다면 CS 커리큘럼을 거치는 것보다 더 저렴한 방법이 있습니다.
dash-tom-bang

1
또한 일부 대학은 다른 대학보다 나쁘고 특히 CS 부서가 나쁜 경우도 있습니다. 전통적으로, 대학원 학위를 가진 CS 사람들은 학계보다 산업계에서 더 많은 돈을 벌 수있었습니다. 나는 둘 다 보았고 비율은 대학마다 다릅니다.
David Thornley

@ dash-tom-bang에서 XML은 반 구조화 된 데이터베이스의 완벽한 예입니다. en.wikipedia.org/wiki/ 반 구조 모델
Malfist

1
이와 같이 사용 된 XML은 여전히 데이터베이스 이론 의 구현 입니다. 그것은 그 자체가 이론이 아니다.
dash-tom-bang

0

컴퓨터 과학자와 소프트웨어 엔지니어는 다릅니다. 과학자는 미친 실험을 수행하고 소프트웨어 엔지니어가 더 나은 알고리즘을 사용하는 알고리즘을 만들어내는 사람들입니다.

제약 회사를위한 실험을 수행하는 화학자들을 생각해보십시오. 그들은 화학 물질을 대량으로 생산하는 방법에 신경 쓰지 않습니다. 또한 마케팅, 포장, 유통 또는 의약품을 발견 한 후 발생하는 모든 일에 대해서도 신경 쓰지 않습니다. 그들은 인증 과정조차 신경 쓰지 않습니다. 그들이 관심을 갖는 것은 시험 대상에게 주어질 때 영향을 미치는 화학 물질을 찾는 것입니다. 회사는 그것을 넘어서게 할 책임이 있습니다.

컴퓨터 과학자들은 그 화학자들과 같습니다. 그들이하는 것은 코드로 이론을 테스트하는 것입니다. 그들은 코드가 얼마나 유지 관리 가능한지 신경 쓰지 않습니다. 그들은 이론을 증명하고 다음 이론으로 넘어갑니다. 다른 누군가가 알고리즘을 패키지화하여 대중에게 유용하게 만들며 Kinect 또는 iPhone의 비디오 스트리밍과 함께 MP3 또는 컴퓨터 비전을 가지고 있습니다. 따라서 CS! = SE는 유효한 인수입니다.

WRT는 질문의 두 번째 부분입니다. 내가 음악 이론 학위를 제공했다면, 작곡이나 기타 필수 과정이있을 수 있지만, 아무도 악기를 공부하지 않아도됩니다. 원하는 지식을 찾는 것은 학생의 몫입니다. 컴퓨터 공학은 소프트웨어 공학이 아닙니다 ... SE를 배우고 싶다면 이중 전공을 수강하십시오.


0

Edsger Wybe Dijkstra는 네덜란드 컴퓨터 과학자였습니다.

그는 프로그래밍 언어 개발에 공헌 한 1972 년 튜링 상을 받았다 .

"컴퓨터 과학은 텔레 스코프에 관한 것보다 컴퓨터에 관한 것이 아닙니다."

CS는 SE와는 전혀 다릅니다. (CS! = SE).

CS는 컴퓨터 과학에 대한 지식을 얻은 과학자입니다.

컴퓨터 과학 또는 컴퓨팅 과학 (때로는 CS로 약칭)은 정보 및 계산의 이론적 기초와 컴퓨터 시스템에서의 구현 및 적용을위한 실용적인 기술에 대한 연구이며, 종종 생성, 설명, 정보를 변환합니다.

컴퓨터 과학에는 다음과 같은 많은 하위 필드가 있습니다.

  • 이론적 컴퓨터 과학
  • 계산 이론
  • 알고리즘 및 데이터 구조
  • 컴퓨터 요소 및 아키텍처
  • 멀티 프로세싱
  • 전산 과학
  • 인공 지능
  • 소프트웨어 시스템

우리 중 많은 사람들이 매일 또는 최소한의 작업에서이 기술을 필요로하지 않습니다.

SOFTWARE ENGINEER (SE)는 소프트웨어를보다 고품질, 저렴하고 유지 보수 가능하며 더 빠르게 구축 할 수 있도록 소프트웨어를 설계, 구현 및 수정하는 데 전념하는 전문가입니다. "엔지니어링을 소프트웨어에 적용하여 소프트웨어의 분석, 설계, 평가, 구현, 테스트, 유지 보수 및 리엔지니어링에 대한 체계적인 접근 방식"

CS 지식으로서 그는 정말 좋은 프로그래밍 언어를 몰라도 실제 복잡한 문제를 관리 할 수있는 지식을 갖고 있다고 가정합니다. 여기서 IMHO는 또 다른 스레드를 열 수 있습니다. 여기서 나를위한 DEGREE는 엔드 포인트가 아닌 시작점입니다.

SE 지식으로서 그는이 복잡한 문제의 생산을 관리하고이 분야에 대한 팀이나 프로젝트의 개발을 관리하는 지식을 가지고 있다고 가정합니다.

함께 SE의 도움으로 응용 과학의 CS에 의해 과학 연구를합니다.

나는 CS가 SE보다 낫다는 것을 의미하지 않는다. 나는 CS! = SE를 의미한다.

이런 종류의 질문은 프로그래머가 아닌 사람이 운영 체제 J, M, X, Y, Z의 프로그램 X, Y, Z의 전화 문제를 전화로 해결할 수없는 이유를 물을 때 컴퓨터가 아닌 사람들이 스스로에게 묻는 것과 같은 질문입니다. 엔. ;)

실제로 나는 보안 분야에서 10 년 동안 유닉스 시스템을 개발 한 후 코딩에 지루해 하며이 질문을 읽은 후에 요점을 얻습니다. 컴퓨터 과학과 컴퓨터 언어 및 컴퓨터 시스템 또는 프로토콜을 더 많이 연구해야합니다!

내 작업에서 아무도 SE와 CS의 차이점을 처리 할 수 ​​없습니다! 정말 나쁜 일입니다.

CS가 나쁜 프로그래밍 기술에 대한 변명이 될 수 있다고 생각하면 CS가 무엇인지, SE가 무엇인지에 대한 요점을 실제로 놓치게됩니다.

나는 당신이 SE라고 가정합니다. 예를 들어 모든 언어, 모든 패러다임 및 모든 컴퓨터 언어 관련 내용이 부분 재귀 함수 집합으로 수학적으로 표현 될 수 있으며 새로운 언어를 배우는 모든 것이 있습니다. SAME 재귀 부분 함수에 대한 새로운 추상화 학습?

재미있게 보내세요 :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.