Being Part of a Team

My 4 year old has been singing “Everything is Awesome” as he’s been playing throughout the house this weekend, and after last week’s blog post and important conversations, I can finally breathe easily and agree – everything is awesome!

Everything is awesome
Everything is cool when you’re part of a team
Everything is awesome
When you’re living a dream

And it’s true – everything is cool when you’re part of a team.  So today, I wanted to take time to talk about some of my teams and how fun it’s been so far.

DevCoaches

In the past year, I’ve become friends with two of my fellow instructors – Dave Balzer and Victor Pudelski.  We eat lunch together and talk about everything under the sun.  I really enjoy the conversations we have, as sometimes it’s pure laughs and enjoyment and sometimes I catch something surprising that I don’t expect.  Dave had the awesome idea of recording some of our lunch conversations and turning them into a podcast – hence DevCoaches!  We talk about topics that people in software development could benefit from – from technical (polyglots) to non-technical (interview, impostor syndrome) to coding bootcamp life.  If you haven’t heard it yet, check us out – subscribe with iTunes, listen on Stitcher, and check out our website!

The Software Guild

Earlier this year, I signed on full-time with The Software Guild.  At the Guild, I am a lead instructor – contributing to our curriculum for HTML, CSS, JavaScript, C#, Java, and SQL.  I also am privileged to teach one of our Java cohorts out of our Akron location.  I am lucky to be part of the Guild’s team – not just as an instructor but also working with our other teams – enrollment, marketing, curriculum, employer network, and operations.  It’s great to be part of such an enthusiastic team that is all committed to the success of our apprentices.  While we are in different locations and serve different roles, the end game is to our customers and we are truly, genuinely committed to them.  Our Akron team is where I call home, and it feels like I’m going home to another family – the staff is that close-knit and welcoming.  They make my job a lot easier and more enjoyable, and I am still finding it hard to believe that I have such a fun job with such an impact on people’s lives.  I am thankful for Eric Wise giving me the opportunity early on to work with them and to keep me on board.

Space Apps Challenge – Cleveland

This is one of the few local teams in the community where I have been collaborating and planning events.  I get to work with some of the coolest people from NASA Glenn – some of the NASA GVIS team! – as well as Brad Nellis, one of the most well-networked tech business guys who’s down-to-earth and helped sponsor our Space Apps Challenge event from last year.  When I meet with these guys, I am in awe of the fun things we get to do while planning on bringing the community together to hack on challenges for NASA.  I look forward to our event in 2017!

Stir Trek

I’ve been working with the Stir Trek planning team for many years now, even though the event is in Columbus and I’m here in the Cleveland/Akron areas.  My fellow Stir Trek planners are friends of mine that I’ve met early in my career and have grown with throughout our community.  We work well with each other, helping where needed and making suggestions on how we can do better and become better.   Next year’s Stir Trek planning is already in the works, as we have a new location and new adventures with that.  No matter how difficult the challenge is and no matter how dramatic things can get, we’re still putting on these events, helping our fellow devs to become the best that they can be.  Guardians of the Galaxy 2 is our target movie for next year – stay tuned for more details!

The Dynamic Duo / Hacker Twins

A team doesn’t always have to be a lot of people.  In fact, my favorite team I’m on is a team of 2.  We have had people call us the dynamic duo, and when we were younger, our friends called us the Hacker Twins – Hack Boy and Hackerbabe.  Good times!  We are team Sadukie – that’s right, sadukie isn’t just me.  Sa is from Sarah and dukie is one of my husband’s nicknames.  This year marks 20 years of awesome adventures together as friends and more, with a lot of craziness ahead.  I couldn’t picture a better partner-in-crime for me, as we both bring out the best in each other and have brought two more lives in the world, with high hopes for them as well.  And yes, not just personally, we can also collaborate professionally, which makes me that much prouder of us.  We respect each other’s strengths and weaknesses and defer to each other when a situation requires one of our expertises.

Conclusion

These are just some of the teams in my life, and each team has shown me some of the various purposes I have in life.  I really enjoy my roles on those teams, and I look forward to serving them more in the future!  Everything is awesome; everything is cool when you’re part of a team!

They’re Gone…

After dropping off my boys this morning, I figured that it would be a good idea to stop by my classroom at the Software Guild to get some stuff to work on at home.  It’s my classroom after all, my home away from home.  Now that I can work from home the next few weeks, I should be fine going in there to get what I need.  After all, if it feels like home, I should be comfortable in there.

