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 just read this question asking how to determine if a senior developer's advice is bad and I realized that I couldn't really relate to his situation since I don't have a mentor. I also realized that I'm probably the most senior developer at the office, at least within my field. Which I suppose is remarkable considering that I'm only 22 and graduated from college a year ago.

I realized that I make most of the design decisions and that I write my code however I feel like it. While I'm happy with that I feel like it would be good to be surrounded by superior developers that I could learn from. As it stands right now I'm mostly applying knowledge I've already acquired.

Will not having a mentor at this point in my career have negative impacts later in my career?

share|improve this question
5  
The mentor has experienced many things before and may know on a very high level what works and what doesn't. If you cannot pull on such experience you have to get it yourself. Some of these can be very painful in this line of work. –  user1249 May 27 '11 at 14:32
add comment

10 Answers

Having a mentor is very important. Experience is irreplaceable and getting the advice and ideas from someone experienced will help you be a better developer and a productive professional. Coding is usually half the battle, you have to know how to communicate effectively, lead meetings, etc. This is where a mentor can help you guide.

Your mentor(s) does not necessarily have to be in your office. It can be someone outside of work like a senior developer at a local user group or someone you know from your professional network. It is also important to maintain the relationship long term with your mentor(s).

share|improve this answer
1  
+1 for the 'experience' touch –  abhiii5459 May 27 '11 at 14:20
    
I think the time frame is more critical. Anyone can get experience eventually. –  JeffO May 27 '11 at 14:47
3  
a good mentor at the beginning will multiply gained experience one order magnitude at least. You may eventually come to disagree with his advice or even see that he might have taken you down the wrong path yet these are still worthy lessons you might not have made had you not had a mentor to begin with. –  Newtopian May 27 '11 at 14:57
    
I've been in the industry 5 years and im still looking for a suitable mentor. Maybe my standards are too high. –  Abarax Mar 6 '12 at 22:21
add comment

I was in almost the same situation with my first job out of college. I was the only "tech guy" in the company, nevermind programmer. So I had to do it all, without any help from a senior anything. But, it taught me to be self sufficient and how to get problems solved quickly.

It would have been nice to have someone to help mentor me, but because I didn't have that person I had to make due. I think that may have helped more. I became a voracious learner because of that job.

A lot depends on you and the environment you work in.

