PDA

View Full Version : Becomming a better java programmer



printLn
March 14th, 2008, 04:12 AM
I have some experience under my belt but not enough to be considered a good java programmer. I want to get involved in open source projects, what is the best way to go about this? I've tried to read the code on two projects but they just blew my mind, Is this normal? or do i need to work with more smaller applications? Any advice from gurus would be much appreciated!

LaRoza
March 14th, 2008, 05:27 AM
I have some experience under my belt but not enough to be considered a good java programmer. I want to get involved in open source projects, what is the best way to go about this? I've tried to read the code on two projects but they just blew my mind, Is this normal? or do i need to work with more smaller applications? Any advice from gurus would be much appreciated!

You will find that most projects are large, otherwise they wouldn't be projects :)

You can help in other ways, I am sure freshmeat.net has a Java project (you can search by language) that you might be interested in. Debugging can be most useful.

Or you could write small applications that you would find useful, or that you think there is a demand for.

What other languages do you know? An important part of being a good programmer is not being tied to a single language or paradigm.

bmeyer
March 14th, 2008, 05:48 AM
Picking up a book or finding a website about Object Orientation topics would greatly help you -- if you haven't done so already.

pmasiar
March 14th, 2008, 01:09 PM
"Some experience" is rather vague expression.

Yes, it is normal that any interesting project is bigger than average homework :-) If you are writing something for weeks, months, even years, code just grows on you!

Additional complexity is that java is rather verbose, any interesting code has lot of boilerplate code and "design pattern" based code, so to see code in bigger granularity you need to understand patterns - "Head-first patterns" is excellent intro book.

