views:

504

answers:

12

I need to have an at-home project now that I'm working on Python/Django at work. I'd like to learn something new, so I was thinking of checking out Java.

What's the most well respected web framework for deploying Java web apps? The only reason I'm not checking out ruby on rails is because of how similar the ORM and other parts are to Django.

Alternatively, does anyone think I should take a look at seaside/smalltalk? Can anyone explain why I should?

Haskell is something I'll consider if anyone can make a good argument for it. I'd need a web framework and database access library to go along with it though.

I'd consider factor/forth if I wasn't so accustomed to the stack paradigm via x86/asm. I'd be willing to hear any counter-arguments to this as well.

See also: http://www.reddit.com/r/programming/comments/9v3uf/asm%5Fc%5Fpython%5Fperl%5Flisp%5Fscheme%5Fprogrammer%5Flooking/

+14  A: 

With that range of skills, why don't you learn something more outside your comfort zone, like carpentry or painting, or any of hundreds of other skills that have little to do with your field.

At some point, all languages are the same and you'll get scant benefit from learning another.

Whereas, with something totally different, you will become a much more well-rounded individual. I, for one, like painting and golf, even though I'm not that good at either of them - when I asked my golf instructor what my handicap was, he said it was an inability to hit the ball straight :-)

I find that I enjoy doing stuff I'm not accustomed to since it's a genuinely new experience. Learning another computer skill is a easy thing to do after a while and hence the pleasure from doing it is reduced.

Don't get me wrong, I like to keep up with developments in the field but, for the most part, the brand new technologies give nothing to my career since most work I do is on stable technologies. You may be in a different situation.

paxdiablo
I once painted. I ended up going for 90 hours straight producing a copy of an old Delaroche in a slightly different style.In other words, ended poorly.Carpentry? I'm in NYC. Not happening.I want to get better at programming, it's the only thing that has a significant impact in my life.If I come across a potential non-programming related subject that I could study/practice, I'll seriously consider it due to your advice, but I'm not going to go out of my way to pursue something like that.
callen
"At some point, all languages are the same." We're a long, long way from that point.
itowlson
I think what he means is that there's only so many ways you can try and whip a stupid computer to your will.
Benjamin Peterson
@adriyel, I'm assuming you don't mean 90 hours straight (without sleep). Otherwise, that's probably why it ended badly :-) But keep that in perspective, that's only a two week effort (based on 40-odd hours a week) - I doubt you'd get proficient at *anything* in that time. But I understand you want to concentrate on programming if that's what makes you happy, that's fine, to each their own. I was just putting forward a possible alternative. @itowlson, I don't mean at some point in the future, I mean at some point in my career I realized that all languages come down to the same concepts.
paxdiablo
The concepts may vary somewhat but, once you've mastered a few languages, there's little difference. There's *no* difference between asm, C, Pascal, Fortran, COBOL et al. There's *no* difference between any of the OO languages. In fact, OO is just an extension to the encapsulation we were already doing in earlier procedural languages. F# may be different, I haven't looked, but just about *every* language I've seen boils down to the very old sequence/selection/iteration model.
paxdiablo
No, I mean 90 hours straight in a single week. That was one particular painting. I spent maybe 3 months painting before I burnt out horribly. I don't care about hobbies. I don't care about wood. I don't care about paint, I don't care about aesthetic. All I care about is advancing my programming skills. I've spent enough time twiddling around with philosophy, history, law, and a variety of other subjects. I just don't care about any of them anymore. I just want to become as good a programmer as I can and focus on retiring ASAP.
callen
A: 

What about the Java Spring framework?

http://www.springsource.org/

Or maybe NHibernate?

http://en.wikipedia.org/wiki/NHibernate

At the end of the day its up to you. As I only listed two out of many. When I am programming a static language professonally... I try to learn a dynamic or scripting language. And vice versa.

Also, I try to learn something totally different or outside my realm... maybe even Powershell or Korn shell or ActionScript.

