Coding without comments and the ‘Single Use’ Principle

So it's all the rage to talk about how comments are bad to use, bad to rely on, and should only be used to describe why something is being not done, not how. And for the most part I agree. As soon as a comment is written it becomes stale. It's hard enough to get the time to update the code, much less updating the comment. With today's integrated development environments with name completion and the like, there is no excuse for using abbreviated variable or function names in your code. This is not to say that variable names should go on forever, they should be as long as they need to be to express their purpose and NO LONGER!

 'Fair nuff, no real problems here. Now, the Single Use Principle states that some “thing” should have exactly One purpose.  This “thing” is either an object, class, function, some item of encapsulation.

Again, who can argue with that, makes sense.

Now, my annoyance 🙂 (c'mon you knew it was coming) So ok, we have these functions which end up being relatively small and easy to read as we've emplopyed single use and descriptive variable/function names this is a good thing. The downside is, you now have class files with many many many small functions and getting a big picture view of what is actually happening becomes impossible… Instead of spending all your time figuring out what code does, you end up diagramming the call mapping of your functions so you can find out what is really being called, in what order. All these small almost atomic functions become more time wasting to follow then before we employed our “Best Practices” …

 Very disappointing folks. Got a good solution? Neither do I, but I suspect it comes in the form of more advances to the development environment. I would love to see expandable function calls in code so a simple expand click would show you whats actually going on without having to diagram it all out. I know visual studio has a code declaration window which is great but not quite what the doctor ordered.

At any rate, the best practices are worth it, but let's not pretend they aren't causing another, and perhaps larger, maintenance issue.

Regards!

Project References with Visual Studio

So, you're writing an application, and you break down the functional parts to more base layer services and utility assemblies, and now you want to create a new application and re-use some of your code.

My “go to” answer has always been separate assemblies copied to a global project bin and then adding references to the bins in whatever application needs them. For example:

Example of a directory layout “Application 1” and “Application 2” represent two applications that are re-using logic. The “Libraries”directory off the root represents the project directory housing “Library 1” and “Library 2” which are the assemblies being re-used, they build to their respective bin directories. The “bin” directory off the root is the global bin where the binaries from “Library 1bin” and “Library 2bin” are copied to for re-use by the applications.

In the above scenario, the Applications reference the libraries from “monkk.combin” and as new versions of Library 1 and Library 2 are released, they can replace the existing ones when required.

The problem with this type of solution is that often times your libraries end up building on each other to create more complex libraries and soon you find yourself in an endless series of updating the various libraries for any new feature necessitated by the applications and so can lead to updating Application 2 because Library 2 had a for Application 1… Not Ideal!

So, what to do, what to do?!?

Well a technique I've now come to employ for just such scenarios is project references. I know, simple how could I not have thought of this? Well I had, but for some reason I've been ignoring them because it just didn't seem “right” because of how intimately coupled the assemblies and projects can become but truth be told, it's so natural (after being forced to use it) I don't know how I ever got along without it. I suppose the problem has been, when you use 3rd party assemblies, it's just not an options, and if all your library assemblies are supposed to be stand-alone assemblies, shouldn't referencing them both be the same?

Well no, it makes complete sense to modify various Libraries while working on Application 1, and likewise for 2. There are some areas for concern, such as not breaking Application 2 while modifying Application 1 and it's Library 2 use. But with a good set of Unit tests for both applications and the libraries themselves, you can do this with less risk. And of course best practices for published assemblies come into play such as adding new function signatures instead of changing existing ones (of re-factoring the internals in the process.)

This obviously applies more to companies writing their own frameworks where the libraries stay internal. My point is this doesn't really scale to mass consumer use due to support issues. In that case, as I'm sure you are, each binary is it's own and the extra work of version management of the application used assemblies, but such is life and it's what we're paid for so, enjoy!


Regards!

Yup, I got down-sized :-(

View John Minadeo's profile on LinkedIn

 

John Minadeo

Summary

Experienced application developer that has been working in software development  for the past 11 years with a strong focus on database and backend architecture and data transformations in Microsoft centric environments and strong familiarity with their languages and tools.

 

Skills

Can display proficiency with the following skills and in the following areas:

 

Industries: Insurance (Auto), Healthcare, Financial, Internet Development, General Software Development Contracting, B2B / B2C Web Site Development and back-end interfacing

 

Languages: C#, C/C++, VB (6 and .NET), Python, Perl, PHP, Java, JavaScript

 

Technologies: XML, XSL/T, HTML, ASP / ASP.NET, Web Services, COM / DCOM, Java Server Pages / Java Servlets, Relational Database Design, Firewalls / Network Security, Webtrends Reporting Package, PayPal Payment Integration

 

Development Methodologies: Object Orientated Design and Development, Test Driven Design, Agile Development, Waterfall Project Planning, Metrics Reporting

 

Source Control: Merant PVCS, CVS, Subversion, Visual Source Safe

 

Tools: MS Visual Studio (5, 6, 2003, 2005, 2008), Beyond Compare, Tortoise SVN, ReSharper

 

Back-ends: Active Directory / LDAP, MQ Server, DB2

 

Server Configuration: SQL Server 6.5, 7.0, 2000, 2005, RADIUS, IIS (3, 4, 5, 6) Web Server, Apache Web Server, MS VPN / DHCP, Exchange Server, NameD (DNS Server), Sendmail (Mail Server), Windows Network Administration, MS Certificate Server

 

Operating Systems: Windows 3.1/95/98/NT/2000/XP/Vista, Linux (Ubuntu, SuSE)

 

·         Enthusiastic personality, Career motivated, Team player, Over 11 years of technical experience.

 

Experience

2008 – Present                Insurance.com http://www.insurance.com                      

                                            Solon, OH

Application Developer IV

Hired to fill a senior level developer position in the expanding Communication business unit. Primary responsibilities include design and implementation of various forms of customer contact primarily email. Maintained and enhanced the stand alone custom email queuing and sending services written in C#. Also maintained the email content testing system for use by the QA department. Additional responsibilities included enhancing the Quoting Interview application to support and modify queuing logic for the various customer contact types. All development used formal development procedures such as design documentation and implementation plans, design and code reviews, and included the creation of new and maintaining of existing application unit tests using the Nunit testing framework. Also aided in the development of stored procedures and data structures to accommodate new functionality to the system.

 

2003 – 2007                     Progressive Insurance http://www.progressive.com     

                                            Mayfield Village, OH

Application Developer Lead

Originally hired in to the Server Based Rating Platform Team to design, develop, and maintain applications and on-line services to facilitate the quoting and selling of vehicle insurance, primarily in the agent channel of business. Application development used C++ with the standard template library as well as some windows COM components. Created and maintained tools to support the creation and testing of internal applications. Participated in creating the new motorcycle product for use with Progressive’s Comparison Rater initiative piloted with Harley-Davidson/Buell in Florida, then deployed for all quoting states. I also functioned as the group liaison to the internal Tools Team to influence design and development as well as training and support for the maintenance of existing and the creation of new support tools. Joined the internal Agency Tools Team in late 2005 where I developed and maintained various tools to support IT tasks throughout the Agency Channel using C# for both Windows Forms and ASP.NET web services and intranet sites. Additionally, I helped with platform infrastructure development such as optimizing our in-house rule engine and converting the C++ code-base from Visual Studio 2003 to Visual Studio 2005 in preparation for moving to a new server operating system environment. Currently I am the Technical Lead on the Automated Testing application development using C# Windows Forms with a ASP.NET application for viewing division wide test results to support our 70+ in-house Quality Assurance analysts and testers, as well as consult to the Progressive Enterprise Tools Team on automated testing efforts for use company wide. Completed the following in-house training sessions for Progressive's Application Developers: Conducting Reviews, Targeted Selection, OO Principles, Software Development Methodology, Estimating, Claims Overview, QA for Developers, and Introduction to Insurance. Development consists of primarily C# / ASP.NET (using C#) as well as some legacy application maintenance on older C++ applications.

 

 

2003 – 2003                     Cobb Community Collaborative http://www.cobbcollaborative.com            Marietta, GA

Consultant

Converted existing site to a database driven website to ease future maintenance. Developed Microsoft Access database to fit the client’s lower budget grant-based not-for-profit environment.. Added a web enabled calendar to hi-light community events that can be maintained by the Collaborative and their associates. Provided training for their employees on maintaining the database as well as updating their site with Microsoft FrontPage and Macromedia DreamWeaver. Recommended new site host and migrated site to the new host.

 

 

2002 – 2003                     Spellbuddy.com http://www.spellbuddy.com                 

                                            Canton, GA

Consultant

Designed and developed XML based website to showcase the client’s products. The site features an easily maintained news system, secure software delivery system, customizable user forums, as well as xml driven emailing subsystem. Database design in a Microsoft SQL Server 2000 environment. Produced in-house Visual Basic 6 and C#.NET tools to update content as well as aid in development of XML systems. Additionally wrote data import and export tools in C# .NET.

 

2002 – 2003                     DrTango, Inc. http://www.drtango.com                             

                                            Roswell, GA

Web Application Developer

Developed XML based replacement for the general payment server involving MS SQL Server 2000, in a load balanced clustered environment. Participated in the process to add multiple language capabilities to the flagship product. Documented existing procedures and internally developed components. Participated in switching T1 providers for both the site connectivity and the VoIP phone system. Participated in the design and implementation of the network after a second remote site was added. Administered multiple MS SQL Servers, and load balanced IIS clusters as well as internal development IIS servers. Created documentation for developer’s of the application as well as documented the various components that make up the application. Re-Developed HTML Newsletter mailer in C# .NET.

 

1996– 2002                      NetForce Development, Inc. http://www.nforce.com  (no longer in business)

                                            Beachwood, OH

Senior Systems Analyst

The company was relatively small (15-18 employees) and most of my duties were that of a Senior Systems Analyst, though technical policy also fell on my shoulders.

 

Active Server Pages scripting for websites including pulling data from and storing data to databases, NT network administration (installs/setups, configuration, Exchange Server, SQL Server, MSDNS, IIS, MTS), Custom applications using Visual Basic 5 and 6, Server Side Com component creation for use under IIS in VB and within administrative scripts. I also lead development efforts for Client Systems Analysis and Database Design. Aside from development, I also performed the following duties: Project Management,  tutoring junior programmers, Security policy, Backup policy, Corporate Email Usage policy, devised / documented  / implemented and trained staff in Programming standards and Best practices. I advised management in Company growth planning, procedures for client problem call tracking, virus scans, client contact tracking, backups, technology research and selection plans for adoption into production environments, and wrote client technical proposals.

 

Some projects I lead the development at used Project Plan and Timeline creation, deliverable schedule, and team member coordination as well as documentation for all stages of the development cycle. And  include E-Commerce site for the Sewing Machine division of the international company Husqvarna Viking (http://ordering.husqvarnaviking.com/). An E-Commerce site which links authorized HV resellers and their customers to products available directly from Husqvarna. Integrated online sales with an AS400 at the Cleveland headquarters for order fulfillment. Initial project only made sewing machine embroidery files available for purchase and download. I was also the Team Lead on “Phase 2” which added selling of traditional shipping products.

 

Team Lead during onsite project at the Cleveland Clinic Foundation, Cardiology Department to develop a Clinical Study Tracking and Reporting System for internal and subscription use. Using a 3-Tier Architecture model and COM / DCOM on the Microsoft Windows platform.

 

Team Lead on in house development for commercial release of OLLA (OnLine Learning Academy (http://www.olla.net)). A Department of Defense funded research project of Lockheed Martin. My company took rights to the source, and repaired for production in D.O.D. schools. The Resource Center was redeveloped into a subscription type service for schools providing Internet resources ranked by curriculum. Also developed backend prototype for the “phase 2” system suited to Enterprise Education / Training and College level education. Exposed data services through COM objects in the form of an API.

 

Team Lead on Extranet for Crystal Internet Venture Fund. A internal website for clients authenticated to their network to view status of venture capital considerations currently pending.

 

 

1994–1996                       Cyberspace Construction Company                                       Cleveland, OH

Programmer

Conversion of data and databases from DB2 to MS Access and flat files using the C programming language. Additionally automated routine repetitive (such as newsgroup processing, email sending) tasks with scripts and programs.

 

Education

1999                                                    Develop Mentor                                                          Torrance, CA

“Building Distributed Applications Using Visual Basic and COM”

1994 – 1996                             Electronic Technical Institute                                              Cleveland, OH

Associates Degree in Electronic Engineering

1993 – 1994                               Cleveland State University                                               Cleveland, OH

1 year of core college education with an un-named major.

 

Interests

·         Music (both listening and playing). I play guitar, bass, drum machines, and a little keyboard.)

·         Computer games development.

·         Reading.

 

Recommendations available upon request.

References available upon request.