# 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. 

# 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++

# 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, November 11, 2008
Tuesday, November 11, 2008 9:54:02 AM (Eastern Standard Time, UTC-05:00) ( career | languages | programming )

There are several posts (e.g. Joel’s here and Jeremy’s here) about the new SharePoint Master Certification and the debate over it reinforces my decision to stop pursuing SharePoint at the present time. 

So, this blog post is about my brief dive into all that is SharePoint.  A little history:  I became a consultant early last year and one focus was going to be learning SharePoint.  I ended up being assigned to a C++ unmanaged project (a whole different story) and dove into learning C++, MFC, ATL and COM instead.

When I became ATO (at-the office or on-the-bench) this summer, I took the time to pick up SharePoint.  I began attending all of the sessions (at code camps such as CodeStock, devLink, and IndyTechFest) that I could to learn from SharePoint MVPs.  I read many books, listened to podcasts, did hands-on-labs and watched many training webcasts.

Since I have a background in Document Management and Imaging and a huge interest in search, libraries (book kind) and improving user interactions, I really liked what I saw.  I saw SharePoint as a good platform to further my development skills as well as bring the information architecture into the fold.

I studied and passed the Moss application development exam and wrote a few connectible web parts to help out colleagues.   I did not pursue configuration exams since I did not want to be pegged an IT/Infrastructure person (since I’m not).  The more I talked to consultants doing SharePoint locally, the more it became apparent that there is little custom development at the current time (at my employer and location) and that much infrastructure knowledge is needed.  In order to excel at this type of job, I would need to work with an experienced team for some time to develop those skills.  Something a client would not be willing to pay for.

As I love software much more than hardware,  I decided that SharePoint was not where I wanted to be at this time since I would rather be learning advanced development (patterns, AOOP, TDD) and upcoming technologies (WCF, Linq, WF, WPF) with my time.

I am now working for a client on YACPPP (yet another C++ project).  I am just getting started but have been told the code base is well designed in a OOP type of way – so I am anxious to learn how it is architected, see the code  and dive back into C++ (there is much new (for me) to learn in this older technology) .  On the side I am going to learn how to be a better developer in the other areas mentioned.

So SharePoint is out of my thoughts for now, possibly in the future I’ll attack it again when I can from a development angle.  The best part about SharePoint is the community.  I am astonished at the hundreds of SharePoint bloggers working to share what they have learned and the passion I see many have around SharePoint.   All of the SP experts I have met, such as Rob Bogue, Doug Ware, and Rob Foster have been great and  I will keep my eye out on twitter to follow the SharePoint (r) evolution.

maggie++

# Tuesday, October 14, 2008
Tuesday, October 14, 2008 1:38:39 PM (Eastern Standard Time, UTC-05:00) ( career | history | programming )

There are many styles of interviewing software developers.  The best processes are those that allow you to see if the candidate is a good fit for your organization and for the candidate to see if your company is a good fit for them.  Shortcomings on either side can lead to costly mistakes and wasted time on both sides.

When I worked on the GSM switch project at Motorola in the late 80s we spent considerable time recruiting software engineers.  Our process was typically:

  • one engineer would escort candidate from HR to the office area giving a short tour on the way.
  • manager would briefly talk with them and explain the project at a high level and the day’s schedule.
  • depending on candidate’s level and on our availability 2-4 engineers would individually give technical interviews.
  • one interview would include lunch out in a local restaurant.
  • the manager would meet with them again for any follow-up questions and to inquire which part of the system they were interested in before they were escorted back to HR.
This was in addition to the countless hours looking through resumes, phone screen beforehand and HR’s interviews with them before and after ours.

My interview technique was to first have them explain their previous projects and I asked questions where I needed clarification.  Then I would draw a high level architecture diagram of my subsystem and explain how it fit into the product and its purpose.  I would let them lead at this point; I was looking for them to show an interest and curiosity about the system by asking questions and an aptitude for talking about a system from both a high level and a detailed level.  I was looking for inquisitive thinkers who seemed eager to learn and work on a team.

 The candidates did not usually have nor did we expect them to have any telephony experience or knowledge of cellular (analog or digital) phone networks.   Most did not know C or assembler nor had heard about the object oriented concepts we were designing with.  These were important, but at the time software engineering was all about design and process and not at all about the underlying technology.  In fact we did not know ourselves at the beginning if we would be using C++ or C.  Our previous phone switches were coded with assembler.  We ended up using C as the C++ cross-compilers were not proven for our processors at the time and would have been an unnecessary risk.

