Thursday, March 16, 2006

Waterfall 2006

If you're not practicing agile methods, maybe that means you'd like to attend Waterfall 2006.

Yale ITS Technology & Planning Java Jobs

Yale University ITS Technology & Planning has two -- count 'em two! -- openings listed. Technology & Planning is a great place to work -- awesome coworkers, good working environment, neat projects. Be interested in these jobs.


Systems Programmer I Requisition #: CCRF33463
Posting Date: 3/15/06
Department: ITS Technology & Planning Work Site: 175 Whitney Avenue
Salary Grade: 24 Duration: REGULAR - 12 MONTHS


Schedule/shift: Full Time - 37.5 HRS; Weekdays 8:30-5:00
Internal applicants send bids to: Corey Rossman, 155 Whitney Avenue

Job Description:

General Purpose
Work with a small focused senior ITS professionals that develop strategic technical directions for the University and explore emerging technologies.
Essential Duties of Position
1. Work in a collaborative fashion with a broad range of IT professionals to establish both needs and opportunities for emerging technologies.
2. Participate in large scale multi-University development efforts that utilize a fluid mix of both new and legacy development methodologies and technologies.
3. Track and evaluate emerging technologies in fields that include (but are not limited to) software development languages and environments, network, information security and telephony.
4. Produce technical white papers and presentations for consumption within Yale's ITS organization and at national conferences.

Education and Experience
1. Bachelor's degree or equivalent experience as well as a minimum of two years experience developing software in Java programming language.
2. Experience developing middle-tier applications utilizing Java Servlet/JSP technology. This experience should include familiarity with current design and coding approaches and methodologies.
3. Documented record of software development experience in either a corporate or university setting is necessary. Code samples may be requested and reviewed with the candidate.

Skills and Abilities
1. Demonstrated track record of inquisitive self-direction and the ability to learn new things rapidly and completely.
2. Familiarity with the basic principles of relational database design.
3. Experience with at least one other high level programming language is desireable but not required.
4. Technical familiarity with one of the following operations systems is additionally desireable: Unix/Linux, Microsoft NT/XP, Mac OSX
5. Excellent written and verbal abilities.



Systems Programmer III Requisition #: CCRF33464
Posting Date: 3/15/06
Department: ITS Technology & Planning Work Site: 175 Whitney Avenue
Salary Grade: 26 Duration: REGULAR - 12 MONTHS


Schedule/shift: Full Time - 37.5 HRS; Weekdays 8:30-5:00
Internal applicants send bids to: Corey Rossman, 155 Whitney Avenue

Job Description:

General Purpose
Take a technical leadership position working with a small focused staff of senior ITS professionals that develop strategic technical directions for the University and explore emerging technologies.
Essential Duties
1. Facilitate and lead in collaborative fashion projects involving a broad range of requirements as well as customers.
2. Participate in large scale multi-University development efforts that utilize a fluid mix of both new and legacy development methodologies and technologies.
3. Work with the University IT leadership to establish goals and directions for foundation technology that serve us into the future.
4. Track and evaluate emerging technologies in fields that include (but are not limited to) software development languages and environments, network, information security and telephony.
5. Produce technical white papers and presentations for consumption both within Yale's ITS organization and at national conferences.

Experience and Training
1. Bachelors degree or equivalent experience as well as a minimum of 6 years experience developing software in the Java programming language.
2. Experience developing middle-tier applications utilizing Java Servlet/JSP technology. This experience should include familiarity with current design and coding approaches and methodologies as well as a concrete and demonstrated ability to evaluate, adopt and fully understand complex software frameworks and architectures.
3. Experience with at least one other high level programming language
4. Experience with the management, performance characteristics and basic principles of operation either Unix/Linux or Microsoft's NP or XP operating environment.
5. Familiarity and practical experience with project planning approaches and the ability to budget both temporal and fiscal resources.
6. A documented record of software development experience in either a corporate or university setting is necessary. Code samples may be requested and reviewed with the candidate.

Skills and Abilities
1. Demonstrated ability to lead a technical team effectively.
2. Complete understanding of relational database principles and design.
3. Excellent written and verbal communications skills.
4 Demonstrated track record of successfully identifying, promoting and deploying products and services that represent long term value to their employer as well as providing bedrock technology upon which additional services are built.

Sunday, March 05, 2006

Dr. Dobb's Journal of Computer Calisthenics and Orthodontia: Running Light without Overbyte

