tags:

views:

120

answers:

8
+5  A: 

debugging techniques

Matt Briggs
yes good idea that should be part of the course.
Dan
+2  A: 

You need to teach them how to:

  • Read other people's code for comprehension
  • Work within a legacy code base (the steps, from reading to building to running tests to modifying)
justkt
+2  A: 

In addition to what you have, working in teams on a mid-size project. This will also (hopefully) help them see the benefits of source control, testing, and documentation.

Another answer mentioned debuggers. In the same respect, I would also give an overview of profilers.

Justin Ardini
+2  A: 

One thing I wish my professors covered more in my programming courses was using IDEs effectively. My professors mentioned that we should check out Eclipse, but never really taught us how to use it to its full potential. Even now I frequently find new features of my frequently used IDEs that save me a LOT of time doing trivial tasks.

Once you get past the skillset needed to be a coder, I think the next step is learning to code smarter and not harder.

Dave McClelland
...OR teach them how to use vim effectively so they never need IDEs.
Matt Briggs
@Matt Definitely a good point. I wasn't trying to advocate "teach them Eclipse," it was "teach them to edit their code quickly and efficiently."
Dave McClelland
+3  A: 

The theory that's probably necessary:

How to sort an array with something that's not O(n^2)

The very basic data structures; array, list, tree, stack, queue, heap are the first to mind.

If not how to write them, then absolutely why you'd use a tree over a list over an array, or vice-versa.

The practical knowledge that's also necessary:

The book The Pragmatic Programmer covers most of what you're asking here.

Eclipse. How to work a debugger. How to work a profiler.

Ant.

Some basic web framework; Struts, Spring, etc.

Apache Commons, JAXB, a SOAP library, a REST library.

How to read bad, uncommented code. How to refactor it bit by bit to be maintainable.

What a good comment is.

HTML, CSS, JavaScript, JQuery, in that order.

Validators (W3C), formatters (Jalopy), checkers (PMD, FindBugs).

How to use a piece of Bug Tracking software; how to write a good bug description, how to explain what you've done to fix it, and how to handle user expectations.

Actually, that deserves it's own line; how to handle user expectations and conflicting timelines and goals.

Dean J
"The very basic data structures; array, list, tree, stack, queue, heap are the first to mind." I seriously hope that these students have already had a Data Structures class.
R. Bemrose
@R. Bemrose: I'd hope that too, but 95%+ of applications I get for "Junior Java Developer" can't even work out an insertion sort, let alone something more complex. It's frustrating, as that's Just Something You Should Know.
Dean J
+2  A: 

Code reviews.

Receiving and giving code reviews is not very easy and quite often people get annoyed quite easily, especially the one whose code is being reviewed. But it is very useful to be forced to take on criticism and to explain your decisions. For the reviewer it requires you to read other people's code and to be able to point out the problems in it and of course to describe why you think the developer has done something wrong.

ponzao
+1  A: 

I'd dedicate a fair chunk of time to UML and pseudocode design. Writing a quick spec or even a few lines of pseudocode takes some practice and has tons of benefits. Another thing I'd recommend is build procedure. While this stuff varies from place to place, a primer on things like Ant, continuous integration, etc would be great.

nolegs
+1  A: 

Sounds like you want to teach software engineering more than Java. You have covered most of the main topics however, I would suggest the following as well:

  • Software Architecture: There is design and then there is architecture. Understanding how different components will/should interact in a project is important
  • Requirements gathering: Getting the actual spec from the "business owners" is a valuable skill. Too many people think that actual requirements for a project will just be given to them.
  • JDBC/Databases: You have to touch on databases if they are going to be useful on day 1.
  • MVC: I don't think it is important to go through all design patterns however, it is definitely worth mentioning MVC. It is an incredibly important pattern for Web development and really can be applied to most anything.

1 year is not a lot of time to turn someone into a software engineer. There is a lot of practical experience that has to be developed and generally speaking, that is why a Bachelors is 3-4 years.

Chris J