My classroom at The Software Guild

But as soon as I stepped into my classroom, tears welled up in my eyes. Nothing could’ve prepared me for the surge of emotions that hit me.  It’s overwhelming, and I felt extremely vulnerable, which is probably why I went it alone.  It’s times like those where I both need my support network and shy away from them to try to deal with my feelings on my own.

Missing Routine

As I stepped in the classroom and looked around, I realized that I missed them and the routines we had.  I miss the daily standup, learning what they’re working on and how to better serve them.  I miss the conversations we’d have as the day was getting started – whether they were the warmup exercises or just general chatter before our lectures conversations.  I miss the morning conversations about the various topics in programming – from variables/loops to inheritance to dependency injection.  I miss watching my apprentices work on their labs and even on their side projects – to see how they applied the concepts from the classroom to their own interests.  Most of all, though, I miss the people – they were such a talented and diverse bunch.

Moving On

While a part of me is missing the routines of the classroom, a part of me is excited.  The missing apprentices are no longer just apprentices – they are alumni.  They survived the 12-week coding bootcamp and are off to do great things.  Some of mine are returning to classrooms of their own, working on their degrees.  Some are out looking for places to live, as they are moving on to new jobs, away from their homes.  Some already have places and are eagerly awaiting their start dates for their new jobs, the new life ahead.  Knowing this, I’m excited to see them grow in their careers and look forward to their adventures.

Conclusion

This morning’s return to the classroom was definitely unexpected for me – I didn’t expect to be overwhelmed like this.  From curiosity to sarcasm, ambitions to frustrations to break-through moments… I miss it all.  At the same time, I’m excited to know that I have given them the skills to do great things in the world.   This was my first group as an instructor, so they will forever hold a special place in my life.

Have no fear – my next group starts in mid-September!  To new adventures…

Looking Back on 2015…

If you had told me that 2015 would have been this crazy of an adventure, I wouldn’t have believed it.  However, I’ve grown a lot this year, and I’m thrilled to see where things are going.  I’ve got a few adventures ahead that I’m excited about, and 2015 is to blame for setting me up with those expectations.  Let’s see what went on.

CodeMash 2015… and a Peek Into the InfoSec World

In January, I knew I wanted 2015 to include a selfish adventure – looking into crypto and other security topics. When I was in college, I had fun reading up on topics in that realm and finding exploits in the labs and reporting them. Somehow, that part of me woke up in January and wanted to see what’s out there. I caught a couple sessions at CodeMash 2015 to appease that curiosity.

White Spy from Spy vs. Spy (from Mad Magazine)

White Spy from Spy vs. Spy (from Mad Magazine)

I thought that part of me would stay quiet. But no… those sessions kicked me in the butt. So I reached out to my friend Bill Sempf to see if B-Sides Cleveland would be a good spot for me to see what’s going on. He mentioned that it would be a great community event for me to check out, and I think that is the understatement of the year! It was amazing to see so many people of all walks of life, and with a venue like The Grog Shop, it was unlike any other conference I’ve been to, spoken at, or organized. It was also the first conference in a very long time where I was not only an attendee but also had my husband with me, as he’s interested in the security stuff from an IT perspective. Some of their stories totally blew my mind away (triggering a slight case of impostor syndrome) and then others I could relate to well. I look forward to the next B-Sides Cleveland and hope to one day get the courage and ideas to speak at it.

Realizing My Impact on My Apprentices

The groups of apprentices that I’ve dealt with this year have been astounding. The more I deal with apprentices, the more I identify certain personality characteristics and learning styles, and the better I get at doing my job. Across the board, I’ve seen trends, which also reaffirms that I love the education space and evaluating how people learn.

Earlier this year, I had an apprentice in particular that had a profound impact on me and I on him. However, I didn’t realize the impact I made on him until about week 10 of our 12-week program, when a passing comment gave me an inkling of the impact. He was a challenge for me not because he was a difficult personality – far from that. He reminded me of someone from my past, a much younger (in terms of timeline, not necessarily in age) version of me. I couldn’t put my finger on why – other than similar development starts. It didn’t help that he had a way with words that really hit me at my core. On our last day together, we talked a lot. That’s when he explained everything, and I realized that we have a lot more in common. He also mentioned that I filled big shoes, which I hadn’t realized that were there to be filled. From that point on, I reminded myself that I need to continue to be that person, not just to him but to my other apprentices as well. We are still in touch, and he still has a way with words and timing that tugs at my heartstrings and reminds me why I am in the position that I am in.

