# Sunday, August 15, 2010
Sunday, August 15, 2010 6:40:53 PM (Eastern Standard Time, UTC-05:00) ( career | languages | programming )

I wonder when this trend of developers thinking it is not their responsibility to test their code started.

I started writing a response in agreement with Writing unit tests is your job so quit making excuses, when I realized I should blog instead.

In the 80s when first starting to write in a higher level language for production code, we were required to write unit tests. Using C was the first chance we had of running our code off of the hardware without using emulation software - it was so much easier when we could run tests at our desks. It was a very welcomed addition to our jobs.

Testing assembly code was time-consuming and extremely tedious (though I did love doing it) which made it a huge expense. I enjoyed patching the code in the lab as I tested (yes I know, I am a geek), but it was difficult to keep track of those patches and update the source later. Once the source was changed, compiled, copied to tape, and put onto the hardware – of course this was after scheduling time in the lab to do so – it had to be re-tested.

After your code was tested and did what you expected it to do, came integration testing. This was very similar but not a solo task and was performed with coworkers to see if your code actually worked with their code. Again this was an expensive part of development.

QA’s function was to ensure the code did what it was supposed to, not to see if it did what you thought it should do.It was not their job to neither find coding bugs nor trap exceptions.

Today it still isn’t their job, QA has their hand’s full doing validation and verification and all sorts of regression testing and analysis among other things. The last thing they need to spend their time doing is developer testing, i.e. finding code and integration bugs.

Once QA enters the picture, the need comes to enter and track all issues. This brings unnecessary work to QA and unnecessary work for developers as the need to triage the bugs, fix the code, document the fix and have QA retest.

Coding and testing are so much easier today – we have automated test runners and special api syntax for expressing our tests. It still amazes me how easy it is to use a test tool to call into a function without having to figure out the steps to get there from higher up the code tree.

It is a developer’s job to test their code. Untested code should never be committed into a centralized version control system (if using dvcs then of course you should and would – but that’s another topic). Doing so will cause your teammates to waste their time catching and fixing your bugs, making it harder for them to get their own job done.

Once when new to a project I asked my co-worker what we was used to test the code. I figured he would give me the name of a test framework. I was taken aback when he told me – oh, we don’t have to test our code; we have a great offshore QA team that will find all of the bugs. Well I wrote tests anyway – and yes the fantastic QA group found bugs – but they were not code related. These bugs all pointed to places where I had misunderstood a requirement or a requirement was unstated or not thought of. And I needed QA to help me solve them.

There is a concept I got long ago from a parenting tape* that one should not ‘make work’ for themselves or others. I taught my kids this when they were little. If you have a spill and don’t clean it up or put something in a place where it doesn’t belong, you have made ‘make work’. Make-work is unnecessary work that wastes someone’s time, even your own. The spill will be harder to clean after setting there and you will need to run around the house putting everything in its rightful place.

No testing will not make your code perfect, nor does it need to. However it will save everyone time and help your project to be successful. So please do not make-work. Better yet poka-yoke your code.

maggie++

*Possibly from one of Barbara Coloroso's  parenting tapes or talks. 

# Monday, May 31, 2010
Monday, May 31, 2010 9:43:31 PM (Eastern Standard Time, UTC-05:00) ( social )

The Toughest Developer Puzzle Ever

version 2 was launched today. This year it has more than tripled its size going from 30 puzzles last year to 100 this year. There are also 3 times the number of contributors:
Jeff Blankenburg, Sarah Dutkiewicz, Brendan Enrick, Charles Hawley, Clint Edmonson, Justin Kohnen, Steve Smith, Dave Swersky and Josh Holmes.  

I wonder how long until the first person solves this one.

maggie++

# Saturday, May 08, 2010
Saturday, May 08, 2010 5:23:38 PM (Eastern Standard Time, UTC-05:00) ( social )

This post, Facebook’s Gone Rogue; It’s Time for an Open Alternative, I read today inspired me to update my Facebook profile page. Here is my reaction.

What would an Open Source Facebook application look like?

maggie++
# Sunday, January 24, 2010
Sunday, January 24, 2010 10:50:58 PM (Eastern Standard Time, UTC-05:00) ( career )

Well it's well into 2010 and I have yet to make a blog entry. I always have a lot to say but little to write about. I have been posting my thoughts more often on Twitter and following along with all the interesting discussions on software development there.

I am trying to decide if I keep this blog and make time to write more or transform it into something else. One thing for sure is that you'll here from me on Twitter when I decide.

Maggie++

# Monday, August 24, 2009
Monday, August 24, 2009 9:59:14 PM (Eastern Standard Time, UTC-05:00) ( events )

