Hello
Java Ranch,
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".