I've had a successful 10-year career in enterprise system and network administration, but I feel like I am at the point where my personal development has stalled. I am the kind of person who has to always be learning, and while I certainly do not consider myself a master, the truth is that I am getting bored.
In planning what to do next, I am seriously considering going into development. I have written some complex applications for systems monitoring, management, and reporting; and while they are no where near as deep as any enterprise application, I enjoyed writing them and they are work that I am proud of. I find automation to be the only interesting part of my job any more, and I spend more after-hours time on dev blogs than on systems/network blogs.
My goal right now to figure out two things: 1) If a career-transition is actually feasible, 2) what a 6-18 month plan for preparing myself would look like, and 3) how I should go about marketing myself when the time comes.
As far as #1, I feel like I am in a fairly good position. I would be looking at an internal position, and we have about ~2,500 java developers with around 10 positions open at any time. The company is friendly to people moving around, and actually encourages it. I work on the application deployments from the ops side, many development teams, and their management, know me as the first person to reach out to. I have received multiple awards from dev managers for my work in deployments. For the most part I think they respect me a smart guy who can do good work, my challenge would be to convince them that I can write code. I would need to be able to make a convincing argument that my demonstrated work ethic, technical knowledge, domain knowledge, and experience with production systems can help them out more than someone who has experience as a line coder.
So, I have the impression that transitioning is possible, and that I have a good chance for success. However, there is something at the back of my head that says "they'll never hire you, you'll never be able to cut it, you won't be any better than a guy right out of college, etc". So, any stories from anyone else who has successfully transitioned, I would love to hear.
Given this I have decided train for enterprise development for the next 6-18 months. If I decide not to jump, or if I try to jump and am unsuccessful, I will have had a lot of fun, and be able to relate to developers better.
I would consider my core java skills to be mediocre in most areas, with a major deficiency in multithreading (as I have never done it in Java before). I have a computer science degree from a school that was java-centric. I spent a few years doing security code review and vulnerability proof-of-concept development and became somewhat notorious internally for telling people that their baby is ugly. I have a few toy android applications. But, primarily today I am a Perl programmer, as it fits well into the nature of my sysadmin job.
I think it is probably a good idea to do a brief refresher in core java, and as such I am thinking about pursuing the OCP:JP (previously SCJP) certification. Now I know that certifications in dev aren't nearly as important as they are in sysadmin, but I am thinking it might be a good thing for me being that I don't have enterprise dev experience. Something to maybe ease a little bit of uncertainty in the interviewers mind.
(With regards to the multi-threading, I understand it isn't that critical in enterprise (due app-server/EJB), but I still will feel lame if I don't know it.)
EE is where I am weak. I *conceptually* understand JMS, in the sense that I can explain ptp vs pub-sub, but that's about it. I have a similar understanding of EJBs and web services. I understand app servers to be these big multi-headed beasts that can load modules of java code and expose them via a number of different interfaces, but other than that it's pretty much a black box.
What makes this intimidating, is that I don't really know where to start. Do I need to develop a base-understanding of all EE components, or just get really good at a couple of them (I see myself being more of a back-end guy than presentation-layer)? Is there a good basic EE course out there that covers everything, or do I need to digest each oreilly book for JMS, web services, EJB, JSP, and whatever else there is?
Is there anything that I need to learn about the specific app server (we use weblogic)? I understand that there is supposed to be one spec for EE, but if it's like anything else there have got to be some inconsistencies.
So I intend to spend a good several months doing a basic survey of EE, and then digging deep into the components that interest me, and then learning what I need to about weblogic.
The next phase, which I find much more intimidating, is learning the auxillary skills that I need to be a developer -- The workflow, the methodology, the best practices (gee, with words like that, maybe I should be management consultant). I understand the SDLC (we have our own SDLC model, which I have had training on), but I have very little concept of the developer's workflow. I've read code complete, pragmatic programmer, mythical man month, but I'm just completely lost here. I understand that design patterns is a big thing but don't know what it is other than "some problems can be approached the same way". With learning EE, maybe I don't know exactly what books to buy, but I know what subjects to buy books on. Here, I am hopeless.
So if I could sum this all up in one question, it is, what should my amazon shopping cart look like and why?
I feel like the most challenging phase will be actually selling myself when it's time to look for a job. As stated earlier, my strategy basically is "I have this unique perspective coming from ops, and through experience and self-teaching I the skills I need to do the job right now, and have demonstrated initiative and desire to excel in this position". While I think that looks good, I still have doubt.
Is it better to go with a resume that highlights projects where I have written code, which may not be the most high-impact projects, or just to highlight the best technical projects that I have worked on, regardless of whether they included writing code or not?
Do I list all of my certifications (RHCE, CCNP, CISSP, various vendor-specific firewall certs), or just the ones that are relevant to the task at hand (I figure OCP:JP when I get it, CISSP, and maybe RHCE(as red hat is our platform of choice))? I think showing all of them would re-enforce the breadth of experience that I have, but I can see how that might backfire.
Any advice, tips or pointers would be greatly appreciated, even if it's "just forget about it, you will never succeed".
I think you'll succeed! One of the hardest parts about transitioning is getting the first job in your new field (development.) Since you have the ability to transfer internally, this makes it much easier. Your current company knows you. They presumably know you do a good job, are responsible, have good soft skills and catch on quickly. (I saw presumably since I don't know you - if these aren't the case, start there!)
While JEE is overwhelming, you don't need to know everything at once. I recommend reading the JEE tutorial to make sure you understand the concepts at a high level. Not to the level of being able to code everything, but knowing how it fits together. As far as development goes, core Java is critical. Beyond that, it's good to know some open source technologies and some enterprise technologies to start. I'd recommend asking someone in your company to mentor you and provide advice in this area. Once you have a job in development, you'll learn a lot more. The first goal is to learn enough to get there. An internal person will be able to tell you what they use so you spend more time learning things that will help with that first job. I also recommend learning the IDE and source control tools this company happens to use. That's a day to day thing.
As far as transitioning to development, you've written UNIX scripts and probably more. You are much better than a guy right of college - you have 10 years of experience. At least some of which is with the same domain/business as the development group. This is a huge asset.
I started going through the wonderful Sierra and Bates SCJP book last night and I'm feeling a little more confident now.
We use SVN/CVS here which I have used in the open source community for as long as I can remember. I actually created a system to store router and switch configurations in CVS at one time. And I think developers are at liberty to choose their own IDEs ... I've always used straight-up vim but I may try looking into eclipse or netbeans.