Disclaimers (Please read before jumping to answer):
I've seen a number of questions similar to the one I would like to ask, so here are some similar questions.
IMHO They are neither completely what I'm asking, nor are they as thorough as I hope to be (I don't mean to brush off the answers to the below questions, nor am I discrediting the askers, I just want to be a little more thorough):
Let me be clear, I'm not asking the following:
- How to teach myself programming from scratch (without a degree in CS)
- How to market myself as a good software developer (without a degree in CS)
- How to get a great high paying job as a software developer (without a degree in CS)
A little context:
Now that I have disclaimers out of the way, let me flesh out my question, starting with a brief history of my experience as a software developer.
First off, I have been incredibly lucky. I've been given several job opportunities (a couple heavy backend PHP/MySQL projects, and several WP7 apps in XAML/C#) through which I really learned everything I know about software development. Nearly all of the software development jobs I've had were ones that I was not rightfully qualified to have (and I made that clear to my employers before they hired me). I don't want to give myself credit where it's not due, but I would say that perfect humility dispenses with modesty.
In nearly every single development job I've had, I have exceeded the expectations of my employer, and proved to be a valuable asset. There are of course exceptions1. But my point is I'm fairly intelligent and was able to teach myself what I needed to know in order to be successful at my job. With each job I had, I was stretched more and more.
I attend the University of Washington's Seattle campus, and am currently in my fourth year with two years left, working on a Math degree. During the various jobs I've had (see my résumé if you want that list) I've also been attending school as a full time student.
As I think most developers would agree, studying the typical general ed undergraduate courses, including introductory programming courses ABSOLUTELY PALES in comparison with writing real code, building real2 products, working with awesome people, and positively affecting the lives of users3.
So... as things go... I spent far more of my time and energy working instead of focusing on my studies. At times I performed very horribly, but for the most part I was able to stay afloat with my grades.
However the computer science program at UW is very, very, very, very competitive.
So, it was no surprise to me when I got rejected by the program. Twice. Ironically enough, the same half-hour window in which I received the always polite, albeit disheartening rejection notice via email, I got a phone call from Amazon offering me a summer internship4 as an SDE.
As I look around at other 'gents my age (21), who share the same goals as myself in software development, I find myself feeling pretty good about where I'm at, what I'm learning, who I am, and what I can do. There are of course much, much, much more brilliant 21 year olds out there than myself, I don't mean to say I stand out in a crowd, merely that I feel like I'm not abysmally behind the progress of my average peer.
I feel confident about my ability to be successful in the world of software. More importantly I feel confident in my ability and desire to continue to grow, learn, and be embarrassingly humbled when I really need it.
Math Degree
I find myself pursuing a Math degree with the sole purpose of having a degree. There are those that say I should drop out and start working now (as I've had opportunity to do), and there are those that say I should really finish my degree. I've made up my mind to go ahead with my degree for entirely different reasons than either camp tends to bring up, so please don't encourage me one way or another on that matter. Consider the issue "closed" :)
*DEEP BREATH* ...sorry this is longer than I anticipated.
This in essence, is my question:
How do I objectively determine what areas of study, general knowledge, and other skills I would have gained through a CS degree that I may or may not be lacking in now?
How do I sort these skills in order of most importance?
What is the best way (over the next two years) to supplement my education to attain those attributes in such a way to match or even surpass the level of a CS undergrad from a top university?
Here are the steps that I am taking already:
- Ask the development community (this post)
- Pursue mentorships with seasoned developers who share a similar career path with me
- Define short and long term "learning" goals and subsequent syllabi outlining topics of study
- Continue to write code and work on projects that I'm passionate about
If you've gotten this far, you deserve a cookie :) I appreciate you bearing with me.
So... development community, seasoned developers, fellow students who are in the same boat as me, what advice would you have?
Also... please do keep in mind my disclaimers at the top of this post about what I'm NOT asking for.
Update:
I realize that I did not provide very concrete parameters for what I deem a successful "answer" to my question(s). I think the question is very vague, and could warrant a number of "correct" answers.
After a reasonable amount of time I will select the answer that fits the following attributes:
- Explains the why behind their answer
- Can speak from some level of experience (be it hiring/interacting with or being someone who has/is in my shoes)
- Is concise but thorough, gives broad principles preferably coupled with specific examples
- Lastly, considering the length that matching the above would seem to require, please make it a good well communicated answer that's pleasant to read. Others who may be interested in this in the future I would hope would be entertained as well as educated by the response.
So there are some parameters for "correct". They're very high I think, but I've designed them as kind of an outline for what I envision the "best" answer would be. Obviously given enough time I'll select the closest matching response as the "answer".
(1) - I worked on a prior version of this website, and while we did not have an explicit conversation about it, I felt that I was not able to do very well at all (this can be evidenced by the fact that they have since changed their website entirely) (2) - Firstly, yes, it's a real product (even though I'm writing this post in Chrome...), and it kicks ass. Secondly, I was a high school intern developer in test, wrote proof of concept code for some of the new features for IE8... so it was a while ago. (3) - At the time of this posting I am the developer who wrote this app, I am no longer responsible for it's code base (4) - My internship will start in June of 2012, and I'll be working in the Web Store team.