Thinking Big Picture

After spending the previous week wrapping my head around complex data structures and how the inner workings of code should be organized, this week was more about taking a step back and thinking big picture. The first few days of the week was focused on learning about Classes and Objects in Ruby. In non-code speak, this is Ruby’s way of separating your program into different pieces, allowing you to control how each part interacts with one another. I’ve learned about Classes and Objects on my own prior to starting the bootcamp but the challenges that we did this week really helped give me a deeper understanding of how powerful they can really be and also provided me with a different perspective on how to organize my code when I write.

The second half of the week was focused on learning one of the best practices in the industry, test driven development, or TDD for short. Before I started taking this coding thing seriously, I had this preconceived notion of programmers just typing away furiously on their laptops, headphones on, completely in their own zone. While there are times when this is definitely still true, I’ve learned that a lot goes on before actual coding even begins. TDD is the first step of the journey. The TDD process begins with writing out in plain english what you want your program to do. For example, if I’m making a cash register program that mimics the checkout process of a grocery store, I would write that my program should be able to ‘pull up the price of any single item in the store’, or ‘give me a running subtotal of the transaction’, or ‘calculate the amount of change owed’. After that’s completed, the next step is to write code for each of these statements in order to test if your program can perform the intended functions. The goal is to write code that will pass each of these tests, and in that way, the code of your program is gradually developed based on the intended use cases.

I found TDD to be very helpful in organizing my thoughts and to encourage me to think deeply about what I really want my program to accomplish. It forces you to step away from actual code and consider the real world implications of what you’re trying to build, including possible modifications in the future or issues that may pop up and break your program. Essentially its like having a gameplan instead of going out and improvising. Although it takes a lot of upfront investment, in both time and effort, I already see the value TDD can provide when building more complicated applications and look forward to getting much better at testing in the near future.

One Week In

It’s been a week since I started my bootcamp at Launch Academy. During this time I’ve been introduced to the instructors, gotten to know a few of my classmates, met representatives from a few tech startups in the area and received an understanding of both the teaching style and a course roadmap for the next 10 weeks.

The founder and main instructor is Dan Pickett. He’s been a self-described computer nerd his entire adult life and seems to be extremely knowledgeable about, well, just about everything. The best part is that he’s always super positive and enthusiastic; its obvious that he loves what he does. Launch Academy splits our cohort of 36 into three groups and assigns each group a mentor. My mentor’s name is Sam, a goofy, easy-going guy who was formerly a musician and is also an alumni of the program. He’s only been doing web development for about a year but already seems to be really good at what he does. If I’m where he’s at a year from now, I’ll know I’m on track.

My classmates come from a wide variety of backgrounds. There are guys in their 30’s and above, as well as kids that just finished undergrad. There are people with masters degrees, as well as people that never went to college. Off the top of my head, there’s a former english teacher, a nanny, a military ranger, a barista, a musician, a peace corps volunteer, a recruiter, and a number of ex-corporate bodies like yours truly. The beautiful thing about this field is that it doesn’t matter what school you went to, or how prestigious a company you worked for; the only thing that matters is what you can do. You can’t hide behind a piece of paper from a fancy school to coast through. This is both very humbling and motivating at the same time.

The first week has been focused on learning some of the fundamentals of Ruby, the main programming language that the course will be focusing on. I’ve gone through most of the basics on my own time prior to coming to Launch Academy so it hasn’t been too intense so far, although I expect things to ramp up quickly. Dan typically gives a lecture for about an hour once in the morning and once in the afternoon, but most of the day is spent collaborating with fellow classmates on solving programming challenges. One of the things I like most about software development so far is the problem solving aspects of it. It forces you to really THINK, something I missed terribly in my previous corporate jobs in which much of the work could be based on what other individuals had previously done. The emotional swings can be quite volatile though, as one moment you’re feeling confused, inadequate, even hopeless maybe. Then the lightbulb goes off, you find the solution, and you’re overwhelmed by a feeling of triumph and fist-pumping-ness.

Sam made an insightful comment the other day, analogizing software development to making music. In music, there’s a limited number of tones, 12 I believe is what he said. Using those 12 tones, it is up to the musician to mix them in such a way to create original music. Software development is much of the same. The most complicated problems and applications are built using the same set number of building blocks; it just comes down to how you put them together.

