코딩은 컴퓨터 과학에 능숙해야합니까? 알고 있어야 알고리즘을 구현해야합니까?
" 난 절대 코딩하지 않는다 "는 한 Cs 교수의 관용구를 기억합니다
코딩은 컴퓨터 과학에 능숙해야합니까? 알고 있어야 알고리즘을 구현해야합니까?
" 난 절대 코딩하지 않는다 "는 한 Cs 교수의 관용구를 기억합니다
답변:
당신은 정말 알고리즘을 알 수 없습니다 아니라 당신이 그것을 코딩 할 때까지.
코딩은 교수에게는 중요하지 않지만, 할 일에 대한 대가를받지 않는다는 점을 명심해야합니다. 그는 SAY 사물 (및 쓰기 사물)에 돈을 지불합니다.
저는 전 수학 교수이므로이 역학을 잘 이해하고 있습니다.
그의 길을 따르고 이론적 인 컴퓨터 과학자가 되려면 코딩이 덜 중요합니다. 그러나 그렇게한다면, 일을하기로 선택한 사람들이 벌어 들인 자원으로 급여를 받는다는 것을 알고 겸손을 유지하는 것을 잊지 마십시오.
컴퓨터 과학은 천문학보다 망원경에 관한 것이 아닙니다.
— Edsger Dijkstra
나는 동의하는 경향이있다.
추상적이고 기초적인 컴퓨터 과학 개념을 전문으로하는 순수한 컴퓨터 과학 학문에 대해 이야기하고 있다면 반드시 그런 것은 아닙니다.
비유를 구부리려면, 이것은 NASA의 모든 로켓 과학자가 "좋은 로켓 과학자"가되기 위해 우주로 날아 가야하는지 묻는 것과 약간 같습니다. 당연히 아니지. 우주 비행사가된다는 것은 우주 비행 산업의 일부이며 실제적인 부분이지만 지상 과학자가 자신의 방식만큼 중요하지 않다는 것을 의미하지는 않습니다.
즉, 실제 프로그래밍 언어로 작성하지 않는 경우 그가 만든 알고리즘을 적용하는 것이 좋습니다. 이런 의미에서 알고리즘 설계는 수학의 한 가지로 생각할 수 있습니다.
진정한 컴퓨터 과학자가되기 위해서는 코딩이 중요하지 않습니다. 코드에서 생각하는 것은 유용한 추상 개념을 개발하려고 할 때 생각을 제한 할 수 있습니다. 대부분의 뛰어난 코더에는 복잡한 알고리즘을 분석하거나 프로그래밍 언어, 고급 검색 및 정렬 알고리즘, 유한 자동 분석 이론, 분산 컴퓨팅 이론, R- 트리, 내결함성 프로토콜, 안정적인 통신 프로토콜, 디지털과 같은 개념을 개발할 수있는 지적 능력이 없습니다. 신호 처리 알고리즘, 암호화 이론, 성능 분석 및 최적화, 효율적인 캐싱, 맵 축소, 안정적인 보안 프로토콜 등. 우수한 코더와 컴퓨터 엔지니어는 일반적으로 이러한 이론을 효과적으로 구축하고 수행하려는 시스템에서 사용할 수 있지만 그것은 실제로 컴퓨터 시스템 엔지니어 나 컴퓨터 프로그래머의 영역입니다.
코딩은 컴퓨터 프로그래머가되기 위해 매우 중요합니다. 컴퓨터 과학자들이 생성 한 유용한 추상 개념을 작업 코드로 인코딩하는 방법을 이해하는 것도 유용합니다.
컴퓨터 과학의 큰 문제 중 하나는 오늘날의 프로그래밍 문제를 해결하는 데 거의 도움이되지 않는 수학 문제에 대한 솔루션을 찾아야한다는 것입니다. 그들이 솔루션을 코딩 했더라도 아무도 그것을 사용할 수 없었습니다. 디지털 신호 처리 이론에 대해 생각해보십시오. 푸리에, 힐버트, 섀넌과 같은 사람들이 발명했지만, 20 년 전까지는 전산화 된 DSP 문제에 대한 적용이 불가능했습니다.
컴퓨터 교육의 큰 문제는 컴퓨터 과학자가 가르치는 대부분의 사람들이 컴퓨터 과학자가되지 않는다는 것입니다. 그러나 너무 많은 컴퓨터 과학자들은 이것을 얻지 못합니다. 코딩은 그들에게 중요하지 않을 수도 있지만, 수업 중이라면 거의 확실히 당신에게 중요 할 것입니다.
컴퓨터 교육의 또 다른 큰 문제는 많은 진정한 컴퓨터 과학자들이 소프트웨어 개발을 가르치는 데 유용한 산업 경험이 부족하다는 것입니다. 그들은 본질적으로 그들이 정말로 모르는 것을 가르치려고 노력하고 있습니다. 그것은 그들이 신뢰성을 잃게합니다. 산업 환경에서 중요한 것들은 이러한 컴퓨터 과학자들 중 일부에게 종종 등록되지 않습니다.
길고 짧은 코딩은 "컴퓨터 과학자"가되는 대부분의 사람들에게 중요합니다. 왜냐하면 대부분의 사람들은 컴퓨터 프로그래머와 컴퓨터 시스템 엔지니어가 될 것이기 때문입니다.
그는 컴퓨터 과학의 수학과 이론에 대한 이산 수학과 같은 사람처럼 들립니다. 이런 종류의 교수들이 한 알의 소금으로 무엇을 말해야하는지 생각해보십시오.
이론을 이해하는 것만으로 벗어날 수는 있지만 알고리즘을 코딩 한 후 알고리즘과 1000x를 더 잘 이해한다는 것을 항상 알았습니다 (예 : 버블 정렬 대 Quicksort, Big-O를 아는 것이 좋지만 실제로는 큰 데이터로 보는 것이 좋습니다. -sets는 계산 복잡성을 측정하는 데있어 실제적인 가치를 제공합니다.)
내가 찾은 흥미로운 점 중 하나는 컴퓨터 과학의 이론적 아펫을 더 많이 연구할수록 코딩이 쉬워진다는 것입니다. 어떤 시점에서는 특정 언어로 생각하는 것을 멈추고 오히려 더 넓은 컴퓨터 사이언스 개념으로 생각합니다.
이것은 모든 영어 교수가 영화, TV 시리즈, 소설, 연극 및시를 내 마음에 쓸 수 있는지 묻는 것과 같습니다. 마찬가지로, 똑같이 터무니없는 아이디어에 숫자를 사용하지 않는 수학 교수를 상상해보십시오. 다시 말해서 기본적인 컴퓨터 과학을 가르 칠 수있는 데있어 코딩에 중요한 일부 기본 요소가 있다는 것입니다. 따라서 교수는 기본 언어 구문과 교수가 가르치는 과정만큼 정교한 프로그램을 작성하는 방법을 알아야합니다. 교수가 컴파일러 설계에 대해 가르치고 있으며 이전에 컴파일러를 작성하지 않은 경우 이는 중대한 문제가 될 것입니다. 이전에 케이크를 요리하거나 먹지 않은 케이크를 요리하는 요리사를 상상해보십시오. 예 카 룸바.
알고있는 알고리즘을 구현하면 몇 가지 장점을 알 수 있지만 이것이 요구 사항인지 의심합니다. 결국, 구현의 토끼 구멍이 얼마나 멀리 떨어져 있는지 알고 알고리즘이 어떻게 구현되는지 이해할 수 있을까요? 예를 들어 누군가가 알고리즘을 가져야 실제로 그것을 알고 절차 적, 객체 지향 및 기능적 프로그래밍과 같은 다양한 패러다임 아래에서 알고리즘을 구현해야합니까? 그들은 컴파일러가 어떻게 모든 코드를 번역하고 전자별로 전자 레벨에서 비트를 움직여서 그것에 대해 다소 비판적인지를 알아야합니다.
"나는 결코 코딩하지 않는다"는 방식으로 과거와 현재 시제를 포함한다는 의미가있다. 또한 "코딩"에 대한 암시적인 가정이있을 수 있는데, 이는 일부 서클에서는 잘 진행되지 않을 수있는 다소 부정적인 말을 할 수있는 진술을 볼 수있는 다른 방법으로 교수 아래에 있습니다.
전문 소프트웨어 개발자 임에도 불구하고 기계 공학 학위를 받았습니다.
부품 제작 및 가공 경험이 거의없는 훌륭한 기계 설계자가되어 해당 작업을 기계공에게 맡길 수 있습니다. 그러나 부품을 제작하고 가공하는 방법을 알면 설계하는 모든 것을 제조하고 조립하는 데 관련된 어려움을 예측할 수 있기 때문에 엔지니어의 능력이 크게 향상됩니다.
소프트웨어도 마찬가지입니다. "코더"는 기계 기술자 또는 기술자이며 소프트웨어 엔지니어는 엔지니어입니다. 많은 곳에서 한 사람이 두 가지 일을합니다. 불가능하지 않으며 매우 추상적 인 문제의 경우 "엔지니어링 만"위치가 작동 할 수 있습니다.
그러나 대다수의 경우 코드를 거부하면 아무런 이점이 없습니다.
고민하지 않고 중단 문제를 끝내지 않는 한 컴퓨터 과학의 모든 측면에서 코딩에 항상 사용됩니다.
프로그래밍이 전혀없는 유일한 CS 클래스는 이론이었습니다. 나는 "실험을하지 않는다"고 말하는 물리학 자들이 많이 있다고 생각할 것입니다. 그러나 그들은 "아무 것도 발견하지 않습니다"라고 말하는 사람들 일 것입니다. 그리고 그들이 걱정한다면 놀랄 것입니다.
컴퓨터 과학 학생으로서 처음에는 소프트웨어 개발과 관련된 개념을 이해하는 것이 좋습니다. 소프트웨어의 기본 개념과 컴퓨터와의 상호 작용 방식을 배운 후에는 코딩을 시작하고 특정 구현 문제를 해결해야합니다.
이것은 "소프트웨어 예외"와 같습니다. 처음에는 허용되지 않은 작업을 수행했기 때문에 처리합니다. 그런 다음 배우면 코드와 동일하게 시작하여 더 자세하게 만듭니다.
글쎄, 응용 프로그램에서 예외를 일반적인 워크 플로로 사용하는 프로그래머와 같은 개념에 관심이없는 사람들은 생각합니다. 그들은 HOW를 알고 있지만 실제로는 얻지 못합니다.
교수님을위한 또 다른 관용구가 있습니다.
할 수있는 사람들, 가르 칠 수없는 사람들.
imo, 대화는 싸다. 누구나 '이론'에 대해 끝없이 열중하고 그것을 '컴퓨터 과학'이라고 부를 수 있습니다. 그러나 실제 실행에 이르기까지 이론은 그것을 검증 할 방법이 없기 때문에 그다지 유용하지 않습니다. 내가 뭔가에 대한 교수의 의견을 줄 훨씬 더 심각하게 나는 그가 실제로 것 알고 있다면 해결 그는 단지 또는 어떤 뒷받침하는 감사 증거에있을 수도 있고 없을 수도 있습니다 '이론'역류 인 경우보다 코드의 특정 문제를 백업 그의 관점을.