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.

This question already has an answer here:

(Let me start off by asking - please be gentle, I know this is subjective, but it's meant to incite discussion and provide information for others. If needed it can be converted to community wiki.)

I recently was hired as a junior developer at a company I really like. I started out in the field doing QA and transitioned into more and more development work, which is what I really want to end up doing. I enjoy it, but more and more I am questioning whether I am really any good at it or not. Part of this is still growing into the junior developer role, I know, but how much? What are junior developers to expect, what should they be doing and not doing? What can I do to improve and show my company I am serious about this opportunity? I hate that I am costing them time by getting up to speed. I've been told by others that companies make investments in Junior devs and don't expect them to pay off for a while, but how much of this is true? There's got to be a point when it's apparent whether the investment will pay off or not.

So far I've been trying to ask as many questions I can, but I've you've been obsessing over a simple problem for some time and the others know that, there comes a time when it's pretty embarrassing to have to get help after struggling so long. I've also tried to be as open to suggestion as possible and work with others to try to refactor my code, but sometimes this can be hard clashing with various team members' personal opinions (being told by someone to write it one way, and then having someone else make you rewrite it).

I often get over-stressed and judge myself too harshly, but I just don't want to have to struggle the rest of my life trying to get things work if I just don't have the talent. In your experience, is programming something that almost everyone can learn, or something that some people just don't get? Do others feel this way, or did you feel that way when starting out? It scares me that I have no other job skills should I be unsuited for having the skills necessary to code well.

share|improve this question

migrated from stackoverflow.com Jan 14 '11 at 3:11

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

marked as duplicate by gnat, GlenH7, Michael Kohne, Kilian Foth, Yusubov Sep 3 '13 at 12:28

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

17  
Hang in there, JD. –  Job Jan 14 '11 at 3:55
18  
It's obvious that it took great humility to ask this question. I applaud you. –  dan_waterworth Jan 14 '11 at 7:59
5  
If there's one near you, I would suggest you attend a local user group. You should find developers there that will be more willing to help you out. It always helps to have ecouraging devs that you can talk to and hang out with. –  Ryan Hayes Jan 14 '11 at 16:37
1  
This entire post, minus the QA part, could have been written by me a few months ago. Then my manager told he was impressed with my progress so far and ranked me above average in the year-end performance review. Moral: Don't be too hard on yourself, everyone understands that you're new. –  Travis Christian Jan 24 '11 at 22:35
    

11 Answers 11

Do some people have a knack for programming? Absolutely.

If you don't have a knack for it, can you still be a great programmer? Yes, but it'll take more practice.

Either way, being really good at programming takes time. It's sort of like playing an instrument. Are some people naturally gifted? Yep. But many of the greats just practiced longer, and harder. Programming is the same way - it takes practice.

For the rest of your programming career, the field will change. You will at many points in your life be the new guy, no matter if you were once the expert. Many "junior" programmers in C# today were once experts in Foxpro or other languages. The C# experts of today will one day be junior programmers in another language. We all make mistakes and do stupid things that others will point out. Over time you will come to understand good code and bad. You'll be able to have fun arguments with the people in the code review and back up why your code is better than their suggestion and every other, but it takes time, determination and persistence. Talent helps, but sometimes talent is disguised as hard work over time.

Don't be discouraged as a junior programmer. Make those mistakes. Learn from them. Get dirty. Have fun. We've all been there and we all still come to points in our code where we have to ask for help. That's why StackOverflow and other sites online are so popular. Many times we programmers have big egos. We'd rather ask online where nobody can laugh at us (and know who we are) than ask our co-worker, so don't feel bad for not knowing something. After all, programmers are problem solvers, not know-it-alls, that's why we have Google skills!

alt text

If you didn't click the only link in my answer, I highly suggest you read Peter Norvig's Teach Yourself to Program in Ten Years.

share|improve this answer

Short answer: Yes, it is possible for someone to just not get software.

However, it would be presumptuous of me to say that you are in that scenario. It sounds to me like you are not in a very nurturing environment. Ideally, the more senior developers should take you under their wing and show you the ropes. It sounds like you are just being thrown in the deep end with no life support. There is often a large learning curve going from college to industry or tester to developer and it can be intimidating mostly because you realize how little your really know...at least that was my experience.

Asking questions is the best to show that you are serious. I realize that sometimes you may feel like the question is silly or trivial, but we have all been there. Also, communicate with your boss! Express that you want to know how to get better and setup a plan. Any good boss will be willing to help you set concrete goals with respect to career development.

Also, when co-workers help you re-factor code or solve a problem make sure you understand why they are telling you certain things. Don't just code it one way because they said so. If two co-workers have different opinions then ask them to tell you why they think differently.

I firmly believe a clear set of goals and some direction will do wonders for your current situation.

share|improve this answer
2  
+1 I think you're definitely right that the environment here would be hard on most people (definitely the write it one way and rewrite it is a red flag), and fixing it would go a long way to putting them on the right track. –  Ryan Hayes Jan 14 '11 at 3:46
    
The learning curve is steep enough that I'm pretty sure it goes inverted at some point. –  CurtisHx Jun 18 '13 at 20:22

You know that saying, "whoever discovered water, it sure wasn't a fish" ? It's pretty much impossible for you to tell the difference between these three scenarios:

  • right on track, asking questions, getting better, it's all going to be great
  • work with jerks, have the talent to grow in a better environment, doomed here
  • just not a programmer and not going to get it

I've employed someone in that latter category. We spent six months coming to the conclusion that even though he was nice, we liked him, he was smart, and he was trying like hell, it just wasn't going to happen.

If there is someone you can trust with this conversation, ask them this one question: "I know I make mistakes and there are things I don't know, but am I making the same mistakes? Is there something I consistently don't know?". An honest answer to that will tell you what you need to know. I've had juniors who never make the same mistake twice. They do well. And the nice guy who I eventually fired? He had a collection of 3 or 4 mistakes that recurred and recurred and recurred. He didn't see the pattern no matter how many times he was told and how many post-mortems we had.

Wanting to do well is a good sign. For the moment, do your best, learn where you can, and trust those around you to evaluate you. Just keep in mind that if they decide you're not cut out for this, they might be wrong. You could thrive in a different environment. (The guy I fired is in sales and support now and a bit of a superstar from what I hear.) Heck, you might start thriving in this one tomorrow. When it clicks, you'll be much happier.

share|improve this answer

How large and intricate is the codebase you were just introduced to? That can play a big factor (especially if there's a lack of documentation)

I often feel there's a silent war going on between the juniors and seniors. It comes down to petty stuff like people trying to put themselves on a pedestal and put you down in an attempt to show their own value.

Think of any lack of documentation as a practical joke they played on you before you even became a junior developer.

These people aren't teachers; they're as territorial as any of the other suits and don't question it for a second. Clearly no one has taken you under their wing and you still have a job to do. You may want to go to the boss of the seniors and express some of your general concerns. If you do that and then get fired months down the road, there will be many questions. If you stay quiet it might seem like you just don't care (which you clearly do)

Your best bet is to kill them with kindness and make source code contributions are as clean as they can possibly be so no one has anything to say. The less criticism you hear, the closer you get to being a senior developer yourself.

share|improve this answer

Hang in there! The fact that you are questioning yourself, is to me, a really good sign. I am a senior manager now and the best signs from junior are that they are accepting that they need to keep themselves open and knowing that they need to learn more.

I remember when I started out life as a junior programmer, and it all seems so big and huge and others in the team seem to know so much and it comes naturally to them. That perception of knowledge is just experience. Time and and open mind will give YOU that.

I often give this analogy to help juniors, it often feels like you are about to go up a large mountain. You see the height with snowy peaks and no visible path to the top. Most people think, right I need to equip myself with all the climbing equipment that I need so start to stress about that equipment before they set off. I tell them just to look at the first 100 meters they can see and tell me what they would need and walk. You will then notice that part has a path that is well trodden and has loads of maps available.

Lose all the need for equipping yourselve as a "professional" and jus start walking.

share|improve this answer

In your experience, is programming something that almost everyone can learn, or something that some people just don't get?

In my opinion not everyone can become a programmer. But one thing for sure is that programming is a field that requires lots of patience and focus and if you have that then you going to be in it for sure.

When i start my career couple of years back i also got to situations where i think can i survive in this field but as time progress and i try hard to learn i become an essential part of my team, So just learn and concentrate hard to improve your skills by reading books, study blog posts, follow the gurus of your technology on twitter

share|improve this answer

"If you focus on the things you're doing wrong, you'll never get anywhere."

Be weary of this advice. In my experience I have found the exact opposite. Bad code and bad design can often be attributed to a programmer simply avoiding an approach they are uncomfortable with.

Rather than spending time improving their skills across the board, creating a collection of tools, they have their one hammer and try to turn everything into a nail. Don't fall into this trap.

Find the things you are bad at and practice precisely those things.

share|improve this answer

Well if you are just new with some months of development experience not much is expected of them(really , seriously,they see some talent in you that's why you are there , not your fault, so stop worrying).

What you should realize that the task which is given to you is the thing which will move you forward. they expect you to learn from it. Before any task make it a point to research it for some time and then go to the senior for some sort of direction. See to it that you are moving in the right direction, you are using the right approach . Maybe some has shout about the right approach and you start worrying?. it happens to all of us , it all part of the learning curve.

So just relax and chill and try to enjoy no responsibility days but work hard

share|improve this answer

The first question you should be asking yourself isn't "Am I good enough to be a programmer?", it's "Do I really want to be a programmer?". If you don't want to be a programmer (as in, your parents wanted you to do it because of the prestige or you thought you'd make a lot of money), then you have your answer. If you do want to be a programmer, then keep reading because I'll show you what's left to do.

I've been reading Daniel Pink's The Adventures of Johnny Bunko (it's a career book since you probably can't tell by the title). In it, there are 6 lessons. Three of them seem particularly relevant:

  1. Think strengths, not weaknesses.
  2. Persistence trumps talent.
  3. Make excellent mistakes.

The first lesson is the place to start. If you focus on the things you're doing wrong, you'll never get anywhere. No matter what you do, you'll always have the same strengths and weaknesses. There isn't any point to beating yourself up over your weaknesses. Thus, rather than smoothing out your weaknesses, your primary focus needs to be building upon your strengths. Sit down and figure out what they are. I don't mean in terms of field ("programmer" or "accountant"). Go deeper than that. Are you good at defining logical processes? Coming up with new ideas? Executing others' ideas? When you know what your strengths are, figure out how you can apply them to programming (again, assuming that's what you want to do).

The next one is that persistence trumps talent. Anybody that's passionate about what they do will come to the point you're at now. There is always going to be someone who is going to be a naysayer for one reason or another, be it that they are threatened by you or they feel you aren't talented enough. Plus challenges always come up no matter how talented you are. If you're persistent, you'll likely have a leg up on people who aren't persistent but have talent.

Lastly (and I think this is the one that seniors will forget), make excellent mistakes. Trying out something new that doesn't work is an excellent mistake because you can learn from it. Going to jail for hacking into an employer's server and making yourself unemployable isn't. Seniors will oftentimes try to keep you from making mistakes. While well intentioned, they can be like overprotective parents who never let their kids go outside. To really learn things, you need to make the dumb mistakes yourself. You'll likely find that many times the seniors' advice just doesn't apply, not because it's bad advice, but more because it is advice that is tailored to them and not you.

share|improve this answer

I've felt that way many times and probably will feel like that many more times in the future. Granted that I have anxiety and depression that can make this a bit harder, but with some perseverance, intelligence and curiosity it can be interesting to see where you'll finish in the end. The Guerrilla Guide to Interviewing wouldn't be a bad idea of something to consider.

Another question is how much do you enjoy of the struggle and solutions you find? If you don't enjoy solving problems then I'd likely suggest getting out of programming. At the same time, I know my first few months on the job there were many times where I felt like an idiot and having a "baptism by fire" situation but I think that is normal. I survived the struggles and had my moments of feeling like I was on top of the world, which is an awesome feeling I often try to recapture with moderate success.

share|improve this answer

This is an old thread, but I wanted to add my 2 cents in case someone stumbles upon this in a Google search.

The developers I work with are pretty helpful and are open to lending a hand. We all have strengths in difference places, so we're all pretty much open to helping each other. If you can learn something that the other people on your team don't know but could be of use to them, it might loosen them up and make them more willing to give and take. If you're in an entry-level position, I would suck it up and not let it phase you. When you leave this position, the next one will be with a clean slate. So, I would hang around and learn as much as you can and get as much experience under your belt as possible so that in your next gig, you'll be more experienced and have better footing.

I don't really believe in filing complaints with management over your repertoire with coworkers. Management is going to look at you like a tattle-tale who can't get along with the others. Your supervisors aren't baby-sitters, so if there's that big of a cultural problem with your environment, you don't want to be a part of it. You can't expect management to come in with a magic bullet answer to force your coworkers to respect you. I've been in a few positions where I didn't really feel I felt in with the team. I just pack up and move on. Whatever their cultural limitations are that won't allow me to be treated like I'm equal... that's their problem. Who am I to come in and try to change them to fit me? Your situation sounds like an exception to the norm, so I wouldn't assume that it'll be like that everywhere.

My experience is that most programmers are EXTREMELY pretentious. Even if you absolutely know what you're doing, if you don't do it their way they'll get all in your face and act like you're a stupid idiot who doesn't know what you're doing. Most of the answers you see on message boards are indicative of that. For every helpful answer you see to a development problem on a message board, you'll see 10 pretentious answers by snotty individuals who want to poke fun and say whatever they can to boost their own floundering ego. In fact, I'm convinced that 3/4 of every reply to a question on a message board either criticizes the formation of the question, whines that the question isn't posted in the right place, complains that the question was already asked a long time ago and therefore should never be asked again, or it's a link to another message board where the question is answered with some kind of comment like "Learn how to use Google, STUPID!!!" I don't ask questions on forums unless it is absolutely necessary. Forums are a great place to find answers, but it's a horrible place to ask questions (if that makes sense). Forums have these ridiculous rules and guidelines they want you to follow if you ask questions... they basically expect you to be the caliber of user who trolls that message board ALL the time and is used to their formatting and content restrictions. I've had perfectly normal questions straight DELETED... even from Stack Exchange... all because it "wasn't formatted correctly."

Bad programming is the result of 1 of 2 things: Either you don't understand the concepts or your don't know the syntax. I'm not convinced that anybody can't learn both of these principles. Programming isn't a natural talent that you have to be born with. It's a learned practice. I'm not even sure it really takes that much intelligence. You just have to be patient and committed to learning. If people understand WHY a certain programming practice is a problem, I think they'll take the necessary steps to correct themselves. They don't need a freaking review board of snotty assholes berating them.

I learn the most through reading and studying on my own rather than asking others for help. W3Schools is a great place to learn some new things. Even if you're mainly developing in VB, running through some tutorials on JavaScript or PHP or Entity or MVC can really help your basic understanding of object oriented programming concepts. In most cases, your first couple development gigs they'll just throw you into some code and you kind of hack at it until you get it to work. That may be good enough, but if you don't know the concepts behind what you're doing, you can't really expect yourself to do it the "right" way.

IMO, you can't really learn how to be a top-notch developer before you ever get to develop. As with anything, practice makes perfect... and most seasoned developers seem to forget that.

share|improve this answer