Kris Krause
Powershell or Korn shell wouldn't challenge me in the way I'm seeking and wouldn't be applicable to a side business idea I have.
callen
Also @NHibernate, I just got out of the .NET world, I'd rather not go back.
callen
A: 

What's the most well respected web framework for deploying Java web apps?

There is no single web framework more respected than others. Struts2, Spring MVC, Stripes or Wicket (which is event based) are all good candidates (I personally like Stripes). But you'll need a bit more for the persistence (Hibernate or JPA) and for the glue (Spring).

Grails (Groovy on Rails) is another good option.

Alternatively, does anyone think I should take a look at seaside/smalltalk? Can anyone explain why I should?

Well, I guess that learning Smalltalk can't hurt but I don't see a good reason to choose Smalltalk over a moderner language like Java. Regarding tooling, I don't know anything in this field except VisualAge for Smalltalk but, personally, I'd really stay far away from it.

Haskell is something I'll consider if anyone can make a good argument for it. [...]

Looks like I'm not the right guy for that.

I'd consider factor/forth if I wasn't so accustomed to the stack paradigm via x86/asm. I'd be willing to hear any counter-arguments to this as well.

Same as above.

Pascal Thivent
Web apps in Java generally shared state or are they more like Django/rails?What are the differences between the various web frameworks you listed?
callen
+2  A: 

From your list I'd say you are due for a completely object oriented language.

You could check out Ruby, but I'd recommend JavaScript since it offers a lot of interesting things you probably wouldn't expect, like support for closures, higher-order functions and prototypical inheritance - plus it's kinda fun and becoming very popular.

Marcus Booster
List wasn't complete, I've coded in Ruby, just not rails. How is Python not completely objected oriented whereas Ruby is?I use closures in Python regularly.http://ivan.truemesh.com/archives/000392.htmlUsed Javascript before too, just don't care for it.I was trying to avoid having to list/nix everything in the world I've touched by guiding the conversation towards a few different technologies. You chose to ignore this and that makes me sad. :(
callen
I guess if you already understand imperative, functional, and object-oriented programming then I don't think you're going to find in yet another language some new way of expressing computation. Why don't you start looking at some of the hard problems we're facing such as concurrency on multi-core machines. To that end I'd recommend taking a look at Clojure on the JVM and the its Compojure web framework. You'll deal with Java but it isn't exactly popular (but neither is Haskell or Smalltalk for that matter).
Marcus Booster
+6  A: 

Haskell is pretty popular these days as a mind-bender, though it may not hurt as much for you if you already know Lisp and Scheme. It's purely functional, so there are no side effects to anything. You have to use monads to print text and do other things that require a certain order. It's also completely lazily evaluated, so you can make infinite lists in Haskell and not have to worry about memory consumption.

The Haskell Platform may not be fully complete, but is intended to be a portable set of libraries for Haskell. It's list of packages includes some for CGI handling and (X)HTML generation.

Chris Lutz
So in other words, there isn't a web framework. That knocks it off the list, going to apply to this a side business idea.
callen
I never said "there isn't a web framework," I just provided a simple bundle of relatively mature web tools. Check here (http://www.haskell.org/haskellwiki/RPC) if you want a list of other libraries that may interest you.
Chris Lutz
+3  A: 

I do suggest Java. When I was looking for a job, I noticed lots of openings for Java developers, so there's a lot of it out there, and you might someday have a chance to use your Java skills.

And then you should try out Scala. Scala is a sort of Python-ish language that uses functional programming to make very scalable programs. Unlike Python, in Scala you do need to declare types of things. Scala runs on the Java Virtual Machine so it can be used in Java shops.

http://www.scala-lang.org/

It's possible I'm just giving you this answer because these are the next two languages I intend to learn, myself.

You probably should also spend a little time playing around with Javascript. Javascript was sort of intended to be a "stealth Lisp" and I imagine you would pick it right up.

http://www.crockford.com/javascript/javascript.html

http://bc.tech.coop/blog/030920.html

And heck, have some fun with it. Write a game or something!

steveha
A: 

I would have suggested mastering Lisp (in some relevant dialect) so even if you have Lisp and Scheme on your resume, it might be worthwhile to REALLY learn deeply. See http://www.paulgraham.com/avg.html for reasons why.

Otherwise Prolog might interest you. It is related to SQL but for programming instead of communicating with an organised set of data tables.

If you want to target web technologies I only have experience with Java. Here the newest Java Server Faces (JSF) allow for using Ajax to update pages, and Google Web Toolkit allow for very rich component based web pages. These might be juicy enough to interest you enough to learn enough Java to find them fun :)

