views:

1467

answers:

17

Here's the core question: What do I need to be able to know and do to get a .NET software development position?


I have been out of the software development career field since 2004, having worked for the government for about 6 months after graduating from college with a degree in computer science. I did well in college, very well, I actually had a better GPA in CS courses than "easier" courses. Yes, I know that means little now, but it does show that I have a natural aptitude for programming. In fact I enjoy programming, it was just that at that time in my life I had a lot of things going on.

Well now as some of you may know I am actively pursuing returning to the software development career path. I feel that to do so I have to really prove myself worthy.

I have been reading everything under the Sun about software development, and have been getting into the nitty gritty of programming. I feel I have come a long way over the past month and a half in getting my mind around everything.

I have chosen C# and .NET as my main point of focus. As well as proper design methods.

What I have noticed is that the information is infinite. It never ends. And so, as I feel the need to prove myself worthy I start to feel inadequate in comparison to this HUGE amount of information to get myself proficient in. I Want to start applying to jobs and getting interviews, but I keep feeling like, "well I 'll wait until I can do THIS better, or THAT better."


So I thought I would ask you all this:

What is enough to know to get a job and be able to do it (hopefully well)? When am I at a place where I can feel like if I go to an interview I am at the level I need to be at to get myself a software development job?

At what point can I say: "Yes, I am confident I am good enough."?

Also, how can I measure myself?


P.S. I am now officially good enough =D

+3  A: 

To begin with, being a reasonable developer is good enough. Make sure you know the language, the core constructs and the general feel of the programming paradigm involved.

In your case, know C#, know the language as much as you can. Make sure you understand OOP concepts well enough to apply them and hopefully when and when not to apply them (though trust me you can get .NET jobs not knowing the latter, though I'm assuming you want a job in a good dev shop).

But really, just apply for jobs, the good places will have tests at the door, and if your failing the tests at various interviews, you know that you don't know what you need to know (if that makes sense). If you do fail them talk to them about why you failed, what they expected etc etc, so at least you come away having learned something :)

If you keep holding off, you will forever be holding off.

Sekhat
Thanks. I guess I had suspected I know enough to get out there and interview. Now I know I do.
Alex Baranosky
+2  A: 

Yes, the topic is vast. Dan Appleman, a fellow .NET developer (and founder of searchdotnet.com) has a great quote on "Discoverability".

"The greatest challenge facing .NET developers today is discoverability - finding information and answers that already exist"

The point he is trying to make is that you won't ever know all there is to know about programming and neither will the rest of us. One of the defining characteristics that separates a good programmer from a novice is how quickly he can find and implement the data he needs. It's not about how much you know, it's about how quickly you can find it.

Your question regarding how do you know you are good enough I think is subjective based on the employer. There are NASA jobs, and then there are jobs working for your local pen/paper supply company which maybe just needs their website maintained. It's subjective based on where you want to work.

The comment you make that sticks out to me is that you have a passion for development. As long as you geniunely care about your job, and enjoy waking up to go to work, you will always be a step ahead of most of the pack. There are two types of developers, those who love what they do from a purist standpoint, and those who thought it was a good idea to get into because they heard the pay was good. As long as you are in the former of the two, you will be just fine.

My recommendation to you would be to start putting your resume out there. Hand mail it to 5 businesses a week (or some other milestone goal). Go to your local library and look for the "Services Directory" book. It should look like an unabridged dictionary. Photo copy all the details of the companies you want to apply to, craft your resume geared toward that company, and hand mail it (i.e. gaurantee someone will read it). If you get hired, then congrats, you were good enough.

Kyle B.
"those who love what they do from a purist standpoint" I got into programming freshmen year of college. In an intro engineering course we had to learn to program in C. I fell in love with it, and decided to switch departments and majors to CS.
Alex Baranosky
+14  A: 

Stop trying to read everything (as you said, it never ends) and start your own small project. Design it, code it, and complete it. That experience should give you a sense of what is involved in software engineering. You can also use it as a portfolio.

sanxiyn
This is sage advice - two for the price of one.
vg1890
This is the <b>best</b> way to learn.
Roy
Good advice, but not sure it really answers the question.
Alex Baranosky
+3  A: 

