DevChix

search blogs

posts on this page

Don't let your code make-work for others
Why I Wish I Were Hermione for CodeMash
Jumping off the SharePoint Train
How I got re-started in programming.
How I got started in programming.

archive

RSS 2.0 | Atom 1.0 | CDF

Sign In

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

# Tuesday, December 16, 2008
Tuesday, December 16, 2008 2:55:13 PM (Eastern Standard Time, UTC-05:00) ( events | languages | programming )

CodeMash  will be in three short weeks. Tomorrow (12/17/2008) is the last day to reserve rooms with the discount rate  at the Kalahari resort.  If you have not registered, what is holding you back?

The session details have been posted and I have tried to plan out which talks I may attend.  This is proving to be very difficult.  If I were Hermione I would be able to wear a Time-Turner to get the most from CodeMash. Hermione Granger is a classmate of Harry Potter.  During the third school year at Hogwarts, Hermione uses a Time-Turner to set time back an hour so she can attend simultaneous classes and maximize her learning.  A Time-Turner is a magical device invented by J. K. Rowling for the book Harry Potter and the Prisoner of Azkaban.

If I were Hermione then I would use this time travel device to attend simultaneous sessions at CodeMash.  Here is the list of CodeMash sessions as they stand today.  I have highlighted the sessions I am most likely to attend.  I would also like to be able to attend all of the Open Space sessions as I know much valuable discussion will take place. Time travel would certainly make it easier to choose sessions, but would probably be exhausting as well.

What strategies are you going to use to get the most out of CodeMash? 

Wednesday:

Full-Day
CodeJam: Gary Bernhardt, Sarah Dutkiewicz, Joe Fiorini, Corey Haines, John Stockton
.NET 101 With Jeff Blankenburg and Josh Holmes
Java, Groovy, and Grails 101

AM
iPhone Development 101
Test-driven Development 101 With Leon Gersing
Turning the Ship With Dave Donaldson

PM
Kanban 101
iPhone Development 101
Test-driven Development 101 With Phil Japikse
Value Stream Mapping Workshop With Mary Poppendieck

Thursday

8:15am to 9:30am
KEYNOTE #1: Eric Meyer: JavaScript Will Save Us All

9:45am to 10:45am
Dynamic Hyper-Video in Silverlight (Jesse Liberty)
Introducing Agile for Real World Programmers (Greg Huber)
Programming in Scala (Venkat Subramanian)
Introducing the iPhone SDK (Chris Adamson)
Introducing the Live Mesh SDK (Jeff Blankenburg)
Adobe Flex Fundamentals (TBA)