Later in the year, I had another apprentice who I swore reminded me of the one I mentioned from earlier in the year. They were two different personalities, but they both have similarities that I couldn’t verbalize. I couldn’t explain why, but throughout that whole cohort, I knew deep down that there was something about this other apprentice – who also had a profound impact on me, more than he probably realizes. We talked throughout the cohort, and around week 10, I knew I had to figure out why I had the read I did. On the last day of class, we were talking about things in general, and he made a comment that made me go “Ahh… it all makes sense.” He had a background similar to my apprentice from earlier in the year. My read turned out to be spot on. I’m looking forward to hearing about his adventures as he takes the next steps in his career.

 

Double Loop rollercoaster

Double Loop rollercoaster from Geauga Lake (my first real rollercoaster)

My apprentices – all cohorts so far – have been a rollercoaster of emotions – highs at successes, lows when they experience setbacks. I’m by their sides for the whole ride, trying to level out the extremes and keep them as even keel as possible. This year has been a year of extremes with them, so much so that I was happy to see the positives and hated to share my negative stories (but had to because, well, my life experiences are learning experiences for them to learn vicariously from). As I look back on 2015 with the Software Guild, it’s been quite an adventure. I am not only helping others learn, but I’m also learning more about myself in the process. I look forward to the journey ahead with them in 2016.

Getting More Comfortable with Myself – Podcasts and Netshows

If there’s anything you need to know about pre-2015 me, it’s that I did not like watching or listening to any recordings of me. I’m my biggest critic, and I couldn’t watch or listen to any recordings of me without turning supercritical. It’s my nature, and it was something that I just couldn’t settle in. However, 2015 forced me to get comfortable with myself and to shut off the inner critic, if only to take everything in.

You can find a list of my appearances in my Microsoft MVP Profile. There were a couple podcasts and many appearances on Coding 101. I listened to each recording once they were posted, and the more I listened to myself, the stronger my self-confidence grew and the more comfortable I became with appearing on podcasts and netshows!

I am sad to announce that Coding 101 was recently cancelled by TWiT.tv. Thankfully, they are keeping the past episodes in the archives for others to watch. I’m thankful that Leo LaPorte and Lisa LaPorte gave Coding 101 a chance, as it exposes a variety of technologies to those who are just getting into coding. Yes, I had my fangirl moment before my first appearance, which led to more nervousness. However, all nervous energy dissipated after my first appearance, as Padre and Lou are great conversationalists and always made me feel at ease. It was great to do a recording in person with Lou. I still want to visit the TWiT studios if I’m ever out that way.

Overall

Overall, 2015 has been a great year for me career-wise. I had a lot of introspective moments, which really brought me out of my shell more than I ever expected. The boost in self-confidence helped me improve my vision of my impact on others. Knowing that, I now have a better understanding of how I can continue to serve the community and encourage my apprentices to grow in their careers. I also have a better idea of where I want to go in my career. So look out, 2016! I’ve got dreams that I’m determined to make into realities!

Parting Words…

Yesterday was my last day with my September group of apprentices at the Software Guild.  We bonded fairly well throughout the cohort, and it was great to hang out with a group of them last night afterwards.  I woke up excited yesterday morning because we’re graduating this group of talented individuals who have worked hard and kicked butt throughout these past 13 weeks, learning C# or Java, as well as SQL and some front-end stuff (CSS/JS).  In past cohorts, I have had separation anxiety bite me on the last day, but yesterday, that didn’t happen.  There was something about these groups that made me more proud than nervous for them.

