Am I A Senior Programmer?
With my site turning one year old this weekend, I wanted to take a moment to reflect on my position as a programmer. As my business card reads, I am currently a "Developer" for Nylon Technology. I have never been considered as or labelled as a "Senior Developer" at any of my companies. And, to be honest, I have never much felt like a senior developer. A senior developer, to me, feels like someone who could successfully take a project from beginning to end, handle all aspects, and potentially lead a team in the process.
A senior developer is a leader and a mentor. Is this something that I can do? I would have to say it depends. On smaller projects, I can definitely handle all aspects. But, completing small projects makes me a senior programmer in the same way making awesome scrambled eggs defines me as a master cook. Am I mentor? Can I teach? I don't know. Do I have enough experience to tell someone "this is the way it should be done"? Does anyone have that kind of experience?
I have no experience with MVC, ColdSpring, Reactor, FuseBox, or just about any other framework out there. I hack together my own CFCs and frameworks according to my own level of standards. I don't know the pros and cons of much of anything out there. I love reinventing the wheel. I don't know how to write Data Transfer Scripts in SQL. I don't know how to modify a SQL data table structure without using SQL Server Enterprise Manager. I have never written a good "site search" for a web site. I have never lead a team of developers. I have never distributed tasks.
I do know a tremendous amount of information about ColdFusion and web development in general, but does what I know define me as a senior programmer? Would I be comfortable mentoring people? Would I be comfortable telling people what is right, or at least what is on the right track? Would I be able to tell people what is wrong and feel good about myself?
I have to lean towards, No. I do not feel I am ready to be a senior programmer. I have more to learn and many more leadership qualities to develop. For now, my label as "Developer" is appropriate. Maybe next year I will have what it takes.
Don't sell yourself short. There are areas that we are quite knowledgable, and other areas that we don't know enough. It's a lifetime learning process.
You are definitely a Señor Programmer
I'll leave whether or not you feel "senior" applies to you up to you, but I'd say that if you're not, you're definiely on your way: anyone who bothers to think about what they do as well as document it for others is going to have a good career in our field.
Thanks all. I do feel like I am definitely on the right track. I would feel comfortable if I was just slightly more well rounded.
I'm a senior developer. I got an AARP 'join now' card in the mail a few days ago... :)
I don't really put too much into labels. I know a lot but suck at teaching. I know a lot of people who are great at teaching but don't know a lot. And 'senior' is all relative. To someone just starting out in CF - you ARE senior. To someone like Ben Forta or Sean Corfield... :)
Hey man - I've been reading your blog entries a bunch over the past few months, and I think you could definitely be a senior developer right now if that's what you want. It's really up to you. I don't have some of the pure programming skillz that you possess, but I've been labeled a senior developer on the last 4 jobs I've been on (over the past 6 years) because that's the mentality I have about my career.
To me, being "senior" doesn't have anything to do with which frameworks you have experiences with, whether you can "tell" lesser developers the best way to do something, or if you have built many projects from the ground up. I'm not a big fan of most of the frameworks out there, I like to try to lead by example (write excellent code, handle all exceptions gracefully, document it, and unit test), and I've always worked primarily on legacy code... with little chance to build large apps from scratch. Also, experience with a number of pretty large-scale, high-traffic "enterprise" apps help me to feel that I'm in the realm of being "senior".
At my last job, we had a developer that the CTO had brought in from a previous job. He had a Java background, was methodically learning ASP .NET, and barely said a word as he built the most high-quality enterprise OO architecture I've seen (http://www.triphomes.com) in a language that was new to him. He wrote unit tests *before* he wrote code, he used best-practices, wrote custom features in Visual Studio .NET to improve efficiency, set up auto-builds and auto-deploys. And he wrote extensive docs on it all! After about 8 month, he handed it all off to a junior .NET developer and didn't have to ever worry about his nearly bullet-proof app again.
He was promoted to architect of the whole system, came over to the CF side of the company, and is currently in the middle of re-architecting that system. We have no doubt it will be another great success. All that to make the point that you don't have to say much or "tell" people what or how to do things... do great work, and smart people will follow, start asking you questions, and then it's up to you whether you consider that to mean that you're senior-level. ;)
I've been a senior developer, technical lead, technical director and probably several other things for a number of years now. It's a title and - if you're lucky - more money. You know what you know regardless of the title you carry.
In my experience, the keys if you're in a leadership are:
1. Understand that you don't know everything.
2. Understand that you're not *going* to know everything.
3. Be okay with not knowing everything.
4. Trust the people who work for you to know and/or learn the things you can't or don't have time to learn and then accept their judgment. If you don't trust them then you have bigger things to worry about.
As a leader, the most important job is to *guide* development. Know what's out there (tools, methodologies, frameworks, products) and what each does so that, if a project comes up you can recognize the potential for a good fit. A deeper investigation can be done at that time.
The more you do these things, the more proficient you'll become at the lower level stuff, but that's just a happy side-effect. The biggest part of a leader's job, I think, is to get there.
Don't get me wrong, you have to be able to lead from the front, but see #1 and #2 above. :-)
Oh I am so there, this is highly insightful....
I am not one to jump into egotistical boosts of what i can or can not do. But it's hard to know when your there or not.
And i agree the topic of frameworks, I usually work with in my own standards, and learn from those around me.
I do like teaching guiding others, but it helps if others are willing to listen.
I find that I would be willing to listen to you Ben.
Common Sense and wisdom are things we can sense in others, and you have it. While also being humble about it, that's what makes a good leader.
As others have said, it's a relative term. I've been considered a senior developer at past jobs, and yet I'm in awe of some people and what they do, and compared to them I feel quite junior. As for not knowing stuff, you'll find that there's a lot you don't know just because you don't dedicate any time to it, either because you have no need for it or because you haven't had time yet. The things you do need to know are best practices, design patterns, whatever can allow you to architect a good app. That, coupled with an ability and willingness to learn (which you seem to have in spades) will get you far. In the end, I like to always consider myself a junior developer (except when I'm setting my rates!), it makes me strive to learn and improve.
"I like to always consider myself a junior developer (except when I'm setting my rates!), it makes me strive to learn and improve"
I like that... I am on board with that attitude, which is why the sub-title of my site is "A Student's Perspective". I figure I will always be a student of learning, and Senior status or not, I will always be a student.
That guys sounds pretty impressive. I guess, you dont have to be able to lead people, necessarily, but I think it is a good trait to have. I need to learn more architecting skills.
Point #2 is perhaps the hardest thing ever to come to grips with. I am constantly feeling like I am in this unspoken race to keep learning... keep learning... keep learning. Maybe that is just some OCD or a reflection of how fast the technology field changes. I don't know. I am trying to be ok with that. I know I can't know everything, and I know that if I tried to know everything, I probably wouldn't know anything very well at all.
I guess what's really important is that at the end of the day, I love learning, I love solving problems, and I love what I do... and no job title can really qualify that properly.
With respect to point 2, I didn't mean to imply that anyone should stop *trying*. :-)
My beef has been with leaders who are manic about it and project that mania on everyone around them. One of the fundamental reasons you hire (hopefully good) people is to learn from their experiences and their skill set. Use that and don't grip just because you didn't know something they did.
I didn't interpret it as you talking about stop trying. I know what you were saying. I am just saying that that "mania" you speak of is sometimes hard for me not to feel. But, usually, I do a good job about keeping it to myself :)
Ahhhh. Therein lies the key... :-)
Don't sell yourself short.... and look at this wonderful community you've built. Rock on Ben Nadel!
Pretty much ditto what Joe said.
In my opinion a senior developer needs to have managed a team of developers. Not just be involved with other developers, but actually lead the team.
Otherwise, what are you senior to?
I am in somewhat of an agreement to that. That is one of the reasons I feel not "Senior". Not only have I not managed people, I feel that I would not be good at it. I have no patience for lazy developers and I tend to take on more work than I should because I feel that it's easier for me to handle it than to get programmers to do things that need to get done. Clearly this is a horrible ideas as it has no leadership nor does it demonstrate good task distribution :(
I disagree that a senior developer needs to lead a group of developers. To me, that's the definition of a Lead Developer or Technical lead. To me, a senior developer is one who has gone the entire gambit of requirements gathering, design/architecture, development, internal testing, uat, and support/maintenance. They have been exposed to each area of the software development process, and if lucky enough, have been able to be able to go through the entire process on a single project, but more times than not, the exposure is piece mealed together across many projects. Just my .02.
Warning: I am about to slam some people. This is the most retarded post I have ever seen.
I remember Ben Nadel, "the programming Intern". What was it? 10 years ago? Let's see, who were the senior develoeprs I can compare you to?
Remmeber me begging a prima-donna like Chris Tweney to work hard and be a senior developer. He worked when he felt like it. talking to him was painful for me. You are MUCH easier to work with, much more thoughtful than he ever was. Did he know then more than you know now? No way.
Ye was and still is a very knowledgable and strong programmer. But when I asked her to step up and take the lead, she didnt want to. I am going to guess she still doesn't want to. She knows lots. But doesn't want to responsibility.
And what about Jon Bell? I had to beg him to take the job because there was no one else I could find. He was a total jack-ass. Everyone hated him. But he took responsibility. Did he know more than you? No way! Was he easy to work with? Did he collaborate with clients and managers? Hell no.
Ben, managing people is about taking responsibility. Technically you are strong. You think all these people are here for your sense of humor? They are here because you are providing real value.
Any manager who has has half a brain would choose you over a prima-donna who knew more. It's not about that. It's about "Who can I trust? Who can I talk to? Who can take responsibility and make sure the project gets done? Who can provide a sense of learning and sharing?" Ugh Ben! Come on!
You aren't an intern anymore. You know more about programming than you think. And other people know less than you think. You have ALOT to offer a team.
If I was starting a company and needed to make sure the position was filled with the best. My short list has one name on it.
If I see a post like this again here, I swear, I am going to tell Ye you are in love with her and want to marry her. You know it's true. My god, this post was pathetic. Suck it up man! You should be managing people now. Ok, pasta is ready, gotta go.
Labels are meaningless.
I've hired over a thousand people in the last 20 years, all for technical positions. I've never once cared what label they attributed to themselves or that anyone else has attributed to them either. The only thing I care about is my own assessment which I reserve until I've put candidates through the ringer.
All you should be concerned with doing is continuing to try to improve your skills, keeping your eyes on what the market is paying for people with similar skills, and making sure your employer is giving you the opportunities you want.
Titles are all about ego, something best checked at the door.
In countries like India, the labels matter a lot! In fact they can affect your pay and role in the next company. If you do not have a decent designation in ur present job and your resume speaks the truth, then if you are trying for a new opening, the probability of your resume getting ignored is pretty high.
In one of my previous jobs, i had met a CTO of a company who preferred to call himself a *programmer* rather than cto. These are hardcore techies who dont give a damn about what the world thinks as long as they are happy about what they are doing. The west seems to have accepted this idea very well.
In countries like India, unfortunately Labels are still an important part of the job offer. Check out this blog post by an Indian writer about her friend quitting a nice job because the label wasnt attractive enough :) .
Check out the post - http://nitawriter.wordpress.com/2007/04/09/designations-matter-a-lot-in-india/
Yeah, titles are meaningless generally, except for the old resume. Currently in search of a job, I really have no idea what to put as my current role. I wear a different hat every day. Systems analyst? Programmer analyst? Team lead? Business analyst? Developer? Confusing interviewers is generally not a good thing. Getting asked 'What does this mean?' usually doesn't help the cause too much.
The only way a title would be of benefit is if it comes with an increase in salary my friend. I work for a VERY small company, here are some of my titles: CTO, CIO, Lead Programmer, Lead Architect, Senior Database Administrator, Senior Network Administrator, Graphic Designer etc, etc,. I can use any one of them since I am the only person on staff with technical background!
I am a computer science background and I learned to program not in CF and to be quite honest I don't know the ins and out of CF and I've been using it for almost 8 years now that's primarily because I didn't try to learn just CF I learned how to program and well adapt that to the language to which I need to implement the project. I understand MVC but don't know the internal workings of Model Glue nor do I care, as long as it works for what I need it to do. Since I've been reading your blog it is apparent that you are very concerned with learning how best to do things and that is the first step in being "Senior". A senior programmer usually guides the junior programmers along the best paths and I see you doing that already! I don't know how much this is worth but at least in my eyes you are a pretty senior programmer! Now go tell your boss and demand that raise!
Labels are pretty much null, so long as you are in a small company, where, as many of the comments here read, people do a large range of roles on a daily basis. On your resume it becomes important as managers/HR quickly scan for the roles you previously held.
Personally I think a senior developer puts together rocking components and then educates the team as to how to use them effectively, leads on code style, programming methods and day to day life in a team.
A team leader sits above that and hangs the time based stuff together, organises focus groups, team meetings, ensures people code and work is up to scratch and on time.
Although these roles are very similar, I find alot of developers have no interest in being a team leader, they dont want to have to be the nasty guy saying to a team member 'you are late', or enforcing the deadlines, or have to filter all the crap that falls from above. People that fill these roles appear very similar at the junior levels, and emerge at the top as very different people.
As per others here, dont sell yourself out. Use everyday to listen to others, provide your own view and learn from everything you see and hear. Provide opinion and listen to reflections on that. everyday you do what you think is right at the time and there is always a reason for it. Have conviction about those reasons but be prepared to discover its wrong, and adapt.
For me, the difference between a Senior and regular developer isn't the technical knowledge, but all the other skills they have gained over time.
'Senior' can mean a lot of things. I've been developing software for 10 years (self taught) in all three tiers (Full SDLC). I learn something new every week. I've developed many apps and recently published 2 papers. One in the science field and one in software pertaining to LIMS laboratory automation (80+ users).
'Senior'? Overrated. No offense to the Senior developers out there, but I'm a little scarred. The 'Senior' developer above me has been developing the same application for 5 years and still posts 'stack trace' errors to the client, consistently. As I questioned this, the reply from upper management was, "He's a nice guy!!". So, there you go.
Keep at it. 'Senior' or not, you are well on your way to becoming a successful programmer!!
I agree with Aaron,
do great work, and smart people will follow, start asking you questions, and then it's up to you whether you consider that to mean that you're senior-level. ;)
I do work hard and try to follow the best practices and try to help as much as I can to anyone, be it HR/IT/Sales. Turns out, IT Manager quoted me Senior Programmer during meetings. Did I want that title? Probably not. But its a sign of progress, a sign of belief, a sign of trust and a sign of big responsibility. Something made him so happy that He started referring me as Senior Programmer.
"With Great Power, comes Great Reponsibility".
Also, from the very first comment, Don't sell yourself short. I totally agree. There are many people out there, who dont know half, not half, lets make it quarter or 10% of what *you* would know, but they still call themselves DBA/IT Analyst/Senior Analyst.
What I am trying to say is, if you cannot decide on a title thats fine, but after some X years, you would want to compare against some people, and see how you are doing and you would be like "well its time for me now to be a Senior Programmer or Architect". No matter what anyone says, you have to take that big responsibility one day and with experience it will come automatically. Till then keep learning and working hard.
As Morpheus says "He is beginning to believe". That day will surely come in every hard working, best practices following programmers life including you.
>> "With Great Power, comes Great Reponsibility".
Are you getting confused with Peter Griffin's:
With great mustache comes great responsibility
Now that you brought it up, :-) here is the link for Peter Grifin's quote http://ron4president.com/ron-news/family-guys-ode-to-the-mustache.html
I picked mine, from the Spiderman 1 movie, Norman Osborn says it during graduation, Peter Parker says at end, and even his Uncle Ben says it.
Its true quote for someone from IT/Software. Programmer's are the precious pearls of the IT department.
Ha ha, great link :)
I love your professional honesty and your way of thinking. In regards to your level of knowledge, even though I have not worked with you yet, I do share the same thoughts as the others: You do know a heck of a lot. I have never called myself a Senior Developer even though I do think that I am an advanced web developer. My Title has always been LAMP Web Developer. I see myself on the bridge between Mid-Level and Senior. I have mentored others in code standards and best practices (shared knowledge whenever I had the chance to). I have taken up on some projects worth
a few million dollars. But I have never led a team from beginning to end in all phases of development. That is the job of a Senior Developer (I think).
In your opinion, is there a difference between a Senior Developer and a Lead Developer? I see the Lead Developer above the Senior Developer having hands on the business side as well rather than just the technical side.
I subscribed to this thread when it first came out. Interesting that it has popped back into my life. I've not written any code in a while and don't plan on it either; I've moved to the paperwork side of the project. My current project has a small herd of developers and has gone through a number of leaders. Our setup here (or attempted setup) makes some sense. The team lead deals with the more 'administrative' things from delegating assignments, time estimates, production schedules, etc. She doesn't have as much time to code even if she wanted to. The level of her skillset isn't as important as our designated senior developer. He is supposed to have the advanced skillset, know the architecture of the system, make decisions about the direction of development and do things like facilitate design reviews, etc. A key thing being make decisions - and be accountable for them.
Personally I even have a difference between a "programmer" and a "developer". Programmers show up, code their assignments, whine when they can't figure something out and then go home. They hope something doesn't crash. Developers on the other hand are a different being altogether; a different mentality. They can architect, design their own work and can think about maintenance of their systems for the future. They want their work to be better, faster, cleaner each time they look at it. They research when there are problems. Their code is their art, their child. They know where the cutting edge is and want their company to be there. The best, say "we" and not "I". They are glad that testers find errors before systems are launched. They want the team and community to be better.
I can look at the team I am working with now and pick out who is a developer (or is on the right track) and who is just showing up. Anybody can give you buzzwords in an interview, but can you pick out the true developers is the question. I would take a junior developer clamoring to learn over a highly experienced programmer that punches his clock at 5PM any day of the week.