There are TONS of sites out there (including Joel's blog and here at SO) with interview questions galore.

When should you feel comfortable interviewing? That is indeed a different question. Everyone has a different path to full-time development. The first honest-to-goodness paying gig was a bit a leap of faith for me, as I imagine it is for many.

A lot will depend on the nature of the particular job you're interviewing for. You might feel more comfortable targeting mid-level positions. The job description should tell you a lot- if you feel qualified reading the requirements, you're probably in the right ballpark.

A quick laundry list:

  1. Know the difference between stack and heap
  2. Be familiar with the major Design Patterns (singleton, observer, etc.)
  3. Know the basics of OO- encapsulation, inheritance, polymorphism
  4. Brush up your SQL skills (T-SQL or PL-SQL, most companies will accept either)
  5. Reflection.

Finally, write code. Find excuses to develop new applications as much as possible. Do a website for your rich uncle. Offer your services around to friends/family who don't mind things taking a while. Great experience.

Dave Swersky
+2  A: 

Do as much programming as you can. Work through examples, sample code, try to get involved in open source projects -- even if only to read the code. Unfortunately, there really isn't any substitute for actual programming to become better at it. I'm afraid that you'll have to basically look for entry-level positions -- I can't imagine anyone accepting your personal study as experience. Know this in advance. For an entry-level position, having a really good attitude and being able to demonstrate a willingness to learn is invaluable. You should be familiar with concepts and terminology. You should be able to say, here is how I've been learning this or that, this is how it works in practice.

I think when you feel comfortable talking about basic concepts, have a good understanding of some common design/architecture patterns, and have spent some time getting your programming chops back, you're probably ready to jump into interviews. You may want to do a few even before then for practice, even if you don't expect to get the job.

tvanfosson
Thank you tvanfosson, I have already done one interview actually. It was very good practice, and there is still some chance I could get the position.
Alex Baranosky
+14  A: 

You know you're skilled enough when you pass an interview and get hired - the rest you'll learn it on the job as everyone did.

If you wanna measure yourself after studying up books and practicing on your own projects search Google for .NET interview questions and see how you cope with those (I am not suggesting to study only those, but it definitely good to have an idea of what you'll be asked).

If you really are a "how do I measure myself" freak ask other people to review your stuff. People are usually glad to do it (not only people you know, think SO, other communities and so forth).

JohnIdol
Unfortunately, unskilled people also sometimes pass interviews. I've had a coworker who always gets in because he knows how to interview *really* well. Half a year after we was relieved, we're still trying to fix his doings.
configurator
that is true - but still if you study up and pass an interview it means they think you're skilled enough for what they need and the rest you learn it on the job
JohnIdol
@configurator - the opposite is also true, smart people who have every ability to learn new skills don't get passed an interview because they aren't yet skilled with a particular technology.
Doug T.
This is a smarta$$ answer. It doesn't really say much. Sorta like if someone says to me, "what's up", and I say back, "the sky". It's all good though. :)
Alex Baranosky
You're looking for an answer that doesn't exist - no-one can tell you when you are skilled enough for a job.You need to study up, make some experience on your own; then 1) 'when you find the guts' of doing an interview and 2) 'when you pass it' means you're ready.
JohnIdol
i think everyone knows when they're good enough for giving it a shot
JohnIdol
you must not have the 'guts' to actually answer the question...
Alex Baranosky
I edited and that's about the best I can do!
JohnIdol
John you're a good man!
Alex Baranosky
really?! how about marking as answer :)
JohnIdol
Couldn't do the mark as answer because this really should be a community wiki.
Alex Baranosky
+1  A: 

Part of an answer to this is for what kind of jobs are you applying as even within C#/.Net there are various branches one could focus on like web applications, windows applications, windows services, and console applications to name a few. Are you trying to get into all of them someplace or does one hold more of a preference for you? How familiar are you with various software development methodologies, e.g. Waterfall, Agile, Scrum, etc. and the basic Software Development Life Cycle?

For the interview itself remember that you are probably just starting out and you probably will make mistakes and saying, "I don't know," is better than trying to guess at the answer and wind up looking worse since you guessed wrong.

There are probably various IT recruitment companies that may also be a good place to go and bring in your resume and ask what changes you need to make or preparation work you may need to do, e.g. get familiar with various simple programming questions like reversing a string or how would you implement a solution to count the number of 1 bits in an integer for a couple of examples. Another line of thought would be to use the career services division from the college or university you graduated as they may have positions for alumni that may be a way to get a break.

Remember to stay humble, understand that you will learn a lot early on and various companies will have their own interpretation of things that you wouldn't likely know or be expected to know in the beginning. Being able to adapt is likely the greatest skill you can have with problem solving being a close second I think. For example, you are probably using Visual Studio 2005 or Visual Studio 2008 but there will soon be Visual Studio 2010 with the .Net 4.0 framework that may continue to change some things. Do you know about version control and testing is something else to understand when you go in as these are becoming more important and something that you may end up discussing in an interview like which products have you used for version control or unit testing?

There are a few questions in this answer as I think answering those questions may help give you some idea of where you are. Don't forget that there are likely very few people outside of Microsoft that can say they know all the strengths of each .Net framework.

