Ask HN: What should I learn to become a computer scientist?
16 comments
MIT's OpenCourseWare is an excellent way for him to study CS on his own while in high school.
I would recommend, at 14, getting him utterly hooked on the mindset of CS and related subjects. Godel, Escher, Bach, etc. If you can get him fascinated with the field, he'll find all the information he needs on his own better than any list of required reading you'll get.
http://ocw.mit.edu/OcwWeb/web/home/home/index.htm
http://www.amazon.com/dp/0465026567
I would recommend, at 14, getting him utterly hooked on the mindset of CS and related subjects. Godel, Escher, Bach, etc. If you can get him fascinated with the field, he'll find all the information he needs on his own better than any list of required reading you'll get.
http://ocw.mit.edu/OcwWeb/web/home/home/index.htm
http://www.amazon.com/dp/0465026567
Does he want to study computer science or software engineering? If he wants to study computer science he should take lots of math, particularly courses that involve proofs. I recommend algebra, graph theory, and combinatorics in particular. I'd recommend Haskell or SML as programming languages since they have so much theory behind them. Haskell has a great community and is really nice to use, but SML is simpler to start with and has a concise definition.
http://homepages.cwi.nl/~jve/HR/
Jan van Eijck's »The Haskell Road to Logic, Maths and Programming« does exactly that: it introduces you to mathematical proofs, basic logic issues (including relations) and programming using Haskell. I'd wholeheartedly recommend it to someone who's not yet had much contact to maths.
Jan van Eijck's »The Haskell Road to Logic, Maths and Programming« does exactly that: it introduces you to mathematical proofs, basic logic issues (including relations) and programming using Haskell. I'd wholeheartedly recommend it to someone who's not yet had much contact to maths.
Erm.... this is all well and good, but is this really something you'd want to start a 14 year old out with?
How is 14 early to take courses on graph theory or combinatorics, or learn SML? He sounds like a bright kid, or else he wouldn't be asking his cousin how to study computer science. He might or might not actually be interested in these things, but if he's interested in them, then he should learn them.
I think if a kid wants to learn something is asking about it, then there should be a way. I think instead of starting straight with high school Math, he/she can be started with some basic stuff of upcoming classes.
This is what I would have liked when I was 14. I was more interested in the theory but most introductory material was just about writing software.
I'd recommend the little schemer: http://www.ccs.neu.edu/home/matthias/BTLS/
I think if I'd seen this book when I was about that age, I'd have loved computer science.
I think if I'd seen this book when I was about that age, I'd have loved computer science.
Another ebook I recently came across is: http://inventwithpython.com/
It teaches python through building basic computer games. A fun way to learn.
It teaches python through building basic computer games. A fun way to learn.
seems very nice!
Get a TI calculator and try making some simple games for it in TI Basic. The calculator is nice because you can program in your not-so-great history classes or whatever.
Also start messing around with Python, there is no overhead and you can get started quickly.
Paying attention to math is important, but more important is honing your problem solving skills.
(Addressed everything to the OPs cousin for readability)
Also start messing around with Python, there is no overhead and you can get started quickly.
Paying attention to math is important, but more important is honing your problem solving skills.
(Addressed everything to the OPs cousin for readability)
This is basically what I did in 8th grade, then in 9th grade I joined the FIRST robotics team in our high school, which I would strongly recommend if there is one available.
I would not recommend doing it in the history classes though. In my school we had a great history class throughout high school. It taught me analytical thinking and processing of events to come up with a strategy. Studying history is as important as studying math or physics. The latter two are basic sciences, but the former expands your mind.
If you find the history class boring, try doing this. Instead of reading up all about and even in history in your textbook try to read one half (or a quarter if you feel overly adventurous) and then try to reason out what would you have done and why. Then read the other part and match your thinking with what actually happened. My history teacher used to do this type of exercises with us on a regular basis. This improved our critical thinking and ability to decide on strategies to tackle events in life.
If you find the history class boring, try doing this. Instead of reading up all about and even in history in your textbook try to read one half (or a quarter if you feel overly adventurous) and then try to reason out what would you have done and why. Then read the other part and match your thinking with what actually happened. My history teacher used to do this type of exercises with us on a regular basis. This improved our critical thinking and ability to decide on strategies to tackle events in life.
Well maybe he doesn't understand the differences between:
computer scientist
computer programmer
software engineer
You might think they are the same thing but they're not. A computer scientist would end up in academia doing research. A computer programmer writing programs and a software engineer design then building systems.
Learning to program for a budding computer scientist is the worst possible thing to do. It contaminates the mind with what ever preconceptions the chosen language may provide. Ok, maybe Lisp and Scheme not so much - but still ...
computer programmer
software engineer
You might think they are the same thing but they're not. A computer scientist would end up in academia doing research. A computer programmer writing programs and a software engineer design then building systems.
Learning to program for a budding computer scientist is the worst possible thing to do. It contaminates the mind with what ever preconceptions the chosen language may provide. Ok, maybe Lisp and Scheme not so much - but still ...
TL;DR: What does HN recommend as a course of study for an aspiring young pre-CS student?