My Super Power – Debugging!

Almost every night, my boys want me to read books about Iron Man, Hulk, Spiderman, Thor, and even the Guardians of the Galaxy.  They are all about superheroes and villains and super powers.  This had me thinking about all of the skills that make me who I am and if I had to choose one, what would be my super power.

The Engineer – Taking Things Apart

I’ve always loved tearing things apart and seeing how they work.  Whether it was with brute force or – later on – with a methodical approach and with tools, I was always curious and inquisitive.  How does this machine work?  Why does it work this way?  What if this were tweaked a little?

The Creative – Assembling Things

Like a double decker couch!  (Ok… or not… )  When it comes to learning how to work with things, I find that I enjoy assembling things as well.  Whether I am using power tools like I did while working on steel-framed houses for Habitat for Humanity or  using Allen wrenches for IKEA assembly adventures, as I assembled things, I found myself analyzing what I was building, where it seemed strong, and where the flaws may be.

The Super Power – Taking Things Apart + Assembling Things = Debugging!

When it comes to my core, my super power definitely lies in debugging.  Whether it was the power of the alert() in JavaScript or the Console.WriteLine() in C# or the cout>> of C++, I used to write a bit of logging out to the screen for immediate gratification to help me debug before we had decent debugging tools.  If I was debugging something over time, I would write log files.  (And yes, I’m one of those weird people who enjoys reading log files.)

As debugging tools appeared in our editors, I found myself being even more efficient in figuring out what was broken and where I went wrong.  Stack traces became less foggy and more sensible.  Error codes became more searchable.  Nowadays, you can find me working with debuggers in IDEs, other editors, and even in the browsers.  From breakpoints to variable inspection, drilling into methods to tracing the call stack, most debuggers offer a lot more support and information that I hardly have to write out to my screens.  I don’t even use console.log() in JavaScript much because web browsers’ developer tools and debuggers have matured in that regard.

Whether I am maintaining my own codebases or learning new ones, I find debugging to be that super power that makes me pick up patterns and understanding as quick as I do.  With a good debugger, I find myself solving a lot of problems a lot quicker than my old school debugging ways.

My super power lies in debugging.  How about you?  What’s your super power?

CarNSteer - Sarah's first Squeak demo

Initial Thoughts of App Inventor

Recently, I was voluntold for a teaching adventure for a local high school.  We were going to meet with high school students for a career day and show off App Inventor 2, having them go through the Magic 8 Ball tutorial.  The night before the presentation, I ran through the tutorial and ended up with this:

Initial Thoughts – Complicated Yet Simple

When I first learned programming, I had it easy – one screen, no drag-n-drop UI, no properties.  For a starting tool, the App Inventor landscape is feature rich, which can be intimidating for someone just starting out.  Designer vs Blocks… the various groupings on each of those screens… if I wasn’t familiar with IDEs in general, I may find this to be a complicated setup.

However, at the same time, drag-n-drop development is a bit simplistic.  No need to remember when to use curly braces or square brackets.  Code blocks are different.  And what’s even nicer with App Inventor is that you can create an app that responds to an accelerometer shake with a few drags of code.

Something else that’s nice is that the App Inventor tutorials are well laid out, making it easy to understand what’s going on.

Puzzle Pieces as Building Blocks

When I first saw the Blocks interface with the puzzle pieces layout, I liked that I could talk to them as pieces of a puzzle.  This also reminded me of Scratch, as I am aware of Scratch and how it is used to get kids into programming.  And deep down, it reminded me of the topic of my first solo speaking engagement – Squeak!

CarNSteer - Sarah's first Squeak demo

Now What?

Now that the high school engagement is over, I want to play more with App Inventor.  Why?  Because I’d love to expose more people to coding and want to know more about this tool and use it when appropriate.  Will I recreate the Car N Steer demo that I presented in 1999 when I talked about Squeak at the Toledo Area Linux Users Group?  Will I write more apps that work with various sensors in my Android phone?  What will I create next?  Stay tuned, as I suspect another app will happen soon enough.

