January 11, 2020
Like I mentioned in my new years post, I want to spend some time thinking about how I spend my time (woah, meta). I want better answers to questions like “what is Happy Coding?” and “why do you do Happy coding?”. This post is my attempt to answer those questions, and to document how I can bring Happy Coding closer to what I want it to be. In other words, this is the existential crisis I scheduled for 2020.
At its core, Happy Coding is my (very long) answer to this question. I believe there is no “one true path” to learning how to code, but I also know how confusing it can be, especially if you’re just starting out. My learning path was slow and winding, and this site is my attempt at documenting the path I wish I’d taken.
The content is mostly there, but I want to do a better job of guiding people through it. One of my goals this year will be to add a top-level “how to use this site” guide, and to connect the various tutorials and examples to each other in a more cohesive narrative.
I want the site to feel like a journey, rather than as a collection of disconnected pages.
I was privileged enough to have a math teacher in high school who recognized how important it was for students to have the option of taking a programming course, so he taught himself how to code, built his own curriculum, convinced the administration to create a new class, and encouraged all of his students to take it. If it weren’t for him (and for my undergrad mentor), I would definitely not be where I am today.
I believe I have a responsibility to pay that forward as much as I can. It’s tempting to have a “it was hard for me, so it should be hard for you” mindset, but the truth is that I had a lot of help along the way. It would be very selfish to not try to help other folks.
I also believe I have a responsibility to open up the door to people who might not see themselves as “programmer types” or who might not feel very welcomed. I feel pretty unwelcome myself sometimes. But despite whatever good intentions I have, I know that in many ways I’m part of “the problem” with the computer science industry. Happy Coding is my attempt to use my energy for good, rather than gatekeeping through inaction.
On the other hand, I recognize that, well, nobody really needs my help. I don’t see myself as a savior or even really a mentor. I enjoy putting these resources together, but if you take the time to read them and learn from them, then you did all the work, not me. I think it’s important to give that work credit, rather than making it all about me.
All of the above being said, I also think it’s possible to help other people while also doing things that are personally interesting to you. I don’t think I have to choose between altruism and self-indulgence; there’s room for a little bit of both.
I don’t know whether I consider myself a creative or artistic person, but I do enjoy fiddling around and making things. I can scratch that creative itch while paying it forward: by posting source code, or showing how I did something, or encouraging others to make their own remixes.
So when I get an idea for something that sounds fun, I usually follow it up by posting about it on Happy Coding, usually as an example or as an entry in the gallery.
This might seem obvious, but it’s something I lose sight of sometimes. Happy Coding is mine in a way that other stuff isn’t. I like my day job enough, but it’s not all that interesting to me personally; I don’t go home and think about it. I love CodeU (and I do go home and think about that), but because it’s a Google program, it brings with it a focus on hiring and what Google gets out of it that can take away from the core of what I’m really trying to do.
I think it’s important to talk about jobs and hiring and interviewing, especially in terms of opening up the door to new people. But I also think that Google’s hiring process is fundamentally broken, so sometimes it feels a little frustrating to put so much effort into improving it, when the real solution is to tear it all down to the ground… or at least to question some assumptions that are built into the system.
CodeU and Happy Coding have had a one-sided relationship, where I’ve basically copied content I wrote for Happy Coding to create the CodeU curriculum. I’ve spent a lot of my “Happy Coding time” on learning about topics I thought would help CodeU. And while that’s fine, it’s also pretty unhealthy for me to spend all of my free time working for a giant corporation, rather than focusing on what I personally care about.
Don’t get me wrong, I love working with the CodeU team and the CodeU participants, and I don’t regret any of it. But while taking stock of where I spend my time, I need to be more conscious of what’s mine instead of what’s Google’s.
Going forward, I’m going to spend more time on stuff I think is fun and interesting, rather than stuff I think will be useful for the company I work for.
Although I would love it if more people found Happy Coding, I also refuse to do anything spammy, clickbaity, or exploitative. I know I could probably lean into my job title and post links like “Google Software Engineer offers free tutorials” all over the place, but that just feels gross to me.
I’m not saying I’m never going to advertise (in fact I already advertised on JGO a bit), but anything in that department needs to be authentic and honest, not clickbaity or spammy.
When I first started this site, I had a vague “plan” of creating tutorials based on questions I frequently answered on Stack Overflow. The idea was I would answer the question on Stack Overflow, and then link to the site for more info. That way I could get word out about the site to people it would help, without being spammy.
Since then, I’ve realized that’s not exactly the right approach. Most people on Stack Overflow are already learning how to code, and they want help with a particular problem. That’s slightly different than the kind of person I’m building this site for: this site is meant to be a journey, so linking to specific tutorials misses the point a bit.
Instead, I’d like to focus more on the journey as a whole, and how I can make that more useful for people. I mentioned above that I want to tie everything together into a cohesive narrative, and I’m really excited about the kind of genuine opportunities that opens up.
When I was in school, I was frustrated by the feeling that I couldn’t do anything with what I was learning. I would enjoy a class and find it interesting, but then I wouldn’t know what to do with the knowledge afterwards. Looking back, I understand the value of learning the theory, but I was hungry for something more utilitarian that would allow me to build interesting things.
Happy Coding is the resource I wish existed when I was learning how to code. It’s important to me that it’s not just theory- that’s why I built the examples section as a first-class citizen of the site. However, I haven’t done a great job of maintaining these examples. I have a bunch of examples on GitHub and Twitter that I’ve been meaning to add to the site, and I could get into a better cadence of posting more examples in general.
I also want the site to be useful to different types of people: folks just starting out, googling “how to program”, artists wanting to take the next step in the code world, teachers looking for lesson plans.
I’m going to write resources with specific groups in mind, especially teachers. I’m also going to have more fun with the gallery.
One problem I have with a lot of tutorials is that their versions of “hello world” are needlessly complicated. “To run a server, first install these 57 frameworks!” I’m not very interested in super-low-level stuff, but I also think a lot of recommendations are overkill for what most people want to do. A good “hello world” program should be as simple as possible to understand, should require as little setup as possible, and should not contain a bunch of distracting extras.
I also really enjoy the process of simplification. Cutting out dependencies and focusing on the core of how something works is really fun to me, and Happy Coding is my way of using that energy to create the kinds of “hello world” guides I like to learn from.
There are a ton of resources out there for learning the fundamentals like how to write a
for loop, and there are a ton of resources out there for advanced stuff like web applications or Android development. But there aren’t a lot of resources that take you from the fundamentals to the advanced topics. I hope Happy Coding can serve as this missing bridge.
Again, this might seem obvious, but I think I’ve lost track of it over the last couple years. My day job offers more work than I can possibly ever get done, so it’s easy to fall into the trap of spending all my time there. I’ve put a lot of time into my job, but I never feel quite caught up with my work, because there’s always one more thing I could be doing.
I’m going to try to break this habit, and to start spending more time on stuff I actually enjoy.
I believe that code can bring us together, and my pie-in-the-sky daydream for Happy Coding is that it becomes a community of people learning together, teaching each other, and breaking down some of the barriers that plague the tech industry.
I’ve said before that I’m not doing this with any hopes of becoming rich or famous from it. I actively avoid thinking about SEO or “building an audience”, and I try to focus on doing the work instead. But I could do a better job of making it easier for people to say hello or to ask for help, to be more inviting. Something as simple as linking to the forum from each tutorial might help with that.
I do know that I’m not working entirely in a vacuum, because I get emails about the site pretty frequently. So if you’re reading this, come say hello world!
Happy Coding is a community of folks just like you learning about coding.
Do you have a comment or question? Post it here!
Comments are powered by the Happy Coding forum. This page has a corresponding forum post, and replies to that post show up as comments here. Click the button above to go to the forum to post a comment!