Some Parting Words of Advice

  • Once you get a feel for your job and new life, if you have time, take on side projects to keep your skills sharp.  Try to stay up on technology.  If you need ideas for side projects, come to any of us and we’ll be able to inspire you – either from personal inspiration or from others.
  • If you’re more social, then get involved in your local tech community.  If you aren’t sure where to start and are in the Cleveland area, check out Cleveland Tech Events – one of my sites!   If you’re in Akron, there’s Akron.io – one of my friend’s sites!  Otherwise, check out this past blog post where I offer other ways to find community.
  • If you’re in the Cleveland area or in a neighboring state, don’t be surprised if I’m speaking at or organizing a conference or user group near you.  I haven’t talked about my community life much in the classroom, but know that I am in the community and may run into you there.
  • If you see me in the community, come say “hi” and follow up with me!  I love hearing from past apprentices, seeing what they’re up to, soliciting feedback on where we should be going, or even just catching up personally.  The storyteller and listener in me enjoys catching up – so please come say hi!

Conclusion

From “The Farewell Toast”, as covered by Brigid’s Cross:

May your joys be as deep as the ocean
And your troubles as light as its foam
And may you find sweet peace of mind
Wherever you may roam

Here’s to a wonderful group of apprentices who I was privileged to work with!  Look out world – here they come!

And if you’re interested in hiring entry-to-junior level C# or Java developers, join the hiring network at the Software Guild!  I work in-person with the group in Akron, and I sometimes deal with our Minneapolis and Louisville groups online.  Knowing the curriculum, contributing to the curriculum, knowing the other instructors – this is a solid program taught by individuals with a decade or more of experience and an undying passion for technology and education.  I am thankful for working with such an exuberant team!

Recruiters and Blind Emails

As I was catching up on email tonight, I noticed an email from a recruiter and had to read it.  Then I had to wipe my eyes and make sure I was reading this correctly:

recruiterfail20151203

Recruiters: Please, please, please research who you are sending these to before you send them. 

While I would normally have ignored the email and deleted it, I couldn’t.  I had to reply.  I warned him ahead of time that my resume isn’t suitable – not with my experience.  However, I work with some amazing apprentices at The Software Guild, with bootcamps graduating throughout the year, and I’m sure some of them would be interested in this position.

As much as I really wanted to delete this, I couldn’t.  My apprentices are on my mind a lot, especially when it comes to job placement – much like a great recruiter, I like matching my apprentices with the right contacts when the opportunity is right.  So we’ll see how this plays out.

Life as a Teaching Assistant at the Software Guild

Disclaimer: I am writing this on my own accord, because I love working with such a talented group and hope we can grow with more people like us. 

Imagine a day where you wake up, excited for the day ahead.  You know that you’re going to impact people’s lives, showing people what’s cool about our field.  Whether it’s talking about fundamentals or showing off how to put the building blocks together and build a fort, it’s a day of educating and learning ahead.  You are working with people who want to learn – they have a thirst for knowledge that needs to be quenched.  They are inquisitive, curious, and extremely ambitious.  They come from all walks of life with all sorts of stories.  They want to join us in the software development world.  They want to come play with us!

On that same day, you are working with fellow instructors and staff who want to see these people succeed and will do everything they can to help them become successful.  Your teammates share that same passion and energy that you have.  They are creative, innovative, thinking outside of the box.  They are constantly striving to be the best.

This is why I am so happy.  This has been my life, coming in unofficially in June 2013 to see my friend Eric Wise’s dream come to life and meet his first group of apprentices.  After taking a break for other projects and maternity leave, I’ve been here officially since August 2014 – helping apprentices learn Java or C#, web technologies, and database development.  Since June 2013, I’ve watched it grow from the Software Craftsmanship Guild to being bought by The Learning House and now rebranded as The Software Guild.  It’s grown from one .NET cohort to a .NET cohort and Java cohort to overlapping .NET and Java cohorts.  It went from one location to 3 locations – and we’re continuing to grow!  With this growth, we have a need for more teaching assistants.

A Day in the Life…

So what’s a typical day like?  No two days are alike!

As a teaching assistant spread across multiple cohorts, I currently go between our .NET and Java cohorts, assisting the apprentices with questions about concepts and assisting the instructors with supplemental materials and an extra set of eyes to watch the apprentices.

Early in the cohort, I’m learning new personalities, new learning behaviors.  They’re adjusting to the instructors, staff, and to my fellow TA and myself.  We’re earning their trust in a short period of time, so that they see us as people who will be instrumental in getting them off the ground running.  We’re working together to make sure that the start is a solid start.

In the dark ages, we’re going through new technologies while revisiting the pre-work.

