우리는 무엇이 되기를 원하는가? 해당 목표를 이루기 위해서는 무엇을 공부할 것인가? 해당 지식은 언제쯤 공부하는 것이 적당할까?
완벽하게 만들수는 없어도. 사람들은 어떠한 순서로 공부했고 어떤 생각을 했을까?
컴퓨터과학 혹은 컴퓨터공학을 효율적으로 할 수 있는 일련의 과정(커리큘럼이 되나요?)을 생각해보자는 의도로 연 페이지인가요? --
데기
Game Developer, System Software Developer, Software Architect, 전산학자 식으로 각각의 직업과 관련된 지식에 대한 Roadmap 은 어떨까요? (예전에 '~~한 개발자가 되기 위한 book map' 같은 것도 있었던 것 같은데)
무엇을공부할것인가라는 것을 논하기 이전에 기본적인 전제에 대해 생각해 볼 필요가 있습니다. 그러면 문제 정의 자체가 바뀌어 버릴 수가 있습니다. 예를 들어 "어떻게 하면 이 프로시줘를 옵티마이징할까"를 고민할 때, 아예 그 프로시줘를 실행시키지 않는 방법은 없을까를 묻는 것이죠.
전산학을, 프로그래밍을 공부하는 사람이라면, 만약 내가 지금 배우는 대부분의 지식과 기술들이 내가 졸업을 하고 회사에 입사를 할 약 4년(혹은 병역을 마치는 경우 6년) 후에 쓸모없어 진다면 어떨까 하고 생각을 해 볼 수 있겠죠. 오늘 내가 밤샘을 하고 고민을 하면서 내가 사용하는 특정 도구의 한계를 우회하기 위해 기발한 방법을 짜내면서 얻는 지식은 4년 혹은 6년 후에 어떤 가치가 있을까요? 그 노력에 비해 얼마나 가치가 있을까요? 만약 그런 과정을 통해 어떤 지혜를 얻을 수 있다면, 좀 더 효과적이고 경제적인 방법은 없을까요?
최근 17세의 소년이 파이썬 메일링 리스트에 파이썬 언어를 배우는 것이 나중에 취직을 할 때 얼마나 도움이 될까를 물었습니다. 이에 대해 다음과 같은 답이 올라왔습니다.
(
관련 원문(http://groups.google.co.kr/groups?hl=ko&lr=&ie=UTF-8&inlang=ko&newwindow=1&frame=right&th=382f243e8edce15a&seekm=slrnam7pfh.ds.gerhard.haering%40haering.opus-gmbh.net#link1))
~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.