E D R , A S I H C RSS

무엇을공부할것인가

우리는 무엇 되기를 원하는가? 해당 목표를 루기 위해서는 무엇을 공부할 것인가? 해당 지식은 언제쯤 공부하는 것 적당할까?

완벽하게 만들수는 없어도. 사람들은 어떠한 순서로 공부했고 어떤 생각을 했을까?

컴퓨터과학 혹은 컴퓨터공학을 효율적으로 할 수 있는 일련의 과정(커리큘럼 되나요?)을 생각해보자는 의도로 연 페지인가요? --데기


Game Developer, System Software Developer, Software Architect, 전산학자 식으로 각각의 직업과 관련된 지식에 대한 Roadmap 은 어떨까요? (예전에 '~~한 개발자가 되기 위한 book map' 같은 것도 있었던 것 같은데)

무엇을공부할것인가라는 것을 논하기 전에 기본적인 전제에 대해 생각해 볼 필요가 있습니다. 그러면 문제 정의 자체가 바뀌어 버릴 수가 있습니다. 예를 들어 "어떻게 하면 프로시줘를 옵티마징할까"를 고민할 때, 아예 그 프로시줘를 실행시키지 않는 방법은 없을까를 묻는 것죠.

전산학을, 프로그래밍을 공부하는 사람라면, 만약 내가 지금 배우는 대부분의 지식과 기술들 내가 졸업을 하고 회사에 입사를 할 약 4년(혹은 병역을 마치는 경우 6년) 후에 쓸모없어 진다면 어떨까 하고 생각을 해 볼 수 있겠죠. 오늘 내가 밤샘을 하고 고민을 하면서 내가 사용하는 특정 도구의 한계를 우회하기 위해 기발한 방법을 짜내면서 얻는 지식은 4년 혹은 6년 후에 어떤 가치가 있을까요? 그 노력에 비해 얼마나 가치가 있을까요? 만약 그런 과정을 통해 어떤 지혜를 얻을 수 있다면, 좀 더 효과적고 경제적인 방법은 없을까요?

SeparationOfConcerns로 유명한 데비드 파르나스(David L. Parnas)는 FocusOnFundamentals를 말합니다. (see also 컴퓨터고전스터디) 최근 작고한 다익스트라(NoSmok:EdsgerDijkstra )는 수학과 언어적 능력을 말합니다. Besides a mathematical inclination, an exceptionally good mastery of one's native tongue is the most vital asset of a competent programmer. -- NoSmok:EdsgerDijkstra 참고로 다익스트라는 자기 밑에 학생을 받을 때에 전산학 전공자보다 수학 전공자에게 더 믿음 간다고 합니다.

최근 17세의 소년썬 메일링 리스트에 파썬 언어를 배우는 것 나중에 취직을 할 때 얼마나 도움 될까를 물었습니다. 에 대해 다음과 같은 답 올라왔습니다.
(관련 원문)
~cpp 
As for the job market, Python isn't among the buzzwords that you'll find in 
job descriptions most of the time. But software development isn't that much 
about particular technologies, the important part is learning concepts. If 
you learn Python, you won't be able to avoid learning (at least): 
 
- Object Oriented Programming (OOP) 
- Procedural Programming 
 
There's a lot more concepts that you can learn while using Python, as you 
advance a little more: 
 
- Functional Programming 
- Test Driven Development 
- Dividing software into components 

......

Learn concepts, not tools. At least in the long run, this will make you 
more attractive to employers who have a clue about what's important in the 
software industry. 
 
There are some more skills that are especially important: 
 
- Team work: dividing up tasks. Defining the interfaces up front to avoid 
  blocking other team members who wait for you. Using a source code control 
  system [1] 
 
- Communication/efficient problem solving: not trying yourself for days to 
  solve a problem that could be solved a lot more efficiently by calling 
  the client or writing an email - I've had problems with this myself in 
  the past, I guess that's not an uncommon problem for developers. 
 
- Software reliability: that's a difficult one. IMO experience, 
  concentration, unit tests, and always trying to improve on yourself help 
  you achieve it. 

--JuNe

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:29
Processing time 0.0183 sec