Towards the end, we’re going through mock interviews, whiteboarding exercises, and learning how to manage team projects while dealing with personal issues.  We’re dealing with interviewing and sometimes missing courses/team meetings to get stuff done.  We’re dealing with communication skills – both in terms of interviewing and how to work with teammates when they aren’t necessarily physically present.

Supporting the Instructors and Other Staff

Part of the role of a teaching assistant is to assist the instructors.  Everyone here comes from all walks of life, with most of us having 15+ years of practical experience in the tech realm.  As we come from different backgrounds, we have different teaching styles, different analogies, and different ways of relating to the material. In the classroom, as an instructor may have a hard time getting a point across, the teaching assistant can chime in and offer some other examples or stories of applying these concepts.

The teaching assistant is also a separate set of eyes for the instructor to rely on.  We are constantly scanning the rooms, reading faces and body language, and picking up when apprentices may get a concept well or when they are struggling.  If we see a group of apprentices looking like they’re falling behind, we can speak up and have the instructor slow down or rehash a topic.  If we find that the apprentices aren’t responding to particular teaching styles, we can talk with the instructor and let them know our observations on what works and how to improve.  If we find that there are a group of apprentices all struggling with concepts, we can lead review sessions to cover these topics and have more candid discussions than those that we have in class.

Supporting the Apprentices

In addition to review sessions with groups, teaching assistants can be used in other roles.  We can do mock interviews – technical, non-technical, or a mix of the two. When it comes to managing expectations, we offer real world perspective of what’s going on and how to balance transitions.  From code reviews to user experience reviews, we can explain what doesn’t work, why it doesn’t work, and how to attack things in another manner.

Sometimes, we’ll find our apprentices have issues that need to be dealt with – homesickness, anxiety about the future, or maybe some history that’s preventing them from moving forward.  While the instructors can help with that, the teaching assistants can be another one-on-one touch point for apprentices if the apprentices feel more comfortable dealing with the teaching assistants instead of the instructors.

We’re Hiring!

As we are growing, we have a need to bring in more teaching assistants. We’re looking for candidates with mid-level developer experience who would love to make an impact on our future developers.  We have openings in two of our locations at the moment:

Does this sound like a fun adventure?  If this is something you’re interested in, then apply today!  I’d love to see more passionate techies come and impact our future developers.  Let’s show them what tech is truly about.

Winding Down from Code

Code Monkey!

While working with my apprentices in our intense 12-week bootcamp, I’ve found that sometimes, they get so wound up in code and the stress of it all that they either need to be pulled aside and told to step away or they’ll crash.  Some take that call to step away very well. Others get frustrated at first when I tell them to step away, but then after stepping away for a bit and revisiting things with a fresh mind, things start making sense or the apprentices get quicker to asking for help.  And yes, I understand that frustration – “She wants us to step away from this.  But we’re just 5 minutes away from a fix. *exasperated sigh*”  Famous last words… that very rarely mean it.  Eventually, they understand – I’ve been there, and I get it.  But when you get too wound up from something, you end up losing sight of the big picture or even the problem that’s being solved.  Sometimes, you need to just step away and wind down in order to get a clear view of a solution.

These are some of the ways I wind down from my crazy days – coding marathons, conference overload, or otherwise.

Turning to Music

I have a very musical core – playing instruments (clarinet, double bass, piano, timpani, and other miscellaneous percussion), writing pieces (yay for music theory class), and singing along with the radio.  Whether I’m happy or sad, wanting to encourage a mood or steer away from it, music has been an integral part of my being.  Channeling old memories, making new memories, my mind is constantly churning when there’s music around.  Whether I’m looking to fight through issues by listening to Rob Dougan’s “Furious Angels” album for the billionth time, deal with anger with Green Day’s “Dookie” album, find inner happiness with Owl City

, or work on a tight deadline while listening to Queen & David Bowie’s “Under Pressure (Rah mix)” … these are just some of the many ways I use music to help wind down or at least distract from what’s on my mind.

Lately, I’m winding down with Owl City’s “Hello Seattle”, as I am super excited about an upcoming trip to Seattle to see my MVP family.  On my very first trip to Seattle, as the plane was landing, this song kept playing – on my Zune and in my head.  I love Owl City’s happy sounding beats, and “Hello Seattle” holds lots of memories for me.

Christopher Tin‘s “Baba Yetu” from Civilization IV also is on my list of songs to wind down.  I’ve been a huge fan of Sid Meier’s Civilization games, and this song was a great hit from the game’s soundtrack.