Adventures of Working on an App

While I teach my apprentices how to write code, there comes a time where I have to be able to write my own code.  In the classroom, I’m good at using canned examples and even better at coming up with other relevant examples.  I really enjoy that part of my job – while I’m the queen of typos when it comes to live coding, I’ve learned to get past that and just have fun, which makes it that much easier for me to live code.

However, when I’m out of the classroom, I somehow escape that mindset and end up facing the same issues my apprentices have – getting trapped in my head between ideas and code and fighting through analysis paralysis.  Thankfully, there is a part of me that listens to what I tell my apprentices, and this is what my latest adventures have led to.

Brainstorming on Paper

Despite this being a digital age, I am one who thrives when I have pen and paper.  From drawing wireframes to making lists of things to be done, I find myself making lots of notes.  Whether it’s drawing on pads from UI Stencils or the many notebooks I’ve gotten from conferences and other events, I’m making notes of what I envision the user experience of the app to be.  As I do that, I watch wireframes flying out of my head, followed by data models.  Notes are added by buttons and menus as to what I expect to put there.  It’s such a fun experience once I get going.  By sketching my ideas out, I can make sure I’m on the right track.

Recently, I was asked to create a dashboard application, and while it’s something I’m working on solo, I still drew out some of my thoughts. Since I’m using technology that I’m very slightly unfamiliar with and feeling very rusty with some of this, I bounced the ideas off of a friend to see if I was missing anything.  Had I not shown them my notebook, I probably wouldn’t have been able to properly convey where my thoughts were.  It was good to get the ideas out of my head.

Starting to Code

Once I get through the planning phase of an application, then I transition into coding.  As my apprentices tell me, it’s overwhelming when you have a large idea and don’t know where to start. When you feel so overwhelmed by analyzing the problem and don’t know where to  start – that’s analysis paralysis.  Sometimes, sketching out the app makes the app seem larger than life, a daunting, overwhelming task.  So many moving parts… how do you know where to start?!?

This is when I take a deep breath, evaluate ALL OF THE THINGS, and break them into manageable chunks.  Sometimes, this means drawing out class diagrams – which is sometimes done on paper and sometimes done in my development tools.  Once I have that outlined, then I have a better idea of where to go.  With my apprentices, I have them do flowcharts to understand processes and flow of the program.  Once we get through these steps, I encourage pseudocode.  This is where I am now on my dashboard app – pseudocoding things and figuring out my layers.

The Nerves of Working on Apps

While I tell my apprentices to get used to failure and to check their perfectionism at the door, I struggle a little with this as well.  Not the failure part – I’ve embraced failure and see it as a stepping stone towards success.  My perfectionism though gets to me on projects.  Does this UX flow well?  Did I lay it out right?  Do I like these colors?  Wait… what if I did…?  The questions flow and I second guess a lot.

In addition to my solo app, I have another app in my backlog that involves coding with a friend.  While I’m excited to be working with this friend on this project, I’m still nervous with my own issues.  What if my perfectionism brings out a not-so-nice, cranky side of me?  (Silly, girl… your friends know how to deal with you.)  What if my code is a mess?  (Seriously?!  You don’t put up with that from your apprentices.  You won’t let yourself be that scattered.  Your chaotic organization won’t be in your code.)

The Excitement of Working on Apps

This is why I’m in software development – the excitement of working on apps outweighs the nerves every time.  I love taking an idea and making it come to life.  I enjoy solving the problems that others are having and making their lives easier or better in some way.  To watch my wireframes and notes turn into something that makes the world a better place – regardless of the size of the project – that is awesome!  When I hit that zone where ideas are flowing and code is flying from my fingertips… such a great feeling!  As for working with friends… to see how we think, where we differ, how we handle differences, and how we work together to make our ideas come to life… it’s quite an adventure!


I don’t think my apprentices or friends realize what it is like when I’m working on an app.  This is what it’s like for me to go through developing an app.  And with that… I’m off… another app to work on!