Geertjan is a DZone Zone Leader and has posted 457 posts at DZone. You can read more from them at their website. View Full User Profile

What Advice Would You Give To Students Of Java?

12.10.2008
| 11447 views |
  • submit to reddit
Janice J. Heiss has put together a very interesting article in which a range of well known Java programmers are interviewed about the tips they would like to pass on to students. In summary, here's each of their nuggets of wisdom contracted to a sound bite:

  • Joshua Bloch: Write Lots of Code
  • Tor Norbye: Learn to Use Your Tools
  • Chet Haase: Don't Put Your Entire Application in One Method
  • Ben Galbraith: Interact With an Expert
  • Masood Mortazavi: Start Simple and Keep Learning
  • Raghavan Srinivas: Don't Be Overwhelmed
  • Cay Horstmann: First, Don't Panic
  • Arun Gupta: Try Different IDEs
  • Rick Cattell: Good Technology Is Only 10% of Success
  • Chuk-Munn Lee: Choose an Area of Your Immediate Need
  • Tom Ball: Programming Is Still a Craft  

The insights are really personal and, therefore, interesting. Read the whole collection here. And then ask yourself: what advice would you like to give to students of Java (or, probably, any programming language)?

AttachmentSize
fig-1.jpeg2.28 KB
Published at DZone with permission of its author, Geertjan Wielenga.

Comments

James Sugrue replied on Wed, 2008/12/10 - 6:21am

Get involved in open source projects. If you're a university student, now is a good time. You'll learn a lot more about the industry by getting into those projects than through any lectures!

Kristian Rink replied on Wed, 2008/12/10 - 6:30am

Hmmm, a couple of advices I tend to give to my students:

(a) Read the "how to become a hacker" section "learn how to program" which basically comes down to indeed reading a lot of code and writing a little, read a lot more and write a little more, and so forth: http://www.catb.org/~esr/faqs/hacker-howto.html#skills1

(b) Stay away from any IDE at least initially; an IDE is there to ease boring repetitive tasks for you (building things, deploying modules, running tests and the like) but you still should "master" your tools by knowing what happens "under the hood".

(c) Keep yourself from focusing too much on any programming language, learn to acquire a more "abstract" thinking as well. Learn to think in design patterns and software architectures rather than just in code blocks, functions and classes.

(d) Get yourself organized, think about structured development approaches as well in terms of gathering requirements, designing a system, doing tests and these things. Always consider how to make sure you have a way to ensure an application does what it is supposed to, or at the very least tell how close to that it is already.

(e)  Following the Zen approach: "Always keep a beginners mind. To an expert, the set of options to choose from is limited. To a beginner it is unlimited." :)

Michael Bien replied on Wed, 2008/12/10 - 6:34am

 "Chet Haase: Don't Put Your Entire Application in One Method

Cay Horstmann: First, Don't Panic"

LOL

my advice:

1. sell your TV 2. buy a computer 3. start a project

(it won't be fun without a computer ;))

Some prefere visual feedback e.g I built a 3d engine in my schooldays befor i started to study CS. Some prefere competition: http://robocode.sourceforge.net/.

also important: don't expect that you will learn programming in your university.

Bhaskar Karambelkar replied on Wed, 2008/12/10 - 11:00am

I am surprised by the fact that so many of these good folks, advice on using an IDE.

My advice , don't bother with an IDE, heck don't bother even with an advanced text editor having specific menus/functionality for Java development like jedit or something.

Initially use a very basic text editor, and command line tools like javac and java. That's the best way to learn about how stuff works. IDEs can be really helpful for rapid application development, but when you want to learn something from scratch, they can leave lots of gaping holes in your knowledge about the programming language.

IDEs can help you quickly write code that works correctly, but to really grasps the fundamentals , you have to start by write code that breaks in every possilbe way, and learning the hardway what you did wrong and what is the correct way to go about it. IDEs will never teach you that.IDEs reduce this round trip and in my opinion it is not a  good thing especially when you are trying to learn something.

 

Donny A. Wijaya replied on Wed, 2008/12/10 - 12:53pm

Mistakes are part of learning. When learning/trying something, chances are high for some people to fail or make mistakes. Chances are high for them to repeat making the same mistake for a number of times. Because of this, some programmers usually start to give up and think they are not talented for the thing they are learning. IMHO, this is a sin. They should realize that making mistake would make them a better programmer.

Mike P(Okidoky) replied on Wed, 2008/12/10 - 1:32pm

Write programs, out of your own free will, outside work, outside school. Understand that grades do not measure your abilities or creativity properly. Some people are very good at performing tasks if they're told exactly what to do. To be that creative inventor, you need to look way beyond at what others expect from you. Become that independent thinker that sees solutions without anyone asking you for them. Forget about pleasing the teacher, and strive for a much larger mission.

What got me going 25 years ago, was an obsession to be able to play 80's arcade games at home, so I started to write things like space invaders and pac man in assembler. Then I decided there has to be something better than assembler, so I started making compilers and interpreters. I've kept myself busy ever since.

People that were doing things this long, or longer, had the pleasure of dealing with more focused systems, with less distraction. Things were less overwhelming. But now these days, people are skipping this whole evolution process. They right away dive into higher programming languages, without truly understanding and having experienced the inner guts of things.

It's hard to see the forest through the trees. Instead of inventing solutions, people tell you to search for instant solutions by using what other people have already done. Why reinvent the wheel? Well, especially for students, it's good to reinvent the wheel sometimes.

Also an interesting observation I made, perhaps contrary to the above.  At an Adobe Flex gathering recently, I expected that the next generation is aware of, builds on, and benefits from all that has been accomplished previously. I thought that I would find interesting people I could to, about stuff I know. WRONG. Most have no clue what others have done. They are completely oblivious to other programming languages, libraries, methodologies. Not a single mention of extreme programming or any of these other holy methods of making people working together (eg Agile). It seems every new wave of people do everything from scratch, build using whatever system comes their way.

That means that students don't have to worry that they must learn everything that other people already know. The people students will eventually work with, are all in the same boat. You have an X amount of energy you can spend to learn how to do stuff. I guess what students need to keep in mind, that they won't be competing so much against the current crowd, but often against fellow students in the future. There are different groups of people, you'll just be fitting in with the people that are like you.

I'm not sure what exactly is the best thing to spend your time on. Just do stuff you think there is an interest for, or something that you think will be helpful and useful or something people will like. I've seen people crawl into their basement and make weird wacky stuff that noone could possibly understand. Don't do that. Open source projects are good, because it gets you communicating to other people. If you can't get any involvement from others, then maybe you're with the wrong project (or you're too protective about your work). You could make a new window manager for Linux for instance. Do one in Java, that'd be interesting...

 