JB King
"career services division from the college or university you graduated" Good idea. Thanks.
Alex Baranosky
+4  A: 

the short answer to your question title is "When you get hired". With that (and your background) in mind:

  1. apply for an entry-level job as a .NET developer
  2. if you don't pass the interview, work on the weak areas for a few days and try again
  3. if you do pass the interview, take the job
  4. google your butt off on the job to learn what you need to know as fast as possible
  5. listen to everyone else on your team; be an info-sponge, but not a pest
  6. continue developmental reading and side projects

there are many different possible skills and - as you have noticed - infinite information. If you feel you have some problem-solving skills, then go for it and do your best. Keep applying and interviewing and learning until someone gives you a chance. Then astonish them with your ability to learn and produce.

Steven A. Lowe
"Then astonish them with your ability to learn and produce." -- Yes.
Alex Baranosky
A: 

As many have said, simply getting your hands dirty is the best way to learn how to program in any given language. What employment will do is simply provide you with the necessary objectives needed to develop.

Unlike others here, I almost want to ward you away from simply starting up a project. This may be seen as hypocritical by some as I'm 25, on my last semester in college, and run a development firm. I got to this point out of necessity, not desire. If you do decide to start your own projects for a learning experience, understand that you will pickup bad practices for development and that there is always a better way of doing something. This is where you need to pick up a book and isolate your learning to a specific problem.

If you seek employment, appreciate the wealth of knowledge that veterans in the field have and absorb as much as you can from them. On the other hand, remember that almost any place of business has developed their own bad habits and are filled with people that are stuck in their ways, be it the best way or not. These threats of poor influence can prove to be far more undermining as the agent is someone that believes his way is correct when someone in your position may realize there could be a better way and you simply don't know of it.

Sorry - got off track there a little bit....Basically what I am trying to say is that you should always keep an open-mind in development and try your hardest to refractor your knowledge as much as possible. Be weary of getting stuck in habitual ruts of bad practices.


As others have said, C# is a rapidly evolving language and even if you do manage to read enough books to keep yourself up to date on every aspect of it (its not going to happen) you will not retain it. You are spinning your wheels if you are not applying what you are reading so find a job and continue to read.

You seem to have the passion that the majority of the recent generation of developers lack. Unfortunately, the shiny paycheck associated with being a software developer has leaked into main-stream and many of the newly graduating developers are simply after that.

They fail to realize that our profession is one that demands a constant stream of information. Unfortunately, they aren't the only ones. The employers that the expect it generally fail to comprehend the undertaking it involves. So don't anticipate that once you get a job, your work day consists of a typical 9-5. There will always be a new shiny toy to read up on that may improve your performance just a little bit..

Applying Domain Driven Design Patterns is a book that you should read now, and will likely want to re-read it at least once more later on. It covers a number of critical concepts that you may, or may not apply but should at least have an understanding of.


I apologize about the length of this post - I got off on a few rants. Basically what I am trying to say is that if you understand the logic behind development, go get a job now and don't worry about the details, they will come with time.

Chance
+1  A: 

The first question you really should ask yourself is do you feel comfortable telling somebody that you can deliver on requests made of you as a developer. I always ask myself before I accept a project "Can I figure out a way to make this work?" And sometimes the answer is no. Know what you are applying for, whether it be a ASP.NET developer or a Data Access developer.

You'll never know if you are good enough until you sit down and power through a few interviews. Some of my earliest interviews I learned more about what to prepare myself for and came to discover that the interviews and the job really have little in common. Even now as I interview prospective employees I find that getting the information I need about a person has less to do with their actual abilities and more about their comprehension and logic.

Give yourself a task and see if you can do it. I frequently test my new hires with something like "Here is the employees table. Tell me which employees haven't logged in for more than 7 days." 9 times out of 10 the first project I'll give somebody is a test of their ability to figure out the problem and seeing how they try and deliver on it rather than on the actual deliverables. That's how you learn what a person has in terms of programming ability.

thaBadDawg
+2  A: 

The advice given so far is good; I can only add that you should not fear failure, you will get a job and with your first few tasks, of reasonable size, you will most likely fail*. Failure is a good thing, IT IS OK TO FAIL, you will learn from your mistakes and hopefully never repeat them again. This is especially true if you are working with a mature code-line as it always takes awhile to learn where things live, how they work, and gain the confidence to make changes.

Also if you want to improve your coding I recommend you read 'Code Complete' by Steven McConnell. http://cc2e.com/

Dennis Roche
I have Code Complete right in front of me. :-)
Alex Baranosky
+1  A: 

