Work Philosophy

What areas of study do I think are important to know in application development?

I have found over my time as a programmer that skill in programming itself is only part of what it takes to have successful project-"process" - related ideas are crucial. Admittedly, I did not fully understand this when I took software engineering in college. However, after witnessing numerous real-world projects, I see the value in figuring out what the customer wants, then coming up with a clear way to solve those problems and ways of assessing whether the problem was solved. There are many different approaches to the basic problem from the Agile and Lean schools of thought, among others... I'm not sure any one approach is right-I think it's important to keep an open mind to many approaches and seeing what works best. In the end, it's the people that make the project, not just the code.

In terms of general software design, it's been a learning experience to understand the importance of easy maintainability and testability. Writing with this in mind is actually a bit of a tightrope walk-there is sometimes (though not always) a tradeoff in development time for reusability and easy maintainability. Sometimes the most obvious design is not the best for the long term. For instance, if a section of code does something you also want somewhere else, the quickest thing to do at that moment is often to copy it and reapply. This is "reuse", right? However, it's setting up a situation in which you now have two copies that can need to be hunted down in any of a number of places if changes come down the pipe. And then, each of those versions might end up being individually tweaked over the project's lifetime, making this hunting down a painful task. However, pulling that code out, making it generic and reusable is extra effort some employers see as waste and IS going to take at least a little longer, at least to deal with the immediate situation. Writing code to be easily isolated and testable is much the same. Nobody's paying for tests, they're paying for a product. But tests mean that future tweaks can be made with a lot more confidence, and thus a lot less risk and errors, meaning a lot less pain for everyone involved-and though employers may not care about test code specifically, they surely expect (and perhaps even require) reliability...

Another important area is important is that of Usability/Information Architecture. Apps need to be designed so that it's easy to find any item, and if customers do complain that something is missing or confusing, the correct answer is NOT "user error!", but "let's see how we can fix this." A usable design involves everything from the graphics on the page to the structure of the app UI and even connects to the architecture of the application to make sure your model really matches the problem domain, which will make it easier to bring that domain forward through the app and back to the UI in a consistent way.

Complementing my beliefs in the area of usability, I believe that every web page should be designed to be accessible. Part of making a site usable is designing it so that anyone can use it-and that's the essence of accessibility. The anyone in that sentence includes those using older browsers, but it also includes people with disabilities-that means the blind, those with low vision or colorblindness, the deaf, and those with limited mobility, to name a few of the potential disabilities a viewer of a web page might have. Though designing a page to be accessible to all is important because it's the right thing to do, it also makes good business sense. There is a large population with some kind of disability (about 10% of the total U.S. population) that is largely being ignored-creating an accesible product makes that product available to this untapped market. Even more compelling, the percentage of the population with some kind of disability is inevitably going to grow as the baby boomers age, so an inaccessible design will shut out substantial portions of this relatively wealthy group. Lastly, when an accessible design is planned into a project from the beginning, it adds very little to the bottom line, so the risks of creating an accessible product are low.

What are my goals?

Simply to be a great ASP.NET, Java, Ruby, Python, Perl, Javascript, (whatever the best current tools are at the time and for the project...) programmer, with enough background and knowledge to be able to be able to be able to produce a quality, maintainable product. I would like to use ideas like SOLID with design patterns as appropriate to produce modular, testable code. I'd like to work in good testing techniques, unit testing and integration testing as appropriate to produce code that I and others can have have confidence in. To help me become a better programmer, I also think it is important to know a fair amount about system administration, preferably in both the Windows and Unix worlds, since I've written code that's landed on both at different times. A good programmer needs to know a lot about the system he or she is programming on in case problems come back to the programmer, and I continually strive to have all necessary knowledge to be effective.