Celebrating 10 Years of Programming Experience

Ten years ago in Fall 2005, I began pursuing a computer science degree at Marquette University.  My first programming class taught Java.  Prior experience had included using DOS commands to run “Command & Conquer” and “Doom” on my parent’s Windows 95 PC and a BASIC class that I took in high school, taught by a gym teacher who knew as much as we did.  So frankly, not much!

This post is inspired by several groups of people: those who ask me about software development and learning how to program, are curious about my apps/accomplishments, and Ramit Sethi, famed entrepreneur of IWillTeachYouToBeRich.com.  In a recent email, he wrote about how people love to believe that success is effortless and just happens:

For example, one of my friends, a mother of 3, told me how other women would ask her how she looked so amazing with her busy job and family of 5. She used to excitedly tell them about her detailed workouts and diet. Their response? “They got really mad,” she told me. They would say things like, “I could never do that” and “Must be nice to have time”You know what she tells them now? “I just watch what I eat and play with my kids a lot.” They smile and carry on.People hate seeing how the sausage is made.

Personally, I appreciate the honesty. Instead of having people tell me vague lies about what it takes to look great, build muscle, earn more, start a business. etc — I’d rather hear the unvarnished truth.

This struck a cord with me because, like others, I’m guilty of this: always touting our successes, but never our failures.  It’s a shame, because there are valuable lessons to be learned by sharing both!  Here’s my truth: I struggled a lot during the first few years.  School never came naturally to me - I’ve always had to work hard.  This was especially the case with programming.  My freshman and sophomore years were the hardest.

Beginning freshman year with Java programming was an experience! It was a large class of about 50 students.  We flailed around not having a clue as to what we were doing, typing up code printed off of lesson workbooks.  In the lab portion, dedicated time to go through the lessons, we had just one grad student TA available to help us.  For many weeks, nothing really made sense.  Additionally, I had to take Calculus 1 as part of the CS degree.  Math was never my strength, so it became the hardest class I would ever take.  My first semester turned into a stressful battle between spending long hours programming in the lab and trying to understand Calculus.  I barely made it through, narrowly passing Calc with a “CD” grade (C- equivalent).

In Sophomore year, we switched gears to embedded systems programming in C.  In these classes, I was humbled while learning about the lowest levels of programming and technology.  In our first lab, the goal was to send pixels to a CRT monitor.  If the screen was completely black after running our program, then it hadn’t worked.  Hours upon hours later, we saw color appear on the screen and jumped for joy.  Later lessons, building upon each other, were more difficult.  Some days I would go to class from 8am to 4pm then go to the computer lab to work until midnight or later.  I remember one late night reviewing memory management with a favorite professor of mine, fighting back tears when I couldn’t seem to understand pointers and address spacing.  Those were brutal days but I pushed through with the help of awesome (patient) professors and CS friends.  I was hooked at this point though - there was nowhere to go but forward.  

With each passing year, it got a bit easier, yet harder at the same time.  With programming, there is always something new to learn.  Computer science fundamentals can feel abstract and require learning how to think logically.  That seems funny, right? “Think logically? Of course, everyone does that!”.  They do, that’s true.  With programming though, you’re really forced to truly learn how to solve problems.  This includes the biggest insight that I gained from a professor: how to break problems down into individual, manageable pieces.  Without that skill, each goal is overwhelming; a large source of my initial struggles.  

By Spring 2009, I had almost made it through.  I learned .NET during my year long Senior Design project, in which we built an Electronic Medical Records system for a local medical clinic.  However, I quickly became discouraged.  You see, most of the people in my CS program had lined up jobs before graduating, but not me.  I moved back home and slowly started applying to jobs, spending a few hours a day looking.  When I wasn’t applying, I worked on my senior design project, fixing bugs for the clinic. It was really difficult at the time for me - with my fancy degree I thought I was hot stuff and should have gotten a job right away. I remember whining after my Mom suggested that I apply to a temp agency.  I recoiled at the thought - I was ready for my “big boy” job after all!  In a lecture that I’ll never forget, Mom reminded me that I should never feel like I am above any type of work.  Humbled, I applied to the agency and then went back to applying to programming jobs.

Over the summer, I applied to over 100 positions.  The majority were outright rejections or silent.  Application #72, to The SAVO Group, eventually came through.

An entirely new, wildly different educational chapter began.  In addition to being the lowest developer on the totem pole, I was faced with business challenges: deadlines, working with others, meetings, satisfying clients - on and on.  Utilizing my hard work ethic and humility I had honed over the years, I achieved a lot during my time at SAVO.  Multiple promotions earned, awards won, and products launched.  Long lasting relationships with great coworkers.

Today I’m expanding beyond programming: taking an interest in business, marketing, customer service, and entrepreneurship as I build my own products.  I’m excited for what’s next!

Key lessons learned over 10 years:

- Nothing is impossible.  Every problem can be broken down into digestible chunks.  Taking a break and starting fresh the next day is never a bad choice. 

- Relationships (working with people) are harder than writing software.  I still have much to learn here (it’ll be a lifelong journey!).

- Stay humble, hungry, and focused.  Take advantage of every opportunity available.

- Programming is one tool of many used to solve problems.  Going beyond programming is important for personal and career growth.

- Hard work and passion will beat raw intelligence every time.  The naturally talented have less intrinsic incentive to push themselves forward, often over time becoming lazy.

Programming.  It’s an amazing undertaking to create something from nothing - one that keeps me inspired still today.  Here’s to the next ten years!

comments powered by Disqus