Seems like you may need also some training tasks to grow from simple homework problems to real-life problems. Excellent classic book was "Etudes for programmers" by Wetherrell (?sp) but was issued last time in 79 :-( Get it if you can. My wiki has training tasks, some from Etudes (as I remember them).

LaRoza
March 14th, 2008, 01:53 PM
Seems like you may need also some training tasks to grow from simple homework problems to real-life problems. Excellent classic book was "Etudes for programmers" by Wetherrell (?sp) but was issued last time in 79 :-( Get it if you can. My wiki has training tasks, some from Etudes (as I remember them).

Seems like a good book, but a bit expensive for the average starving student :) (I am going back to school to get my Bachelor's degree)

http://www.amazon.com/Etudes-Programmers-Charles-Wetherell/dp/0132918072

kthakore
March 14th, 2008, 01:59 PM
I have a similar problem, or rather challenge! I am a 2nd year software engineer, and I want to begin applying my academia to real life (open source) projects. This means that no matter what code it is I as a software engineer should be able to help out with the design, development, implementation, and testing cycles (that is what I believe a software engineer should be able to do). BUt therein lies my rub, I want to work on open source project (mainly cause well... I can since the source is available), but most open source project don't seem to follow any design process, or any that I have learned, or maybe I just suck as a SE. SO if anyone knows projects that have a well followed design process let me know please.

themusicwave
March 14th, 2008, 03:06 PM
I have a similar problem, or rather challenge! I am a 2nd year software engineer, and I want to begin applying my academia to real life (open source) projects. This means that no matter what code it is I as a software engineer should be able to help out with the design, development, implementation, and testing cycles (that is what I believe a software engineer should be able to do). BUt therein lies my rub, I want to work on open source project (mainly cause well... I can since the source is available), but most open source project don't seem to follow any design process, or any that I have learned, or maybe I just suck as a SE. SO if anyone knows projects that have a well followed design process let me know please.

I Just got My B.S. In Software Engineering and have been in the "real world" for about a year I can tell you that the "real world" doesn't always use best practices. They just make stuff work, sometimes barely work.

Also, sometimes the Waterfall model is just too rigid. It's great for big systems and such, but for Open Source it doesn't always make sense. There are other Design methodologies like Agile, Extreme Programming, Evolutionary Design, etc that often make more sense depending on the project.

There are probably some projects out there that have a god development process.

You most likely don't suck as a SE since you know you should be using good practices. The ones who tend to suck are the "The code is the documentation" and the "Specs are a waste of Time" and my personal favorite "Why test now, we can do it on site at the customers factory on install day!". That's bad Software Engineering.

I generally don't follow best practices because I am not allowed or given the time. So I do the best I can and just make it work. I know the process sucks, but there isn't much I can do...

But what do I know I'm still a college kid at heart :)

dempl_dempl
March 14th, 2008, 04:45 PM
Seems like a good book, but a bit expensive for the average starving student :) (I am going back to school to get my Bachelor's degree)

http://www.amazon.com/Etudes-Programmers-Charles-Wetherell/dp/0132918072


And that's why we all love brotherly file sharing :-D :

This one is also expensive, in paper format:

*SNIP*


Cheers!

kthakore
March 14th, 2008, 06:06 PM
Thanks for the assurance. Also what is the god development process? I tried google but didn't get anything relevant.

Also what do you suggest I do to improve not only my chance of getting a job ( as co-op or after graduation) but also improve myself as a software developer.

I was thinking something along the lines of:

Starting my several projects where I work with some friends:
- use different design processes (Spiral, XP, aglie, test driven, product lines etc..)
- use different level of languages (Low: c, High: c++, java, .net, Very High: Python, lua)
- create a code base of over thousands of lines of code ( As many of the projects we do in schools are like 100 - 500 LOC, but many projects have like 1000s loc)

and personally:
-Also master one low level, high level, and very high level language ( C, C++, python)

The goal is to hava a portfolio of work showing my skills in several design processes and languages, and my mastery in each level of development which I can hopefully expand to any projects I need

themusicwave
March 14th, 2008, 06:11 PM
Thanks for the assurance. Also what is the god development process? I tried google but didn't get anything relevant.

Also what do you suggest I do to improve not only my chance of getting a job ( as co-op or after graduation) but also improve myself as a software developer.

I was thinking something along the lines of:

Starting my several projects where I work with some friends:
- use different design processes
- use different level of languages (Low: c, High: c++, java, .net, Very High: Python, lua)
- create a code base of over thousands of lines of code ( As many of the projects we do in schools are like 100 - 500 LOC, but many projects have like 1000s loc)

and personally:
-Also master one low level, high level, and very high level language ( C, C++, python)

The God development process is the latest thing in programming. It's where a programmer tries to type the word good but gets God...it was a typo.

That sounds like a decent plan. Honestly though I had no trouble finding a job in Pittsburgh. If you GPA is decent you should be fine. I am still figuring out this whole career thing, I only have 1 year out of school. I had 3 offers during finals week before graduating. SEs are very much in demand.

I would say search things like monster.com and dice.com and see what skills are needed for the jobs that interest you. Then learn those skills.

pmasiar
March 14th, 2008, 06:14 PM
Wikipedia has better links than google: they are cureated by humans. So to learn about any subject, I usually start at relevant wikipedia article, and follow the links.

http://en.wikipedia.org/wiki/Software_development :-)

Getting job is tricky, because you need exact mix of skills that team/position requires. We discussed that in sticky FAQ. Summary:

- Decide what your main skill is, and build on that. If it is Java shop, they don't care about .NET skills. In a sense, you need to bet on one technology/platform.
- Learn some widely used tool/framework. Web-based apps are very popular those days.
- Learn higg-level language like Python. You can use it to process files quickly, like preparing test data, even if your main language is C. Development in Python is so much faster, and you don't need the processing speed all the time.
- Get internship position, even non-paid volunteer. Later, when they see they need you and you prove you can deliver, they will find the money to keep you around.

ZylGadis
March 14th, 2008, 07:14 PM
I have a similar problem, or rather challenge! I am a 2nd year software engineer, and I want to begin applying my academia to real life (open source) projects. This means that no matter what code it is I as a software engineer should be able to help out with the design, development, implementation, and testing cycles (that is what I believe a software engineer should be able to do). BUt therein lies my rub, I want to work on open source project (mainly cause well... I can since the source is available), but most open source project don't seem to follow any design process, or any that I have learned, or maybe I just suck as a SE. SO if anyone knows projects that have a well followed design process let me know please.

You most probably don't suck at SE. It is the things that SE is thought to comprise that suck (processes, etc). I am a Ph.D. Candidate in SE, have designed and taught an advanced SE course, and have participated in quite a few FLOSS projects. I can tell you that academic/industrial SE and FLOSS simply don't mix.

The most important goal (I'd say the only goal) a software project should have is that the product works. Everything else should either be an afterthought, or a means to that goal. Industry's goals are vastly different from the ideal situation: industry cares about money and nothing else. If you take the classic tradeoff in industry a SE project should make, you have time, quality, and money spent at odds with each other: increase one, and inevitably one (or both) of the other two are decreased.

The FLOSS world, luckily, does not suffer from the above misconceptions. There is little or no money involved. The contributors do what they do because they can and want to do that, not because they chase paychecks. This is an extremely important difference between FLOSS and industry, because it simply means you can let loose those smart, capable people, and allow them to contribute in the best way they can with a minimum amount of organization; in industry it is exactly the opposite - you typically have code monkeys who don't know much beyond OOP (if that), managers who don't know much except processes (if that), and CEOs who don't know much except ROI, TCO, and similar meaningless (to a thinking developer) acronyms.

In short, FLOSS is a bottom-up process. It is an organized chaos. It works because the participants are smart, and their goal is to make the thing work. Industrial development is a top-down process. It is a rigid structure. It works because the participants are stupid, and there is someone at the top who pushes some kind of structure on everyone else.

Do not try to apply what you know as SE in the FLOSS world. Very little of that applies. SE processes are a way of making code monkeys who don't see beyond their paycheck work in a semi-useful manner. FLOSS people do not need that - they are smart and interested.

Fortunately (for me), there are many definitions of SE. In the above paragraphs I discuss only one of them - the one you seem to be interested in.

xlinuks
March 14th, 2008, 07:15 PM
I agree a lot with themusicwave.
There's a lotta software that is generally conceived as good, but when you dig into it, and look closer at the technology and at the bits and peaces of the source code you _will_ be astonished by how sloppy some code is written. By the time you come across more such issues you will/might get the feeling that you wanna change the world.
Exactly at this moment you gotta get cool and understand what might be the most important lesson: that it wasn't necessarily written because of people not willing to create something great, but rather them not having enough time, or not being given the opportunity to do better (a matter of politics, like it is in (some) big corporations that try to play "the open source company" and restricting under the hood the rights to real open source contributors in their own interest, I don't wanna give examples for known reasons).