views:

395

answers:

11
+15  Q: 

Beyond core java

Coming to the end of the first year of my CS degree, we've done some Java but just the core stuff; manipulating strings and arrays, inheritance, implementing logic etc. I visit this website daily and I see so much stuff that is beyond me; using frameworks; managing databases etc. It makes me feel like I've just learned the syntax of Java, and there is so much more to do with it. My question is though, how do I get there? I don't think I'm advanced enough to join an open source project, which seems to be suggested often (though I'd love to) and I've looked at other similar questions on here (like this one) but even then I don't think that'd work for me.. firstly, could somebody try give me some commonly used frameworks etc and how and what they are used for? Where would be a good place to start? How did you get started in using the things you do?

Or perhaps you think I'm going down the wrong route. Should I learn another language, and just wait until the moment occurs where it's clear what I should be doing? I'm only in the first year of my degree, so far we've lightly covered Haskell and Java, and I've done a little HTML and CSS in my free time. I know that next year we cover python, so perhaps I should just wait till then and see if I prefer that? I feel like I also risk learning something in depth and then never using it...

I suppose I'm also asking for personal experiences; was there a point where you felt you'd exceeded the basic grasp of a language (does not necessarily have to be Java related) and reach a more "advanced" level?

I guess I'll put subjective tag on this, but really I just want to know how to get beyond the basic understanding of a language.

+1  A: 

There is only one way to advance and that is to read lots, practice everyday and try and actually accomplish what you want to do.

If you want to understand how to write a database backed application in Java, then do it and sit down and learn about the APIs when you get stuck.

Simon
My problem is I don't know what it _is_ that I want to understand. I learn things easily when I know what I want to learn, but I just don't know where to start and what would be necessary or useful.
Paul
+2  A: 

Actually, joining an open source project sounds like a great idea. You don't have to do anything to join, just make up your mind that you want to contribute to a particular one. Then you will have a goal.

From there, figure out what technologies they use. Learn their coding style, how they do things, the patterns that they use.

Start out small, pick a simple bug or feature and send in a patch. Work up from there.

Personally, I find that when learning something, it really helps to have a goal or task, and an open source project is a great way to do that.

Find something that interests you, something that scratches an itch. Freshmeat has listings for everything imaginable, but includes things that aren't open source and things that don't make contribution easy. Sourceforge, Tigris and Google Code are other good project hosting sites that spring to mind and have lots of active projects. Or just find something you are interested in and Google for it.

Adam Batkin
How do you think best to find an open source project?
Paul
@Paul: Updated with thoughts on finding a project to work on
Adam Batkin
http://stackoverflow.com/questions/38881/how-to-find-opensource-projects-looking-for-help/2740904#2740904
Bert F
A: 

you can probably join any open source project bu offering to work on the docs.

for frameworks, i like grails; and groovy is a fine scripting language.

i also recommend books like uncle bob's: http://www.amazon.com/Software-Development-Principles-Patterns-Practices/dp/0135974445 and or almost anything here: http://www.objectmentor.com/resources/omi_reports_index.html

Ray Tayek
+1  A: 

One never stops learning a language. One year with Java is not even learning to crawl with it. You will undoubtedly realise that you do not know all of the syntax. There will also be plenty of idioms and language quirks which you are unaware of at present.

Not to discourage you from participating in open source projects. You would be bound to learn a great deal from working in an open source project. However, as you are currently at a very early stage of your career in computer science, you might do well to wait and find out what really interests you before diving into a project that may prove to bore the hell out of you. The same can be said for the notion of learning a new language. Wait until you discover what really interests you.

Finbarr
I think there are plenty of languages where you stop learning new syntax pretty quickly, and where the idioms are pretty easy to master as well. For example, Lisp syntax is dead simple, and Ruby has very few syntax gotchas. Java has a few more subtleties, but nowhere near the level of C++ or Scala's syntax subtleties.
Ken Bloom
+5  A: 

Best way to learn is to practice. Practice A LOT. Its as simple as that. Pick a fun personal project that will push your abilities, and learn whatever you need to accomplish it. I am guessing most of the frameworks you are seeing posts about are related to developing enterprise web applications. Spring, Struts, EJBs, Hibernate, and other frameworks tend to not be the kind of thing they teach in school. This is because they are much easier to learn once you have a solid foundation with core java.

dbyrne
+8  A: 

I think that some of the things that are over your head right now (specifically databases) are things that you'll learn about as you continue in your coursework. If your coursework is well-designed, then it will focus on computer science concepts, and less on languages. So you'll learn things like databases, networking, algorithm design, object oriented design, software design, computer architecture, XML, and graphics.

The question of whether you're programming in C, Python, Java, or Haskell won't be terribly important. Ideally you should get to a point where it's easy to learn any new language quickly (to be able to read code, and to be able to write code while looking over at an API reference shouldn't be that hard). Naturally becoming proficient with a new language and its libraries takes longer.

You should spend some spare time in your course work becoming proficient in several different languages. C, Java, and a functional language or a scripting language are essentials, because teachers will throw assignments at you and require those languages even though you've never touched that language before. But learning how to deal with diverse concepts in computer science is more important.

Ken Bloom
+1 I was just typing pretty much exactly the same thing.
fearofawhackplanet
+14  A: 

Don't waste your time with Java frameworks now. They might give you some short-term satisfaction, but since you are at your first year of CS, you can spend time better, in terms of long-term "time investment". It's like getting fish vs. learning how to fish.

Learn algorithms, learn data structures, learn new languages. Given that you know Java and some Haskell, I would strongly suggest learning C, and implementing some projects in C. I interview a lot, and the systematic problem with Java programmers is weak understanding of low-level details. This is something that C will teach you.

Igor Krivokon
I've already considered C quite often so this may well keep me occupied this summer :)
Paul
+1  A: 

I've been entirely self-taught... maybe not the best way, but my method is to (1) find a project I want to do and (2) do it, learning whatever is necessary in the process.

Right now, I've just started something new. It's a 3D java program that works as both an applet and an application. Once I finish that (which should be the next day or two) I'll get to the next step: efficient, simple, bug-free 3D collision detection. My own code, not some library; it's exceedingly fun!

Vuntic
+1  A: 

Hi I like to suggest you learning data structures and algorithms.I like to tell you you should be very strong in basic concepts.Next java advanced concepts you can learn soon, when you have strong basic concepts.

giri
A: 

One idea is to figure out something you want to build, and build it.

Willie Wheeler
A: 

I would prefer you to learn some data structures and Algorithms and try to participate in Online Programming Judges and Online Programming Competitions.

Another idea would be to start with a small project and you will gather more idea. If you are interested in reading books try "Java Puzzlers", "Covert Java". These are really nice books for Java beginners.

rgksugan