11am to 12pm
Re-thinking UI: WPF Data Templates (Carey Payette)
Three Tips to Improve Your Dev Process (Jim Holmes)
Introducing Prototype and Scriptaculous (Leon Gersing)
Developing JoeMetric for the iPhone (Joe O'Brien)
Pumping Iron into Python: Intro to FePy (Sarah Dutkiewicz)
Developing for the Microsoft Surface (Jennifer Marsman)
Dynamic Languages and the JVM (Nathaniel Schutta)

12:15pm to 1:30pm
LUNCH + KEYNOTE #2: Venkat Subramanian: Pointy-Haired Bosses and Pragmatic Programmers—Facts and Fallacies of Everyday Software Development

1:45pm to 2:45pm
Scaling Habits of ASP.NET Applications (Richard Campbell)
Thrashing (Mary Poppendieck)
Erlang: The Basics (Kevin Smith)
Groovy/Grails for non-Java Developers (Mike Kimsal)
Python Data Visualization and Imaging (Zach Steindler)
Well, Isn't that Spatial (SQL Server Spatial Data) (Jason Follas)
Adobe Flex with MVC Frameworks (Robert O'Malley)

3:35pm to 4:35pm
Demystifying Windows Communications Foundation (Keith Elder)
Soft Skillz (Brian Prince)
Managed Extensibility Framework (Drew Robbins)
IPhone Web Development with Grails (Chris Judd)
Practical Scala (Dianne Marsh)
What? Threads Are Hard? (Jim Weirich)
Functional Concepts for OOP Developers (Bryan Weber)

4:50pm to 5:50pm
Modeling Types with Extension Methods (Bill Wagner)
CI: More than just a toolset (Jay Harris)
Griffon in Front, Grails in Back (Jim Shingler)
Ruby Desktop Application Framework (Lance Carlson)
Microsoft Virtual Earth, Now in 3D! (Aydin Akcasu)
Drupal at Zattoo: A Case Study (Chris Cassell)

Friday
8:15am to 9:30am
KEYNOTE #3: Mads Torgersen: One Big Happy Family – Where are the Managed .NET Programming Languages Heading?

9:45am to 10:45am
Dev Guide: Skinning Silverlight Controls (Jesse Liberty)
Practices of an Agile Developer (Venkat Subramanian)
Grease, a Parallel Systems Architecture (Vielmetti)
Testing Rails (Joe O'Brien)
JVM Scripting with Jython (Mark Ramm)
Test Infecting the Legacy Organization (Nathaniel Schutta)
IronRuby in the Real World (Michael Letterle)

11am to 12pm
Guerilla SOA for WCF (Joshua Graham)
Language-Oriented DDD (David Laribee)
Networking and Communications in Silverlight (John Stockton)
Cool Stuff with Computer Vision (Scott Preston)
Rich Apps with Groovy Swingbuilder (Andres Almiray)

1:45pm to 2:45pm
Deep LINQ: C# Query Expression Pattern (Bill Wagner)
Improving Web Application Performance and Stability (Steve Smith)
Spring 2.5 MVC (Ken Sipe)
Actor Concurrency (Alex Miller)
Introducing BazaarNG (Mike Woelmer and Jay Wren)
A Look Inside Microsoft Labs: Photosynth, Deep Zoom, Live Mesh, and More (Jeff Blankenburg)
A Programmer's Guide to User Experience (Josh Walsh)

3:30pm to 4:30pm
Multi-threading Mojo with F# (Dustin Campbell)
Executable Documentation with easyb (Andrew Glover)
Cloud Computing with .NET (Wesley Faler)
Modern Web Applications with .NET (Drew Robbins)
Ruby Isn't Just About Rails (Adam Wiggins)
Reverse Engineering Applications (Joe Kuemerle)

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

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

# Monday, June 09, 2008
Monday, June 09, 2008 4:40:38 PM (Eastern Standard Time, UTC-05:00) ( programming | languages | history )

Michael Eaton has requested developers to share stories of how they got started in programming.  I started programming in the dark ages which many of you will not be able to relate to, so bear with me.

First of all, when I was a child no one had computers in their homes.  The only computers I knew about were at the universities and the government.  When I was in junior high, my school decided that it needed to give more focus on math and reading so it established a new format for Fridays.  Half the day was for math and half was for reading - this was set up to ensure everyone knew the basics.  Well those of us who were advanced past the basics got to hang out with the social studies teacher and learn fun things; I think there were about 10 of us.  He taught us Algebra and Geometry, we put on a play, learned about Fibonacci and many other cool things. 

Best of all he had access to a computer as he was taking graduate school classes at the nearby university.  He taught us the BASIC instruction set and had us write out programs on loose leaf.  At night he would go to the computer lab, type in each of our programs and bring us back the results.  This was the most fun I can remember from grade school.  Math was always my favorite subject and I loved puzzles and problem solving.  I don't remember too many specifics about the programs except I recall something with biorhythms and calculating things like how many days we had been alive.

My high school had a teleprinter with a tape in our math center.   I never had a chance to learn how to use it.  I envied my older sister who took an independent study class and got to (that she had a programmable TI calculator is another story).

My chance to program for real was in college.  I majored in Math and started taking computer science classes right away for a minor (at the time the college did not offer a major in CS).  We did not have our own computer, instead we had time-sharing with the mainframes at the University of Maryland. I learned assembler, Fortran, COBOL and Pascal.  Assembler and Fortran were coded with a line editor on a teleprinter; COBOL required punch cards and by the time I took Pascal we had CRT's - The summer before my senior year I had a mathematics summer internship at COMSAT Laboratory where my job was to write a program in Pascal to compute an algorithm for a mathematician.  The first day he gave me a 23 page hand written integral which was my assignment for the summer.  COMSAT was exciting - this is the first place I had ever seen real computers, plus they had a huge (satellite-sized) anechoic chamber, earth stations, library, and tons of special purpose electronics and engineering systems. 

The important things that happened that summer were I discovered that the mathematicians did not use computers at all, there was a lot of money to be made writing software and I met my future husband who was a RF Engineering Co-op.  The first didn't end up being true but the other two were good.

Once I graduated, I started job hunting.  I had success at my first job fair.  I walked around the room and talked to all the men and one asked me if I knew assembler.  I said yes I knew Univac Assembler, he smiled, gave me a business card and set up an interview for me.  I looked up and saw that the company he worked for was Sperry Univac.  I started work right away.  We were a subcontractor for Ford Aerospace on a NASA contract.  I worked on a 16 bit (hex) mini-computer with ASCII and two's complement arithmetic and communicated with a 36 bit (used octal) mainframe that used 6 bit Fieldata and one's complement arithmetic.  Needless to say I learned a ton, met great people and saw a successful large project installation.

The most fun I had at that job was testing in the lab with the mini-computer.  I loved being able to toggle switches to set a breakpoint and look at indicator lights (the only UI) to read the register contents and memory, following along with a printout of the assembler code with addresses and the op-codes.  I liked making up  and applying patches on the fly when I found a bug. A also liked getting a memory dump of the processor and searching through the buffer pool looking for buffers that hadn't been returned and ones that overwrote their boundaries.  I had full control of the machine and yes I am a geek.  I still eally like debugging - yes I know 'm a geek.

At the same job the boss felt it was important not to work through lunch so we played bridge, then when Trivial Pursuit became popular and we had more people we played that.  Some days we just hung out at the terminals and played zork.

Ok, enough with history and back to the questions.

What languages have you used since you started programming?

At least 5 assembler languages, BASIC, meta-assembler, Fortran, Pascal, Smalltalk, Prolog, Lisp, C, Cocoa, Java, C#, and C++.

If you knew then what you know now, would you have started programming?

Absolutely.

If there is one thing you learned along the way that you would tell new developers, what would it be? 

Don't stay at a job you hate with people you don't admire.  You want to be in a group where learning and communications are encouraged and required.

 

maggie++