Greetings / Req. for Career Advice



  • Hello and welcome to my second post ever on wtf:

    I would like advice on what to do now to maximize the likelihood of future success in the tech. industry.

    I am 28, got a BA in a liberal art, went back to school for CS and am currently in a good, but not elite, MS program in CS (expected graduation in summer 2008).  (Since, unfortunately, it matters, the school is ranked #15 on the USNews list.  I may or may not have altered that number by 1 ... I don't want to spark a school vs. school argument)  I anticipate, based on past performance, being able to maintain a gpa over 3.8, if not a 4.0.  I mention this not to brag, but because I believe it will have an influence on what doors will be open to me after graduation.

    What I consider my biggest problem is that I have no professional experience as a developer, and I've never written anything that wasn't a school assignment.  Accordingly, I don't really know any development environment or API intimately, save perhaps console programming in C++.

    What I do know is this:  I like architecture design, it reminds me of playing with Legos.  I like AI, particularly when simple rules create complex emergent behavior.  Thanks to my theory professor at my last college, I am very comfortable with theory of computation.  Finally, it is very important to me to program to accomplish "something else," in other words, I am not very interested in programming for the sake of programming.

    I am not the kind of guy who installs Linux and spends his free time tinkering with it just to automate process X (but I will download that kind of person's source code and enjoy the fruit of his/her labor).  I like the idea of programming something like a haptic feedback controller for a prosthetic leg (idea taken from a poster at school -- I did not think that up myself).

    So for these reasons, I am thinking that embedded systems programming might be for me.  It certainly doesn't hurt that it is something of a buzz word at the moment, and a woman in the industry recently came up to me and told me that she couldn't find enough embedded systems programmers.

    I am not allergic to money.  I left a fairly good paying job in the legal industry to switch to CS, so I am kind of hoping I can at least outdo my old salary. 

    Any and all advice is welcome ... what to study, what kind of projects to get involved in, what books to read, what programming exercises to do, what development environment to learn, where to live, what kind of salary expectations should I have, etc.  Thanks. 



  • First of all, let me commend the rest of the forum users for not tearing this guy's post apart in the first 10 seconds. You have shown great maturity...not to mention restraint.

    Secondly, welome zac79. I would like to address some of your questions. 

    @zac79 said:

    I anticipate, based on past performance, being able to maintain a gpa over 3.8, if not a 4.0.  I mention this not to brag, but because I believe it will have an influence on what doors will be open to me after graduation.

    Don't take this the wrong way, but gpa has very little to do with anything. Most companies are looking for a degree and some experience.

    @zac79 said:

    What I consider my biggest problem is that I have no professional experience as a developer, and I've never written anything that wasn't a school assignment.  Accordingly, I don't really know any development environment or API intimately, save perhaps console programming in C++.

    This is what most graduates enter the work world with. When I graduated, I was the same way. I am not sure why they are still teaching antiquated C++ these days, when C# is so much more applicable to business needs, but whatever. It's probably an academic thing. (Note to forum: don't jump on me with some lame comment like "But C++ is good for teaching programmers about pointers, linked lists, and bubble sorts!" Please. Spare me.)

    @zac79 said:

    What I do know is this:  I like architecture design, it reminds me of playing with Legos.  I like AI, particularly when simple rules create complex emergent behavior.  Thanks to my theory professor at my last college, I am very comfortable with theory of computation.  Finally, it is very important to me to program to accomplish "something else," in other words, I am not very interested in programming for the sake of programming.

    What you want to do sounds cool. From what I've gathered in my time in this forum, most of us here are (big business) web/internal applications programmers. Our day to day existence deals with building the "next great commercial website" or yet another internal forecasting tool. We deal a lot with web and windows services and some of us believe that XML is better than sliced bread. Another segment of this forum, albeit a smaller one, works government jobs. I used to do some government work, and let me tell you, little is required of you mentally. Show up, check email, go home. Boring stuff. What you want to get into is very different than what most of us here talk about. Frankly, the realm of AI development intimidates me. It sounds incredibly complex...and requires much thought. I imagine it's not something you just "hack out" like a website or some internal app for your boss.

    @zac79 said:

    I am not the kind of guy who installs Linux and spends his free time tinkering with it just to automate process X (but I will download that kind of person's source code and enjoy the fruit of his/her labor).

    You are one of the few then. Most of the people I know adore Linux and spend every hour at home fooling around with that non-commercial junk. It's a nice "hobby", but it's mostly for teenagers with nothing to do.

    @zac79 said:

    So for these reasons, I am thinking that embedded systems programming might be for me.  It certainly doesn't hurt that it is something of a buzz word at the moment, and a woman in the industry recently came up to me and told me that she couldn't find enough embedded systems programmers.

    Embedded systems programmers are not as common as your web jockeys or your internal app code monkeys. 

    @zac79 said:

    I am not allergic to money.  I left a fairly good paying job in the legal industry to switch to CS, so I am kind of hoping I can at least outdo my old salary.

    I imagine you eventually will, and then some. You are venturing into some very interesting (specific) territory.

    @zac79 said:

    Any and all advice is welcome ... what to study, what kind of projects to get involved in, what books to read, what programming exercises to do, what development environment to learn, where to live, what kind of salary expectations should I have, etc.

    I'm afraid you are going to have to research this for yourself. My areas of expertise will obviously do you no good whatsoever. I could recommend you a book on "How to write better HTML" or "How to code my first business app" but somehow I think you are beyond that.



  • @CPound said:

    Don't take this the wrong way, but gpa has very little to do with anything. Most companies are looking for a degree and some experience.

     

    Far from taking that the wrong way, I consider that (mostly) good news.  For one thing it means maybe  I can take a breather and relax a little bit this year instead of making myself sick with worry over grades.

    As I said, I'm coming from the legal industry.  If you are going to a second tier law school and you are not one of the top 5-10 people in your class, your chances of landing a "good" (good is very narrowly defined here to mean $140k plus at a big firm) job are slim, so I figured it would be better to be conservative and assume the tech industry operates the same way.  I am glad to hear that it doesn't.

     Thanks for your feedback Cpound.  While I didn't realize what a specific subset the WTF audience was, I happen to believe that good programming is good programming, and I see forum threads relating to things like efficient memory usage and excising redundant logic that are probably applicable at any scale or environment.

    I hope I don't get "torn" apart ... I put a lot of effort into being upfront about my naivety and inexperience, but thought it was also important to flesh out the entire picture, including "on paper" statistics like school rank and gpa, since as superficial as they are, they can make a difference in certain situations.




  • @zac79 said:

    I hope I don't get "torn" apart ... I put a lot of effort into being upfront about my naivety and inexperience, but thought it was also important to flesh out the entire picture, including "on paper" statistics like school rank and gpa, since as superficial as they are, they can make a difference in certain situations.

    You won't get torn apart; that's reserved for CPound himself.

    Your educational background sounds great; but your weakness is going to be in experience.  My suggestion is to find a project you are passionate about and dig into it yourself.  I've done a lot of hiring of new graduates, and the ones that stand out are the ones that undertake a serious project on their own.  What it is doesn't even matter so much.

    If you're interested in design specifically, you should put together design documents/diagrams of what you build, and bring those and some code samples with you to your interviews.  Do some reading about 'design patterns' if you haven't already.  

    Where are you based?  You mentioned being willing to move... depending on what you want to do, and what sort of environment you want, there are a lot of options.  Places like Seattle and the SF bay area (and spots on the east coast) pay better, more options, and more fellow geeks to interact with, but have higher costs of living and more traffic.

    Another benefit of big tech areas is that there are often more jobs than there are people to fill them.  That gives new grads an opportunity to slide into a some of those roles, or to gain experience with a contract position -- or for that matter, take a 'new grad' position at a place like MS or Google, etc.

    I don't have any experience with what a interview in the law profession is like, but dev interviews can be interesting.  They'll generally be a mix of specific technology questions and 'write some code that does this' questions. I'd suggest looking at threads like this one that talk about interview questions that you might face.  When I do interviews, I will also usually do a "how would you design this?" questions... I might ask what your favorite game is (card/board games work best) and then say "Ok, so talk me through how you'd design that...".    Generally speaking, dev interviews are more about the thought process than the right answer...though being consistently wrong won't help you any :)

    The embedded space is a good one to be in, and certainly not a buzzword.  The number of devices that run software far outnumber traditional 'computers' in the world.  You'll probably look outside the traditional big software names -- MS only does a little work in that area, for instance, but I know that there a couple medical device companies in this area that are always looking for software guys.  You might find yourself looking more specifically at the manufacturers of the equipment, but there's plenty of work there. 

    -cw

     

     



  • @CodeWhisperer said:

    You won't get torn apart; that's reserved for CPound himself.

    Gee, thanks a lot.

    @CodeWhisperer said:

    When I do interviews, I will also usually do a "how would you design this?" questions... I might ask what your favorite game is (card/board games work best) and then say "Ok, so talk me through how you'd design that...".

    That line of interview questioning is just so...wrong. Because it's all about the interviewer's personal likes/dislikes. Or it could all depend on the interviewer's particular mood on that particular day. "Talk me through how you'd design that" is so open-ended, the pitfalls are endless. I prefer a more concrete line of questioning. Preferably multiple choice.



  • @CPound said:

    That line of interview questioning is just so...wrong. Because it's all about the interviewer's personal likes/dislikes.

    How is my asking what your favorite game is about my likes/dislikes?   I'm looking for a problem area that you already have an interest in and have probably thought about at some non-trivial level.  

    @CPound said:

    "Talk me through how you'd design that" is so open-ended, the pitfalls are endless. I prefer a more concrete line of questioning. Preferably multiple choice.

    Of course it's open ended -- you're solving a problem, which is exactly what you're being asked to do in your job.  How you solve the problem and avoid the pitfalls is what I want to see.   What do multiple-choice answers tell me at all about how you're going to do at your job?  Every so often I've been asked to do screening tests that use multiple-choice questions to test knowledge of a specific language; but they use that testing to weed people out before they get to an in-person interview -- where they ask you to write code and solve problems.  

    I actually find that counter-productive because, in my experience, if you have mastered a couple similar languages and you can handle the algorithm & design questions, I have reasonable assurance that you'll pick up the language in question.   I don't want to exclude the best problem solver I've ever met just because he doesn't know Java yet.  (The exception maybe being for contract jobs where you are reasonably expected to be productive on day 1) 

    I remain baffled by your insistence that I shouldn't be asking you to demonstrate the skill set I'd be hiring for you.  How does that even make sense?

    -cw



  • @zac79 said:

    Thanks for your feedback Cpound.  While I didn't realize what a specific subset the WTF audience was, I happen to believe that good programming is good programming, and I see forum threads relating to things like efficient memory usage and excising redundant logic that are probably applicable at any scale or environment.

    We don't all work in business/e-commerce stuff (though I do get the impression while reading the forums that an awful lot of people here do). I personally work in Games Programming, which given your interest in AI and making programs that do fun things might be worth your while to check out. The two most important things you need to get into the games industry (as a programmer) are technical competence and a passion for video games in general. The former can be learned, but the latter is pretty much something you either have or you don't. When you go to an interview, you will be asked questions about what games you like and why, the main focus being on game design elements. This is because a portion of your job might well be interpreting and implementing the designer's ideas (and yes, often they are just "ideas", though occasionally you'll get something more structured and formal) and you need an understanding of game design to be able to do that. Alot of this comes down to common sense and experience from playing alot of games, although there are books on game design you can read to help.

    As for technical competence, as CW says your greatest weakness is your lack of practical experience. It might be a good idea to collaborate on an open source project, check out [url]www.sourceforge.net[/url], maybe you'll find something you like. The ability to work as part of a team is crucial for almost any job you can think of and even if you luck out and choose a project being implemented by the cast of Fraggle Rock you can still learn from their mistakes. Another idea is to simply come up with the concept of a game for yourself and try and implement it off of your own back. There are websites like [url]www.gamedev.net[/url] and <font size="-1">www.gamasutra.com that contain useful articles and have forums where you can ask for help. Even if you have no interest in the games industry, making your own game might still be useful since games programs bring together many different disciplines of programming under one roof, the most obvious being:
    </font>

    Graphics Programming

    Sound/Music programming

    Artifical Intelligence

    World simulation/modelling

    Network Programming

    Data serialization, storage and conversion 

    Threading and parallel programming 

    There's alot to be learned from trying to get these different things to work together, as well as the general problem solving involved simply in taking the rather odd concepts that make up most games and turning them into reality. If you're feeling really brave, you can download an SDK (such as DirectX or GLUT) and start from scratch, or you can find an existing open-source engine which implements most of the above already and start working from there (I'm afraid that I've never used an open source engine, so I can't really recommend anything).

    Most games are written in C++ by the way, since even though most of the cruel words said about it on these forums are true (i.e. it's difficult, inconsistent and out of date in terms of things like C#), it has one advantage over all of them in that it's extremely fast and gives you a massive degree of control over the system you're working in. Other languages get used as well, C# is often used to make game tools that aren't so performance driven, and scripting languages like Python and Lua are often built into game engines to allow designers to have greater control over game logic without being so dependent on programmers to handle every bizarre whim and fancy they get into their heads.

    The biggest disadvantage of the games industry as a whole is the pay, generally we get paid alot less than our counterparts in Banking, E-Commerce and other things. I find that this is made up for by the satisfaction I get from knowing my code is making lasers blow up spaceships or making a sword cut off an orc's head, rather than making rather dull webpages, but that kind of thing isn't for everyone.

     



  • @CPound said:

    @zac79 said:

    What I consider my biggest problem is that I have no professional experience as a developer, and I've never written anything that wasn't a school assignment.  Accordingly, I don't really know any development environment or API intimately, save perhaps console programming in C++.

    This is what most graduates enter the work world with. When I graduated, I was the same way. I am not sure why they are still teaching antiquated C++ these days, when C# is so much more applicable to business needs, but whatever.

    Every year, people say "I don't know why they're teaching C++ when X is so much more applicable". Every year, X is a different language. That is why they are teaching C++ - there's a good chance that by the time the student has graduated in three or four years, C++ will still be in use, unlike all the other Xes people were talking about four years ago. It's one of the extremely small set of languages that has stood the test of time (some other notables being C, Perl, Fortran 77, and to a limited extent lisp).



  • @Devi said:

    @zac79 said:

    Thanks for your feedback Cpound.  While I didn't realize what a specific subset the WTF audience was, I happen to believe that good programming is good programming, and I see forum threads relating to things like efficient memory usage and excising redundant logic that are probably applicable at any scale or environment.

    We don't all work in business/e-commerce stuff (though I do get the impression while reading the forums that an awful lot of people here do). I personally work in Games Programming, which given your interest in AI and making programs that do fun things might be worth your while to check out.

    Be aware that AI as implemented in modern commercial games and AI as taught in universities are almost, but not quite, entirely unrelated. Games use quite crude techniques because they can't afford the CPU cost of the stuff that researchers are working with these days. Universities focus more on "interesting" problems (like chess on a supercomputer array) and applications like robotics, using different techniques, so that's what they teach in most of the courses. A few places have courses on the low-latency, low-intelligence stuff that games use, but not many.



  • @zac79 said:

    @CPound said:

    Don't take this the wrong way, but gpa has very little to do with anything. Most companies are looking for a degree and some experience.

    Far from taking that the wrong way, I consider that (mostly) good news.  For one thing it means maybe  I can take a breather and relax a little bit this year instead of making myself sick with worry over grades.

    As I said, I'm coming from the legal industry.  If you are going to a second tier law school and you are not one of the top 5-10 people in your class, your chances of landing a "good" (good is very narrowly defined here to mean $140k plus at a big firm) job are slim, so I figured it would be better to be conservative and assume the tech industry operates the same way.  I am glad to hear that it doesn't.

    Don't be. The software development industry has replaced slavish devotion to grades with slavish devotion to stupidity in hiring practices. Most companies hire developers based on their sales abilities, and most of them don't realise that they're doing this. It's entirely possible to get decent jobs but you won't get them based on how good you are at doing the job, you'll get them based on how good you are at playing the salesman in the interview. If you go in and give an honest appraisal of your abilities, and the next guy goes in and lies through his teeth about what he can do, they'll hire him instead of you, because they've got no practical way to know who is lying and you all have basically the same qualifications. (They throw out all the people who obviously have no clue, but they select between the people who have some clue based on who lies the best)

    The primary problem with this, aside from it being completely tasteless, is that wherever you work you are guaranteed to have at least one idiot in the office that you have to work around. 



  • @Devi said:

    When you go to an interview, you will be asked questions about what games you like and why, the main focus being on game design elements.

    I could never be a games programmer because I would totally blow this question. I would respond with "I like the game where you go around and shoot stuff...and blow stuff up. That's cool." And as far as game design elements, I would say "I like games with good graphics."
     



  • @asuffield said:

    Be aware that AI as implemented in modern commercial games and AI as taught in universities are almost, but not quite, entirely unrelated. Games use quite crude techniques because they can't afford the CPU cost of the stuff that researchers are working with these days. Universities focus more on "interesting" problems (like chess on a supercomputer array) and applications like robotics, using different techniques, so that's what they teach in most of the courses. A few places have courses on the low-latency, low-intelligence stuff that games use, but not many.

    Well, there are academic areas that study related AI types. The main ones being Artificial Life simulation (I know that's technically not AI, leave me alone ;) ) and Autonomous Agent Control/Robotics. Admittedly a large proportion of AI stuff is unrelated. Some people are saying that they think they can get Neural Nets with simple learning algorithms into certain games, though I don't personally know of  any systems that have used it to good effect. I'm not specialized in the field or anything, but I'd guess that machines these days have enough spare power that you can do some moderately complex stuff. On an Xbox 360 for example, you could probably get one or two dedicated 3.2Ghz hardware threads if you really needed it.



  • @CPound said:

    I could never be a games programmer because I would totally blow this question. I would respond with "I like the game where you go around and shoot stuff...and blow stuff up. That's cool." And as far as game design elements, I would say "I like games with good graphics."
     

    I've known a few coders who didn't actually play many games, though mostly because they were sitting round for most of their childhoods writing weird little graphics demos that can fit into 64k. They mostly just sit quietly in the corner making things look pretty and shouting at Artists :) 



  • @CPound said:

    @zac79 said:

    I am not the kind of guy who installs Linux and spends his free time tinkering with it just to automate process X (but I will download that kind of person's source code and enjoy the fruit of his/her labor).

    You are one of the few then. Most of the people I know adore Linux and spend every hour at home fooling around with that non-commercial junk. It's a nice "hobby", but it's mostly for teenagers with nothing to do.

     

    OK, CPound, I've long considered people bashing you to be a generally mean spirited thing, but this time you've really gone too far.  You've just dismissed a popular operating system with a gigantic installed base that is quite capable of handling huge business and industry processes as something for "teenagers with nothing to do".  Hundreds of large corporations depend on Linux servers for their day to day operations, whether serving web pages, running databases, handling various other communications protocols, or simply dealing with the spam and attacks generated by infected Windows machines you seem so fond of.  Just because you don't use C++, and you don't consider Linux an enterprise ready OS, doesn't mean there the entire IT community shares your inflated opinion.

     

    Solaris, a previously 100% commercial UNIX, now has a free version (with source code, not merely the binary ISO images) called Open Solaris.  Using your logic, that must mean that it, too, is nothing more than something for "teenagers with nothing to do".

     



  • Thanks for all the great advice.  I have a couple of project ideas on the back burner, and I'm always coming up with new ideas in the shower (where I do my best thinking).  I guess I will have to get serious about getting my hands dirty on one of them in the upcoming months.  For the time being, my one summer school class, Digital Design in VHDL, is killing me and its all I can do just to keep up with the schoolwork.

    This advice probably comes too late for most of you, but under no circumstances whatsoever should you take a lab class in the summer.  I'd prefer to be paid for managing arbitrarily short deadlines and working late into the night to debug.

    I love video games, I'm just too embarrassed to admit it to my cs professors. 



  • @sinistral said:

    OK, CPound, I've long considered people bashing you to be a generally mean spirited thing, but this time you've really gone too far.  You've just dismissed a popular operating system with a gigantic installed base that is quite capable of handling huge business and industry processes as something for "teenagers with nothing to do".  Hundreds of large corporations depend on Linux servers for their day to day operations, whether serving web pages, running databases, handling various other communications protocols, or simply dealing with the spam and attacks generated by infected Windows machines you seem so fond of.  Just because you don't use C++, and you don't consider Linux an enterprise ready OS, doesn't mean there the entire IT community shares your inflated opinion.

    If you re-read my earlier post, you will see that I was referring to Linux specifically. Not Solaris or UNIX in general. I think Solaris is far superior to any of this Red-Hat stuff that's out there. 



  • @CPound said:

    If you re-read my earlier post, you will see that I was referring to Linux specifically. Not Solaris or UNIX in general. I think Solaris is far superior to any of this Red-Hat stuff that's out there. 

    There's a lot more going on than just Red Hat

    -cw



  • @CPound said:

    @sinistral said:

    OK, CPound, I've long considered people bashing you to be a generally mean spirited thing, but this time you've really gone too far.  You've just dismissed a popular operating system with a gigantic installed base that is quite capable of handling huge business and industry processes as something for "teenagers with nothing to do".  Hundreds of large corporations depend on Linux servers for their day to day operations, whether serving web pages, running databases, handling various other communications protocols, or simply dealing with the spam and attacks generated by infected Windows machines you seem so fond of.  Just because you don't use C++, and you don't consider Linux an enterprise ready OS, doesn't mean there the entire IT community shares your inflated opinion.

    If you re-read my earlier post, you will see that I was referring to Linux specifically. Not Solaris or UNIX in general. I think Solaris is far superior to any of this Red-Hat stuff that's out there. 

     But Sinistral, this is why we love CPound - he's the greatest source of flamebait we have. If he wasn't around we'd have to (ulp!) actually work instaed of answering lame posts.



  • @zedhex said:

    But Sinistral, this is why we love CPound - he's the greatest source of flamebait we have. If he wasn't around we'd have to (ulp!) actually work instaed of answering lame posts.

    We'd have to start flaming eachother.

    Then we'd be in trouble.



  • @dhromed said:

    @zedhex said:

    But Sinistral, this is why we love CPound - he's the greatest source of flamebait we have. If he wasn't around we'd have to (ulp!) actually work instaed of answering lame posts.

    We'd have to start flaming eachother.

    Then we'd be in trouble.

    Only because you suck. 



  • @asuffield said:

    @dhromed said:

    @zedhex said:

    But Sinistral, this is why we love CPound - he's the greatest source of flamebait we have. If he wasn't around we'd have to (ulp!) actually work instaed of answering lame posts.

    We'd have to start flaming eachother.

    Then we'd be in trouble.

    Only because you suck. 

    Your mom. 



  • You both behave like Oracle on Windows Vista.


Log in to reply