This is my first post. For the unpatient or time starved, my subject line sums it up. I'm trying to get your thoughts on the best way to learn several large, and I mean very large java projects for a very well known public company you all have heard of. Technologies are Java, JBoss, Oracle, Hibernate, Maven, EJB, Mercurial, Linux and using Eclipse as the IDE. How can I come up to speed on the custom code as quickly as possible? The problem is that of course I can't be a drain on the team who are all very busy. I can get an hour here or there from them, but I don't want to be a nuisance. Oh and by the way ... did I mention I have coded very, very little in Java (total beginner) and have zero experience save Linux (I'm advanced there)?
For those with more time or curiosity... (and once you recover from your good laugh, and tell me of the impossibility of it, read on)
A quick background. I have been a professional developer, lead, architect, and IS manager alternatively for at least 15 years. I worked mostly on legacy systems written in IMSBasic (huh? didn't think you had heard of it... it's a long dead language) on huge servers that processed orders for Fortune 500 companies (It backended www.lenovo.com and www.shoptoshiba.com and many others). I then specialized in the middleware servers running Apache, ModPerl, Perl, and XSL translation. I have written hundreds of thousands of lines of code probably, some extremely complex and algorithmic to get around limitations in the language to extend the life of the servers in an increasingly technical world.
I got laid off because the stuff was all replaced with SAP and I had no interest in ABAP coding, and was a manager at that time anyway, making great money, but my team was let go when we shuttered the legacy system, and so was I. But...
One of my managers who I used to report to when I was a developer remembered how good I was (I was top notch, and I'm a member of Mensa... I don't say that to brag, but to hopefully to give some context to assist with any answers you might have. I can learn fast). He saw I was in a bind and had been searching for a senior java developer for quite some time, with no success. Long story short, he's giving me a once in a lifetime shot to come up to speed on this, knowing it will take me a while, but with the hope that he gets a known commodity and a solid long term investment. My tentative plan is 6 months to be productive at least with smaller modifications and fixes.
I have been given an opportunity many would envy, and I don't take it lightly. I did earn it by proving myself to this guy who moved on to this company, and now that is paying off. But I can't fail at this. I will be spending 10 hours a day minimum on this endeavor (I am married with kids so I can't go in a hole for six months). So far I have all the technologies installed, I have access to test and prod servers, I have used Mercurial to get the code base, and used Maven to build it in Eclipse. I have my first assignment, a debug of a long time annoyance issue for users... just to get into the code. I've used a month to get to this point due to new hire stuff, access, yada yada... all the corporate junk.
Now it's go time. I have a few books, but I need to understand this code while understanding java at the same time. So... thanks for any help?
However... and a big however, if you are a complete newbie in Java, it's not going to be easy. Learning a new programming language is a lot like learning a "real" foreign language. You become really effective when you start "thinking" in Java. when you reach a point where you start telling people "DOn;t talk to me in English. Show me the code" is the point at which you can say you have started to master the language. It takes time. Just like human languages, learning one foreign language makes it easier to learn another foreign language, so it is with computer languages. Having gone through the process of learning all the technologies that you have loads of experience in will make it easier to learn new technologies. That doesn't mean it will be instantaneous though. You need to ready yourself that you may not be as effective for a year or so
I am assuming that you are already working on learning the technologies involved. If you are not familiar with OOP, you will need some time grasping the concepts. Also, start getting familiar with design patterns once you get comfortable with Java.
The best way that I have found to learn any piece of code is to debug the shit out of it. Install it, run it, make sure it works. Pick a simple use case. Find the entry point for that use case and put a break point. Use combinations of step in and step over to understand what it does. Repeat rinse with other use cases. TO do this, you will need to have a basic understanding of the technologies involved. For example, if you know how Hibernate works, you don;t need to debug into Hibernate code, because as soon as you see the call to Hibernate, you just step over it instead of going down a rabbit hole (Well, it;s fun to debug hibernate code too.. but leave it for another day)
I have a multiple pronged approach going right now. I spend some time on each of the technologies each week, including OO concepts, with the majority going to Java. But I have installed and configured all the other technologies, and try to at least get in a few hours of reading on each every week.
Meanwhile, I also am trying to make sense of the codebase using an Eclipse plugin called Architexa. It does UML type mapping of the code, so I can review it at a high level. It seems pretty good.
Also, since there is an on-call pager rotation, I am studying the common on-call issues and how to deal with them. I feel like if I can get into the rotation quickly, the other developers will be more welcoming since that is one less week for them. They understand they are getting a bit of a project in me, but so far only 2 have really been helpful... the less advanced two. The two architect level guys with the most experience are simply way too busy, and frankly I don't think they really supported the boss in bringing me on but they had no choice. So I try to leave them alone.
Finally, I do have an issue I am working that was too low of a priority for them. It deals with printing from a Swing application, through an open source driver (libusb-win32) to a specialized printer. So I can start to debug that. It is the smallest of their applications, so that helps. The field users have a work around, so time is not of the essence.
Question: I understand there is a bit of a java training course here? It costs 200? Money is tight since I was laid off, but would this be a good investment? How long on average does it take to complete, and is the response time good? I apologize for not reading all the FAQ on it. I will do so shortly, but any thoughts there would help. I really need to get to writing java now as this is my best way to learn. There are excercises in my book, but I get no feedback there.
I joined the Ranch back in 2002 as a way to teach myself Servlets and JSP by doing just that: if I didn't know that answer to a question, that was something I needed to go learn.
Agree with Bear. I joined three years after that in the hope of learning some Swing, and learnt lots. Those long posts are a bit scary for raw beginners, so I shall move the discussion.
Chris Polak wrote:I agree Jayesh, I don't expect to be anywhere near where I was programming at speed-wise and elegance-wise until at least a year or more. I just have to be reasonably proficient and productive at 6 months... enough to sort of grant me another 6 months to improve.
I don't have much more to add to all the great advice except to say this: Java, like pretty much any other programming language, works best when you understand the problem you're trying to solve empirically. Therefore: don't expect to be able to solve problems by coding.
Indeed, as an Object-Oriented language, it's probably even more important to understand what you need (or you're trying) to do than how you're going to do it - and code is all about HOW. Hopefully, your previous experience has already given you a good grounding in how to analyse problems, but just FYI, you might find the StopCoding (←click→) and WhatNotHow pages worth reading.
Another point: Learning to 'think "objectively"' is likely to be the biggest hurdle you have to overcome, especially if (like me) you came from a procedural language background. The problem is that Java is a bit of a hybrid language, so it's quite easy to write "procedures" rather than objects if you're not careful. It took me about 10 years to get to my MomentOfClarity, but I'm not a Mensa candidate; and it certainly doesn't mean that you can't write good programs in the meantime if you follow the lessons I suspect you've already learnt (modularity, loose coupling, etc).
The very best of luck with your journey.