All good comments. When I got out of school (technical "college" with a 2-year A.A.S. degree) I thought of myself as a Visual Basic programmer (cut me some slack - I've seen the light and am now working in C#).

Over time I came to realize that you're a PROGRAMMER. Developing software is a way of thinking. The language you use is just a tool. Most "modern" languages are p-r-e-t-t-y good at doing everything and eventually you graduate to using different languages for different tasks.

Then, like many others have said, pick projects you'd like to try. Try to develop an address book in C#, maybe a primitive ATM application.

But it really does come down to what others said - if someone will hire you to do programming - you're a professional programmer.

+1  A: 

When you have a working demo of your work/capabilities - either a win forms or asp.net program that does some reasonable things. ie accepts user input, processes some business logic and produces some output. to what extent is up to you.

Be prepared to be able to demo your code and talk about any aspect of the code. More than a transcript of classes/grade - this code IS your resume. Showing more what you can do to a prospective employer than any set of puzzles or interview touch/feel questions will ever do. It trumps most language barriers, interview jitters and other things stumbling blocks attributed to having a bad interview.

In all the years I have been hiring team members (about 15 total) I have yet to regret hiring a candidate that submitted a working demo of their work. I am surprised more candidates don't do this - especially web developers. What better way to get hired than to demonstrate off the top what you can do for the prospective employer.

MikeJ
+1  A: 

Go get a job already! You'll learn a lot more about programming professionally by ... programming professionally than doing anything else.

There's plenty to learn outside of work, from personal projects, books, online communities, and getting out to a bar once in a while, but right now real experience is your highest priority.

If you're worried about what it means if you fail the first time, remember that you don't have a permanent record that follows you around from job to job. If you fail at one place, they will (hopefully) tell you why, and fire you. Learn from your mistakes, then go get another job.

If you're worried about interviewing, your best bet is to get a lot of practice (specifically practice at getting rejected, so you can get used to it & not be afraid.)

Jay Bazuzi
Thanks for the post Jay. I am in fact not worried about failing or about interviewing. I already had one interview and think I did great. My next interview I will do twice as well. I feel ready. I am even finishing a little utility program I am writing for myself that I can demo.
Alex Baranosky
+2  A: 

I can do FizzBuzz easily. So, I am feeling very confident about my abilities. =D

Alex Baranosky
way to go +1 :-)
JohnIdol
A: 

The only judge on if you are qualified for a job is the employer.

When I am looking for a job, I look at the job description the company and if they are interesting I will send in my resume. If I get a call then I must have some knowledge/skill/experience they are looking for. It is up to them to judge if I can do the job they are asking.

The key with programming is that years at times doesn't really matter to experience. A coder that punches a clock works 8 to 5 and goes home and doesn't think about code isn't as valuable as a programmer who works 8 to 5 then from 6 to 10 is working on something else because it interests them.

The 8 - 5 coder may have more years under there belt, but the one that does more stuff on the side has the more experience.

Let the market place tell you what you can do. Send your resume to places you find interesting. You might be shocked on the job you get.

Most good employers are looking for smart people who can get things done. If you lack some knowledge and they think you are bright they will hire you and pay to get you up to speed because they know you are an asset to them.

David Basarab
A: 

tl;dr: You won't know until you have had the job for three years. Seriously.

What is enough to know to get a job and be able to do it (hopefully well)?

First step, get the job. Try changing your focus and interview for the job, not for a technical skill set. Imagine the people who will be a part of your interview process and how you can market yourself to them:

  1. Faceless HR drone who'll ask you "what is your greatest fault?" Hint, the correct answer is not "I work too hard."
  2. Line manager who really doesn't care about your technical skills (other people will evaluate that) so much as "is this someone that we can stand to have in the office?"
  3. Technical manager that doesn't code full time but is very much in tune with the technical side (i.e., don't confuse "line" with "technical" or you might come off a little soft).
  4. Technical engineer who feels threatened because you're a new hire (i.e., how are you going to convince them that you're Mr. Team Player?)
  5. Software engineer who works in your specific area with the same technology. This is the one guy who might ask you detailed questions. I would advise avoiding BS at this level (if you don't know the answer to a specific technical question, say so).

Those are some of the type of people that stand between you and a new position. You can expect to see some or none of them multiple times before you actually land a job. Note that C# / .NET technical expert is only one of the choices on that list....

Also, how can I measure myself?

You will know that you are qualified to get and execute a C# / .NET job when you are in that position, writing code full time, for three years. That's enough time for you to be able to show that

  1. You know enough stuff to be able to do work at all.
  2. You can learn. Three years is a very long time in our field. Expect C# and .NET to have made extensive changes after that time.
  3. You are motivated to keep coding rather than exploring other options: team leader, manager, tester, documenter, etc.
Bob Cross