E D R , A S I H C RSS

Focus On Fundamentals

근본에 집중하기

어떻게 특정한 플랫폼에서, 특정한 언어로, 화면을 빨리 리프래쉬하는지 테크닉을 가르쳐주는 책에 관심있는 사람은 많아도 모든 플랫폼에서, 모든 언어로, 특정 문제에 어떤 패러다임을 적용해야 할 지 관심있는 사람은 드물다.


Software Engineering Education Can, And Must, Focus On Fundamentals.
소프트웨어 엔지니어링 교육은 근본에 집중할 수 있으며, 또한 그렇게 해야 한다.

When I began my EE education, I was surprised to find that my well-worn copy of the "RCA
Tube Manual" was of no use. None of my lecturers extolled the virtues of a particular tube or type
of tube. When I asked why, I was told that the devices and technologies that were popular then
would be of no interest in a decade. Instead, I learned fundamental physics, mathematics, and a
way of thinking that I still find useful today.

내가 EE 교육을 시작했을때 나는 나의 낡아빠진 'RCA Tube Manual'이 쓸모없는 것임을 알고 놀라게 되었다. 나의 교수들 그 누구도 특정 tube 나 tube 의 타입의 장점에 대해 칭찬한 적이 없었다. 내가 왜 그랬는지 질문했을때 '유명했던 디바이스나 기술들은 10년 내에는 별볼일 없어진다'는 것을 알게되었다. 대신, 나는 근본적인 물리, 수학, 그리고 내가 오늘날까지도 유용함을 발견하는, 사고하는 방법에 대해 배웠다.

Clearly, practical experience is essential in every engineering education; it helps the students to
learn how to apply what they have been taught. I did learn a lot about the technology of that day in
laboratory assignments, in my hobby (amateur radio), as well as in summer jobs, but the lectures
taught concepts of more lasting value that, even today, help me to understand and use new
technologies.

명백하게, 실용적인 경험은 모든 엔지니어링 교육에서 필수적이다; 이는 학생들로 하여금 그들이 배워온 것을 어떻게 적용할지에 대해 배우는데 도움을 준다. 나는 연구실 숙제, 나의 취미 (아마츄어 라디오) 에서 기술들에 대해 많은 것을 배웠고, 또한 여름방학때 아르바이트 등에서도 배웠다. 하지만, 수업들은 더 지속적인 가치들의 개념을 가르쳐주고, 이는 오늘날까지도 나에게 새로운 기술들에 대해 이해하고 이용할 수 있도록 도움을 주고 있다.

Readers familiar with the software field will note that today's "important" topics are not
mentioned. "Java", "web technology", "component orientation", and "frameworks" do not appear.
The many good ideas that underlie these approaches and tools must be taught. Laboratory exercises
and other projects should provide students with the opportunity to use the most popular tools and
to experiment with some new ones. However, we must remember that these topics are today's
replacements for earlier fads and panaceas and will themselves be replaced. It is the responsibility
of educators to remember that today's students' careers could last four decades. We must identify
the fundamentals that will be valid and useful over that period and emphasise those principles in
the lectures. Many programmes lose sight of the fact that learning a particular system or language
is a means of learning something else, not an goal in itself.

소프트웨어 필드에 익숙한 독자들은 오늘날의 '중요한' 주제들은 언급되지 않음을 지적한다. Java, "웹 기술", "컴포넌트 지향", 그리고 "프레임워크" 는 나타나지 않았다. 이러한 접근법과 툴들에 기반한 많은 좋은 아이디어들은 반드시 가르쳐야 한다. 연구실 숙제들과 다른 프로젝트들은 학생들에게 가장 대중적이고 유명한 툴들을 이용할 기회를 제공해야 하며, 또한 뭔가 새로운 것을 경험할 기호를 제공해야 한다. 하지만, 우리는 이러한 주제들은 오늘날의 이른 변덕을 위한 교체품들 이며 만병통치약이며 곧 교체될 것들임을 기억해야 한다. 교육자들에게는 오늘날의 학생들의 성공이 40년은 지속할 수 있어야 함을 기억해야 할 책임이 있다. 우리는 이 기간동안효과적이고 유용한 근본들을 알고, 그리고 수업시간에 이 원리들을 강조해야 한다. 많은 프로그래머들은 특정 시스템이나 프로그래밍 언어를 배우는 것이 뭔가 다른 것을 배우는 것일 뿐, 그 그거 자체의 목표가 아니라는 사실에 대해 시야를 잃곤 한다.


Students usually demand to be taught the language that they are most likely to use in the world outside (FORTRAN or C). This is a mistake. A well taught student (viz. one who has been taught a clean language) can easily pick up the languages of the world, and he or she will be in a far better position to recognize their bad features as he or she encounters them.

학생들은 일반적으로 가장 많이 이용될 것 같은 언어들 (FORTRAN 이나 C)을 가르치기를 요구한다. 이는 잘못이다. 훌륭하게 학습받은 학생들 (즉, 바꿔 말하면, clean language(?)를 가르침받은 학생)은 쉽게 언어를 선택할 수 있고, 더 좋은 위치에 있거나, 그들이 부딪치게 되는 해당 언어들의 잘못된 특징들에 대해 더 잘 인식한다.

-- C. H. Lindsey, History of Algol 68. ACM SIGPLAN Notices, 28(3):126, March 1993.