If you're not reading Doctor Dobb's Journal, you're missing out on some good times.

Java programming job at Yale

There's a Java web programming job available at Yale Pathology. There's more to the job than just being a Java junkie, of course: "The position involves a combination of software application and database development and system administration supporting affiliated projects." Sounds like fun!

Saturday, February 11, 2006

BulletproofFoo

Initializing a usable object in the constructor has the tremendous virtue of enabling guaranteeing that an object will only be instantiated into a good state (illegal states detected and exceptions thrown in the constructor implementations). From that point on the object can jealously guard the validity of its state, throwing on methods with illegal arguments that would compromise its state.

Where possible, make your Foos bulletproof.

Thursday, January 19, 2006

DWR - Easy AJAX for JAVA

Pretty good introduction to Direct Web Remoting in February's DDJ.

Please log

I respectfully take exception to Benjamin Booth's Pragmatic Exceptions tip #6 as published in the February 2006 DDJ (page 24).

He there recommends that you not both log and throw an exception.

Bad. This will most likely result in seeeing the same exception message at very different points in your program's execution. The problem is, it's the same error!


No, it's not. It's the same exception. It's not necessarily the same error. At least, not in the ways that matter. Context matters.

Ideally, your code will log its progress and the problems it encounters. Ideally, it will do so providing locally appropriate context. "Here's the exception I encountered, here's what I was doing when I encountered it, and here's what it means to me."

Remember your purpose in programming your module and in adding logging statements in the first place. The logging statements are to make the code more literate and to support current and future development and debugging. Logging the exceptions encountered, especially with appropriate context, is in keeping with this purpose.

When I encounter your code's exception, will it log the error before allowing it to escape the module, or will it just throw it up hoping that the outside module will log it appropriately?

I'm much happier to see an error logged twice with appropriate context, than not logged at all.

Benjamin wrote:
"[both logging and throwing an exception] sends an ambivalent message to callers of your function. The pitcher is saying to the catcher, "I'll log this now but, well, I'm not sure, it could be fatal, perhaps you should deal with it too?" This isn't only weak minded, it's also lazy and pathetic."


Wow. I think that's too harsh. I also think it's just wrong.

What my code does with an exception before it throws it is none of your code, the calling code's, business. The method signature and logging behavior are only loosely related at best. Certainly someone should be sure to log the exception, and I might provide a guarantee about whether my method will log it before it throws it to ease your handling burden. But exceptions are about much more than logging the exceptional condition. When my method throws an exception, it does so to communicate a result, and you, the caller, are advised of this result by receiving the exception, and have an opportunity to truly handle it, rather than just log it.

I wrote a letter to DDJ in response to this tip.

Senior Analyst/Programmer Java opportunity

Indiana University is seeking a highly motivated Senior Analyst/Programmer to work on enhancements supporting their Human Resources Management and Timekeeping systems deployed in a J2EE AIX Oracle infrastructure environment.

Monday, January 16, 2006

Engineering Software

Your component will fail. The input will be bad. You're going to screw up and get a null pointer exception. Even if you're perfect, some imperfect person will touch your code long after you've moved on to other projects.

So the question is this: is your system engineered to fail gracefully, or will it do the domain-equivalent of cutting the user's finger off?

Tuesday, January 03, 2006

Implementing Copy Constructors using Spring BeanUtils.copyProperties()

I got interested in automating copy constructors today and realized what perhaps is obvious and certainly others have already realized: that Spring's BeanUtils copyProperties() method can be an effective tool for quickly implementing copy constructors with support for copying appropriately from within a class hierarchy.

Sunday, January 01, 2006

On What Computer Science Is

I found interesting Joel's post on what Computer Science is, and what it is not, and perhaps on why my career is so different from what I studied in college.
A particular zinger that hit close to home:
But JavaSchools also fail to train the brains of kids to be adept, agile, and flexible enough to do good software design (and I don't mean OO "design", where you spend countless hours rewriting your code to rejiggle your object hierarchy, or you fret about faux "problems" like has-a vs. is-a).

And, on why becoming a Java programmer is an insufficient aspiration:
"I have never met anyone who can do Scheme, Haskell, and C pointers who can't pick up Java in two days, and create better Java code than people with five years of experience in Java, but try explaining that to the average HR drone."

Becoming an effective Java programmer is the employable side effect, not the goal, of a computer science education.
Makes me kind of want to work some CS 223 and CS 323 problems just to keep my brain from atrophying.