This process consumed much time but we ended up with an outstanding group of software engineers.

Two podcasts I’ve listened to this past week have had content on more recent interview practices.  First was Episode 16: Interviewing Software Developers from Herding Code.   From the show notes:

This week Kevin leads a discussion on interviewing software developers:

  • What interview styles we find effective
  • What sort of questions actually help us evaluate a candidate
  • Why API trivia and puzzle questions don’t work
  • Hiring mistakes we’ve made based on errors in our interview style
  • Why we don’t do very well when the tables are turned and it’s our turn to be interviewed"
Second one was a podcast featuring Scott Kriens, of Juniper Networks, from Stanford’s Entrepreneurial Thought Leader Speaker Series brought to my attention by Dianne Marsh on twitter.   While the entire talk is not about interviewing there were a few points he made about attracting talent and employee growth that are of interest to the topic.  The first (watch here) encourages developers to embrace challenging interviews and not to let them intimidate you and the second one (watch here) talks about the value of training the employees you have rather than hunting for the one star player.  He states:  “It’s better to give somebody that’s never done something before the chance to do it, then to ask somebody who’s already done it to do it again with energy and enthusiasm. ... There is a real power and passion to prove yourself.  ... They will surprise everyone with their ability to succeed.”

The first one is hard for the candidate and the second is difficult for the employer.   I know times have changed much about the way software is built and funded and a full-day interview would indeed be a luxury and quite costly for all involved.  However getting good thinkers and problem solvers on your team instead of good test-takers is key.  Paying for training and the costs from missed work time can be great but by embracing education as a means to train and retain their developers , companies will see positive results with enhanced productivity and retention.   When growth brings the need for more developers I think an approach that enables both sides to really get a good understanding of each other is prudent.

What techniques do you find useful for finding good developers and what as a developer do you do to find a good employer?  Please leave comments with your ideas or blog about it and comment here so we can learn from each other.

maggie++

# Sunday, September 21, 2008
Sunday, September 21, 2008 3:03:07 PM (Eastern Standard Time, UTC-05:00) ( career | languages | programming )
My first entrance to my programming career is described in How I got started in Programming and leaving to be a full-time SAHM (stay-at-home-mom) in Taking an off-ramp and an on-ramp in IT.  This post will attempt to describe what steps I took to re-enter the workforce.

We were living in Kingsport, TN  in 2001 when I started to think about returning to work.  I felt the first thing I should learn was where the programming profession was;  I knew it had to be radically different from when I left in 1990. At the time I did not know anyone there who worked in software or anything remotely similar.

[2001 -2002] I started a subscription to Dr Dobb's Journal and searched on the internet to find anything I could to learn about software; I did not really know what I was looking for. I joined the internet forum Systers and scoured the library for technical books.  I purchased Microsoft Visual C++ .NET Deluxe Learning Edition and 4 flavors of Java in a NutShell.  I completed the tutorials in both languages.  Additional books I bought and read during this time included:
[2003] We moved to Cincinnati, OH both to live near some family and to obtain better educations for our children.  We wanted our son to attend my husband's alma mater, St Xavier High School, and we wanted choices for my daughter for middle school.  Moving and building a house took most of my energies that first year. I continued to read and search the net and visited the library and read books such as Code Complete, The Mythical Man-Month and a variety of books on Extreme Programming.  I Joined the Cincinnati Programmer's Guild and The Women's Circuit.  I attended meetings for both groups and started to meet "real-live" people that worked in the industry and was exposed to a very wide variety of topics and ideas. 

[ 2004] By 2004 I was starting to gain confidence in my software abilities.  I started looking at job advertisements all over the internet. I determined that there seemed to be more .NET jobs than Java in Cincinnati so I started to narrow in my focus on .NET.  I discovered C# and spent a fortune on books including:
I wanted to take some college or graduate classes but was disappointed to find out that you had to apply for a degree in order to take a class.  I did not want to pursue a degree at that time as I already had a math degree and had completed all of the coursework for a MSCS.  I knew my job search would be difficult considering it had been a very long time since I had been employed and I wanted to prepare myself as best I could. Taking classes was the only way I knew to "prove" on my resume that I had skills. So during the summer I took C# and Relational Databases with SQL classes at the community college.  I really learned nothing new about either C# or relational databases.  The biggest value in the classes was exposure to using Visual Studio and SQL Server software as well as being able to ask questions of the instructors.