One of the most pleasantly surprising things I learned this week is how collaborative software development really is. When most people, including myself, hear the word ‘programmer’, they tend to think of a nerdy guy typing away furiously at his computer, ignoring all human interaction, as programmer and ‘people skills’ typically don’t go together. However, it really is quite the opposite. One of the things Dan and the rest of the staff emphasized this week is how important communication and soft skills really are in being successful in this field. An important industry ‘best practice’ now is ‘pair programming’, in which two people write code together. One person typically navigates the problem, mapping out the approach and the other does the typing and coding. Personally, I found it very beneficial to have someone to bounce ideas off of and talk out the problem with, making it much less likely to end up staring blankly at the computer screen, spinning your wheels.

Tomorrow is the start of week 2 and I can’t wait to see what I’ll be learning next.

Starting From the Bottom

The first time I told my father I wanted to learn how to code, he thought it was a great idea. It was a warm, sunny Sunday afternoon and we were on a Skype call from my flat in Mumbai, where I had moved to a few months back to work with an international development NGO. As the conversation progressed and I elaborated that I was strongly considering changing careers, and going down an entirely new path, I could sense his original encouragement stiffen into doubt and eventually, discouragement. Are you sure? Have you thought this through? You never showed interest in this field before, why now? Do you really want to throw away the last 8 years and do something 16 year olds are better than you at?

Up until this point, everything I had done previously had ‘made sense’. I went to college on time, graduated early, found a job right away in a promising career field, then left for a better job a couple years later. 7 months ago, I left that job in San Francisco to move halfway around the world to India to essentially work for free in a field I felt passionate about. Even that move could be viewed as defensible from a logical standpoint as the role was most likely only going to be temporary and if things didn’t work out, well, at least it would look great for business school.

However, a funny thing happened in India, as I was rolling along this path I had originally set out for myself. I realized looking good on paper does not equate to feeling good about your career. Thinking you know what you want based on what society, peers, bosses, and your social circle tell you does not necessarily equate to what you REALLY want. After I finished taking the GMAT and began looking at business school applications, I saw a variation of one question that kept popping up over and over again: “Why do you want to pursue an MBA? Why now?” As I pondered this seemingly simple question in my head over and over again, knowing full well that the honest answer of “because I’m not sure what I want to do with my life” wasn’t going to cut it, I realized I could not, for the life of me, come up with a good answer. Maybe it was time to rethink everything.

What had originally brought me to India was the desire to do something tangible, something impactful. At my previous job, there would be many times where I’d be working a 70 hour week, writing some 15-20 page memo on some obscure derivative, knowing full well, that maaaaybe, 5 people would end up looking at it when I was finished. Working hard wasn’t the problem. Working hard doing something you knew made absolutely zero impact in the real world was. Call me idealistic, call me naive, but I knew I needed more.

I had never been overly interested in the tech industry before. I had no interest in coding in high school. I didn’t spend my college years dreaming of creating my own tech start-up. Sure I loved the iPhone as much as the next person, but I never seriously considered having a career in the tech industry until recently.

The light-bulb moment came when I did a walking tour of Dharavi, the largest slum in Mumbai and one of the largest in all of Asia. As I walked through the narrow alleyways, taking in the hustle and bustle around me, one thing struck me more than all else. It wasn’t the trash on the ground, or the amount of economic activity going on. It was the fact that, in a place representing one of the densest areas of individuals at the bottom of the pyramid in the world, there were smartphones everywhere I looked. My tour guide had one, the middle-aged lady on the corner had one, the teenager buying candy had one. If modern technology was here, where in the world was it not?

In today’s world of internet and interconnectivity, if I really want to do something tangible and impactful, what better way than through the medium of technology? Sure I can make business plans and create financial models for farmers, or analyze their crops’ supply chain, but there’s no guarantee that he’ll listen to me, much less implement my advice. Even if he does and everything goes well, my work will only affect a rather small amount of individuals and plus, true habitual change is really hard (especially if it requires more work). What if I could create an app that gives farmers live updates to daily crop prices or connect them with neighboring farmers to increase pricing power by aggregating supply? What about a database of best practices for each of his crops based on current weather and soil conditions? The potential for technology to create solutions for many of the world’s problems is enormous and ultimately, I find that very exciting.

Tomorrow, I start an intensive 10-week ‘bootcamp’ that will serve as my introduction to the world of software development. Is it scary leaving a promising career to go down a completely new path? Absolutely. Do I have fears that I won’t actually be any good at this? Of course. Do I doubt that this is the right decision to make at this point in time? Not at all. In my heart of hearts, this feels like the right thing to do. It comes closest to what I feel I REALLY want. I’m not sure how things will play out in the end but as the great Steve Jobs once said, “You can only connect the dots looking back”.