Ask Slashdot: Advancing a Programming Career?
AuMatar writes "I've been a professional programmer for 10 years. The startup I work for was recently bought, and while I was offered a full-time job, I opted to accept only a six-month contract. At my most recent job, I was lead developer for a platform that shipped tens of millions of units, leading a team that spanned up to three geographical areas I've done everything from maintenance to brand new apps. About the only thing I haven't done is been lead architect on a large system. What else is there to look for in the next job so it won't just feel like the same challenges all over again? I'm not interested in starting my own company, so I'm looking for suggestions assuming I'll be working for someone else."
While you say you're not interested in starting own company, why is that? Since you've been lead developer and are looking for further challenges, there really isn't much where you can go. Either you have to switch your area of work, go to management (which also switches your area of work) or start your own company.
Having your company is definitely interesting and provides new interesting challenges. You also have much more personal feel to your work. At times it can be exhausting, but it's also really rewarding - but to yourself, and of course to your wallet. I wouldn't do anything else than running my own company at this point. It is definitely much more interesting than working for someone else.
Apart from that, what is your line of work? Maybe switch to more interesting part of the industry. Game development can be fun too, if you're just done some other kind of software programming. However, I would really suggest you look into game designing and not programming. The latter is crunch work that can be done by almost anyone and in the long run extremely annoying. Designing is fun.
A natural transition for programmers can be "Enterprise Architect" roles. This will still allow you a modicum of programming, and you get to be at a slightly higher paygrade, with pseudo-managerial powers. If you're decent at your job already, this gives you more of a top-down on the process so you can truly shape a project rather than simply build the shape someone else has given to it.
Just my $0.02.
If you're not interested in starting a "business" and being a consultant, your choices are basically Dilbert or PHB.
Are you interested in anything besides programming? Maybe head that direction. I don't mean stop programming and do something else, I mean find a job where your programming skills will be contributing toward something worthwhile and that you're interested in. That might mean working on software to help find new cures for deadly diseases, or it might mean being a lead programmer for the NFL. Whatever floats your boat. If you're a part of a team that's doing something that you genuinely like and that enriches your own life, maybe it you'll be less concerned about "the same old challenges" and you'll be happy just to contribute toward the end goal.
Breakfast served all day!
I would look around for the opportunity to break in to the education field. There is no field more challenging and the real life experience you would bring to the classroom would be invaluable to the students.
If you continue to present yourself as a "programmer" you will continue to get programming assignments. What sort of projects are you good at? What types of problems can you solve? Think of yourself as a business instead of as an 'employee'. The old "You Weren't Meant to Have A Boss" mindset (see: http://www.paulgraham.com/boss.html ).
Get out there and do something cool, don't sit around waiting for someone to tell you what to do!
IMO it's not so much about advancing a career as it is about finding new things to learn (the learning is the fun part). If you still enjoy it, I would recommend looking for something that requires different languages, tools, skill-sets, etc. so you can continue learning and keeping it fun.
If you're tired of it, then go for management or a lateral movement. Some have mentioned an architect role, but there are also positions like product and/or project management, technical lead for a sales team, etc.
I've been a professional programmer for 30 years. I've been everything from a grunt to a lead developer and have had some products wind up on millions of PCs and watched many millions of dollars be blown by incompetent executives on others. If you're dead set on working for someone else and you're in a position to do due diligence on a company, its executives, its history, and its current financial situation before accepting an offer, then do it. However, don't be surprised if you ultimately burn out on trusting employers to provide the satisfaction that you derive from writing software and start thinking about starting your own company to obtain that satisfaction. If I could give advice to myself 20 years ago, it would've been to start thinking about starting my own company a lot earlier.
I've been a developer for about the same amount of time as you and am now a tech lead/team lead, where "tech lead" means I'm the go-to guy for the organization on anything to do with my particular product (new design/architecture, integrations, major issues, what have you), and "team lead" means I act as the manager of all of the developers/testers under me (reviews, layoffs, vacation approval, all that crap).
I'm coming to the realization that I kind of hate this role...I can only put myself down for 5-10 hours a week of actual development, and even that is usually a stretch, and the management stuff is quite stressful. It is shocking how differently people behave when you go from their peer to their manager. So, I find myself in a similar situation, what do I do now? I am the best developer available to work on my product, yet I am unable to find any time to actually code...all I can do is quickly spec things out as best I can, pass them to my team (also spread around the world) and get back to fire control/integration meetings/budget planning/etc. It's extremely frustrating.
My thoughts wander from 1) Just suck it up, dive into the management aspect, do as much coding as I can on the side to scratch that itch (it is my true love), 2) Find another job that is purely technical - lead dev/architect, what have you (would probably lead to the same situation I'm in), or 3) Say f**k it and go totally off the reservation - try to start something on my own, or become a teacher and work on stuff on the side or something, complicating this option is the small matter of a family to feed... I just don't know.
while [ 1 ]; do echo -n -e "\xe2\x95\xb$((($RANDOM&1)+1))"; done
Every developer hits that point eventually. And your choices aren't necesarily limited. Assuming you're ok with a pay cut.
There are plenty of opportunities to move in the direction or Project/IT management. That's the direction I've gone. 15 years of seeing poorly run projects and trying to get them back on track has left me pretty well practiced for taking the reigns.
Switching over to the networking side of the house isn't a bad option either. There's some learning involved, and you're not going to start out as a senior architect, but you can get work with the ancilary skills you've developed.
All industries can benefit from exceptionally bright solution developers. Look into 6-Sigma training and advance your career into process improvement.
And if all else fails, get out of the office. Find yourself a lumbar jack gig, maybe come camp counciling in the summer, park maintenance in the Everglades, etc....
-Rick
"Most people in the U.S. wouldn't know they live in a tyrannical state if it walked up and grabbed their junk." - MyFirs
My overused response to a lot of questions is: Unask the question.
You've got a lot of technical and lead and coordination and probably management skills you've developed. So instead of asking where should you go next, ask what do you enjoy the most?
It may be that you do want the challenge of a lead architect position, in which case you might be looking for a startup company. I have no idea how people get to that level. Some are bottom up evolution, and some are top down revolution type people.
It may be that you want the joys of integration or release management, or something along those lines.
Basically, in a nutshell, ask yourself what makes you happiest and pursue that. Worst case scenario, you've wasted a few months. Best case scenario, you grow into a beautiful butterfly...
Most developers tend to think that QA is for button pressers and failed programmers. However, having a couple of good programmers on the QA team can dramatically improve a product. If you're really a good programmer then you can take requirements and write GOOD tests. Also, as a programmer, you can deconstruct what the dev team has built, and look for ways to make it fail (i.e. the cases they failed to consider). If you understand the nuances of the language, you can better anticipate the edge cases that a lot of non-technical QA folks would miss.
I've been down this path, and found that when a dev team knows there's someone who will call bullshit on their submissions (and can back it up), the code that's checked in tends to be better.
Why is it that decent, smart people get it in their heads that they can only do one thing? Years ago I had some bungee-manager give me a lecture on how I was spreading myself too thin, and successful people chose one thing and did it well. Nonsense. Successful savants maybe, but creative/skilled people who've been doing something well for a decade or two..? (I'd steadfastly refused to choose between the management and tech tracks at my company, and my good performance in solving/building/managing/selling didn't fit their vision of a career.)
Instead of trying to find a place for yourself as a good systems engineer who will be applied to good peoplems, go look for an enterprise or business sector that could use someone like you. One of the coolest things I did in recent years was to stop thinking as an IT security geek (please, not another PCI assessment or pentest clown show), and got a yearlong gig with the UN as a governance reform manager who happened to specialize in IT. Same crap, but new challenges and way more satisfying work.
Look at the org's business, not the tech. Some examples: I have a engineering/physics/software geek friend who signed on last year with a biotech firm that does fish tagging. Instead of looking up up up the tech hierarchy, he now runs a small operation with just a couple of guys, doing world-class work. Another friend topped out in engineering management at a certain large redmond org, and decided that where she was working was more important that the specific engineering challenges, so she's now working for a school system in Hawaii. Both are incidentally now working on improving their health and have time for music that they'd been puting off for years. Second life in the real world. Nice.
I think not...(*poof*)
I'm not clear on exactly where you'd like to advance. You don't want to commit to your employer (and only took a 6-month contract) and you don't want to burden yourself with the risks associated with success (by not wanting to start a company). I assume this also means you don't want to partner with someone.
So you want exactly what out of advancement? No more risk. No more commitment. No more responsibility. Just money? Play the lottery.
You should probably advance your programming career by being a lead architect on a large system. Something about your question draws me to this answer.
Slashdot is stagnated. Need to stop giving karma to ask slashdot submissions, so real questions needing real answers will get asked.
The only problem I see with freelancing is that he specifically says he wants to advance his career. When you're a freelancer, people tend to want to hire you to do the thing you did last time. It's just the nature of the beast; you're probably going to get a lot of jobs by word of mouth, and the word of mouth is going to be "when we needed that same thing, we hired this guy -- you should hire him, too." Also, people tend to underestimate the amount of hustle it takes to be a freelancer. You're always thinking about your next job, which means you tend to be reluctant to turn down paying work. These two factors make it very easy to fall into a rut.
Breakfast served all day!
Take your skills on the road and sell them to the highest bidder. Consulting has totally different challenges but takes advantage of your experience. I recommend you try it....and the money can be great.
Just because you are working for someone doesn't mean you are their bitch. Someone with marketable skills will move on to something else if you treat them poorly. Good luck keeping your company going when all of your employees are the kinds of people that don't have any better options.
Almost anybody I've ever known who has moved onto being the lead architect isn't handling much (if any) code anymore. You're operating at a different level ... the overall design, the components that make it up, and working with the dev team to sort out problems. And, of course, working to define the requirements, use cases, and all of the other stuff like that.
Which is fine, but from what I've seen you can stay as an actual Programmer for so long, and then people expect you to move into architect/management roles to oversee the people who now do the coding. Your job becomes big-picture kind of stuff. Sometimes they look at someone of a certain age who is still writing code and wonder why you're still doing that.
If you're looking to solve new and interesting problems without feeling like you're doing the same thing over and over ... well, maybe what you want to do be doing it is working with a consulting company? The breadth and depth of your experience gets used for many different problems, it definitely changes often, and you get called in to help clients solve problems and develop solutions
Not saying consulting is for everyone, or that it's even the best choice out there ... but when I 'graduated' from a previous job as a programmer and got into consulting, I found I got to work on different projects, provide different insights into them, and then work towards the overall solution.
If you've been doing the kind of dev work you describe for long enough, there's a remarkable amount of soft skills you've likely picked up that are very marketable ... you don't need to know everything about everything, but knowing a lot about a lot of things actually makes you quite useful as a generalist skillset, with the ability to delve deeper when the need/occasion arises.
Lost at C:>. Found at C.
You could try a different branch of programming ....
If you do standalone apps right now you could move into web programming or database programming or even mobile apps.
Given the restrictions that you have (keep doing what you're doing, but more advanced) then I would suggest one of two things.
[1] Change to a completely new set of problems. If you've been working in business software, change to games. In this way you will still be doing dev, but the kinds of problems that you are trying to solve will be completely different, which will lead to new challenges.
[2] Try changing up the 'how' of what you're doing. For example, look for a team that's using scrum methodology, or test-driven-development. Alternately, new tools, programming languages, platforms (Mostly focussing on windows? Go mac/mobile/unix/web.). Even just somewhere with a vastly different release cycle could be interesting - by last employer measured their dev cycles in years; my current employer in weeks. If you put the focus on the skills, instead of the work, it can be really rewarding. See Software Craftsman movement for related inspiration in this direction.
[3] Move. I'm on my third country now, and I can tell you that doing the same thing in a different country totally changes the game. French engineers do not think the same way as Canadian engineers. So much of our work is about problem solving, and being able to transform real world problems into software. It's been very cool to working through a problem with someone with a totally different world view.
To use an analogy: You are a great French chef; you've worked in a wide range of sit down restaurants from very small to very large. And you've always felt successful, but you now feel you're only option is to start your own business. I'm recommending that you [1] go work at a japanese restaurant, [2] try a catering company or 'fast food', or [3] try working in Vietnam.
Money...
Cleverness...
Sloth...
Babes...
Fame...
Only on person had it all....Bill Murray...
Seriously, if you have money in the bank or the ability to put money in the bank do that for a year or two...then chuck it all, and do something completely out of character...like go volunteer some place...go sailing, visit all the baseball parks in one season, take up something inherently selfish for a few years and enjoy the world and it's people...meet people, love and enjoy the beauty of the world. When you have run out of money go back to work and you will be surprised how motivated you will be. Motivated to fill the bank again so you go off on another adventure...life is too short to be a code monkey or a slave to your customers...or strapped to someone's insane project and crappy software...go now.
The answer was just posted yesterday!
Right here...
Sarcasm is my closet friend.
Silence is a state of mime.
why? there's always certain genres like fat twink
if you can survive without a paycheck for a couple of years, why not use the time to consult for some business that may be of interest to you at a low enough rate that they won't mind having you around, present yourself as a business analyst/applications architect and offer them to spend time on their business problems and attempt to come up with some solutions to help them?
After all, unless you are going to do theoretical stuff in computing, the only other choice is to do applied computing. If you are looking for a challenge and not necessarily security or pay-check, then looking at something that you never thought you'd be involved with and then coming up with ways to be useful there by creating some form of automation/solution may give you the challenge you are looking for and it also can translate into a future model for you to earn some money while doing more of this risky stuff that's not boring.
You can't handle the truth.
Are you a database expert? ... as a result of which basically every website sucks compared to what windows programs could do a decade before, so if you feel like a challenge ...)
How about integration?
Performance and scalability?
Web? (It's been sooo many years now and there still isn't a good interactive web library
"Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
For promotion as a programmer, you should follow the Peter Gibbons example. Come in to work every day about 15 minute late,. . . use the side door so Lumbergh can't see you,. . . ;-) Then, just space out at your desk for awhile. But look like you're working. Do that for about an hour after lunch, too. You need to try and keep the actual work that you do down to about 15 minutes of real, actual work, per week. Also, never put cover sheets on your TPS reports.
I propose 2 methods to reformulate your question:
1) root-cause analysis: take your original question, and ask why you want that. Find 3 to 5 answers.
Reapply the process to your answers: why do you want that ?
Answers that have no parent are root causes.
When there are no more answers, take a look at all the root causes, and what you are searching should be obvious !
2) domain analysis: enumerate all your activities in development.
For example: coding, debugging, managing, planning, etc...
Now, put a score on every activity, 0=it sucks, 10=it's great.
When you finished the scoring, take the 3 biggest scores, and imagine what job could fit these 3 activities without the other activities.
That is your dream job !
If you still don't know, read this:
http://www.inspirationandchai.com/Regrets-of-the-Dying.html
Take some time off and reflect. Slashdot isn't going to provide you with any wisdom for something that is a function of you and your feelings.
While you say you're not interested in starting own company, why is that?
I can give a few reasons why you wouldn't want to.
For one software is extremely saturated - talent, businesses, products - you name it.
Sales. Starting a business is easy. Watch: There I just started a business. Here I'll start another one. Bam! Two businesses in as many seconds.
Sales. It's extremely difficult as someone who has been behind a computer all his career to get the sales. If you think it''s just a matter of cold calling, walking into a building, or placing an ad in CIO magazine; you will be quickly disillusioned.
You will be competing with established businesses. A couple of years ago, folks were suggesting that one should get into the web page and marketing business because the companies they were working for were experiencing increasing sales. Of course they were. Try walking in as a startup and convincing someone that they should drop the guy that they have been doing business with for the last several years (and most likely pleased with them) and hire you. Try, just try to convince them. Do it cheaper? Never compete on price because there's always someone who'll do it cheaper. Anytime on RAC will show one that.
Your own portfolio? It's a start - if you can get a chance to actually show someone who has the power to hire and pay you. And that's assuming your design and coding skills are so awesome that the potential client will fall in love with you. There aren't too many people like that in the World. .
It's much more than hard work. If all it took was hard work, everyone would be successful in their business. And here's the killer: when you're in business for yourself, you will spend most of your time getting work. So you will not only have to meet your deadline for your project, but work in getting sales - going out to networking events, shows, taking "decision makers" out to lunch.
Then there's the collections. Do you think at the end of 30 days, said company is just going send a check right over? Pfft.
Industry: IT is a saturated industry. If your business has anything to do web design, custom software development, support, or anything sun of the mill like that - good luck! Folks like that are a dime a dozen. And they're all not screw ups.
Someone with your skillset is in high demand. It's very easy to just cast an uber-wide net, listen to job after job, and then decide where you want to focus.
Put your resume on job boards and then take your pick. In addition to things like Monster, Dice, look for smaller boards that cater to niches that you might be interested in. On your resume, state that you're looking for either a full-time job or a few short contracts until you find the right position. Keep casting as wide of a net as possible until you figure out what your interest is, and then narrow your search.
When recruiters call you, without sounding cocky, politely state that you know that you're in demand and that you're still trying to focus your career search. Hang up on anyone who tries to negotiate salary or contract rate in the first call. Do not go to any recruitment agency's offices in-person, especially if they come across as high-pressure.
No, I will not work for your startup
10 years? Yeah - you're the cock of the walk, almost at the peak of your programming career. Now, picture yourself at 50 years old. Look around your office. Do you see any 50 year old programmers? If you do, he's probably the surly little troll sitting in the corner working on some old legacy code that no one else in the office will touch.
You need to start planning for what you will do when you aren't programming any more. Development manager? Project manager? Enterprise Architect is cool - but how many of those are in a typical company - and many companies don't have that role at all. Contrary to what most career books will tell you, for the vast majority of companies, there *is* a ceiling to the technical path. To get to the Director or VP level you will need much more than tech skills. I think it's better to start learning about project & people management now than 20 years from now when you are being bypassed by younger folks who have taken the time to learn more than code.
If you are moving to an enterprise architect role, read up on modern industry practices/tools first. Don't assume that your development experience alone qualifies you as an EA. The experience is an absolute prerequesite, but it is not enough. The mistakes you can make as an EA can cause a lot of pain to a lot of people for a long time, so those lessons are ones you really can't afford to learn the hard way.
Also, if you are looking for something different, you could also consider staying as a regular developer but target an entirely different domain. Have you done hardware controllers? If so, interested in trying desktop apps or web apps instead? Just food for thought.
If you want to advance, don't become especially good at anything technical. Have problems, make stupid mistakes. If you're a really good programmer under 40, it's a dead end job.
This signature has Super Cow Powers
I had been programming for around ten years and was looking for a new challenge, I initially did the logical thing and became a team leader, and like a lot of the posters here I found that you get battered by the management above and the programmers below, it can be really rewarding but it's really hard work and I didn't want to spend my career doing that job. I looked at technical lead and at project management but they didn't feel quite right.
Then by chance I was ask to lead a large tender (my boss was off at the time and no-one else had the skill set). I had to come up with a solution for the prospective customer that not only fitted the requirements but was better than the competitions and write the technical sales documentation and lead the presentations. It was a terrifying couple of weeks. But also an amazing adrenalin rush and from that I ended up becoming a business analyst. I don't programme any more but I get to design the U.I. and all the functional requirements of the software so that satisfies my creative side, and even more strangely the sales side is really great, becuase like a lot of the posters here, you really do know what you are talking about right down to the nuts and bolts of the product. (I'll always have a director with me to handle the commercial side, my job is to get the customers tech boys onside).
I would have never of thought of it as a career move until I got thrown in the deep end, but I get the same satisfaction with work as I did when I was a programmer and I enjoy my role, which is pretty much what you want out of life.
find a new career.
seriously, if you are in the west, you will be outsourced. maybe not in 5 yrs but certainly in 10. I'd bet money on it.
this is a race to the bottom. I've invested 30+ years in engineering (I'm 50ish now) and I see this. only kids and low paying wages will be in software, in the US, soon enough. if you can do the job without being local, it WILL be outsourced.
I hate to rain on your parade (its mine, too, btw) but this is the fact of our 'work force' and you'll never get anywhere doing software in the US. very few will make it big and most will just be a few paychecks away from being homeless.
again, I hate sound so negative but my years have given me some wisdom. I see the writing on the wall. it really is a race to the bottom. our country does not value us, our employers don't and we're expendable. we're a 'cost' to them.
either start your own thing or change fields. software in the US is done-for. pointy hairs have spoken and they run things, not us grunts.
--
"It is now safe to switch off your computer."
This varies by geography. In my town, we can't find enough developers. Headhunters are trying to contact me daily. My last three clients were all hungry for new programmers.
Lot's of people post things like that but never post where they are or what their requirements are.
How about posting where you are and maybe some talented folks would actually move there. Here in Metro Atlanta, there are quite a few out of work folks who need jobs and may be able to relocate.
And no, people who actually do the work well are not a dime a dozen. H1b, offshore and otherwise useless wannabes are.
In the years I was in the business, it amazed me how one person's screw up was another person's competent person or even genius. And after seeing some of the code of one "screw up", I think some folks are wrongfully labeled that for whatever reason.
When I was in the business, I got my work done on time, commented and it worked. Was I a super genius that was able knock out super genius code? Nope. I was told that I was good by my employers - one colleague even called some of my work "genius" - it was an UI that was incredibly intuitive to the users: I guess it takes a "stupid" person to know how to talk to other "stupid" people.
After a long time out of work, someone finally gave me feedback. The reason he thought I wasn't any good was because I was unemployed. If I were any good, I'd have a job - this was in 2002 when a bunch of us were out here in Atlanta, GA.
Of course as time went on, that label became reality. It's kind of hard to work on systems and technologies that only large companies can afford on your own time in your own home while unemployed.
I really think you're having a hard time getting people is because you and the rest of the industry made that reality.
Every other industry that demands highly trained and skilled workers doesn't have a problem getting people. Because if they can't - like CAT did when they needed welders - they created a training program.
You know about those millions and millions of lines of COBOL code that the big Hartford insurers use? They have no problem getting people; even though very few schools teach COBOL and their programmers are retiring left and right.
How do they do it?
Training programs. And they produce some damn fine people, I might add. Of course, there is some snobbery with regards to training too. Some of those Hartford Insurance company programmers have "only" BAs and some have no degree; which makes them unqualified to many firms that require their programmers have BSEE or BSCS or a BS in a physical science. I'm sure those firms are also bemoaning how they can't get qualified people and how there are too many wannabes.
I agree, that definitely helps. My current job has been cool in that respect- I've heard people talking about my software on the bus, in lines at stores, etc. It's made it a lot more fun to work on.
I still have more fans than freaks. WTF is wrong with you people?
Someone with marketable skills will move on to something else if you treat them poorly.
Even if you get treated well by a boss you will still have to do what they say. Otherwise why would they hire you?
http://marriedmansexlife.com/
I would certainly hate to be a part of an organization that has that many steps between "Lead Developer" and "Enterprise Architect."
I've typically seen:
Lead Developer
Application Architect
Enterprise Architect
I've also never (aside from you, apparently) seen Enterprise Architect or * Developer anywhere in the list of prerequisites for "CIO." Every CIO I've ever seen has mostly basic technical skills, lots of business skills, and generally strong knowledge of the tech industry around which the company centers.
The problem with switching companies is that you will have to prove your skills and worth all over again. And most of them will slot you into at best a middling job grade at first (not architect level) unless you already have an industry-wide reputation.
Challenges? There are many challenges out there, but maybe not in the typical businesses. I would personally advise you to look first at the project that would motivate the most and only later about ways of gaining money doing such. There are a few zillions of free software projects where you would "work for someone else", but together with a community of other motivated developers, facing challenges, solving problems and finding creative solutions. Moreover, with the last boom of the Occupy movement (and the revolutions against dictators in the Arab world), there are many more interesting projects with amazing challenges out there. My bet is that building decentralized tools for activists wraps the next big technical challenges (personally I'm helping in comunes.org). Helping to solve them is not only very self-satisfying, but is being certainly useful for our societies. Moreover, creative solutions might be game-changers in many fields.
I've also been writing software professionally for a little over 10 years. I've worked on multiple projects with IBM, and now I work for a small division of EMC (the start-up was acquired). In my experience there's lots to do and learn still. The world of systems programming is never-ending -- there's more restrictions on how and what you can do, and that increases the challenge. Coding in user-space has some challenges, but when a language will do a lot of things for you; when you can rely on the OS to clean up after your mistakes, memory leaks, leaked file descriptors, etc., it's just a little boring to me. No one needs a perfectionist writing their user-space code.
Terrorist, bomb, al Qaeda, nuclear, yellowcake, kill, assassinate. Carnivore is dead... long live Echelon.
Any of the above could work...but it depends how you define the "same challenges" you'd like to avoid.