Thorbjørn Ravn Andersen
I don't "have Lisp on my resume", I've gone through SICP twice and Graham's Lisp book once. I understand it just fine. I learned a lot. Time to move on. I really don't like it when people are presumptuous.
callen
In that case I would suggest iPhone development...
Thorbjørn Ravn Andersen
+2  A: 

I'd need a web framework and database access library to go along with it though.

If all your programming is based on web frameworks and SQL databases, you will only be solving the same problems with different syntax if you switch languages.

Build something using a different data model - Prolog, Conceptual Graphs, RDF, Linda/JavaSpaces, XQuery, HDF5, ASN.1, or a different network model - XMPP pub-sub, SNMP, a zero-config mesh or a swarm of ZigBee enabled Arduinos.

Maybe look at languages like Oz, Io or Erlang/OTP, which are distributed rather than primarily monolithic like the ones you mention.

Pete Kirkham
A: 

I don’t see C# and the .NET platform on your list. And I am surprised no one mentioned it yet.

I have worked in C# for 5 years. I have looked at some Java code but I have never coded in it. I believe that Java is somewhat similar to C# enough so that if you become proficient in one I think you could pick up the other is a matter of a few days.

One idea might be to create your own language / compiler. The one I would like to create (or see created) would be an Assembly Language level compiler with an object oriented syntax that would be very much like Python… but make it typed language. You could start with the basic raw binary types db, dw, dd, and then add on to these … The functions and methods could have assembly language freely mixed in the high-level code. Now, that would be a fun project, I think ?

jarhead
Been a .NET developer for 3 years, recently abandoned it for a Python/Django job. No-thank-you.Implementing my own language/compiler is a much more interesting prospect for me. Typed and object-oriented asm? I don't know how that would work. If you cleaned up the syntax I think it would be something like factor. (Stack based, dynamically typed)Seen here: http://factorcode.org/As interesting as it would be, I'd rather write a superset/clean-up of the C programming language ala ooc. Perhaps something with immutability for concurrency.I'll be pondering over it.
callen
A: 

Definitely try Haskell or Smalltalk or Forth.

I would say Smalltalk would be most useful while Forth would get you away from the x86 asm and C bullshit. There's more than one way to code close-to-the-hardware stuff.

omouse
+3  A: 

Sounds like you're into web programming, so smalltalk/seaside is a great one. IMO everyone should learn smalltalk even if they never use it, and seaside is a really different web framework than what you are used to. Django, fer instance, is all about REST, while the seaside philosophy basically says "to hell with REST."

And if you've never coded in an image based environment there's just something about it that seems... natural, magical even. Lots of IDE functionality that originated in smalltalk have been implemented in file based language IDE's, but it always feels like an unnatural grafting, where those same features feel as if they simply belong there in smalltalk.

Check out Pharo. Give it enough time to get used to the fact that there's no menu bar and see if it doesn't grab you.

mystylplx
I actually come from a systems programming background, web programming is just my day-job.Going with this suggestion because it'll be an alien experience.
callen
A: 

Hi!

Why don't you try OCaml? And if you ever happen (sadly) to return to .NET world - you will have knowledge of F# in your baggage.

Bubba88