07 Mar 2016, 06:41

Learning to Learn as a New Coder

How do you get better as a new coder? The desire and the motivation to do so are prerequisites, but once you have these things (and even if you have a lot of them), it’s hard to know where to go. Do you spend your time reading docs or source code? Should you freelance to increase your exposure or master as many coding challenges as possible? What really makes a difference?

This is a question I struggled with for a long time. I really wanted to be better, but I didn’t exactly know how. Over time, you get better any way (assuming you code on a regular basis), but what I’m talking about here is maximizing the return on effort.

So, without any further ado, here are 5 things that fundamentally pushed my understanding of software as a discipline, and that I continue to use on a daily basis.

PS. This list picks up where tutorials leave off. Tutorials are a great way for absolute beginners to learn, but there simply aren’t enough of them at more advanced levels to teach you what you need to be effective. Start with tutorials, but once you’ve grasped the basic concepts use the below.

#5 What You Are Trying to Learn?

This is a simple one you should ask yourself on a regular basis. What’s your focus? Do you want to be a specialist or a generalist? Is there a specific “type” of coder you want to be? Answering these questions will help you understand how to split your effort. Your time is a limited resource, be conscious of how you spend it.

The best advice I received on the subject is that the best developers are T-Shaped. They have the breadth to understand how modern software engineering functions work together, how the code they write will be used by and impact other teams, etc., and then they have a LOT of depth in one specific area.

This is the model I subscribe to when it comes to my own learning. I love to learn about things that are tangential to my work, but I always prioritize and seek depth. The model you believe in might be different, but the takeaway here is to understand what your goals are and focus on them.

#4 Read Other People’s Code

This is recommended everywhere – it’s almost the classic cop out advice when people don’t know what else to say, but there’s no denying its effectiveness.

Should you try to read the source code for Docker or some other massive open source project? No, probably not. It will be nebulous and intimidating, and unless you spend days on the endeavor (or are already quite gifted), chances are you won’t have the context to learn much beyond coding style.

But you should definitely try to read other people’s code when it relates to what you’re working on. If you’re implementing a new feature at work and are having trouble with how Go’s HTTP handler interacts with Angular, read the Go source code. You’ll learn how the tools you use actually work, discover new patterns, and learn to write code idiomatically.

Another great opportunity to read code is where your code touches other’s in a code base. Updating something in a controller? Explore how the router and handlers work. Using someone else’s service? Read the service. What edge cases do they handle for, that you should be thinking about as well?

One last thing worth mentioning here is that reading code really means reading and playing with code. You have to get it up and running to actually understand how data flows through the application. The end goal should be a functioning mental model, and that’s hard to achieve by reading alone.

#3 Remember Your ABC’s: Always Be Coding

