Originally Posted by Go_Blue
So, this weekend my daughter was born, and I finished the pre-req phase, so it seems like a good place to summarize my thoughts. It’s interesting how due to a not-so-great childhood I always wondered if I’d ever have a family, but never doubted that I would be successful one day. Now, at the age of 28, I have a perfect family life (one I never dreamed I’d have), but am not successful at all. Anyway, hopefully the successful part will change one day!
My Grades in the pre-req phase:
Discrete Mathematics: A
Java I: A-
Java II: A
Computer Systems I: A
Computer Systems II: A
Data Structures: B+
After a year, it seems that I am in a good place to answer some of the questions I had when I first started.
1. Do you need to be great at Math to succeed as a programmer?
A: NO, that is a huge misconception. First of all, just because people take really advanced math classes, doesn’t mean they’re good at math or even pay attention in class. Often people will say with pride, “I took a lot of math classes,” but that means nothing unless they got a lot out of the classes. It’s a shame that some schools try to weed kids out of their comp sci program with overly advanced math classes. That’s not to say that someone who is really good at math doesn’t have an advantage over someone who is not; that is to say that you can still develop a strong understanding of comp sci concepts without being naturally talented at math.
Having said all of that, I think Discrete Mathematics is a great way to tell if comp sci concepts make sense to you/if you enjoy putting in the effort to understand them. You end up using all of the concepts in Data Structures: ie- Sets, Unions, Recursion, Algorithms, Graphs, etc.
2. Formal education vs Learning on your own?
A: In my opinion, the best choice is to do both. A few thoughts on this subject:
-It is much different to take these classes as an older person with his personal life well established + an understanding of what he wants out of life. As an undergrad, so much of what you’re focused on involves developing a social life and learning what you want out of your life that you likely get less out of your education. For example, going to class is all that is expected of you so if you are given the choice of watching a bunch of YouTube videos and free lectures, or going to a party with friends, you’ll choose the party. And I don’t think that’s the wrong choice as becoming socially adjusted is important; but, you will get less out of your classes.
-This leads to the next point that some professors are terrible. This is really frustrating, but you need to use all of the available free lectures in order to compensate. For example, my Data Structures lecturer sucked; he offered almost no feedback on assignments and just ran through a textbook’s slides, and then tried to make his tests as hard as possible. As a result, I got my first ever C+ on a midterm, but was able to turn my grade around by finding this really cool Berkeley lecturer on YouTube. This goes back to my first point where if I was an undergrad, I may have gotten a C in the class because I wouldn’t have had the time or desire to watch free lectures that suit me better; but as an older person I got my grade up to a B+.
-All of this talk about grades brings me to this point: I think grades are positive in the sense that they give you something to strive for; but detrimental in the sense that you can get overly-focused on them. At the end of the day, it’s all about how much you learn and what side projects you work on. In terms of effort, the difference between a B and an A is huge; but it may be better to be a B student with extra time to work on cool side projects than an A student with hardly any time to work on side projects.
-Lastly, you can’t use a few people you know as an example of how ALL comp sci students perform in the working world. Some of my classes had very lazy people who barely paid attention in class, but there were others who were extremely talented and hard working. So, if one of the lazy jackasses wasting his parents’ money ended up working with you, you’d think “Man, that guy got a comp sci degree? He’s useless,” and you’d be right. On the other hand, if you worked with one of the talented, hard-working people, you’d undoubtedly be impressed.
3. Does the school you go to matter?
A: No, it definitely doesn’t. In general, you will learn the same concepts no matter what school you go to (assuming it’s at least somewhat reputable); but at the top ranked schools you will be competing against smarter and more talented people. In other words, you will learn the same concepts, but have a much harder time doing well on the tests (ie- if half the class gets below a 50% and half gets above a 50%, you may be in the bottom half at a top school and the top half at an “average” school). Obviously at the absolute best schools, the math gets pretty tough; but again, as far as I can tell, most practical applications don’t require the use of convoluted, extremely advanced math.
Anyway, I had a bunch of questions and answers written out, but this is getting really long. My daughter just woke up, so I’m sorry that this post is written at a fourth grade level! I don’t have time to edit it.
To end with a summary of what I’m working on:
I met an undergrad who has been invaluable to my education. He’s a talented web developer who works full time, and he’s been really helpful in my development. Right now I am configuring my own Apache server, and working on my website in PHP, CSS, HTML, and JavaScript. The purpose of the website and server is really to get a strong understanding of the fundamentals behind any website/server before I learn to use languages that do more for me. Anyway, my first Master’s class starts tomorrow. I’ve had a few interesting interview experiences that maybe I’ll write about in another post in the future.