Tag: coding

This article first appeared on the Khan Academy Engineering blog and is reprinted here with permission.

For the past few months, I have been working as a Software Engineering Fellow at Khan Academy. This program gives engineers from non-traditional backgrounds the opportunity to build their experience by working on real products alongside full-time engineers. During my time as a fellow, I’ve had the opportunity to work with amazing engineers and work on projects that have had immediate impact on Khan Academy’s users. I was attracted to this role because of my own background working for education nonprofits. The fellowship has given me tangible engineering experience while allowing me to pursue my passion for increasing educational equity for all learners.

A few weeks ago, we had our internal Healthy Hackathon where everyone across the company worked on projects related to anything from improving KA products, creating internal tools to make everyone’s lives easier, creating applications to improve greater society (beyond education), or anything that fosters curiosity, collaboration, and fun.

I worked on a project called “Read-to-Me” that used Mozilla’s Web Speech API to read widget content created in Perseus aloud in our Early Learner products. This minor improvement allows young learners who are still building their reading skills to have additional support when completing exercises on our platform. I was excited to work on a project that would better support all early learners regardless of their backgrounds. Many of the gaps in achievement that form between low-income and students of color and their more affluent counterparts begin in early childhood. This project aligned perfectly with my desire to increase equity in education. Additionally, I was able to work with/learn from two experienced engineers and play around with a really cool experimental web technology!

I had so much fun working on this project, but it wasn’t without challenges. Perseus is one of the most complicated parts of our codebase, and it was hard to decide where and how the API should be used in existing code that had a lot of complexity. We didn’t end up shipping Read-to-Me (it definitely needs a few rounds of code review and some design help), but I am really proud of what we were able to achieve. Through this project, I learned a few lessons that I hope will continue to support me as I continue to grow and reach my fullest potential as a software engineer (and hopefully this will be helpful others too).

Endless curiosity beats getting the answer right away

One way that I have learned to persevere through tough spots is by channeling my curiosity about the problem I am trying to tackle. I spent a lot of time looking at Perseus code (probably too much time) figuring out how it works under-the-hood and mapping it back to behaviors I saw in the exercise editor. A lot of it didn’t make sense, but eventually, I was able to figure out a suitable place in the code to implement the API. It wasn’t perfect, but it ended up being enough to help my hackathon team move forward with our project.

There’s a world of technical challenges out there just waiting to be solved. Be open and willing to dive in even if it means going through multiple iterations before reaching a solution.

Try it, you’ll like it

I’ve been very hesitant to try experimental technologies. Because I am early in my career as an engineer, I fall into a trap of wanting to become really good at React or some other established technology before diving into something new.

The reality is one could spend a lifetime learning to be really good at something, and engineering is one of those professions where one must constantly learn new things (or even refresh on old concepts). Playing around with the Web Speech API made me more excited to explore other experimental technologies in web development. I learned that as I continue to build upon fundamentals, I should make space for joy, fun and exploration in coding.

It’s okay to break things

A part of learning, growing, and understanding tools/technologies is being in the muck before we have clarity around how something works, where something should go, and how something should be built. Sometimes we don’t know the path forward, and we still have to be okay with saying, “onward” until a solution crystallizes. When learning, we must break things and experience confusion. I’m pretty sure I spent most of the hackathon debugging weird error messages as a part of figuring out how Perseus works than I did creating an elegant solution. It was only by breaking something that I was able to figure out how to move forward. This lesson will probably be the most difficult to live out everyday in my work because failure is hard, even for individuals who have a cultivated a growth mindset for a long time.

Although I don’t intend to take down an entire website for the sake of learning, there’s something to be said for having the courage to try things even if it means they won’t necessarily work out. There’s so much learning in our shortcomings. I hope I have more of these moments because it means I’m learning and growing not only as an engineer, but also as a human.

Who knew I would gain so much from a hackathon! I’ve had an amazing experience so far as a Fellow at Khan Academy, and I hope to carry these lessons and so much more throughout my career. Onward!

Way back in the late 1990s, I learned HTML on a whim. Inspired by my travels through webrings, I wanted my own place to share my budding activism and earnest poetry. I had no idea the effect it would have on my career, and how it would eventually change my life.

Back then, we were willing to spend hours downloading AOL on our 2800 (yes, twenty-eight-hundred) baud modems and websites were mostly just for big companies or discussion forums. Then GeoCities hit the scene and suddenly anyone could have a website, dedicated to pretty much anything at all.

I immediately planned to make my own site in the West Hollywood neighborhood (I know it was for gay men, but there was no neighborhood for lesbian/bi/queer women, so…). I was working for a small computer consulting firm as an office manager, and I asked our newest technician if he would help me set it up.

In many ways, he embodied the worst stereotypes of computer nerds: he was often rude and condescending, and personal hygiene wasn’t high on his list of priorities. But he knew his stuff. He said he’d help me, but on one condition: I had to learn HTML, so I could do it myself.

He probably set that condition so I wouldn’t keep bothering him with changes and fixes after his initial help getting my page going, but it stuck with me.

After I moved on from that first office job, I found small ways to use my newfound proficiency at other jobs. I made copious use of Webmonkey (RIP) and their wealth of HTML glossary and tutorials, and I kept playing around with various free web platforms like Blogger and WordPress. With enough practice, the code became familiar to me, like a fluent second language.

I’m no developer, not by a long shot, but having a good grasp of HTML (as well as some basic CSS) has helped me be able to:

  • fix weird formatting issues in emails,
  • update one nonprofit’s website for several months after the server crashed (taking with it the custom-built content management system) and all updates had to be hand-coded,
  • save another nonprofit thousands of dollars by bringing email creation in-house, and
  • learn CSS more easily, since there are some similarities.

Most importantly, it helped me eventually transition into doing work that I love and which engages and challenges me every day. In my current role with NTEN, I create and code all of our emails and format our blog posts and web pages (among numerous other communications-related duties). I use my knowledge daily, from basic creation to solving bigger issues like making our emails more mobile-friendly, as well as looking under the hood at other emails or websites to see if I can adapt their code for our purposes.

So how much HTML should you learn? At a minimum, it’s helpful to know how to make text look pretty: bolding, starting new paragraphs, making bullet point lists, etc. Cultivating your attention to detail and nitpicky-ness is also important: precision is key in coding.

Here are just a few of my favorite resources:

  • Lynda.com: an inexpensive way to start learning
  • Treehouse: great beginner and advanced tutorials
  • W3.org: look up HTML codes for just about anything
  • Litmus: resources & forums for advanced email designers
  • WebAIM: tips and tools to improve accessibility

While GeoCities has since shuttered and taken my site with it (though a few intrepid souls have created some archives), today there are myriad options for creating your own site—too many to list, in fact. And though many of the platforms feature easy-to-use drag and drop systems, it’s still quite handy to to be able to understand the underlying coding so you can easily customize templates to your liking.

It’s easier than you think—go forth and code!