This one is sort of obvious, but in case it isn’t clear, this is the meat of the learning process. Everything else you do (including #2 and #1) support this. If you aren’t actually coding, you’re in some theoretical land, and you’ll only go so far before what you’re trying to learn is too far ahead of the mental models you hold in your head.

There are a myriad of ways to do this. Build side projects, go to hackathons, work on open source, etc. It doesn’t really matter what, but (assuming you actually like coding) code as much as possible. In fact, code all the time. Code on anything, but just Always Be Coding.

PS. I got this one here.

#2 Watch Talks

Alright, now we’re getting up to some heavy hitters. Watching talks has been huge in my education as a coder, and it’s without a doubt what propelled me from a mediocre developer to a competent one. Talks are amazing. They are free education. And best of all, they’re bite sized.

Pretty much every technology, tool, and subject matter area out there has it’s own conference and meetups. Each year the community is going to push out (at least) 10-15 solid talks ranging from beginner “why do we use this and how does it work” to advanced “best practices using X”. So when you want to learn something new (“Hrm, maybe I should use React on my next side project”) the first thing you should do is watch a well thought out introductory talk on the subject. I tend to prefer something from the guys who actually wrote it. You’ll get a high level but comprehensive overview in ~45 minutes.

Then, if you start to use the technology in earnest, you work your way up the talk chain of complexity. The best is when you’re stuck on something and you find a talk that addresses that problem space directly. But even if the talk has nothing to do with what you’re working on, you’ll be amazed at how much you learn about that technology (tips, tricks, pitfalls and patterns) by watching even tangential talks. Best of all, you learn what you don’t know, and that you might want to, by seeing other devs using the technology and sharing their experiences.

I could harp on this forever, but it’s really simple, watch a ton of talks. Watch 3-4 a week. You’ll learn more in an hour than in a day of googling.

Here’s the best list I’ve found, it’s a gold mine of knowledge: https://github.com/hellerve/programming-talks.

#1 Follow Your Bliss

I asked my friend @caelestisca once for advice on how I should try to learn Go. She concluded her massive list of practical advice with “As far as one [thing] being the MOST important, I am going to sound so hippie here, but follow your bliss, whatever gets your happy curious, follow it…“. I think this is some of the best advice on software (and learning) I’ve received. Let’s take a minute to think about it.

If you’re naturally curious about something, it means what you’re learning is on the edge of what you already know. This is huge – since you understand the importance of the subject matter, you can logically connect it to your existing body of knowledge much easier than something that you think you should know but don’t yet have a “feeling” for. Your mind and body are in sync, and the return on effort is huge because the speed at which you move through the material is increased significantly.

So when your curiosity gets piqued, explore it aggressively. Follow it wherever it takes you. You almost certainly will end up in a rabbit hole, but it’ll have been a wild ride and you’ll be amazed at how much you learned.

Lastly, the converse is also true: If you get stuck or are starting to lose passion – chances are you aren’t curious enough about what you’re working on. Step back, clear your mind, and follow your bliss.

Happy coding.

31 Dec 2015, 08:32

Challenge #1 - Waking up at 630am - Finish

Today marks the last day of my first two month challenge and in short, it was extraordinary. As a quick recap, my challenge was to wake up at 6:30am each weekday for two months. I thought it would be hard but rewarding; in reality it made my life a lot easier. I assumed that I would be sleeping less but I actually ended up sleeping more, and being more productive both for that and because I had a solid 3 hour block to work on my priorities each morning.

It felt incredible to be able to throw a ton of time at whatever I wanted to work on, and I was able to see clear, defined progress in these areas. Namely – I studied a ton of CS fundamentals and Go code, built sample / side projects, and successfully recruited for a Golang backend role, something I’d been dreaming about for a long time (I’ll be joining the Eikon Messenger team at Reuters in the new year :)). In general, whenever something started bubbling to the top of the priority list, I’d throw a morning session or two at it and knock it out of the park.

I can’t say it was all rosy, but the downsides didn’t really hold a candle to the upsides. First though, the stats: I successfully woke up at 6:30am 97.7% of the days during the roughly 9 weeks that comprised November and December (I missed 1 day, the day after Thanksgiving). I didn’t record detailed stats for the weekends but I would estimate I still woke up at 6:30 about 35% of the time, and by 7:30 80% of the time. The remaining 20% usually involved a really, really late night out or situations where I had accumulated a small but consistent slept debt over a few days.

So what were the downsides?

  • There were 2-3 instances where I accumulated a consistent sleep debt (30-60min) each night for 3-4 nights in a row. Each time this happened it culminated in a pretty shot day where I didn’t get much done and had to clear my schedule that night to sleep early or wait until the weekend when I could sleep in. In the grand scheme of things these were few and far between.
  • As expected, there were one or two instances where I had to leave a social event earlier than I would’ve liked. This was actually less of an issue than I anticipated though – since I was sleeping more in general, I could choose to skip on the sleep if I really wanted to.

What were the upsides?

  • In addition to the big boost to productivity and momentum I touched on above: It was easier to fall asleep each night, and after the first two weeks I also experienced almost no “wake up pain” during the entire remainder of the challenge. This was a surprising net plus. FYI, When I say “wake up pain” I’m talking about the classic Rage-Against-the-Alarm-Clock sort of feeling. Before, this was a moderately common occurrence (whenever I stayed up late but couldn’t sleep in).
  • I also noticed that if I did stay up late I actually fell into a deep sleep quicker and still woke up on time and pretty well rested. I was shocked the first time this happened. My body knew what to expect and adjusted – something I had never experienced before.

