views:

740

answers:

18

Although I have around 4 years experience working in IT, I really have one year of experience 4 times; I'm trying to change this and find a nice junior developer job in a company that values it's appdev department.

I know .NET but my skills are self-taught (I picked up a few books on VB.NET at first and then slowly started to learn C#, which is now my preferred language); in addition I haven't used them for nearly two years (my current job is just maintenance of a Classic ASP site, as you recall, and a lot of SQL querying/data manipulation).

Because of this I'm trying to brush up on my .NET skills so I am qualified for the junior level jobs I hope to be looking at -- the problem is I'm trying to do too much and besides relearn C#, I'm trying to keep up on the new things as well as what a lot of the community is using. To this end I read a lot of blogs and watch a lot of videos, but I feel like it's not getting through to me because there's just so many things. Also, unlike most of you I don't have a bachelor's degree in CS; I have only an Associate's degree. Getting a bachelor's is on my plate (maybe not in CS though, but something like MIS) but I've put it off until I find a stable job situation.

For example in the past two days I've looked at blogs/tutorials/webcasts related to:

  • LINQ
  • Entity Framework
  • Silverlight
  • WCF
  • ASP.NET MVC
  • NHibernate
  • jQuery

And this approach isn't working out for me because I'm all over the place and trying to learn like 5 different things at one time. I'm biting off more than I can chew, and I'm looking to condense this list of technologies to a solid "core" that I should focus on learning and learning well.

Given that I will be looking for what amounts to a junior-level position, what aspects of .NET should I be concentrating on? I'm so used to being the only guy in IT that I'm trying to get back into the mindset that I (I'm hoping that I can find a job like this; I dread going to my current job every day) will not be expected to know everything about everything but can stay focused, listen and come away with some good solid experience under my belt instead of the "one man show" experiences I've had so far.

What would you suggest I make my priorities, given that I know the basics of .NET but haven't used it in a fair while?

EDIT: Most of the jobs I see are web-based so that's what I plan to focus on. I already know:

  • HTML (intermediate)
  • CSS (intermediate)
  • VB.NET (beginner)
  • C# (beginner to intermediate)
  • ASP.NET 1.1/2.0 (beginner)
  • SQL (intermediate)
  • SQL Server (intermediate)

I'm just not sure what I should concentrate on to broaden my prospects for getting a junior level developer job (although sadly I don't see very many postings wanting that, and I don't really have the experience for a midrange .NET developer); my current approach (see big list above) is doing nothing but confusing me because I'm trying to master a bunch of different technologies simultaneously.

I also have bought the book Essential C# 3.0 to brush up on the language (I see a fair bit of jobs that use VB.NET instead of C#, but I figure if I know C# then it's trivially easy to reacquire the VB.NET skills)

+1  A: 

I'd recommend taking a good look at both WPF and LINQ. Start with just those for now. Build a small WPF app that uses LINQ. That covers a lot of areas.

unforgiven3
That list isn't what I want to learn, it's what I *have* been trying to learn, and it's not working out for me. I'm trying to ask what I *should* be focusing on instead of that list.
Wayne M
Ah, okay, I see - I'll rephrase my answer.
unforgiven3
But jQuery is used in by many in asp.net app development and is goign to be part of the next VS.
schooner
A: 

Even though JQuery isn't .NET, intellisense for JQuery is coming soon.

Do you wish to focus on desktop apps or apps served up through the browser? One of those two decisions will probably garner you different options.

As for asp.net, I'd suggest either Entity Framework or NHibernate and JQuery. You didn't mention any other web technologies, but I would also recommend being proficient in CSS and HTML as well as knowing your way around IIS and at least SQL server.

Being proficient in data access is a must with either desktop apps or asp.net.

GregD
A: 

Edited for web-dev

For web-development you want to learn

  • ASP.NET/WebForms
  • Entity Framework or NHibernate - personally for web I would pick Entity Framework
  • jQuery

Since you already have decent SQL, HTML, CSS skills the three above will complement you nicely. I'd personally start out with ASP.NET/WebForms while still keeping an eye on ASP.NET/MVC (not that it's just much today, all real jobs are still 99.9% WebForms, but it will be sometime)

jQuery not because it's the best but because it's what everyone (including microsoft) is using these days.

Entity Framework vs. NHibernate, I'd imagine (and this is just a qualified guess) that the Entity Framework is used more in web development then NHibernate (again, just a... hunch)

Start of with ASP.NET/WebForms, just grab the latest O'Reilly book on the subject and start hacking away.

You'd also want to hone your C# skills and touch up on subjects like lambdas, delegates, closures, generics, anonymous types & delegates, out/ref, etc (this can easily be done while hacking WebForms, most of these subjects can be groked in an evening or two, some of them even faster)

When you've come a bit into WebForms pick up on database/data access and pick one of EF or NHibernate, also try to look at LINQ, you dont need to get it, but at least know what it does in general terms.

Then start adding flashy jQuery stuff, teach yourself some proper javascript, JSON, how XMLHttpRequest works and start adding AJAX on top of things.

thr
You gave some really good advice.. not sure why someone voted you down (probably because they dislike Entity Framework).
Wayne M
+1  A: 

I would focus on LINQ and lambdas. This area will simultaneously make you more efficient and reduce your bug count. These are two things employers really like. WPF, WCF, and the rest are just API's. LINQ is a full blown addition to C#. You need to separate out what is C# and what are .NET API's. I would concentrate on the language proper and then pick up skills as you need them. Learn LINQ because it is a first class language addition.

Then, pick and choose what to learn based on need. If your next project is on DBs, choose to learn the entity framework. If its a front end, learn WPF, etc. Since your skills are limited, pick the one that will make you look the best to your boss. However, understanding the full power of the language (lambdas, delegates, closures, anonymous types, anonymous delgates, etc.) will be necessary before you understand everything else.

Also, reading won't help that much. Try getting your hands dirty with an interesting project.

Steve
+9  A: 

I recommend you, for the short-term, emphasize on your strengths.

Pick a language and know it well, and as you said C# is now your preferred language, go in depth.

Depending on what you already know, you might want to focus on the C#3.0 features, this will cover Lambda Expressions, Expression Trees, Extension Methods , LINQ and more...

I also highly recommend you to learn Design Patterns, and work with Source Control.

CMS
+6  A: 

As junior .NET web programmer who uses C# as a server side technology, knowing the fundamentals of good object-oriented programming would be your priority.

Knowing what lambdas, delegates, generics and anonymous typs are all good BUT without a sound understanding of Object-oriented programming, you would not get anywhere nevermind knowning when to make use of these language features.

So, to get started,

  1. Knowing the "C# coding standards" (you can google for one) would be essential.
  2. A book like Head First Design Pattern would give you a good understanding of OO design. It would also be good to study some C# specific language features during this process.
  3. Know MVP (for webforms) and MVC (avaiable in the new .NET) in the context of C# .NET for best practices in web programming.
  4. If you're using webforms, learn the popular controls and validations.
  5. Learn javascript (important!) then the jQuery library (it'll save you time).
  6. Ajax (though related to the previous item) techniques as this is essential.

One of the things that is missing is the interaction with the database, and this would really depend on your project and in that case, learning something relevant such as NHibernate would be very important.

mike in africa
+1  A: 

C# First and then everything will become easy LINQ is a part of the language , MVC is great but still in beta , jQuery isn't that hard just simple javascript library (but do great stuff), and most of the jobs around requires ASP.NET(webforms)

Yassir
A: 

If you want to get a job, then having some bullet points will help - the aforementioned JQuery, NHibernate and so forth.

If you want to be a better programmer, I think the other answers (mike in africa and others) are on the mark that you should look at design patterns and learn/improve core skills (I would personally recommend improving your SQL and javascript skills, before looking at things like JQueryand NHibernate). Maybe read Martin Fowler's books on Refactoring and Enterprise Patterns and other books on architecture and design, test driven development and so on, particularly those with C# examples.

MikeW
A: 

While reading your question I felt like I was looking in a mirror. I seen myself 5 months ago, before I read the book that made me a programmer. The book you ask? Code Complete 2nd Edition. I seen this book on Jeff Atwood's Blog (He is one of the guys that made this site). I read it and instantly started thinking differently. Before I read it I felt like a beginner, now I feel high intermediate (I also started learning more about C# 3.0). If have the time then you need to read this book. It will make a profound difference in your life. This book goes into detail about why we (as programmers) do what we do.

Lucas McCoy
A: 

IMHO, there is a huge difference between learning about something and actually practicing it. Until you solve real problems with these tools, your knowledge will be conversation-level at best. If I were you, I would try to join an active open source project that uses some of the technologies you're looking to learn and has a reputation for creating quality code. Download the source, understand it, pick a ticket and try to fix it. They probably won't let you commit it at first, but if you're good and persistent your odds will improve and so will your knowledge.

Good luck!

Gil
A: 

Things that create value for you and your career. Sorry to be vague, but it's critical to assess all skills and tools by this.

Jas Panesar
A: 

Getting a job as a junior developer has less to do with your actual development skills, and more about how you are positioning yourself. It sounds like you're off to a good start at becoming a better programmer because of the interest you're showing in the topic. But I suspect your ability position yourself as a programmer is the big issue because a) you lack a BS in computer science, and b) your work history is only Web technologies.