CodeMash has opened up applications for speakers and sponsors for the 2010 event that will take place January 13-15 in Sandusky, Ohio.

CodeMash is the best developer conference in the region and is the only conference that is open to all types of development languages, platforms and processes. They are again having the pre-compiler day of workshops that began this year and was a huge success. This is a day full of in-depth workshops where developers can really dig in and learn something new.

Keep on the lookout for when registration opens as it will surely fill up quickly.

maggie++
# Friday, July 03, 2009
Friday, July 03, 2009 1:37:13 PM (Eastern Standard Time, UTC-05:00) ( career | programming )

There has been much talk lately about developing software, learning software, skill levels, drag and drop demos and what is Microsoft’s responsibility to the .Net community.

I don’t think Microsoft is responsible for developers’ knowledge or programming skill level. They create tools that can be used for development. That is all we need from them. There are other tools and languages to use and there will be many more in the future.

I think some of the responsibility of quality software development lies with the companies that hire developers for development. You get what you pay for. Companies need to hire talent and provide resources for those developers to continue to learn. Software evolves as does other technologies. Continuous Improvement is not just a buzz word. It does not happen on its own; it takes leadership. It is also vital for the software community to take responsibility for building a better community.

If a developer writes an application by drag and drop that produces code that is un maintainable who is at fault? Have they been taught another way? Are there expectations of design for maintainability? Have they ever had to maintain code another has written? Should Microsoft have warned them in a sales demo that that it might not be the best way to write code? Has someone reviewed the code and the design? Have they been provided the necessary resources to perform their job? Do they have someone to ask how to make it better?

Writing good software is hard. It is not a job for beginners. Microsoft provides the languages, compilers and tools used to write .Net code. If a developer does not know how to write code and isn’t being taught how to do it better they are not really developing software and they certainly aren’t going to become expert or master at their craft.

Anyone can throw flour, salt, sugar , yeast and water into a pan and put it in an oven. It will not become bread unless they followed a good process and knew what it takes to make a good loaf of bread. Often they will have been taught by someone else to bake bread or they will have spent considerable time experimenting until they get it right. They do not go to the appliance store for a salesperson to demonstrate the oven’s new and shiny features to make better bread.

We are becoming a more drag and drop society. I can throw a frozen bag of vegetables into the microwave push a button and have hot steaming vegetables to serve. I did not have to select quality vegetables from the store. I did not need to know how to wash them or that I should and why. I did not have to know how to trim them and prepare them for cooking. I didn’t even need to get a pan dirty.

Software has not reached this level of maturity. I need to understand the details and syntax of the programming language. I need to know how to interface with the operating system. I need to know what the operating system is capable of. I need to know what functions the framework provides and how to make good use of them. I need to understand how to communicate with all other software I need to interact with. I need to know all of this in addition to learning the application domain and what the software is supposed to do.

Software development techniques do need to mature – it should be easier to put a system together. We should not have to spend so much time reinventing the wheel and writing plumbing code. There needs to be a better way to find out what components are available and when they should be used. If we need to buy controls from several different venders to build the best software in an efficient and timely manner then we should be able to and given a means to do so.

My husband is an RF design engineer. He designs all sorts of radio devices and components that go into larger systems. If he had to design every chip, filter and capacitor anew for each project he would not get anything built. He spends considerable time modeling the interaction of these parts on the computer before he decides what will go on the boards and how they should be arranged. He then builds up a prototype and tests it’s functionality. Often things do not work they way they should; there are stray signals and what not (not my domain to explain well) interfering with the functionality. It is a highly iterative process – he goes back and forth between modeling and design and testing in the lab many many times to get it right. He tries many parts out; some are rejected – sometimes they do not make the specs they are designed for in the environment he places them in. Is this the fault of the part designer? No, they can’t possibly imagine every situation where their parts may end up. It just means he needs to change the design to make the part work or find a new part.

He has spent dozens of years becoming an expert in his field. He had mentors from the very beginning guiding him. He cooped during college to get vital real-world experience. He now makes sure to bring in coops to work with him as he knows this is how good engineers will be grown. Yes it takes time away from his work but it is important. He knows that they will not learn in school all that they will need to be successful. He does not expect an engineer with just a few years experience to be able to produce a good product on their own. It takes time to nurture and develop talent.

What will the software community do to find, nurture and develop talent?

Maggie++

# Sunday, May 31, 2009
Sunday, May 31, 2009 12:26:09 PM (Eastern Standard Time, UTC-05:00) ( career )

Note: For visitors of your site, this entry is only displayed for users with the preselected language English (United States)/English (United States) (en-US)