What I’ll be doing moving forward

  • For starters, I’m definitely going to keep waking up at 630am. That Benjamin Franklin guy really knew what he was talking about.
  • Slightly tangential, but it was really important to pick ONE thing to focus on during my 3 hour block, and try to decide that the night before. There were definitely a few times I didn’t get as much done because I didn’t have a singular focus; I’ll be continuing to work on this moving forward.

Final thoughts / notes

  • I bought a Phillips light alarm clock to simulate the sunrise – helpful since about two weeks in the days were short enough that I was waking up in darkness.
  • Should you do it? I don’t doubt that there were probably several factors involved in the upside I saw, as they’re things I have been working on for a long time and certainly didn’t manifest entirely during the last two months. I also think my personality and social preferences have been converging to this point for some time and were necessary prerequisites. If you’re curious though… why not do a two month challenge and find out :)?
  • Lastly, some macro thoughts: I felt a big urge two weeks in to start working on something else. At that point I had sort’ve “figured out” the waking up thing and wanted to tackle something else. I even thought about overlapping (and staggering) challenges, so I could have more fun and get more of them done. About 3-4 weeks in though, I noticed my momentum for the challenge really slipping. If I was working on something else, it would have been really easy to forget that I was focused on waking up early and not push through the pain points. This was a pretty clear sign that two months is the right length for me, and reaffirmed my belief that a singular focus is paramount.

Up next, meditation challenge.

18 Dec 2015, 09:44

I went for a bike ride yesterday...

I’m in LA visiting my sister and sans car right now. I was planning to meet my buddy Yu Jiang for lunch and had initially planned to ride my sister’s bike the six or so miles. But as I was getting ready to actually leave the adult me stepped in and decreed it’s voice of reason: “Just uber it. It’s so much easier.” It had been a really long time since I rode a bike. The tires were flat (I’d have to pump them at a gas station), LA drivers are terrible, and well, my sister’s bike has a bunch of neon green and pink skulls on it. Once the idea of taking an uber germinated in my head, it grew rapidly as the only common sense thing to do. I had just about convinced myself to take one, when at the last second I felt compelled to try the bike. It would be a bit scarier, but it’d probably be nice, riding along the bike path from Playa del Rey to Venice.

So I set off. It was a nice day. Pleasant. At first I didn’t think too much of it. But then it began to dawn on me. How picturesque the bike path is along the beach. How calming the ocean and the palm trees and the sand and the gentle ticking of the bike chain are. How much I love riding bikes… feeling the breeze of movement cool you down in equal parts as your heart rate rises. How I had felt this feeling a thousand times in my childhood – riding around my neighborhood, on the way to summer school, and to my high school sweetheart’s house, long before I had a car. And I realized I hadn’t felt this feeling in a long, long time. When the scenery moves at a snail’s pace past you, it’s not a thing going by, but a thing that you are part of.

And it all started to break down. I love riding bikes. I love being outdoors. I love watching the wind ripple through the palm trees and the sound of the birds above me. I love the simplicity and the familiarity, the freedom. I love the aimless moments when I’m not doing anything in particular. Not endlessly thinking, planning, problem solving, yearning, searching … just being. These are the days that make life worth living. A day like this makes the thousand before it worthwhile. A day like this gives meaning to life, gives it happiness. It creates a sense of peace and tranquility that can not be bought or faked.

And it reminded me that all that I do, I do so that I can have days like this. Days where my mind is still. So much of my time is spent working towards goals and attaining things – but hard work needs to be hard work for a purpose. A job should be more than the salary it’s attached to… money should be worth more than the things it buys.

