Ask YC: Study theory, or keep coding?
6 コメント
Consider the Dewar & Schonberg article which has been causing so much stir this week: http://www.stsc.hill.af.mil/CrossTalk/2008/01/0801DewarSchon...
They argue that a good theoretical grounding is indispensable for writing good code, and that it inoculates you against future unemployment by making it possible for you to learn any programming model, and even to apply multiple languages to a single system when appropriate. Merely writing applications isn't enough, or maybe it is, but it can take a decade of personal trial and error to discover rules that can be digested in a semester with a qualified teacher.
I take issue with some of their tone. They seem to dismiss all of the cool things people have made using rapid development tools, only valuing the contributions of military grade correctness provers. I think there's room for both in our industry.
However, if you're young, and you can go without sleep, use your energy to lay the groundwork for a lifetime of code writing. It's easier to learn theory now than to unlearn bad habit later.
Finally, don't get tricked into thinking you have to choose one or the other -- you will be coding regularly if you study theory.
And don't get tricked into thinking geniuses don't need to study. Those aren't geniuses pushing that theory.
They argue that a good theoretical grounding is indispensable for writing good code, and that it inoculates you against future unemployment by making it possible for you to learn any programming model, and even to apply multiple languages to a single system when appropriate. Merely writing applications isn't enough, or maybe it is, but it can take a decade of personal trial and error to discover rules that can be digested in a semester with a qualified teacher.
I take issue with some of their tone. They seem to dismiss all of the cool things people have made using rapid development tools, only valuing the contributions of military grade correctness provers. I think there's room for both in our industry.
However, if you're young, and you can go without sleep, use your energy to lay the groundwork for a lifetime of code writing. It's easier to learn theory now than to unlearn bad habit later.
Finally, don't get tricked into thinking you have to choose one or the other -- you will be coding regularly if you study theory.
And don't get tricked into thinking geniuses don't need to study. Those aren't geniuses pushing that theory.
Adding in some practical pointers too. If you're not in a position to enroll in an accredited CompSci program, look at MIT's free online courses:
http://ocw.mit.edu/OcwWeb/web/courses/courses/index.htm#Elec... * Start with 6.001 * Make sure to hit one (or all three) of 6.042J. * I was about to claim the 6.171 (Software Engineering for Web Applications) was too out of date to bother with, being dated Fall 2003, but scanning the topic list of the course, everything listed there is still a concern in my day to day work. * Dewar and Schonberg would have you stress compilers. I would have you stress analysis of algorithms.
http://ocw.mit.edu/OcwWeb/web/courses/courses/index.htm#Elec... * Start with 6.001 * Make sure to hit one (or all three) of 6.042J. * I was about to claim the 6.171 (Software Engineering for Web Applications) was too out of date to bother with, being dated Fall 2003, but scanning the topic list of the course, everything listed there is still a concern in my day to day work. * Dewar and Schonberg would have you stress compilers. I would have you stress analysis of algorithms.
You have started with Python. You are already on the right track. Don't stop practicing -- you can't get anywhere without practice.
If you're curious about CS you should just go ahead and read SICP. I recommend the printed version, but the whole thing is online here:
http://mitpress.mit.edu/sicp/
Perhaps there are people who love CS and yet hate this book, but I have yet to meet one. It's not the easiest book in the world, but it is the real thing, and not an imitation.
There are, of course, lots of things you could learn which are not exactly "CS" but which will make you a better web programmer. Study SQL. Study emacs (read Steve Yegge for inspiration) or another killer editor. Learn to use a really decent version control system (the SVN book -- just google "SVN book" to find it -- is easy to understand, but Linus Torvalds is right when he claims that Git is much nicer!) Read "Mastering Regular Expressions". Read Bruce Eckel's Thinking in Java so that you know enough about the world's most popular language to understand where it sucks, ;) and so that you can follow the conversation of much of the rest of the software world. Read K&R.
If you're curious about CS you should just go ahead and read SICP. I recommend the printed version, but the whole thing is online here:
http://mitpress.mit.edu/sicp/
Perhaps there are people who love CS and yet hate this book, but I have yet to meet one. It's not the easiest book in the world, but it is the real thing, and not an imitation.
There are, of course, lots of things you could learn which are not exactly "CS" but which will make you a better web programmer. Study SQL. Study emacs (read Steve Yegge for inspiration) or another killer editor. Learn to use a really decent version control system (the SVN book -- just google "SVN book" to find it -- is easy to understand, but Linus Torvalds is right when he claims that Git is much nicer!) Read "Mastering Regular Expressions". Read Bruce Eckel's Thinking in Java so that you know enough about the world's most popular language to understand where it sucks, ;) and so that you can follow the conversation of much of the rest of the software world. Read K&R.
Just code towards your goal. Most of the theory of computer science that you'll need implemented along the way will be done for you via something low-level that you don't really need to worry about because it'll come for free (in python or in django).
If you run into things that you find you're curious about them in a deeper level, that's when you should look for more technical material to support that.
If you run into things that you find you're curious about them in a deeper level, that's when you should look for more technical material to support that.
Hey man. One thing you could try, if you're having a tough time with the sheer amount of things to learn out there, is to try to find a project to work on that's going to apply some external pressure on you to solve problems and learn new things. That way, you can sort of chip away at things.
I want to ultimately be a proficient web app coder, and at times I think about whether my attempts at creeping closer to this goal are futile without the proper launch pad. Are there any resources I should look into to give me a stronger foothold in CS and its theoretical foundations? Am I just talking gibberish? Or will continued practice in programming be sufficient?
Thanks.