I then paid for a week-long training class "Developing Microsoft ASP.NET Web Applications using Visual Studio .NET".  This course was great as it introduced me to ASP.NET, ADO.NET, IIS, Web Forms, Web Applications and XML Web Services and also taught me how to use more features of Visual Studio.  I also learned much from the questions the other students asked as they were all employed and transitioning from asp to ASP.NET programming.

Once the Cincinnati .NET User's Group started in the end of 2004 I began attending and was happy to see many familiar faces from the programmer's guild.

Once I updated my resume with these recent skills I began to see a sharp increase of interest and started going to interviews. The interview
 process is time of growth. I started out extremely nervous but each one got better.  Once I was able to see for myself how many different companies opperated and managed software I knew more about what to ask and what to look for.  I was able to refine my resume, read the job postings with more knowledge and was able to write detailed direct cover letters that got me in the door.  In March of 2005 I started work for a small micro-film/imaging company on a C# Tablet PC application. 

I absolutely loved being back at work. It was a long journey but very much worth the effort.

maggie++

# Saturday, June 21, 2008
Saturday, June 21, 2008 8:41:06 PM (Eastern Standard Time, UTC-05:00) ( career )

Gayle Force blogged about Women and the IT community when she was asked what to do to get more women involved in her local  Columbus Ruby Brigade. In reading her response I got to thinking about other experiences I'd had and the fact that a small percentage of attendees to user groups and communities events are women.

There do seem to be less women currently in IT jobs.  This has not always been the case.  I worked as a software engineer at three large corporations in the 80s after I graduated from college. There were actually more female than male programmers at the first and at the other two it seemed 50/50.  However there were no females in the senior/principal technical staff roles, who typically had greater than 10 years experience.

So what happened. Families. Women have children.  Some stay working full-time, some go part-time and some choose to stay home.  The ones that stayed full-time took the management track and became less involved in technical aspects.

The women who went part time were relegated to peripheral roles such as configuration management, source control, bug tracking and QA - these tasks were easier to share on a part time basis.

All of the women I knew who went part time, stayed home full-time after the birth of a second or third child.  None of these women that I know have returned to engineering.  Some have returned to full-time work in other fields.

In 1990 I left software to be a full-time SAH mom.  I loved my job and working on exciting projects, but the job also involved long hours, late nights in the lab and unplanned travel.  I was very dedicated to work and knew that I would have struggled to do both well.  I also knew I really wanted to be home full-time and to just concentrate on being a mom.

I loved being a stay-at-home mom.  During that time I met many extremely talented and creative women who had also left careers to be home.  There seemed to be a consensus that it was ok to take a year off from work, but any more than that would make it impossible to return to the work-force.

It does not need to be this way, a women does not lose her intelligence during this time and she also gathers valuable experience in the activities of being a mom such as organizing , leading, volunteering, coaching, advocating, researching etc.

Companies have noticed the effect of this female brain drain as noted recently in the Wall Street Journal in the article, Female Brain Drain in Science: “Much Has Yet to Happen”, where they discuss the study "The Athena Factor: Reversing the Brain Drain in Science, Engineering, and Technology"   Sylvia Ann Hewlett discusses this in her book "Off-ramps and On-ramps: Keeping Talented Women on the Road to Success".  She states that "corporations have done a dismal job of retaining female talent.  Indeed, they make it very easy for women to depart. When women take a temporary leave of absence to have children or deal with other personal matters, they find it difficult to return to work and contribute as they had previously. In essence, corporations provide women with many career off-ramps, but provide them with few on-ramps. This problem bodes badly for CEOs and top managers who view human resources as a critical asset."  Some steps companies can take are laid out in Flexibility Key to Retaining Women

I created my own on-ramp and returned to full-time software development in 2005.  It was not easy and I still have a lot to learn.  In a future post I will detail the steps I took to re-enter the work force.

maggie++