Live data from Hacker News

Ask HN: Enterprise Java guy needs advice on what to transition to

news.ycombinator.com

21–30 of 57 posts

Re: Ask HN: Enterprise Java guy needs advice on what to transition to

#21
It all comes down to what kind of software you intend to make (and frankly, who you intend to make it for). If you want to write a 3D video game, Python and Ruby aren't exactly your best bet for example. Likewise, if you're inside some company with a JVM mandate, your options can be limited as well. I can only comment on web app development since that's what I do most. My advice would be to pick up Ruby (and Rails) or Python (and Django). You might also try out Scala. Lift appears to be a pretty nice alternative to the morass of heavy Java web frameworks, though it's much less mature than something like Django or Rails. Coming from Ruby and Python though, when I work in Scala, it still feels a tiny bit heavy to me. I think for you, a clean break from the Java world sounds like it's what you need.

Managing a substantial Python (or Ruby) project is easier than you'd imagine because there is so much less code and configuration. There is also less "architecture astronautism" with all the layers of abstraction hiding what's really going on. You can still have some of that, but in my experience, it's pretty rare.

The biggest issue when stepping outside the JVM (in my opinion anyway), is dependency management. The libraries you want may often not be pure Python or Ruby, but have C/C++ stuff in there too. This can make setting up an environment on multiple OS platforms tricky, since you need to install (and maybe even compile) all that stuff. There's something to be said for throwing a jar on a classpath and being done. However, I suspect you'll find these languages cut development time so much that you're still ahead of the game after burning a little extra time installing some dependencies.

Performance-wise, both Python and Ruby are probably "fast enough", certainly when developing apps that are not used by large numbers (i.e. web-scale numbers) of people. Internal apps in particular run perfectly fine with no exotic caching, partitioning, parallelization, etc... There are also plenty of companies out there that operate very busy, successful public websites with both Ruby and Python, so in general, the performance should be the least of your worries. Obviously, if you're looking to do scientific simulation or some other compute-heavy work, your mileage may vary.

Editors are another thing that trip people up going to Ruby and Python from Java. Take my advice: ditch your IDE and use a regular text editor with syntax highlighting. There's no way I write Java code without an IDE, but for languages like Ruby and Python, it's not necessary and the IDE just gets in the way. Keeping an interpreter window open when dealing with a library you haven't used before is far more productive. You can create some fake classes, try out some methods, and once you have a feel for the thing, move over to your editor and code up what you want. That beats the pants off autocomplete any day (and the inevitable compile, run, test cycle that goes with it).

EDIT: Oh, and learn JavaScript if you don't already know it. It's only going to get more important.

Re: Ask HN: Enterprise Java guy needs advice on what to transition to

#22
post #4

Given that you know Java, you could consider transition to Android - it is a lot simpler than enterprise Java (because it has to run on a phone) and most of the APIs have been reworked. But then that is just me.

Seconded, and extended to languages for other mobile devices. Since most things are (unfortunately) web-centric nowadays, it's a relatively safe bet that knowing how to throw code for smart-phones and tablets will keep you employed (and entertained!) for at least the next decade.

Re: Ask HN: Enterprise Java guy needs advice on what to transition to

#23
I'm surprised that more people haven't mentioned javascript as a new language to get into. Becoming an expert at it looks like it could become extremely valuable very quickly, simply because it's everywhere on the web now. It doesn't matter what backend a site has, 'every' client is using javascript.

Re: Ask HN: Enterprise Java guy needs advice on what to transition to

#24
Frankly I am tired of all the complexity and over engineering of enterprise Java. For all the effort, I find most apps are large (1+ MLOC), monolithic, hard to understand and maintained by large groups of onshore/offshore resources who just keep the stuff running by sheer numbers and have no pride in their craft.

If this is the type of thing you want to move away from, then I don't think that the problem is teams that use Java - the problem seems to be working for large enterprises.

I suggest that as a first step, ignore any questions of language/platforms/tools and instead think about what type of company you would like to be working for: a small start-up, a more-established medium size business, etc. Do you want to work in a place where the primary business product is software (i.e. a software development company), a place where software is something that is done in support of the primary product being sold, or are you interested in consulting for others?

Once you decide what type of environment you'd like to work in, then the rest of the decisions follow naturally from that.

As a single anecdote, I work for a medium-to-large software-as-a-service company business where most of our work is in Java, but we are very far from the notion of monolithic apps with 1M LOC and offshore teams.

The language/tools are not the problem, it's the people/organization.

Re: Ask HN: Enterprise Java guy needs advice on what to transition to

#25
As others have mentioned, migrating to something else on the JVM first will allow you to reuse some of the skills/knowledge you have while you gradually focus on the 'new' aspects of something else.

JRuby and Jython are both good stepping stones to ruby and python, which would give you an idea of if you want to head in those directions full time.

I'm partial to Groovy myself, and I'd consider it more a superset of Java (though technically its not). You can reuse as much or as little of Java as you want - even in the same file - while picking up the new idioms.

Groovy, JRuby and Jython will all help you dispense with much of the boilerplate cruft you see in traditional Java, without giving up the power/libraries you're used to. And they all have good webstacks (Grails, Rails, Django, for example).

Moving off the JVM, if you're looking in to web work, PHP - as much as it has a bad rep in certain quarters - is where a lot of work is. The code quality of projects you may find tends to be hit or miss, but it's certainly possible to write clean, elegant and scalable code in PHP (and I've seen some pretty piss-poor rails in my day as well - nothing's perfect). Have you considered looking at .NET as well?

As someone else said, the 'scalable' thing - don't fret about it. Anything is scalable, and each platform will have different techniques - they all have pros and cons, which may not always be apparent until you dig more deeply in to the constraints of a particular language or platform.

Find a couple platforms that are of some interest, and focus on finding some communities for those platforms (Django, Rails, Zend Framework, Grails, ASP.NET, whatever). Getting a feel for how the community thinks about problems, what they focus on (features, security, etc) will give you a sense of what you're comfortable with.

Re: Ask HN: Enterprise Java guy needs advice on what to transition to

#26
>"I have played around with Python and like it but not sure how it will scale up to a large project."

Which is more important - a new language or a new career path? In other words, would "Enterprise Python" or "YC Java" provide more of the change you are seeking? From your post, I get the sense it is the latter. Good luck.

Re: Ask HN: Enterprise Java guy needs advice on what to transition to

#27
post #4

Given that you know Java, you could consider transition to Android - it is a lot simpler than enterprise Java (because it has to run on a phone) and most of the APIs have been reworked. But then that is just me.

Good point, I like the idea that the device limitations enforce a certain simplicity on your design

Re: Ask HN: Enterprise Java guy needs advice on what to transition to

#28
Mobile markets are going to explode over the next few years. There's a lot of potential growth there and mobile developers are in high demand. But the best would probably be to try making your own app and become an entrepreneur. You should start with Android since you already know Java.

Re: Ask HN: Enterprise Java guy needs advice on what to transition to

#30

Frankly I am tired of all the complexity and over engineering of enterprise Java. For all the effort, I find most apps are large (1+ MLOC), monolithic, hard to understand and maintained by large groups of onshore/offshore resources who just keep the stuff running by sheer numbers and have no pride in their craft. If this is the type of thing you want to move away from, then I don't think that the problem is teams tha…

this is a good insight, thank you
Post reply on HN