Unfairly or not, employers will make fast snap judgments about their candidates, so you are going to want to emphasize the programming aspects of your job history as well as your programming extracurricular activities so that you are not unfairly lumped into the "just an HTML guy" bucket.

Scott Weinstein
+2  A: 

For example in the past two days I've looked at blogs/tutorials/webcasts related to...

You can read all the books and blogs in the world, and it won't help you as much as coding for 2 hours. Reading is great, but you need to be writing some code to get any kind of understanding beyond a superficial one.

To that end, come up with some kind of project you're interested in - maybe a website or game or utility to help you find duplicate files - it doesn't matter - and build it.

You can put your books to use along the way

Orion Edwards
+1  A: 

Pick up a book called Visual C#: 2005 (or 2008 if they have released it) , The Base class Library.

This book by FAR teaches you the critical parts of using .net framework.

It doesn't teach you gui, or HOW to construct classes, but this is your toolset.

  • File Access
  • Networks Threading
  • Garbage Collection
  • Strings
  • Strings
  • Strings (Hint these are REALLY important)

If you consume that book for all of its goodness, you have an understanding of how to design a class structure, then your programming skill will come via learning and practice. If you design horrible structures, but you understand how to make your classes perform their actions then you will at least be productive.

Self criticality will then allow you to improve your skills. The fact that you're seeking out peers and experts in the field bodes very well. I suggest you go have a read of Coding Horror to continue improving your knowledge :)