Gaming with Friends

Back in the day, I used to play a lot of online games – Asheron’s Call, Horizons, Fallen Age, EVE Online (fondly remembered as Spreadsheets in Space), and World of Warcraft to name a few of them.  These were great outlets for me to wind down, distracted from my day-to-day life and running around in a virtual world with friends.  As I’ve gotten busier, I haven’t had time for raiding or other long time commitments in online games.  However, when it comes to conferences and winding down after a day of entertaining others and learning things on my own, I find that gaming in person with friends helps me wind down.

One of my favorite games to wind down with is Apples to Apples.  I love this game – word association gives me a glimpse at people and how they think.  It also taught me that I have some friends who are literalists and others who are more along the lines of sarcastic or ironic.  When it comes to my turn on judging combinations, it depends on the cards – there are some “automatic win” cards that some of my friends have figured out, and it gets tough when those get played.  I also can go with sarcastic or ironic, depending on my comfort level with those I’m playing with.  The more comfortable I am with a group, the more my sarcasm will come out.

For me, gaming is a distraction from whatever wound me up more often than not.  This is why I can consider this for winding down.

Get Outdoors

Throughout my career, I have been in positions where I may not be near windows to the outside.  When I’m stressed in those positions, I’ve found that getting outside or at least to a place where I can gaze outside helps.  Being in the Cleveland area, I am spoiled by our parks system – the Cleveland Metroparks and its Emerald Necklace offer a lot to discover.  Whether I’m walking a trail or exploring a nature center, getting outdoors has been instrumental in resetting me.  Working in the Akron area, I’m learning from others that the Summit Metro Parks has a lot to offer as well.  Sometimes, a dose of fresh air and a moment away from the digital world is all it takes for me to clear my mind and attack a problem with a new perspective.

Get Out of Your Head

This is something I say a lot to my apprentices.  When they are trying to solve problems, I encourage them to tell me their solution in plain English first.  If they can’t convey their message in an understandable manner, then I have them do flowcharts and draw out their ideas.  Sometimes, we talk through situations to make sure our understandings are on the same page.

For me, blogging is one of my many ways to get out of my head.  Writing presentations to eventually submit to conferences is another way for me to get out of my head.  Writing reviews – be it of places on Yelp or teas on Steepster – is yet another way of me getting my thoughts out.

If I have a thought pattern that is churning in my head to the point of distraction, I have to write about it to get it out.

When I’m writing, I usually have music to help coax the words out, depending on the topic.  Natasha Bedingfield’s “Unwritten” has been a common writing song for me:

Reaching out to “Family”

If I’m on the road and getting wound up, I find that talking with family sometimes helps me wind down.  Whether it’s talking over the phone, seeing family over Skype, or just making a video to send to family, these have also helped me to get my nervous energy out and relax again.  I use the term family loosely – whether it’s my family by birth, by marriage, or just those of my friends who feel like family members to me, all of those help me to refocus my positive energy and get back into whatever it is I need to do.  Sometimes, just taking 5-10 minutes to step away and talk with them is all I need to get moving and back on track.

These are some of the things I turn to when I need to wind down and step away from code.

What do you do?  How do you relax?

One Man’s Garbage – Call Stacks

When I was a younger dev, I could remember seeing these things with lots of words and numbers and dismissing them as garbage.  Words… numbers… they didn’t mean anything to me.  Keep in mind that I started as a hobbyist who eventually landed in development professionally.  The hobbyist didn’t have anyone to really explain things to her.  And college… while the theory was okay, the application wasn’t covered well enough for me to make sense of it completely. So these words and numbers… without knowing what they are… it just seemed like the compiler was yelling at me – “YO, DOOFUS! YOU BROKE IT!”  Grr….

Words… Numbers… What is this garbage?!?

Before we get into the words and numbers, let’s look at a current situation that brings this garbage back out.

As I talk with my apprentices about stacks and queues, I’m looking at a lot of code that looks similar to this:

stackfun

Pushes, pops, and writing data structures from scratch… oh my!    Lots of repetitive code – thankfully only for learning about stacks and queues – but it’s easy to get lost in this jungle of semi-colons and parentheses.

The questions I’ve been getting are along the lines of

  • Why doesn’t my push() work?
  • Why does my prepend() not look right?
  • Heads, tails, firsts, lasts…?!? Help!