지금 공부하고자 하는 것이 사장될 기술일까 걱정됩니까? 정말 뜰 수 있을까 의심이 갑니까? 많은 사람들은 자바가 사장될 것이라고 말했습니다. 많은 사람들은 블루투스가 뜰 것이라고 말했습니다. 어떻게 해야 하나요? FocusOnFundamentals. 오라클만 후벼파기보다 RDB의 근본을 후벼파면, 자바만 후벼파기보다 OOP의 근본을 후벼파면 적어도 향후 5년간은 든든할 것입니다. 이런 근본을 후벼파는 것은 언제할 수 있나요? 학생 때 할 수 있습니다. 사회에 나가면 하기 어렵나요? 그렇습니다. 미리 지엽에만 매달릴 필요는 없습니다. 단, 예외는 있습니다. 공부하고 싶어서 밤에 자다가도 가슴이 뛴다면 그것이 지엽이건 근본이건 매진 하십시오. 후회하지 않을 겁니다. 하지만 마냥 해야할 것 같아서, 나중에 취직에 도움이 될 것 같아서, 남들 다 하니까 등등의 잡다한 기술을 주워담는 어리석음은 범하지 마십시오.

저는 주변에서 자바만 공부한 사람을 봤습니다. 그 사람은 자바가 아닌 다른 언어를 보면 이건 나랑 상관없는 거라고 생각하며 고개를 돌립니다. 어느 하나의 OOP 언어에 한계를 두지 않고 공부하는 사람을 봤습니다. 그 사람은 다른 것간의 관계를 찾고 연결짓고, 더 큰 그림을 만들어 나갑니다. 둘 중에 후자가 OOP(심지어는 자바 자체)에 대한 이해가 더 깊고 본질적이었습니다. 저는 점점 더 이와 비슷한 사례를 접하게 됩니다.

자바를 후벼파는 것은 좋습니다. 그러나 동시에 OOP도 후벼파야 합니다 -- 사실 OOP를 후벼파면서 자바를 등한시 하기는 어려울 것입니다. 하지만 자바 후벼파는 것은 다시 한번 생각해 보십시오(그러나 제가 앞서 말했듯이 잠자다가도 자바 때문에 가슴이 뛴다면 공부하십시오). 미리 배움에 한계를 긋지 마십시오. 그리고 좀 추상적인 이야기가 될지도 모르겠는데, 우리는 "소크라테스가 죽는다"는 것을 배우는 것에서 그치길 원하지 않습니다. 우리는 "사람은 죽는다"는 것을 배우고 싶어합니다. 그러나 그 배움은 직접적인 사실의 체험 이후에 가능합니다. 고로 모든 공부는 기본적으로 귀납을 바탕으로 합니다(이것이 제가 말하는 "몸 공부"입니다). 귀납식, 연역식 공부라고, 또 그것을 개성이라고 구분하는 것은 무의미합니다. see also NoSmok:최한기의 추측록

우리가 조심해야 할 것은 어느 한 방법이 절대적이라고 하는 것과, 반대로 상대주의에 매몰되는 것 두가지 입니다. 무엇이건 괜찮다(anything goes)와 이것만이 유일하다 중 하나만 골라야 하는 것은 아닙니다.

사실 제 이야기는 수사적인 차원에서 약간 과장된 것일지도 모르겠습니다. FocusOnFundamentals가 적용되는 범위를 꼭 한계지을 필요는 없을 듯 싶습니다. 자바를 공부한다면 자바의 "fundamentals"에 더 집중을 할 수도 있겠죠. 하지만 늘 "큰 그림"을 보도록 노력해야 할 것입니다. 내가 공부하는 것 속에서 "fundamentals"는 무엇이고, 내가 공부하는 것이 속한 범주에서 "fundamentals"는 무엇인지.

말은 길게 했지만 결국 DavidParnas가 한 말과 같은 선 상에 있다고 보면 되겠습니다.


세상에는 참 다양한 사람이 있습니다. 귀납식의 공부를 해야 잘되는 사람, 연역식의 공부를 해야 잘되는 사람.. 자바를 죽도록 공부했더니 OOP의 근본만을 후벼판 사람보다 더 OOP를 잘 꿰는 사람도 있을 수 있습니다. RDB가 아닌 오라클만이 RDB의 전부라고 생각하는 사람이 오히려 더 빨리 RDB의 근본을 깨칠 수도 있습니다. 컴파일러학문이 나오고 포트란 언어가 나온 것은 아닙니다. 어느 하나의 방법만이 옳다고 생각하지는 않습니다. 그리고 그 어떤 것도 잡다하지는 않다고 생각합니다. 사람마다 너무나 다양한 개성이 있겠지요. --아무개
우선, 제가 OOP나 RDB 등 근본을 공부하라고 한 말을 OOP, RDB 이론서만 붙잡고 늘어져라는 의미로 곡해하신 듯 합니다. 자바 말고 OOP를 공부해라는 말이 부디 자바책은 보지말고 OOP 이론서만 보라는 말로 오해되지 않기를 바랍니다(저는 요즘들어 OOP 공부는 스몰토크에서 시작하는 것이 좋지 않을까 생각하고 있습니다). 그리고 잡다하다는 것은 여러가지 너저분하게 섞여있어 체계가 없다는 것입니다. "X가 잡다하다"고 하는 것은 X 속에 있는 내용물이 체계가 없다는 이야기가 됩니다. 잡다하다는 것은 존재 지향이 아니고 관계 지향의 표현입니다. --김창준

{{|
Q: What advice do you have for computer science/software engineering students?

A: Most students who are studying computer science really want to study software engineering but they don't have that choice. There are very few programs that are designed as engineering programs but specialize in software.

I would advise students to pay more attention to the fundamental ideas rather than the latest technology. The technology will be out-of-date before they graduate. Fundamental ideas never get out of date. However, what worries me about what I just said is that some people would think of Turing machines and Goedel's theorem as fundamentals. I think those things are fundamental but they are also nearly irrelevant. I think there are fundamental design principles, for example structured programming principles, the good ideas in "Object Oriented" programming, etc.



Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.1940 sec