4 ms·
That's an interesting question, worthy of its own thread. I think the reason is this: programming is much easier to teach yourself than any of the others. And
by hugh 18y ago
That's an interesting question, worthy of its own thread.
I think the reason is this: programming is much easier to teach yourself than any of the others. And the reason is this: in programming you know when you're wrong.
You can spend three years reading textbooks on physics, or watching physics lectures on youtube, but you're likely to misunderstand some of it, and partially understand other bits of it. (Part of the difficulty for me in learning, say, quantum mechanics or relativity was the problem of unlearning misconceptions I'd picked up by reading popular science type books in my teens.) Without a bunch of professors sitting around to correct you when you're wrong, and point out the gaps in your knowledge, you'll never really understand it (and even if you do, you won't be sure if you do or not). That's the main value you get at university: some smart guys who sit around telling you you're wrong.
In programming, on the other hand, you don't need this. You get more-or-less immediate feedback when you're wrong because the code either won't compile or produces the wrong results. This is what makes programming one of the easiest things to teach yourself.
- yters 18y agoBut the same could be said of math, couldn't it?
- mark-t 18y agoSometimes. Many parts of math are very difficult to tell whether you're wrong or not, except by reading through the proof extremely carefully. For example, about a hundred years ago there was a proposed proof of Fermat's Last Theorem, but it had a very subtle flaw: it implicitly assumed that unique factorization held in a particular set of rings. This turned out to be wrong in some cases. This error was very common back then, and many people believe this was the proof Fermat had in mind. So, you see, in mathematics your unconscious assumptions are sometimes wrong, and there's nothing that would tip this off to you, like a compiler. In fact, very few areas of mathematics are the sort where you can easily tell when you're wrong. I suspect you think of your high school math classes when you think of mathematics. That's really a very poor representative. Mathematics is about proofs, not answers. To be fair, though, the original post makes a similar misconception. Computer programming : computer science :: high school math : mathematics.
- yters 18y agoThat's a good point, but the same occurs with programming. We generally can't catch every corner case. Of course, this is much more devastating in a mathematical proof, i.e. the proof is invalid. However, it is still very possible to develop good mathematical skills without a degree. Also, this is somewhat unorthodox, but I've read that Godel proposed a new method of doing mathematics based on the experimental method, due to the implications of his incompleteness theorem. If that were the case, then math becomes more like computer science, or perhaps computer science is this new way of doing math.
- mark-t 18y ago> However, it is still very possible to develop good mathematical skills without a degree. Absolutely. I don't think the degree is very useful for developing skills at all. I'm sure there are plenty who would disagree, but mathematics courses don't set a very high bar for how much you have to think about a topic. I learned more in the past month preparing for my algebra qual than I did during an entire year of an undergrad class at Northwestern (of course, I drew heavily on the basic knowledge I had).
- 13ren 18y agoI'm having exactly this experience, of a lack of feedback, with proofs. It also seems frustratingly ironic to me that you can never be sure that a "proof" of the truth of a theorem is actually true... I'm learning COQ (proof assistant), to make some aspects of it automatically checkable. The feedback of programming is also encouraging and satisfying, and this makes it more easily self-taught, like a (computer) game. Unit testing builds on this. PS: My proofs are part of my compsci PhD, which began without any maths; so I choose a supervisor has some knowledge of proofs but isn't very experienced in them. Perhaps more guidance with proofs could really help...? Things are finally coming together for, but I keep stumbling on what I think are extremely elementary proof ideas (e.g. that f(AUB) = f(A) U f(B) ). My feeling is that rigorously understanding takes effort, no matter how good the guidance.
- comatose_kid 18y agoProgress in mathematics comes from research. To contribute something new, you often need a lot of background knowledge and university is the place for this. As with all things, there are exceptions - Ramanujan for example. To be a financially successful programmer, you often just need a few books, courage to step outside your comfort zone, and a good idea. There are lots of examples of this, but for me the embodiment is Ken Williams of Sierra fame who made out pretty well, and I don't recall that he had a degree in CS.
- foulmouthboy 18y agoJust because somebody can get a program to compile and run doesn't mean that it was done right. Keep in mind, I don't really disagree with what you're saying, cause it's the mentality lots of coders have. I also think that the discipline is so new that there are a good number of schools that don't teach it very well.
- volida 18y agoDone right can be measured in terms of performance. Any good algorithmic book would introduce the concept of Big O notation.
- neilc 18y agoWhether a design is "done right" is about a lot more than just performance. Even being able to distinguish between good and bad design requires some considerable training -- ideally, both in computer science theory and in practical experience.
- volida 18y agoi thought we were talking about programming, not architecture or any other software engineering.
- neilc 18y agoPrecisely the same comments apply. Even the quality of two different implementations of the same algorithm can vary on a lot more dimensions than simply performance.
- volida 18y agowhat are you talking about? vary on lot more dimensions?? that's obvious. different people will code differently. the point is performance which may suffer due to bad algorithmic knowledge or coding skills or due to the tradeoff for time to market. If you write a bad program it will not perform well. It's obvious. don't really understand how you think or why you need to answer to something I am not saying.