Then I get either exasperated sighs or the look of “How do I get out of this data structure hell?”

Thankfully, I look forward to teaching them how to work with the debugger.  All I ask is for a little patience from them – as I tend to get a little too excited when I get some time in the debugger, and sometimes I wonder if that excitement tries my already on-edge and typically exasperated apprentices.

Bring on the words and numbers!

After setting some breakpoints on some pop() calls, I stepped into the calls to see what’s going on and hopefully sort through their questions.

But when I see repetitive code like the stuff above and also get easily distracted, even I get that feeling of “Which pop() is this?  How’d I get here?!? HELP!!!!”  Debugging tools to the rescue!

When I get lost in code while in the debugger, I turn to the Call Stack:

callstackfun

Words… words… words… and some numbers… what is this garbage?!?

The Call Stack is your best friend for figuring out how you got to a line of a code.  The Call Stack shows the stack of entry points that led to here.  These entry points are breadcrumbs – akin to those left behind by Hansel and Gretel.  They tell me how I got here and just which pop() I’m looking at.  When I’m debugging, I find stack traces – tracing through these steps, from current backwards or sometimes from the beginning to the current point – to be super helpful.

In the above Call Stack, I have this story:

  1. I started an application – that’s in Program.Main on line 38.
  2. My application runner then dropped me into an Array Stack Driver workflow, line 35.
  3. From there, I’m now on a pop() in LinkedListStack on line 41.

The words… those are the the things that tell me my entry points.  They tell me the method that called this other method that called the method I’m currently in.

The numbers… those tell me which lines were calling those methods.

What used to be garbage to a younger me has been an extremely helpful tool once the light was shown on it and once I truly understood what it was and how to work with it.

One man’s garbage may actually be that man’s treasure, once you understand what that garbage is.  Hopefully, this demystified the “garbage” a little.

One Man’s Garbage – Hashcodes

While I’m working with my apprentices at the Software Guild, I’m helping our instructors train them for junior level positions.  I love working with these guys and getting fresh perspectives of coding from them.  One of them asked me to look at his code, as he was getting a bunch of garbage in the output.

After running through the code, I saw this:
[com.thesoftwareguild.sampleclass.SampleObject@5c647e05, com.thesoftwareguild.sampleclass.SampleObject@33909752, com.thesoftwareguild.sampleclass.SampleObject@55f96302]

This was the garbage that my apprentice was talking about.  This made me laugh, fondly remembering my early days as a dev and calling it garbage as well.

So… What is this garbage?!?

This is a collection of objects, as the comma-delimited list suggests.  The collection needs to be looped through in order to be outputted properly.  This is what happens when you try to output a raw object.

Ok… so I need to run the collection through a loop to get the properties of each object in the collection.  I get that. But what’s this garbage representing?

Let’s look at the parts of this object:
com.thesoftwareguild.sampleclass.SampleObject@55f96302

  • com.thesoftwareguild.sampleclass.SampleObject – This is a SampleObject class in the package of com.thesoftwareguild.sampleclass.
  • 55f96302 – This is the object’s hashcode.

What is a hashcode?

There are some things you need to know before we talk about what a hashCode is:

  • The equals() method works with hashCode() to make sure that two objects actually match.
  • If you are writing your own equals(), you are including logic that determines if two objects are indeed equal.  What makes 2 objects equal?  Same IDs?  Same values?  Something else?  The equals() method should be written with that logic.
  • If you are creating your own equals(), you need to create your own hashCode().

How are equals() and hashCode() used?

  • Collections call equals() under the covers when they check for an object – such as checking to see if a collection contains() an object or calling remove() to take an object out of the collection.
  • hashCode() is used when adding objects to HashTable, HashMap, and HashSet collections.
  • With these Hash... collections, the objects are stored by key.  The hashcode is calculated on this key and used to determine where to store an object.  When you try to search for an object on a Hash... collection, it uses the hashCode() to locate the object.  After it uses the hashCode() to find the object or multiple objects (if multiple objects have the same hashcode), it runs through its results and uses equals() to find the right key.
  • If items are equal, they should have the same hashcodes.

So hashCodes are addresses for objects that live in Hash… collections.

One man’s garbage may actually be that man’s treasure, once you understand what that garbage is.  Hopefully, this demystified the “garbage” a little.