While at lunch with a friend recently, he pointed out that I tend to be very deliberate in my hand movements when I talk. He suspected that I know some sign language. He isn’t far off with that.
Learning Sign Language
When I was very young, I had a cousin who was a few years younger than me who had Down’s Syndrome. I can remember Maureen quite well – very much a happy little girl, ornery too! She knew a few signs, and there’s one to this day that makes me think of her – the sign for “cookie”.
Because of her, I was intrigued by sign language. My Girl Scout handbook had the sign language alphabet, and since I loved reading and spelling, I picked up the letters to get by, in case I couldn’t pick up other signs.
In high school, I had the privilege to be a camp counselor at a summer camp that included people with disabilities. One of my fellow counselors was deaf, and he helped me learn a few more signs. I can get out a “sorry“, “thank you“, and “my name is…” confidently.
So I have a handful of phrases and an alphabet at my disposal whenever I truly need to use signs.
Using Sign Language
I never realized though how much I trusted my signing abilities until one day, while shopping at Marc’s, I noticed a deaf gentleman walk in, signing with someone else as they were crossing paths. While I was waiting in line to check out, I noticed him towards the back of the line. The cashier had stepped away to get change for her drawer, and the gentleman was noticeably frustrated – he didn’t know what was the hold up but he also didn’t have his friend with him to help translate. Standing towards the back of the line, there weren’t people ahead facing him that he could lip read. I caught his attention and then signed c-h-a-n-g-e. He perked up – someone could possibly understand him! He was patient with my finger spelling and was thankful that I was able to tell him what was going on. When I left the store, I realized that I used this skill when needed without hesitation and with confidence.
Using my Hands in General
Most of my gestures are more supporting roles than actual sign language signs. One of the most common gestures I do is like squeezing an invisible ball. That gesture comes out if I’m wrapping my head around a concept while fighting a headache or some other distraction. I also tend to gesture for tracking lists and reaching out to a crowd. This video from my presentation at Strangeloop 2013 – on stage in front of about 600 people at the Peabody Opera House in St. Louis, MO – really captured how I use my hands in presentations. It didn’t help that my voice was strained that day from early symptoms of viral laryngitis – by the end of the talk, my voice was showing that it was on its way out. When I know I’m getting quieter, I tend to rely on my hands to help convey my message.
So if you talk with me and see my hands in motion, they’re typically there as support for whatever point I’m trying to make.
Thanks to many conversations and songs today, I’ve been feeling really old. Here are some of the things that have me reminiscing.
Reflecting on Rock
My drives between Akron and Cleveland had me rocking out to songs that I listened to back in high school and early college. Some of these songs in my collection are getting corrupted – as that’s what happens to digital formats over time. So now I’m listening to my collection and trying to sort out what’s good and what’s going away. Today’s adventures had me listening to the likes of Foo Fighters, Dishwalla, Verve Pipe, and Green Day. This is probably one of the coolest modern videos of one of my favorite Foo Fighters song – the Rockin 1000 take on “Learn to Fly”:
With regards to Verve Pipe, I spent many a night listening to their album with “The Freshman”. Oddly enough, though, two of their other songs got to me – “Ominous Man” and “Cup of Tea”. Here’s “Cup of Tea”:
Many nights, dealing with frustrations, I would turn on Dishwalla’s “Charlie Brown’s Parents”:
And a shout out to HN ’98 – to this day, I still sing Audrey on trial when we were not supposed to. Green Day’s “Good Riddance”:
Today, the apprentices had to download Maven, and the URL contained .cgi. The instructor turned back to me and made a comment about how it’s taking us back. All I could think was… Where’s cgi-bin? And is this a Perl script?
Perl was one of the first languages I picked up on my own, learning it from two books – a CGI scripting book from 1995 from PCWorld (if I remember correctly) and Learning Perl from O’Reilly. Yes, my obsession with O’Reilly books has been a long one.
Every time I see CGI, I think of the days of playing with Perl – especially building a blackjack script – and having to put executable server-side scripts in the cgi-bin folder. Oh the memories…
Another of the things I caught while at OOPSLA ’99 was this panel discussion – putting the Gang of Four on trial for crimes against Computer Science. Back then, I didn’t really grasp who they were or what design patterns really meant. They didn’t teach us with enough context in the classroom. But I did find the discussions overall amusing. Here’s Brian Foote’s recap of the Show Trial of the Gang of Four. As for who these guys are and what are design patterns, this book explains it all.
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.
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.
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
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.
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.
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.
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:
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:
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:
I started an application – that’s in Program.Main on line 38.
My application runner then dropped me into an Array Stack Driver workflow, line 35.
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.
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 classin 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.