Am I wrong in advising him against going to university for computer science (he wants to code)?
Universities when it comes to CS are hardcore math (my brother says he doesn't mind math). On top of hectic schedules, you have huge tuition fees. And when it comes to coding, real world experience is king (in my experience at least).
What advice would HN give someone looking to go to university/college for programming?
Yes, most of coding knowledge comes from real world experience. But a university is essential in building the foundation. Those theory and math topics do matter. CS isn't just about gluing PHP code together.
Also, most non-startup jobs out there do tend to require a bachelors' degree.
Rather than spending hours each day doing math proofs, he could have the chance to explore different areas in programming while learning figuring out what he enjoys (for example game programming vs web development)
Of course, it's absolutely instrumental to spend a lot of time coding on your own "for fun." Just learning the proofs and such does not prepare one for the real world at all.
This was somewhat harder maybe 10 years ago. Fortunately in modern days, there are many APIs to play with, open source technologies, and so on. Communities like GitHub used to be much harder to find in the past. HN rocks.
But you'd have to know the theory too, to understand the concepts on a deeper level. Yes, some people are entirely self-taught, but it requires the person to already have the "drive" and to already know what they want.
Finally, a good university (like UofT is) can bring life-long friends and experiences and expose one's mind to more ideas. It's great for opening doors, and generally establishing a foundation for learning. Can't miss that!
Like it or not, a university degree is worth years of experience and is often a barrier to entry at many many many top software companies. Not everywhere is a startup. If he's not sure what he wants to do, university is an even better decision.
Also, have him investigate multiple CS programs. Not all degrees are alike. Some are heavy theory, as you said, and some place an emphasis on software engineering.
As for debt, it's comparatively these days to get a moderate to high paying job in CS. If you have a degree.
Full disclosure: I've been coding professionally for five years now. I have a GED and 20 credit hours of college.
I am a university math teacher. I couldn't give a flying damn whether my undergrad students learn calculus. I do care whether my students learn to reason both non-rigorously and rigorously, that they understand how to read and work with definitions, that they can recognize when their solutions are plausible, and that they learn to explain themselves clearly to others.
I am biased obviously, but I think that a college education is tremendously valuable. Also, I know that University of Toronto is a damn good school.
+1. I respect you greatly for helping out your brother, and for soliciting advice. I can only speak for the path I took, conceivably another is still better, but I can testify that college education is truly valuable.
If he likes grokking web apps, and foresees himself not deviating too far from this career path, then lots of proven coding experience + open source commits might work out for him better than going to college.
That being said, as someone with recent CS Uni experience in the States, I found my time there quite helpful from a knowledge perspective. From a pure CS/coding perspective, CS curriculum introduced me to lots of different computing fields and concepts, as well as provided a mentor/teacher to explain them I might not have found in the "real world", beyond basic data structures and algorithms. Exposure to some of the upper level math also helped hone problem solving skills. Ultimately, I think it ended up working for me, I left with a pretty wide range of knowledge--practical and theoretical--and decent problem solving skills I can apply to most problems.
I don't know anything about UT's program, but I will say if your brother wants to get into lower level coding, a decent CS degree will go a long way to giving him the basic theory & knowledge to jump into the field.
You can use payscale websites to judge what kind of pay a programmer that has gone to a college gets in relation to one that has not and compare to the costs of going to college.
In regards to hectic schedules and hardcore math... it's not THAT bad, and the harder it is the stronger he'll be coming out.
At the end of the day its about how will he differentiate himself to other programmers. When he's looking for a job without a college degree but with a few projects under his belt compared to a fresh college grad with a 4.0, it might be a coin toss on who they pick. What if the college grad also did some work on the side, or internships? It may tip the scales out of your brother's favor.
I would advise both him and my younger self to take a year out and think about what they're actually interested in doing, guided by hacking together some simple experiments. I think going in to further education to bolster something pre-existing* is better than going in as a blank slate and hoping to latch on to something while you're in there. You can still change the concrete thing you're interested in, but it should always be something and not nothing.
* browsing the web and playing video games don't count as professions or crafts.
That said, I think telling him to do the same thing is bad advice. I've seen a distinct difference between someone who knows how to code because they've written a lot of it, and someone who knows how to code because they've learned the underlying concepts and practices.
To me it's sort of akin to the old adage of giving a man a fish vs. teaching him to fish.
the programming work i'm doing now i didn't learn at UofT. I learned on my own, but i do believe my UofT certificate played a very big role in me getting my current job.
at UofT he can expect to do a few programming courses but if he decides to go under the software engineering program, he'll have to do a lot of algorithm and concept works as well. for example courses to figure out how BGP and OSPF algorithms work etc.
the way i look at it, if he goes to UofT to gets his fundamental CS and then try and learn different programming languages on the side himself, he will be good to go.
Here's my story that I used to answer a similar question a few days ago: http://news.ycombinator.com/item?id=3414135
Hope this helps.
University -> Internship -> Employment is a good way to get started. Managers hiring interns more or less know what they're getting.
University -> Employment is more difficult, but possible. Managers hiring people straight out of college also more or less know what to expect, especially if they've hired grads from the school before.
Trying to jump straight into employment will be difficult unless he has previous employment.
If he's currently employed writing code, then 4 years of work experience will probably trump 4 years of schooling. But there are always places that won't even consider a person without a degree.