One of the best things about the Direct3D tutorial series that I've written is that occasionally people will email me asking for my help. I like this because I get to hear about what they are trying to do, and because it gives me a chance to solve interesting problems.
I recently got a letter from John Wessel that I thought posed an interesting question, so (with his permission), I'm posting it here.
> First, your tutorials on DirectX are great. I enjoy reading them because
> afterward I can actually make something work, and it validates my
:) Glad you enjoyed them.
> Second, my question is almost related. I'm eighteen, in junior college and
> will be transferring in two or three semesters to a 4-year. I'm trying to
> find out what the job market is and what people are looking for when they
> hire. I figured I'd start by asking the people who got me interested in
> programming in the first place, the legible tutorial writers! I'm not
> quite sure exactly what you do or if you work for someone, but you seem
> knowledgeable enough so I thought you might have a good perspective.
I'm an independent computer programming contractor. My wife and I run our
own business, which is just the two of us. I used to teach for
DevelopMentor, but these days I design and write systems for my clients. I
bill myself as an expert in .NET technologies, with an emphasis on security
and web services. Our website is http://wangdera.com if you want to see a
> What should I major in? Is computer science absolutely necessary, or would
> something like physics, which I'm leaning towards right now, be
> acceptable? I've taught myself how to program and I dread having to take
> classes on something I'm decent at already. I'd rather learn something
> more that I can apply through programming, but I'd like to have a job,
Computer science is not necessary. It helps some, since your focus will be
on computers, but frankly, there's not a ton of difference between one BS
and another - most of your core courses are the same regardless of whether
you're a physics major or a biology major or an electrical engineer (which
is what I did).
See, here's the thing that no one tells you: learning to be a good computer
programmer takes at least ten years. Which means that just about no one
coming out of college is any good. The smart employers (and believe me,
there are a lot of dumb ones) know this, and aren't really looking for
people that already have really strong programming skills. They're looking
for people with strong *thinking* skills, since those people can be taught
to do just about anything well.
You should major in whatever you're interested in. Five years from now, when
you graduate, the job market and technologies in use will probably be pretty
different from what they are now. Also - and I know this can hard to believe
from your side of it - your brain is going to change a lot between now and
age 22. It changes even more between 22 and 30. Everyone always thinks that
you stop growing up at 18, but I can tell you that is sooooooo not true.
Anyway, the point is that it's too hard to guess with a lot of accuracy what
a) the job market is going to be like in 2008, and b) what *you're* going to
be like in 2008. Therefore, to make the most out of college, stay
interested. If that means physics, do physics.
> What skills should I have in order to get hired? My ideal programming job
> would be developing the next platform of blank, like .NET, DirectX or
> something entirely new and different. To date I've gotten a few jobs
> building some ASP.NET web applications, the major one being some
> accounting software for the City of Elk Grove, but no other work
Well, one thing I'd point out is that for something like .NET or DirectX,
there are a very small number of people building it, but a very large number
of people using it. In other words, there's a lot more work out there
building ASP.NET web applications than there is writing DirectX 10.0. For
example, Managed DirectX 9 was written by one guy.
This is sort of good news and bad news. The bad news is obvious - what you
think is your ideal job is going to be very competitive to get. The good
news is that all of that other work building "business" applications,
actually turns out to be very interesting, and very lucrative. So don't
write it off - there are hard problems to be solved in every field, and good
programmers are needed to do the work. That said, *someone* has to write
.NET 3.0, and it might just be you. :)
My parting advice to you is that, regardless of what major you choose, be
sure to keep programming. Remember - it takes at least ten years to get
good. It sounds like you've already got a great start. (And you write well,
too, which is also a really good sign.) But make sure you take what you've
done already and keep building on it. Write code. Study design. Write more
code. Even familiarize yourself with some of the non-technology aspects of
programming like how team-based development works (e.g. pair programming,
test-driven development, etc.) You're going to need to do all of this - a
lot - before you can rightfully consider yourself an elite programmer. I
know I'm still learning.
Let me know if there's anything else I can do to help, or questions I can
P.S. Do you mind if I reprint your message and my response on my weblog?