Posts Tagged ‘software development’

« Older Posts    Newer Posts »

The Core Skills All Software Developers Need

Software development spans a wide gamut of technologies (e.g. C, Java, and Ruby) and environments (e.g. embedded, desktop, enterprise, web, computing infrastructure, and scientific). Despite all the variation, I believe there are core software development skills that you must possess in order to be an effective developer across most, if not all, of these different [...]

Improving Computer Science Degrees for Software Developers

Two recent experiences prompted me to think deeply about how software developers start out in the field and develop their expertise. The first experience was reading an article by Uncle Bob titled Master Craftsman Teams. Bob’s main point is that the current model of developing expertise based on entering the field with a four year [...]

Why You Should Be Using FindBugs

Build automation has been the theme of my recent learning activities, so when I came across multiple positive references to a tool called FindBugs I decided to give it a try. My conclusion: FindBugs is worth using on all Java projects. Read below for the details. FindBugs is a Java static analysis tool that scans [...]

Java Unit Testing Tutorial

This tutorial explains how to set up and write automated unit tests in Java using JUnit 4, a widely used java unit testing framework, Eclipse 3, an open source integrated development environment (IDE), and Java SE 5 or later. This tutorial is intended to be an introduction to unit testing aimed at developers who have [...]

Simple XML Parsing using JAXB

I recently needed to parse a XML file using Java for a utility I was writing. A couple of years ago I used dom4j to parse XML (and wrote an article about it). I figured there had to be a more modern approach, similar to how Hibernate 3.0 can map POJOs (plain old Java objects) [...]

Cyclic Incremental Growth in Software Systems

I recently read an interesting research paper titled Metrics and Laws of Software Evolution – The Nineties View by Lehman et al in the 1997 proceedings of the Software Metrics Symposium that discusses eight laws of software evolution. One set of graphs within the paper jumped out at me: they show the incremental growth of two systems over a series of releases. The graphs shared a common pattern: releases with higher than average incremental growth tended to alternate with one or more releases with lower than average growth. What are the implications of this commonly observed behavior for developing and using software? How can we use this pattern to our advantage? Read on to see my answers to these questions.

Our Mission as Software Developers

What is your mission as a software developer? What motivates you? I recently reflected on my values and goals as a software developer and ended up creating my own personal mission statement. I feel that one of the clauses in my mission is broadly applicable – certainly to my team and department at work, and [...]

Personal Development for Software Developers

I am a big believer in the value of personal development, especially for software developers. I have already written a a number of articles relating to personal development, most of which focus more on professional development for your career. The full scope of personal development, however, is much broader. It is applicable to all aspects [...]

Exposing Mutable Objects as Public Properties

I recently had an interesting design discussion with a coworker in which we discussed the pros and cons of exposing mutable objects as public properties of a class. This article provides my thoughts on the subject. An immutable class (or object) is one whose state cannot be changed once the instance is constructed. Mutable objects [...]

The Source Code is the Design

I first came across the thought-provoking article What Is Software Design? by Jack Reeves as an appendix titled “The Source Code Is the Design” in the book Agile Software Development: Principles, Patterns, and Practices The article was written in 1992 so ignore the references to C++ (I mentally translated them to Java) and instead focus [...]

Why is Estimating so Difficult?

Working as a software developer offers many challenges ranging from tracking down an elusive defect in third-party software to trying to determine what a client really wants. Perhaps the most difficult challenge, however, is succeeding as an oracle who can accurately divine the future – more commonly referred to as creating an estimate. A layperson [...]

Working with Java 5 Annotations

Annotations are a new language feature introduced in Java 5 that allows Java code elements such as classes or methods to be annotated with structured metadata. This metadata can then be used at compile-time or at run-time by other code. Annotations are commonly used to provide configuration information for infrastructure frameworks to provide cross-cutting functionality. [...]

Creating Custom Tags Using JSP

Java Server Pages (JSP) is a Java technology for rendering dynamic web pages. Unlike servlets written directly in Java, JSP files contain special markup to identify java or JSP code. The normal (non-markup) text is interpreted as HTML. Early in JSP’s evolution, custom tags were introduced as a way of providing reusable functionality, particularly reusable [...]

Automatically Populating Audit Columns in Hibernate

Audit columns are a common design pattern used to record data creation and modification information for database tables. A typical implementation of this pattern is to add four columns to every non-static database table: CREATE_USER, CREATE_TIMESTAMP, UPDATE_USER, and UPDATE_TIMESTAMP. The create columns are populated only when a record is initially populated, while the update columns [...]

Improving Performance via Eager Fetching in Hibernate

My previous article started discussing Hibernate relationships, focusing on lazy versus non-lazy relationships. This article continues the theme by discussing how to improve performance when dealing with relationships in Hibernate through a feature called eager fetching. Hibernate’s abstraction of database access behind getter and setter methods on domain objects hides potentially inefficient database access. Mindlessly [...]

Avoid Non-Lazy Relationships in Hibernate

Support for entity relationships is a great time-saving feature in Hibernate, but it can also be a trap for the unsuspecting developer. Handling relationships between entities can be a complex business, and I for one am glad for all the support that Hibernate provides. Hibernate’s assistance, however, can do more harm than good when it [...]

Hibernate and Logging

Hibernate tries to hide the details of dealing with relational databases, but it is at best a leaky abstraction. At its most basic level, Hibernate is a framework that issues SQL commands to the database. Sometimes it does not do what you would expect or want (more on that in future articles). Therefore it is [...]

Hibernate Tips and Tricks

Hibernate is a de facto standard for object-relational mapping. One of my recent projects involved the use of the latest version of Hibernate (3.2). Since I had not used Hibernate since its version 2 days, I picked up the authoritative reference Java Persistence with Hibernate which is co-authored by Gavin King, the founder of Hibernate. [...]

The Power of Search

My appreciation of the power of search, particularly for developing software, has grown over the last few years. The wise use of search can significantly increase your effectiveness as a developer, acting like an amplifier or expansion unit for your brain. Search allows you to navigate faster, remember easier, and know more. I spend most [...]

Strategies for Effective Code Reviews

Code reviews are an important practice for improving the quality of your software and ensuring that it is ready for release. Software engineering research has found that reviews (or inspections) are a powerful QA practice and have many advantages over testing: A higher percentage of defects are found when using reviews – as high as [...]

« Older Posts    Newer Posts »