aaaaa aaaaaaaa replied on Wed, 2008/12/10 - 1:55pm

Calm down, it's only ones and zeroes!

Try to have fun while working..

 

Jakub Grabowski replied on Wed, 2008/12/10 - 5:08pm

Forget about your first "finished" version of an application. Write next one and be proud with it being far better that previous release. But be careful - it never finishes;-)

Michael Minella replied on Wed, 2008/12/10 - 8:52pm

Along the lines of the "Write lots of code", my advice would be read lots of code.  If you study poetry, you do significantly more reading than writing.  When you learn to build skyscrapers, you do alot of reading and studying.  For some reason, we assume in IT that writing alot of code will make our code better.  However, I learned in my days of playing saxophone, practicing bad habits only enforces them.  By reading code writen by greats, you will learn to write better code and recognise it in the first place.  I'd recomend reading the JDK since it's open source now as a start.

Glenn Galang replied on Thu, 2008/12/11 - 5:42am

I've had to teach a few java courses and the thing I usually recomend after the courses are finished is to find a good mentor.

A good mentor for me is like having a GPS/satnav in my car when I dont know where I'm going.

Carl Dea replied on Thu, 2008/12/11 - 9:39am

Here is some advice I try to do and say:

Coding:

1) Like Nike, Just do it!

2) Find a problem and solve it with a friend (XP).

3) Learn how to debug when errors occur, use the 15-30 minute rule. (try to solve it within 30 minutes, if not someone can help).

4) Cutting and pasting is not re-use.

5) Be careful what you read online. Constantly seek the right way to do something.

6) Clarity is key. (comment, variable names, magic numbers, no convoluted things, dead code, refactor, etc)

7) Learn about coding perspectives: user of the API vs. implementor of the API

8) Don't get distracted by various biases. Learn the language well. 

9) Have fun

Design:

1) Don't over engineer.

2) Design by contract. Abstraction is your friend.

3) Stay away from premature optimization.

4) Convey with OO patterns

 

Mentor/Teachers:

1) Practice what you preach.

2) Teach one to fish, stop giving the fish.

3) Learn how to be funny.

4) Admit you don't know.

5) A good teacher is teachable.

6) Enjoy teaching people period.

Valentine Obih replied on Thu, 2008/12/11 - 8:57pm

The only way to learn software development is to develop software. I am startled that most advice here is particularly learning to program a language especially Java.

Well, my advice is to learn to develop software artefact. Develop a simple calculator, time, washing machine or temperature. Make sure you apply a methodology like Agile, JAD or XP.

Learn to write modular software, never repeat yourself EVER. Write one module and use it as many times as you want in your application. i.e. Learn a lot of Interface and learn to write your own interface(s). 

Albeit, you can never master this in one year. it will take time and you will get there with lost of software developing. Remember, you did not go to university to learn to program. You can do that at home. You are there to learn the paradigm to software development.

 Read and study amazing software engineering casestudy. You can download lots from sun.com. Like the petshop or holidays project.

They are complex piece of web application that requires great engineering skills to assemble. If you are into applet and swing, learn the Duke Bank application, the administrator interface command some ingenuity.

Finally, learn lots of theory from university it will help your theoretical ideas and appreciation of the world of IT.

Slava Imeshev replied on Sat, 2008/12/13 - 6:30pm

 

1. Start coding for money now :-)

 

Regards,

Slava Imeshev

Cacheonix - Distributed Cache for Java

 

 

 

 

EG replied on Mon, 2008/12/15 - 3:51pm

Use design patterns and frameworks based on design patterns:

 

http://jt.dev.java.net/servlets/ProjectDocumentList

http://jt.dev.java.net.

Prashanth Manap... replied on Tue, 2008/12/23 - 6:50pm

I was really surprised by seeing some of the advice to use IDE's. Yes we should used IDE to increase the speed of development but 'think before you hit the key board' policy will increase the development speed rather than using any IDE.

My suggestion is beginner should always go for the normal text editor (Wordpad) and use java and javac to compile and run u r small programs and when you start using application / web server use Ant script to generate EAR / WAR files instead of using the IDE which will have integrated servers in them. This is all my own experience.

And finally i am really interested in developing Swing application and small utlity tools Can any one suggest and give me the links which will help me to create the projects on own

David Cameron replied on Thu, 2013/01/31 - 3:21pm

Learning to think in design patterns and software architectures rather than just in code blocks is one of the first advice I would give to a Student of Java, you should focus on obtaining a degree and finding a good job where talented and passionate people are highly appreciated.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.