December 18, 2017
I'm an adult now -- at least, that's what they tell me. I've been working as a ssoftware developer here at Bloomberg for almost 6 months now - I started June 19th, so it's actually 5 months 29 days today. Since it's the end of the day and programmers start counting at zero, let's just call it 6 months and be done with it.
Or 26 weeks, or 182 days, or 130 weekdays minus Thanksgiving/Labour Day/July 4th. But the important part of the measure is that to somebody who was born in 1995, who graduated college in May 2017, and who started his first full-time job in June 2017, that feels like an awfully long time.
I've now reached the average length of all of my previous jobs, which includes:
Adding all of those together gives you:
(5 + 4 + 4 + 18 + 18 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4) / 13 = ~6.23
So I'm not quite there yet, and maybe my counting of my barista/TA jobs is debateable... but it's 6 months, dammit, and I needed a reason for a blog post. Don't make me justify it any more.
But enough elementary math and reminiscing about old jobs.
Instead, lets take a look at my accomplishments over the past 6 months.
Completed 3 months of training on C/C++/JS/git/SQL/software development
Participated in Bloomberg's internal 'job fair', and was eventually matched with a team that initially seemed interesting and promising
Found the courage to ask for help from a downright fantastic trainer (and training support staff)
Was overwhelmed to discover the lengths to which my tainers were willing to go in order to help me find a team that did align with my interests
Completed my first ever real-world, collaborative, full-stack project (allegedly to be used with 'production data', whatever that means) as part of my training's capstone project. Learned some important lessons about the difference between 'what the client wants' and 'what the client needs'. On an unrelated note: don't ever ever ever ever use an ever growing json blob in a database instead of inserting new rows, no matter what anybody says)
Started my full-time job on my new team, which builds internal tools to support developers.
Familiarized myself with a rather large Java codebase to a point of both developer-level (micro) and design-level (macro) productivity.
Began mentoring my team's high school intern on his internship project
Paid off the last of my student loans-- not the largest accomplishment, but definitely the result of months of hard work and financial restraint
In retrospect, each of these bullet points could have easily made a blog post of its own - I could talk for hours about the struggles of learning C++, memory management, properly learning pointer handling, smart pointers, and so much more. I could rant about the stresses of the timed assessments, the volumes of information learned in a couple of days of collaborative work, and how, as stressful as training was, I find myself missing it and the constant sharpening of my programming and engineering talents. I can see a post about the pain and fear of uprooting myself from my humble rural upstate roots to the booming city of NYC -- or about my transition between the two, in the form of my intellectual Scooby Gang of friends at Rochester, my Computer Science comrades who were always willing to lend a helping hand to a friend in need of some project assistance, and my fellow TAs, who helped me see (and improve on) my personal flaws when it comes to teaching and grading. It isn't hard to picture a post discussing the hardships of moving far away from most of my friends to a location where my emotional support structure consisted originally of snacks smuggled from work, a dwindling supply of rice and stir fry ingredients, and my collection of ebooks. I could also talk for hours about the joys of discovering and befriending a delightful new Scooby Gang of friends from my work training class, or my experience tutoring and teaching a high school intern who I'm admittedly a little jealous of for getting the chance to work at an incredible tech company before he even goes to college.
If I were to talk about all of those things, I could easily write a novel. Or at least an unbearably long blog post. And since I don't think any of my readers (all 0 of you) would want to read that, I'll try to record my top takeaways from my greatest adventure so far.
1) It's never too late. Three days into my first assigned team at work, I felt crushed. My training friends all went off to specialized training before they joined their number-one choice teams, while I was asked to sit at my desk with nothing to do at my number-four team (that ought to have been ranked much lower, if I hadn't decided to tie 5 teams at number four because I was indecisive at the last minute). The situation seemed hopeless, and which each passing hour of work my resentment grew. By the end of the third day, my discontent reached critical mass: I knew in my heart that this team would never be the right fit for me. Contacting my trainer was one of the toughest decisions I've made in my career-- I questioned myself over and over, thinking "what if my trainer says no?", "what if they just fire me?", "what if he says no and tells my new boss?", "what if he says no and tells my new boss and then my new boss fires me?". I felt responsible for my poor team choice, and was wracked with guilt over the fact that I'd not only robbed myself of an opportunity to work on a perfect team, but also robbed an innocent team of the chance to induct an impressionable new hire. In the end, it turned out just fine. One awkward day of waiting in suspense, and I was given the chance to go back to specialty training and join a new team. I talked to my new boss in my own private team-matching process, and I discovered that I'd made entirely the wrong ordering of teams the first time around: this team was clearly the frontrunner I should have picked the first time around. I took a leap of faith, and it all wokred out. I learned that everyone makes mistakes, but the best among us (like my trainer, who presumably rescues orphans from burning buildings and saves old ladies' cats from trees in his spare time) try to help people move past their mistakes instead of forcing them to live with them when alternatives are available. I'll admit: they made an exception for me, and I got lucky. I happened to have a great trainer who pulled some strings for me after a screwup that was completely my fault. But I don't regret that fact, and I think I've grown all the more as a developer and a person as a result.
2) A natural extension of the last lesson occurred in my mentorship of my team's high school intern. After years of living, working, and studying at a very reputable college (not Ivy League, of course, but full of brilliant people nonetheless) and internships at tech companies, in addition to my almost exclusive interaction with my very intelligent Scooby Gang at the University of Rochester, it's easy to forget how little your average person knows during their senior year of high school. I initally expected far, far too much of our high school intern -- my fault, rather than his -- after all, most high schoolers are likely to understand
public static void main, let alone relational databases. But that overestimation is OK: I learned how to better mentor another person, much of which involves adjusting when the teaching doesn't seem to be working too well, and my inbern (hopefully) (possibly) (maybe) learned a thing or two about SQL. Maybe. More importantly, he'll continue to learn more about software development and the tools we use every day, from VIM to SSH to Eclipse to hash tables. We all have to start somewhere, and he's lucky to have a damn good -- not to mention, early -- place to start. And I'm more than happy to help him wherever I can.
3) Learning is easy to miss out on. During college and training, learning was easy to do because I had to do it: not learning meant falling behind, sonmething my ego and drive would never let happen by choice. During college, I was lucky enough to have one of the finest mentors possible: my personal Kesuke Miyagi, who supplied me with comradery, computer science mentoring, math mentoring, career advice, mac and cheese, and, most importantly, his friendship. This mentor's dedication to excellent and love for learning has made me the man I am today: driven, uncompromising on quality, and dedicated to learning more every day. With him, learning wasn't just easier: it was fun! In training, I tried to adopt his role as a mentor with mixed results. In my first full-time software developer role, I try to always keep his lessons in mind, and to above all continue to learn. Books, articles, blogs, newsletters, meetups, trainings, even meetings -- all of these things have helped me continue to grow both hard and soft skills in my new role. TL;DR: Never stop bettering yourself.
4) Patience. In the last 6 months, I've learned a lot of things, technical and otherwise. Many of those things have felt hard, though some have felt easy. Many were useful; some were not. Some took weeks to learn; others, seconds. The one common thread shared by all, however, has been frustration. Seldom do I learn something worthwhile without a little bit of (99% mental) keyobard pounding. And while there are a few things that I still haven't quite gotten the hang of (I'd still rather write 1000 lines of raw SQL than use an ORM), the key seems to be sticking with it through thick and thin. A little frustration is healthy: it's just your mind working through tough problems. The key is to embrace it as the growth that it is- think of it like the pain you feel in your muscles during a hard workout. No pain, no gain.
So there you have it. My disjointed, barely-edited, repetitive, slapdash thoughts on my first 6 months of my career that are probably no different from the thoughts of a million other 22-year old software developers. But there's one place where they differ: these are mine.
And even though nobody is ever going to read these thoughts, I have to admit that putting it all down in text feels better than any of my senior year English theses.