Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I am a software engineer that's had positions programming in VBA (though I dare not consider that 'real' experience, as it was trial and error!), Perl w/ CGI, C#, and ASP.NET. The latter two are post-undergraduate, with my entrance into the 'real world'. I'm 2 years out of college, and have had 5 years of experience (total) across the languages I've mentioned. However, when it comes to my resume, I can only put 2 years down for C#, and less than a year down for ASP.NET.

I feel like I know C#, but I still have to spend time going 'What does this method do?', whereas some of the more senior level engineers can immediately say, "Oh, Method X does this, without ever having looked at that method before." So I know empirically that there's a gulf there, but I'm not exactly sure how to bridge it. I've started programming in Project Euler, and I picked up a book on design patterns, but I still feel like I spend each day treading water, instead of moving forward.

That isn't to say that I don't feel like I've made progress, it just means that as far as I come each day, I still see the mountain top way off in the distance.

My question is this: How did you overcome this plateau? How long did it take you? What methods can you suggest to assist me in this?

I've read through Code Complete, The Mythical Man Month, and CLR via C#, 2nd edition -- my question is: What do I do now?


Edit: I just found this question on projects for an intermediate level programmer. I think it adds to the discussion (though it does not supplant my question). As such, I'm adding it to the question as a "For More Information".

share|improve this question
1  
I've been playing with Project Euler recently, and it only covers quite a limited range of techniques. It's all very well optimising a function by memoisation or dynamic programming, but it won't help you write GUI or webapps. The hard problems are designed to be hard math, not hard coding. –  Steve Jessop Dec 5 '08 at 3:31
    
Good fun, for all that: I've nothing against it, it just isn't designed to help you learn a language beyond the basic data types, structures, and maybe a few optimisation techniques if like me you prefer to get your solutions under 0.1s where possible. –  Steve Jessop Dec 5 '08 at 3:32
    
Wow, voted down after all this time. Someone doesn't like me. –  George Stocker Jan 13 '09 at 21:18
3  
Downvoted. Just my two cents... –  Seventh Element Jan 28 '09 at 19:13
1  
I have been programming since I was 2 years of age. I have failed at becoming the world's top programmer, and now I hate my life. I wish my goal was to be the world's top porn star instead. –  Hamish Grubijan Aug 11 '10 at 13:57
show 10 more comments

migrated from stackoverflow.com Jan 30 '11 at 20:17

This question came from our site for professional and enthusiast programmers.

11 Answers

Congratulations!

From your description, you are an intermediate developer.

This phase will last about 3-8 years, depending on your willingness to learn above and beyond the problem of the moment

To speed the process, read, surf, blog, go to user group meetings, find a mentor, do independent research, code side-projects, and bury yourself in new technologies. This may shave a year or two off the time.

Or you could have a life outside of programming ;-)

Seriously, stay current and introspect, but turn the #%$@ thing off every now and then

Addendum: when you go outside, remember to wear pants.

share|improve this answer
16  
and beware of quoting Tolkien, that's a hard hobbit to break –  Steven A. Lowe Dec 5 '08 at 2:43
1  
Well played Mr. Lowe, well played. –  Kevin Dec 5 '08 at 2:52
1  
Seriously, have a life outside of programming. One: there is more to life than code. Two: much can be learned from other disciplines. –  Kevin Dec 5 '08 at 2:53
1  
+1 - Nicely done. Nothing replaces practice (or a good sense of humor). –  Mark Brittingham Jan 22 '09 at 2:58
add comment

One of the best ways up the mountain is to write something for yourself because you want to. The best programmers have wonderful answers to the question 'what's the most interesting program you've written in your spare time.' If you're not writing any code in your spare time, you don't love your craft enough to get better at it.

share|improve this answer
5  
I dislike this theory, People have full time jobs and then other responsibilities. It's not responsible to presume those who do not have side-projects don't like programming enough or are bad programmers. As the accepted answer states, Have a life outside programming. –  Damien Apr 1 '09 at 8:55
8  
I disagree---the best programmers are like the best writers: they literally cannot stop themselves from doing what they do best. –  Norman Ramsey Apr 2 '09 at 3:02
    
They may not be able to stop themselves, but life can, and for some will. –  Shannon Severance Aug 15 '11 at 17:59
add comment

You must go through larval stage.

Though I now program in VB.NET on Windows, I went through larval stage on Linux x86 with assembly as my primary language.

For a time, you must devote yourself to the craft until you master it. What are called instincts of a master programmer are really learned behaviors. It is a shared culture. Programmers must think like one another, and like the machine.

Sheep become like shepards and shepards like sheep, but neither are very long in the world. With [trees and] Ents it's quicker and closer, and they walk down the ages together. -- Tolkien

Know and understand. The greatest skills are not those bound to a specific language, but can be applied to almost any language. Know the concepts, look for them in both problems and languages, be ready to invent new things when necessary.

This is the path to greatness.