share|improve this answer
2  
+1. It also depends on the mentor. Being supervised by a curmudgeon who is adamant about things he knows were true ten or twenty years earlier in spite of counter-examples under their nose (html can't be used to build UI/javascript is slow, anyone?) doesn't help much. –  Denis May 27 '11 at 17:29
add comment

It occurs to me that not having more seasoned engineers around is likely to more harm to your product than to you. Not that I think a fairly new engineer can't make good decisions, but you haven't had a chance yet to make all the really horrible mistakes - it's good, on a development project, to have a few senior people who can prevent or help recover from those mistakes with experience.

As far as personal development goes - the workplace doesn't have to be the only place you get mentoring - your social network could easily contain more senior engineers who are worth talking to and running things by - keeping in mind NDAs and what not.

I don't think - 5 years from now - that you'll be kicking yourself because you didn't work with a senior engineer - PROVIDED - that you keep your mind open when you do end up near some seasoned people. The one problem I've seen in junior engineers who ended up leading things very early is that they have the mistaken belief that just because they managed to make good decisions on a previous project that they must always be right. No one is always right, so if you don't keep your mind open for new ideas, you do yourself a disservice in the long run.

share|improve this answer
add comment

Will not having a mentor at this point in my career have negative impacts later in my career?

Yeah but one could ask the question of, "Will having a mentor at this point in my career have negative impacts later in my career?" which would also have a yes answer to it. Whatever you do can have some negative impacts. That's life. You can't experience everything in life and so one has to choose what to experience and what not to experience. Mentors can help guide you to some degree but they can make mistakes, errors can happen and what may have really good intentions has terrible results in the end.

I'd probably suggest seeing if there are local user groups around you that may be a way to find people with a lot more experience that may help guide you and be a mentor. It can be quite useful but it isn't a silver bullet.

share|improve this answer
add comment

If you have the opportunity to have one, you should definitely get one. If you are getting one over the internet, you should clearly define your goals and their gains out of this. (Best mentors are the ones who you know and respect personally. Think about how many mentor requests Linus would get).

But again, the greatest engineers amongst us are almost always self taught. So I wouldn't fret on it too much - it should happen naturally / arranged by the company you work for.

Another option is joining a OSS team and working for it, and learning by experience. Just talking to these guys / going through reviews / reading their code ought to teach you a lot, and they are gaining by your code too. win win.

share|improve this answer
    
What do you mean by "afford"? As in hiring a mentor? –  Morgan Herlocker May 27 '11 at 14:55
    
I meant possibility. –  Subu Subramanian May 27 '11 at 15:05
add comment

Having a good mentor is an irreplaceable experience - something that all junior programmers should try for.

Finding/Identifying a good mentor, though, is a very difficult problem, especially since the skills you need to be able to tell who would be a good mentor are the same skills you need in order to be a good programmer - in other words, if you're a beginner, you won't have them.

I would recommend:

  • Find heroes to follow and aspire to. These are accomplished people in the field, who inspire you to try and become equally accomplished. I used the plural, find multiple of these.

  • Identify multiple people who are more experienced than you and share the same heroes.

  • Be aware that, as you develop in skill and experience, your demands of a mentor will likely change. The more experienced the mentor, the longer he is likely to be able to guide you - but be ready for a point where you need to fire him

  • Remember that good mentors are likely very accomplished and likely, as a result, very busy. Your best bet for forming a mentorship relation is to try and help an accomplished person get something done - volunteer to do it.

  • A good mentor is like a reliable compass. He'll show you where North is, teach you how to navigate by the stars, but it's your job to figure out which way you want to go, and to get to where you're going.

share|improve this answer
add comment

See I feel, there are two ways of looking at this problem:

Way #1=> If what you're doing is good for the company,it's good enough.(because you say you're happy with it right now. No satisfaction issues as is)
i.e, you don't need a mentor, you can just go about the way you are going on now, keep learning stuff from books and the net (great teachers,grreat teachers) and you'll slowly learn how your way should be refined on your own.

Way #2=> You definitely need a mentor. Because,a mentor brings in experience and while you may learn stuff eventually on your own, you'll probably learn it faster if you have a mentor around.

You should consider both these factors is what I'm trying to say, and ultimately take a decision.

share|improve this answer
    
How do you know you're good enough when you have nothing to compare yourself? –  JeffO May 27 '11 at 14:46
    
I didn't say "you're" good enough! I said if it's good enough for the company..as in,no detrimental effect due to lack of mentoring primarily.. –  abhiii5459 May 27 '11 at 14:47
add comment

Like @msvb60, I was also in your position. I was hired right out of school, and put on a new project for me to design, implement, and support. When we did bring in other programmers, they had less experience than me. As you can imagine I made a lot of design mistakes and spent way too much time thrashing.

I don't regret my situation, but do feel that both my employer & I squandered an opportunity.

If I could do it again, I would simply suggest to my employer that we bring in a more experienced person to consult on a part time basis to basically 'Sheppard' me through the more riskier decisions. This would have saved a lot of time, and we'd probably all be rich now (seriously; great idea + enthusiasm).

share|improve this answer
add comment

I never had a programming mentor or a source code review. Overall I think it puts you in a weird place. In companies with lousy developers I am the same or better than their senior developers (I refer to these as senior developers with x years experience). But in companies with great developers I am worse than the junior developers (I refer to the seniors here as senior developers because they can write great software). Probably my problem solving skills, algorithm abilities, and database abilities are at or beyond the level of a typical senior developer (and I have the requisite x years of experience that most recruiters are trying to fit me into a senior developer job....). But my ability to design/architect code is way behind even a good mid level developer. So basically the code I write ends up a mess in the end. It works, but then when you want to go back and change it, you have to put forth a great mental effort and it is very demotivating. While I am excellent at writing code to solve problems, I don't do much to separate UI from business logic from data access logic. And when I make attempts to do this things take too long that I get pushback.

So essentially you need a senior developer to mentor you who is a senior developer because he/she can write great software. Many shops do not design/architect (by design I don't just mean big design up front, I mean refactoring to a design as well) so you really need the right place (essentially they, like all the places I worked as a developer, use the architecture pattern big ball of mud). Basically you get a bunch of giant procedures with tons of if statements to wade through and many times global variables. Object Oriented places are a little better but even then you get objects with a few gigantic methods that you need to wade through. Unfortunately I don't really know how to avoid a ball of mud yet at all... So as I look for my next job I am trying to ask probing questions to figure out if they have a ball of mud or not....

I have both an undergraduate/graduate degree in computer science I can tell you that they do not teach you how to design/architect programs really...just the basics (I already knew the basics, so aside from some advanced algorithms college did not do much on the programming front). And on your home projects generally they are not big enough to really bite you for lack of design/architecture knowledge. Most things I want to do at home can be done in a few lines of Python/Perl. Even a quick GUI to a database is not that hard to do in Python/Perl/Java and mixing the presentation, with sql library calls/etc. is not likely to bite you because the business logic for home stuff tends to be quite simple... I have read the books on design patterns (head first and the gang of four), object oriented design (head first, object thinking, and technically the two design pattern books fit in here too), refactoring, patterns of enterprise architecture, etc. and yet you really need to apply these things under a mentor in order to learn them.

So essentially, if you give me a test asking me about object oriented terms (interface, abstract class, polymorphism, encapsulation, etc..), I'll pass. And yet knowing the terms and doing a good object oriented design are two vastly different things. Now I can even pass design pattern trivia. And yet knowing the patterns and knowing when to use them are two vastly different things.

Overall there seem to be developers who just want to get something done. They do not want to talk about making code better, as long as it is done even if you cut/pasted/cloned entire programs they don't care. Then there are those who care about code being clear, simple, maintainable. They will emphasize writing frameworks and refactoring things. If you need to clone a program to make another similar program they will advocate rewriting the original program to separate out the common part into a library and then using that library in both programs. By not being mentored by one who wants to write clean maintainable code you are missing a lot.

The design/architecture of big systems most architecture books say can only be learned by working with experienced architects. Even the agile books advocate working with someone experienced to pick up agile (agile coaches). Even stuff like unit testing, refactoring, test driven design, etc. would be good to pick up in a team by more experienced people. But if you are always on your own and have not worked with many examples of good code, it is hard to see the value in these things or even to apply it. If you go to management let's try unit testing, they will argue and say no unless you can show a business value. And not having done most of those things professionally it's hard to argue that you are an authority on it. I suspect after having worked with some more experienced developers writing cleaner/more maintainable software there is a better position to argue for some of the practices with management. Also it's about sanity. Working on a big ball of mud is very de-motivating. I'm not sure the situation with clean code, but it would be great not to have to work so hard to figure out what is going on with code and not to have to worry about what every change might break.

share|improve this answer
add comment

I have a mentor, 5 months into my first career job. It's good, sometimes I feel like I ask stupid questions but it's great to have someone who can give good advice.

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.