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 was a developer for nine years. Moved into management for a different company five years ago. Now I oversee software development, project management, network support and a few other odds and ends. It's been an interesting career path and not one I think I can reduce to a seven step program for you...
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 don't already have the formal qualifications, you are well equipped to get them. Go for it!
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!
As you seem to have plenty of experience and deep skills, go indie. Be a company of one, or have your own team. Consult on a specific piece of a project, then move on. You'll (typically) get a higher paycheck with time off in between projects for other interests, family, writing a book, building new skills, or teaching. Contract out the parts you don't like, such as administration.
Offer your services for a price. See who offers you a nibble. If you find it interesting, great, if not, just make sure your offering is for consideration not commitment.
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.
If you don't want to retire, work for yourself or start a company, then isn't your only remaining career choice to do as you are told?
That's the employment deal. If I hire you, you do what I tell you, and I pay you.
If you're lucky, the things I tell you to do will be the things I thought I'd be telling you to do when I hired you.
If you're unlucky, conditions have changed so I'm going to be telling you to do something else.
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.
Maybe you missed this part:
I've been a professional programmer for 10 years
so porn star is probably out of the question.
Unless perhaps you meant watching porn, but if you were paid for that I'd guess most nerds would already be multi-millionaires and not looking for career advice.
See if you can run with the big dogs.
With the variety of in demand skills it might be wise to team up with one or two other programmers each with his own speciality to offer a wide range of capability to a prospective employer. Kinda hard to know and do everything.
Failing that, marry a programmer wife and job hunt as a team.
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.
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.
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.
It sounds like you're focusing a lot on what your role in the company is, and not on what that company is trying to build / achieve. If your role is focused on solving problems then every problem is different... and the problems your company is trying to solve don't challenge you then you're not in a very interesting / important company. On the other hand, if you're just following directions... writing code to meet the spec... then I could see that getting old quick.
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.
I have written C code for 20 years and know (too) many other languages, i don't care to mention, too...
("too many" because I was a Java-buzz-victim too... "compile once, run anywhere" lol.. bullshit)
I find my companies projects increasingly boring.. and secretly tinker on my own open source projects during work time because they are more appealing.. I am interested in N-grams and how to turn that into something close to an AI and such... it also involves data mining and such... cool stuff...
I am seriously thinking about living from social welfare and focusing on my own projects 100%... I lived from social welfare before and have learned how to get by and have internet with so little money...
Really, work is stupid.. I am sick and tired of wasting my precious time with other peoples projects..
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.
Join a startup, build their product to stardom. Do it all again.
Maybe the first time around you just got lucky.
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.
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.
And get blown out of the water.
Yes! Been there!
In the mid to late 90s, I did C++ middleware and UIs for RDMs on servers and mainframes. That's all I was hired for and never got the opportunity to do anything else - no matter how hard I pursued those jobs. Then Java and the internet took off and work disappeared. Even though I took Java classes until I was blue in the face and wrote code on the side, I was forever dubbed "that C++ middleware guy".
Maintenance? I don't think anything I wrote is in production anymore. I think it was all replaced with Java Beans and a few other products.
Tried getting other work in embedded systems and other things and it never came to pass.
Once you're pigeon holed, it seems impossible to get out. I wish I never contracted. The money was awesome for a couple of years, though and I can say that I used to make six figures back when it meant something.
I'm 15 years in, professional full-time and I managed to get the lead on a pretty decently sized system in 2005. It was a 3 person team and a 3 year, 2 phase rollout. The company was a software vendor and it was a major surgical documentation system that integrated with our flagship product, and multiple third party inventory control systems. I was responsible for the entire project, soup to nuts.
I did the the project plan and estimation, the hiring of the other two developers, the allocation of tasks based on ability, the database design, the ORM, the overall architecture of the app, handling any personnel issues, and a bunch of the coding. I worked with QA during the testing phase, and the sales / trainers to make sure they knew what they were doing. I worked with the documentation people to make sure it was right and they knew what to write. I pulled requirements from the BA who was an expert at domain knowledge of how such a system should work, but didn't know much about computers. I worked with our beta clients to make sure their needs were met. We made it on time and on budget. It was all aspects of the SDLC and I was in charge of every facet. It was a lot of work, but very fulfilling.
It allowed me to check that box off of my accomplishments: full responsibility for a major system that was sold to other companies. We acquired another company that sort of did the same thing for way to much money, and they ended up shelving it 2 weeks before the user's group that was to announce it to the public to justify the overpriced acquisition. That was kinda a kick in the balls, but it was still worth it. I would liked to have seen it public though.
Now I'm writing iPhone apps on the side and designing and building complex automation engines with another company. That's pretty fun too, but I'd really like the iPhone apps to take off so I could just do that and live off it.
Also, if you get a chance and you haven't done so, work for a shrink-wrap software company, preferably small (not like MS). It's a lot different from internal IT. They're few and far between these days because everyone wants everything in a browser.
Side rant: I don't understand why someone would call themselves an architect when they aren't getting dirty implementing their own designs.
Honestly, if you are looking for new challenges IN PROGRAMMING because you love it and don't want to go to the dark side of management/marketing, I think that's a great thing.
Try considering branching out into the realm of the computer taking input from the larger world, better comprehending the world it finds itself in, or manipulating somehow the real world. Look at the challenges of Speech Processing, Image Processing, BioInformatics and Artificial Intelligence. All fields require you beginning with a solid understanding of programming and then learning something else and then putting the two together. Too often these challenges get attempted by a bunch of grad students operating like code monkeys to solve some problem in a lab that would be overwhelming to make work in any kind of more general setting -- but a true programmer knows how to refactor the challenge several times over and can write the gorilla programs that write the monkey programs to write the final program.
All those code snippets and algorithms you have in your toolbox by now become the starting point for something else much cooler and tangible to measure / demonstrate / take pride in than just units shipped until Mitt Romney comes to buy out your next company.
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.
Take what you've known and are good at and branch into a something slightly different.
Focus on security and testing applications for vulns or working to exploit them
Move from consumer to industrial or embedded side of things
Look for a teaching job
Find an industry you are about (biometrics, green energy, NGO, etc) and do the job to help advance them instead of just programing for a job
And yes, if you can afford it, take 6 mo off. Research, read, relax, etc. You can bill it as a sabbatical on your resume as long as you can show some output from it.
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
Right out of graduate school twenty years ago I started as a senior software engineer. That's still my title, and I suppose I will retire a senior software engineer. After a couple of brief stints in management, I noticed that that is not where I can contribute best.
The HR people keep lecturing on "career advancement" opportunities as though everybody hated their job or were unfit for it. It just may be that you are lucky enough to be where you belong.
As for the challenges not changing, it is a bit depressing that the advances in the field are excruciatingly slow. You end up confronting problems in every company that were solved in the 80's or before. I guess there are limits to the average engineer's problem solving skills. One nice new thing is the general acceptance of garbage collection. One of the nasty newish habits I'm hoping the industry will grow out of is the ubiquity of threads as general-purpose context containers.
It's like they say about homelessness: if you haven't solved the problem within 3 days, the chance that the problem will last months is enormous.
In this case, if you haven't had the combined lust for (80%) power and (20%) knowledge from a young age and exercised it as naturally as breathing air, consuming food or ejaculating semen, your prospects are much worse. A failed phenotype, a darwinian dead-end; ancient patterns of DNA circling around and around mindlessly, with not two shits given until they were evolved to be given by a tiny few of the very gene vessels that we are.
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.
I'm writing this with the assumption that you may want to go to a small stage startup, since it sounds like you are in the process of leaving one.
Here in Boulder and around the country, there are monthly tech meetups where a lot of the tech folks get together to discuss the latest happenings in the area. At the start of the one here, there is time to broadcast your verbal resume and announce that you're open to new opportunities. There is also the time for companies to advertise their openings as well. After attending for several sessions, you'll a) run into a bunch of friends who will know of some opportunities and b) you'll see what is happening locally. One of the benefits of the Boulder meetup is that Brad Feld, one of the top VC's in the country, will sometimes give his opinion on the state of investing and where he sees things moving.
I guess to summarize, get out there and see what is happening. Something will interest you, it is just a matter of figuring out what it is.
The pay is somewhat lower than industry, but not obscenely lower, if you're a tenure-track prof; at a mid-tier uni, in a normal city, you can probably make 80-100K (which is way above the median in my city for a *technical* guy; of course, you can make much more by becoming a PHB :)
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.
Maybe work as an independent contractor? You've gotta switch project often, pick on projects to work, higher level of accountability, exposure to different industry domain, but not as much marketing/accounting as owning a business. Obviously you still need to look for new contracts all the time, and more riskier than employee.
Lead developer then
Application Architect then
Solution Designer then
Technical Architect then
Enterprise Architect then
Chief Architect then
CIO
Come on folks. Learn the lingo.
I say this as a CIO who followed the path above.
I am faced with a similar problem myself. So recently I decided to remain at my current company (the grass is always greener... anyways), and to make my job interesting by spending a little time each week on my own pursuits: like learning new tech to improve our product suite, creating nice dev tools to help make the day-to-day tasks a little easier, and trying out (in prototypes) new features for our products. These things keep me interested in my career position, and I have to believe they will actually help me advance in my career. To answer your question, I would look for in the next hypothetical position: try finding projects in a new problem domain / industry, or something that will require you to learn new tech. In your 10 short years, you certainly haven't covered every domain / industry / coding tech, and those things are constantly changing anyways, change is always good ;-)
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.
1. The first thing is thinking that you can throw things out there and ask people to help. If you start off with some ‘kumba-ya feeling’ where you think people from all the world are going to come together to make a better world by working together on your project, you probably won't be going very far.
2. The other thing—and it's kind of related—that people seem to get wrong is to think that the code they write is what matters. Way too many projects seem to think that the code is more important than the user, and they break things left and right, and they don't apologize for it, because they feel that they are ‘fixing’ the code and doing the right thing.
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.
Architecting complex systems is a challenging and in demand skill set. If you are as competent as you claim you are a natural next step would be to become an overall systems architect/designer. Someone who conceptualizes the overall system.
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.
It took me a while but I now realize that while coding is fun, coding for a living is a shit job and in the past ten years the Australian development industry has morphed into a cottage industry with all the larger players now out sourcing overseas. I now remove venomous snakes from peoples houses and believe me, it is much more relaxing than dealing with customers and PHB. My clients are invariably grateful and pay up before I start.
Take the next step, become a quant. You might be able to retire early...and not want to!
Any of the above could work...but it depends how you define the "same challenges" you'd like to avoid.