Spence
A: 

Whatever you learn, keep practicing them. Opportunities to use these technologies make a huge difference, so if you to not see opportunities coming your way, then keep some personal projects in your kitty and try to work on those projects with the technologies you are interested in.

pradeeptp
A: 

You have the right skillset, just focus on making them at advanced level (I'm not one to talk though!).

Also, a web developer would be doing the coding for a web app and not the design (at least in my job, anyway) so focus on the coding/DB skills first.

dotnetdev
A: 

My suggestion is to try to determine where in the world of .Net development do you want to eventually join:

1) Basic front-end. Here things like jQuery, AJAX, other javascript and DHTML/XHTML could be important and some people like to work with eye candy parts of software.

2) Graphical front-end. XAML, XNA and WPF are elements here that may be beneficial in the long run.

3) Middleware. Here things like Web Services, ASP.Net, and WCF are more likely and the UI isn't as important in this part of things. This is sometimes called "plumbing" since it usually isn't pretty but is necessary code.

4) Back-end. Now we are more in DB territory so nHibernate, SQL, LINQ and PLINQ are useful things to learn.

There are other things like cloud computing that may be useful though I'm not sure how many places are looking for that kind of expertise.

JB King
+3  A: 

I'll go against the grain here: put down all the books and just create a simple product from scratch.

Start with something really simple and somewhat useful. For example a console app that let's you input the amount you spent on gas for the day. Have an option that allows you to export a csv file and then graph the daily costs in a spreadsheet.

When you're done with that make something slightly more complex. Perhaps integrate a website and a database.

The point is: In my experience the most important "skill" to have is just knowing how to create a finished, useful product, however simple, from scratch. (And along the way you can look-up and learn all sorts of C# skills.)

MrDatabase