I am still me. Yesterday I decided to change my Twitter handle to my real name. I have always had my real name and photo on my profile. The biggest reason is that my employer is starting a large initiative to increase social networking and asked for twitter names being currently used. I was about to hit send with the reply using 'MaggiePlusPlus' when I thought that it sounded a little bit silly and people that already new me at work wouldn't recognize it.

I am still using MaggiePlusPlus on my blog and on most other social networking sites. I hope I don't confuse too many people.

You can still call my husband 'Mr PlusPlus' as I think that sounds cute:)

maggie++

# Tuesday, March 24, 2009
Tuesday, March 24, 2009 9:28:26 AM (Eastern Standard Time, UTC-05:00) ( career | events | history )
Today is Ada Lovelace Day.
“Ada Lovelace Day is an international day of blogging to draw attention to women excelling in technology. Women's contributions often go unacknowledged, their innovations seldom mentioned, their faces rarely recognized. We want you to tell the world about these unsung heroines. Whatever she does, whether she is a sysadmin or a tech entrepreneur, a programmer or a designer, developing software or hardware, a tech journalist or a tech consultant, we want to celebrate her achievements. “

Suw Charman-Anderson, a freelance social software consultant in the UK established this day by pledging to blog about  women in technology if at least 1000 people joined her..

“I will publish a blog post on Tuesday 24th March about a woman in technology whom I admire but only if 1,000 other people will do the same.”

She points out that research shows that women need female role models and wants us to take part by acknowledging women in technology in our lives.

As a female Software Engineer I have had many women inspire me throughout my career including:

I wish to thank them for their inspiration to me and others.

You can follow FindingAda on Twitter and use #ALD09 to find more information today.

maggie++

# Tuesday, February 17, 2009
Tuesday, February 17, 2009 8:55:06 AM (Eastern Standard Time, UTC-05:00) ( events | programming )

The Central Ohio Day of .Net is approaching. The organizers are busy choosing speakers and making plans. Submit a talk by March 2 if you have something to share. Be on the look out for registration to open next month and sign up quickly as I’m sure it will fill up fast.

This is an event you will not want to miss. The day is all about community, learning and new ideas. 2008’s event changed my life.  I  had been to numerous code camps in the area and had been a regular attendee of the Cincinnati .Net Users Group.  But I pretty much kept to my self and talked to the few people I knew at the time. 

Here is a summary of the sessions I attended last year along with links to the slide decks for more information. 

I first sat in Joe O’Brien’s talk on Why Ruby and initially felt left out because everyone in the room seemed to know each other, they were twittering and many made big deals (jokingly) about having Macs at a .Net event.  [aside:  I do not understand all of the mac / pc sparring, browser wars and fights over who’s text editor is the best thing since sliced bread.  Lighten up, they are all just tools, it’s the brains that matter ;)]  That faded away as Joe sparked my interest in Ruby.  I had been introduced to Ruby by Jim Weirich several years prior at the Cincinnati Programmers Guild.  At that time it looked like a fun scripting language to easily make tools.  Now Joe was showing how much Ruby had grown and you could build all sorts of things including web applications. He even started his own company to develop Ruby applications and more.

F# It! was presented by Amanda Laucher and James Bender.  Amanda explained twitter so that “I got it” [I signed up later that day and Amanda was the first one I followed]  Then she and James introduced me to functional languages and F#.  I was fascinated and quickly shared their enthusiasm for this ‘new’ way of thinking.

Intro to Boo and DSL by Jay Wren introduced me to domain specific languages.  Intro to WCF by Dan Rigsby and Reliable Messaging in WCF by James Bender provided good insight into what WCF is and how I might use it.  The day ended up with Well, Isn't that Spatial by Jason Follas which introduced location data enhancements to  SQL Server 2008.

Last year at the CODODN is when I was first exposed to Twitter and I became part of the Twitter Tribe.  Since then I have attended similar events in OH, TN, TN, KY, IN and OH.  Each time I expand my learning about software development and my network of fellow developers.  As a result I have greatly expanded the blogs I read, the podcasts I listen to and the books that I read.  I even started my own blog. I have also come out of my shell and go out of my way to talk to and meet other consultants at work and have become more connected to the developers at the local .Net Users Group.

I am anticipating a diverse set of sessions to choose from on April 18th and am looking forward to seeing old friends and making new ones.

maggie++

# Tuesday, December 30, 2008
Tuesday, December 30, 2008 9:09:01 AM (Eastern Standard Time, UTC-05:00) ( events | social )

Take a minute and add the CodeMash logo to your twitter picture to let everyone know you will be at CodeMash.  It will give you something to do while you are waiting and if everyone adds it - you will know all of the awesome devs you will meet there next week.

The simplest way I found is to use Paint.NET and add the logo as a layer to your picture.

What are you waiting for?

maggie++