After all, you can have all those things, but unless they bring you closer to days like this, they really are pointless. They are not goals in and of themselves. Sometimes I forget that. And if I think hard about it, I don’t need much to be happy. Just a bike and a free day.

01 Nov 2015, 12:16

Challenge #1 - Waking up at 630am - Start

I came across my friend Sophia’s blog the other day. Each month she undertakes a different challenge – cutting out sugar, radical generosity, becoming a chess master – and then writes about her experiences. In many ways, I realized I already do this. I spent the last year and a half learning to code, I spent the last few months learning to swim with proper technique, and the last month and a half learning to be a “functional” cook. These were great, and I’m proud of the progress I’ve made in these areas, but there’s a fundamental difference between what I’ve been doing, and what Sophia’s doing. Sophia’s focus is singular and intentional. At every point in time she knows what her goal is, is actively measuring her progress, and is keeping herself accountable by making it public.

I’m working on and focusing on a lot of things at once – coding, working out, trying to read more, cooking more often, trying to wake up earlier, etc. For all but my top priorities that means sometimes I make progress and sometimes I don’t. What I’d like to do is overcome the initial activation cost for an activity, move up the learning curve, and then build that component into my routine so it can be maintained and refined over a long period of time.

So, I’m stealing a bit of Sophia’s ingenuity and adopting her format. I’ll pick one thing to work on at a time, write one post about what I hope to accomplish and then another describing how it went and what I learned. I’ll tweak Sophia’s format slightly – making each challenge last two months. As a general rule, challenges should be specific and measurable – nothing too broad or abstract.

Challenge #1

For the first challenge I’m going to focus on waking up at a set time. For the months of November and December I’ll be waking up at 6:30am every day. On weekends I don’t mind if that slips a little, but unless I was out late, I’ll still plan to wake up at 6:30am to help with the weekday routine. I’ve tried to do this on and off for the last few months unsuccessfully.

What I Hope to Accomplish

In my opinion waking up at the same time is the foundation of a set routine, and waking up early is an important part of my goal of having a few hours of personal time before I take calls for work. I’m hoping that by waking up at 6:30am every day I ensure I have time for and prioritize the things I hope to accomplish longer term. There’s also a bit of a snowball effect: when you start things off right, it’s much easier to build momentum.

I am cognizant of the fact that just waking up at a certain time doesn’t mean I’ll actually accomplish everything I want to, but I do think they’re correlated, and I’m curious to see how much of an impact waking up early has on accomplishing my other goals. Is there a snowball effect; am I more energized about my goals? Or am I just more tired? Do I miss out on social gatherings and feel suffocated? Or am I more relaxed knowing I’ve tackled my highest priorities before I leave the house.

Potential Issues

The tricky part of this challenge is that waking up at a fixed time means sleeping at a fixed time. I’m not the kind of person who can or is interested in reducing the amount I sleep, so if I’m not going to be flexible with when I wake up I absolutely have to be fixed in when I go to sleep. Easier said than done when NYC is the city that never sleeps.

Future Challenges

Admittedly, this challenge is a bit mundane, since it has only to do with building a routine for myself. I think this is a good foundation for accomplishing a lot of other things in my life, which is why I’m doing it first, but I think the others will be a bit more fun. Some things on the radar:

  • Meditating – studying and practicing meditation on a daily basis
  • Becoming a better chef – cooking 4 meals worth of food every Sunday
  • Reading – reading for 60 minutes before bed
  • Photography – getting a DSLR and learning the basics of photography and composition
  • Decreasing stimulus – cutting out TV, movies, etc. from my life
  • Removing sugar from my diet
  • Learning Piano? Tango? French?

Stay tuned :)

29 Oct 2015, 08:45

about

Hi there, I’m Kyle

I’m a full stack developer with a background in management consulting. Between the two, I’ve been able to work on a lot of cool things (and in a lot of cool places!), and am hungry for more.

I currently spend my days playing with Go as an Infrastructure Engineer at Thomson Reuters. Outside of work, I’m a city captain for Tea With Strangers (check us out at teawithstrangers.com) and enjoy hacking on my own side projects.