share|improve this answer
2  
+1 for "larval stage" - now that's funny! –  Steven A. Lowe Dec 5 '08 at 2:57
2  
Does it somehow involve cheetos? The picture in my head involves cheetos. –  Andrew Rollings Dec 8 '08 at 21:39
2  
lol "It ain't easy bein' cheesy!" –  gnovice Jan 22 '09 at 1:02
add comment

I've been programming since I was 8... I'll be 33 on Christmas Eve. I still see the mountain off in the distance. No matter how far you come, there's always more to learn.

Get the paradigms under your belt and figure out how the language you're currently coding in implements those paradigms. Programming is a lifetime experience that always has more to learn. That's the joy of it, no matter how proficient you are, there's always more.

One way I find to learn new things I wouldn't normally learn is spend time on here and other programming forums like Bytes and Experts Exchange where people ask questions. If you can answer the question, go right ahead, if you can't, then try and figure out how to complete the task yourself, not only will the OP appreciate your effort and assistance, but you'll learn something new too.

I find that I learn more by helping other people find answers to things I don't know yet than I ever would by just programming my every day stuff which I do day in and day out.

share|improve this answer
add comment

Intermediate programming status implies that you're moving out of the code monkey "type faster" mentality and into the realm of wanting to build real systems as a career. This is a major professional change and, frankly, it's not really about technical skills. Working at the intermediate (aka "developer") level requires a significantly advanced set of people skills.

Here are some symptoms you could think about:

  1. Do you get into edit wars online? If so, you might be showing that you like to argue about details inside your comfort zone more than you like to try to understand the other person's point of view.
  2. Do you think of languages as truly different things? C# and Java both bring their own platforms and resources to the table but both are effective models of computability. Can you learn a new language and platform fast enough to get paid to do work?
  3. Do you still think of software tasks as typing? If you're given a task at work, why? What is this code going to be used for? What system will it be a part of? That information can dramatically change your proposed solution.
  4. Have you left the know-it-all phase of your life behind? Are you listening to the rest of the team or are you just trying to think of the next thing to say?
  5. Have you realized that "pulling an all-nighter" to produce a buggy last-minute solution isn't impressive anymore? After the first eight hours, you can easily imagine that the rest of the time was just used in typing bugs.

The best summary that I can come up with is that the intermediate programmer (or "developer") has learned to be more productive in eight working hours so they can go the hell home and have a life outside of work.

Bonus points awarded if you manage to find a spouse and reproduce....

share|improve this answer
add comment

What you're doing now is great, but if you want to incredibly speed up your progress you can do two additional things:

1) "Teach" - A simple way to do this is to start a blog, and attempt to contribute something useful on a regular (weekly perhaps) basis. Aim to about things you have recently learned, or that you do not know yet. That means you'll force yourself to research, understand and re-expain.

BTW, You can very easily sign up for a SingingEels account to which you get a free blog on an existing development community.

2) Write lots of mini-programs - By this, I mean about 1 per week. You can use this in junction with the above... or just for fun. What I did as a young developer was just randomly pick (i'm not kidding) a namespace in the .NET framework. In that, pick a class that you've never seen/used before, and make a small program that uses it.

share|improve this answer
add comment

Try to

Read MORE books Pick up those big titles from Amazon and read them. For example, author of Code Complete had wrote a great book on software enginieering - Rapid Software Development, buy one and read it.

Learn a different programming language A scripting language like python/ruby is worth to study. Or maybe a functional programming language:) This may change your mind of programming. You may know that some of the GOF patterns are not necessary for those kind of languages.

Join a community People can exchange their thought by listening from others and giving presentations.

share|improve this answer
add comment

Read "The Pragmatic Programmer: From Journeyman to Master" and follow its instructions...

share|improve this answer
add comment

Find smart programmers and learn from them. Imitate them. Notice things they do differently than you do.

Does your company do code reviews? That's one of the best ways to learn. You might be amazed at the suggestions more advanced programmers make and the things they thing about while coding.

share|improve this answer
add comment

how about getting involved in other ongoing open source project, so that at least your work will be worth while to someone and you can learn and interact with other more advanced developers doing real world work.

so that at least you're not limited in what you want to learn or what type of project that you want to do. and it's already a free tool that you're using, you can be proud that you actually help to make it better.

and it's shows up well with your resume too. :)

so if that still leave you with some free time, why not keep a blog documenting down your learning, experiences and what not. who knows, you could be the next joel on software or coding horror :p

share|improve this answer
add comment

To excel as a C# developer read the following two. Note that the focus of these books is more on the language (C#) not the framework (.NET)..

  1. Essential C#: link is for the latest edition. I actually read the previous one (C# 4.0) but i am assuming the newer the better. This book has some basic things as well but be patient read that book cover to cover.
  2. C# in Depth: link is again for the latest edition which will be released in 10-15 days. I have only skimmed though the book but my colleagues who have read it have high regard for this.

You have already read CLR via C#, otherwise that is probably third suggestion by anyone for C# developers.

These should also make you a better developer: Framework Design Guidelines and Working Effectively with Legacy Code.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.