Intro & Core Values - [Outreachy & Public Lab Internship] Blog #1

Intro & Core Values - [Outreachy & Public Lab Internship] Blog #1

Hi everyone! My name is Will, and I'm one of two Winter 2020 Outreachy Interns with Public Lab. It's my first week on the job!

Outreachy is organizing my internship. Twice a year, Outreachy places multiple paid internships with free and open-source software projects like Public Lab, Mozilla, and Wikimedia Foundation. All of the interns come from backgrounds that are typically underrepresented in tech. Also many of the interns come from diverse international backgrounds. The Winter 2020 cohort of Outreachy Interns includes people living in: Ecuador, Sri Lanka, Uganda, Cameroon, Nepal, Egypt, Krygyzstan, and a bunch of other countries.

The Public Lab (for Open Technology and Science) helps communities take a DIY approach to environmental monitoring and advocacy. Public Lab started in 2010 as a grassroots effort to take aerial photographs of the BP Oil Spill in the Gulf of Mexico. They develop open source hardware, software, and other open methodologies to democratize environmental monitoring.

Grateful

I feel very lucky for many reasons to have been chosen as one of Public Lab's Outreachy Interns, along with the amazing Ruth who posted her first blog here. tenor.gif

First, I know from browsing through other intern proposals that many of the applicants were very experienced, some having already worked as software engineers and web developers in other settings. For me, this internship marks the first time that I'll be getting paid for my work as a developer.

I haven't had much luck applying to jobs as a self-taught developer. I've assumed this is because other job applicants have degrees in Computer Science, are bootcamp grads, or have extensive work experience. Working for Public Lab will be an invaluable learning experience I'd be hard-pressed to find elsewhere. I'm excited that I'll be able to receive some direct guidance from my mentors Jeffrey, Cess, Sagarpreet, and others here at Public Lab. Direct mentorship is priceless. I hope that my experience and learning here will lead to interesting places down the road. In short, I'm determined to make the most of it!

Second, I also feel lucky that Outreachy placed me with an organization that is in-line with my values and interests. I believe that humanity's care of the planet is one of, if not the most important issue of my generation. I've had the good luck to travel outside of the US multiple times, including to the Philippines (where I was born and where my parents grew up), and Peru (twice). I've often felt grief upon seeing how our modern global culture pollutes, spoils, and neglects rainforests, oceans, and beaches that were relatively pristine just two generations ago.

Public Lab has a really interesting approach to environmental issues in that they encourage environmental monitoring at the grassroots level. As a programmer, I like the idea that the technology I work on can be applied to such an important issue, and can be empowering for the people who use it (rather than abstracting, confusing, and exploitative as a lot of modern tech is).

More About Me

Some final snippets about me for context: I am a Filipino trans developer (pronouns: he/him) in my 30s living in Oakland, California, United States. I bike around everywhere. I love the massive system of regional parks and trails here in the East Bay, and in California in general.

One of my strengths is that I've had jobs in a wide variety of contexts, and have a wide variety of interests. In my lifetime, I've been a suicide prevention counselor, cook, poet & playwright, youth fishing & crabbing instructor, and so many other things. I am an enthusiast of world and indigenous music: for example, I play kulintang, a music indigenous to the Southern Philippines.

Every two weeks, I'm going to be blogging here to keep track of my progress and respond to prompts from the Outreachy team. The prompt for this week is...

[drumroll...]

Core Values

If I had to pick three Core Values, the ones I'd say I aspire to are: persistence, transparency, and beauty.

Persistence

I think persistence is crucial in learning how to program. In 2015, my initial impetus to learn JavaScript programming came from a wolf-shaped jigsaw puzzle with 1000+ pieces.

sunsout-401909-95497-updated-main.jpg

During 10-minute breaks at my job at the time, I would sit at a coffee table and piece-by-piece put this puzzle together. It was a massive undertaking. There were hundreds of pieces, and most of them had extremely minimal detail, being nothing more than swatches of (mostly blue) color. For weeks, I would color-sort the pieces, churning them around in giant piles.

My co-workers would place a piece or two, but most of them would throw their hands up at the 'impossibility' of finishing a large, weirdly shaped puzzle with such tiny pieces. At one point, the custodian put all the loose pieces back in the box, and I had to color-sort them all over again! I surprised even myself when 4-5 months down the road, I put the final puzzle piece into place.

In that moment, I realized that if I could complete a giant wolf-shaped puzzle, I could probably do anything if I just persisted and applied myself. I decided on the spot that I wanted to teach myself to program and get a job as a developer.

Up till that point, my experience with programming was limited to my high-school knowledge (by then, already very, very outdated) of HTML, and some dabbling in game programming on my Dad's old MS-DOS computer. I'd majored in humanities in college, and worked exclusively in non-profits up to that point. So the decision to be a programmer came from out of left-field. I knew that it would be pretty challenging at first, but in a way it didn't matter, because of my confidence in the power of persistence.

In the five years since that decision, I've made the time to study web development on-and-off (primarily using freeCodeCamp, one of my favorite learn-programming resources!), during lunch and work breaks, periods of un- or under-employment, late into the night. And I'll never stop learning! In my learning journey, there are many moments where I get stuck and start to feel despair. "I've been working on this test for 3 hours, and I still can't get it to pass!"

What gets me through those moments is remembering to take a deep breath, and get a drink of water. Sometimes I'll rest for a day or two, come back to it again with fresh eyes, skim the documentation again, and realize exactly what mistake I was making. Persistence for me is similar to patience. That means not giving up even when I can't imagine a way forward.

It also means being okay with the idea that good things take a long time to learn. Sometimes I think to myself, "Maybe I could have accelerated this whole process by taking out loans to get a Master's in Computer Science, or going to a coding bootcamp." On the other hand I think that perhaps in these last five years I've been building a strong foundation of persistence that I wouldn't have received in any other way. Now I know with reasonable certainty that I'd enjoy a career in Computer Science, since I've spent plenty of my precious free time teaching myself. I guess you could say... I've learned to love whatever I do!

Transparency, Vulnerability, and Humility

These three values make up the second "value" that I want to talk about. I realize that's kind of a cheat, but I do want to talk about what's at the nexus of these three qualities which are very similar to me.

As a new programmer jumping onto an already existing project with a big codebase, I find it useful to cultivate my personal beginner's mind.

It's said that new programmers often struggle with what's known as impostor syndrome:

Impostor syndrome (also known as impostor phenomenon, impostorism, fraud syndrome or the impostor experience) is a psychological pattern in which an individual doubts their skills, talents or accomplishments and has a persistent internalized fear of being exposed as a "fraud". Despite external evidence of their competence, those experiencing this phenomenon remain convinced that they are frauds, and do not deserve all they have achieved. Individuals with impostorism incorrectly attribute their success to luck, or interpret it as a result of deceiving others into thinking they are more intelligent than they perceive themselves to be.

This probably applies to both fresh and experienced developers alike. I'm sure even for people with several years under their belt, coming onto a new project is like learning from scratch. The codebase and technology stack could be totally different from what you've encountered in prior jobs. For example, Public Lab uses Rails on its back-end, of which I know extremely little. Most everything I've made used Express, React, and NodeJS! I have to learn Rails on the job (and off of it), which apparently is a not uncommon obligation in the tech world.

Or maybe let's say you've worked on a giant codebase for so long in an extremely specialized way. If you opened up a random file by chance outside of your specialty, and really took a look at it, it would be totally surprising and novel... And all the time it was right underneath your nose.

Learning new things is the name of the game. I like learning new things. At the same time, it is uncomfortable to constantly have to admit that I don't really know as much as I thought that I knew! And that's been happening a lot in my internship!

Something that makes the process easier is reframing my ignorance as a receptivity to learn something. The sooner that I can admit that I know nothing, the more ease I'll experience in the learning process.

When I took classes in improv comedy, a common warm-up exercise was volleying a rubber ball back-and-forth. In this game, if you dropped the ball, you weren't allowed to grumble or be hard on yourself as most of us are conditioned to do. Instead, you had to pump your fists in the air and shout "Woohoo!"

I like this attitude because it cultivates what psychologists call "growth mindset." Growth mindset means striving to learn through making mistakes, and refusing to be ashamed of your failures. In my internship, one of the nice things about asking so many basic questions in public chat and on GitHub pages is I like to believe, and sometimes see, is that other people will learn things from questions that I was embarrassed to ask. It's like when you were younger in school, and you were always secretly relieved that someone else asked the question you didn't want to ask. I hope I'll always have the courage to be that person.

5e7667b7210378a69e378983e7c1822f.jpg

Beauty / Organization

For the last core value, I will close this blogpost on a brief reflection, in the spirit of what I'm talking about. When I say beauty and organization, (another twofer value bundled up into one!), I'm talking about the breathtaking, meditative austerity of... let's say a Zen garden:

lifelist-zen-garden-631.jpg

It may be because I'm a Virgo, but I really like organization and lists. Lists have literally saved my life. I have an Evernote account where I keep lists of everything in my life, including recipes that I want to cook, and movies that I've watched.

It's been serving me really well during my internship to repurpose my book of lists into a place to organize my head around the internship.

Sometimes I get lost understanding a piece of code, and my way of mapping it all out is pulling up all the files in question, and typing out what they do as pseudo-code. Constantly shuffling around the puzzle pieces, and sorting them by color.

It's the programmer equivalent of what's known as ELI5: Explain It to Me Like I'm Five. When I ask questions of my mentor, I do my best to really simplify and distill my question into one that is simple, beautiful, clear, and effective. So as to make the most of our interaction. When I write code, I'm doing my best also to be a channel for elegant, effective simplicity. In some sense, that's all that anyone that works on an open source project is really doing.

There's something really beautiful about code that is simple. And the more that I learn about programming, the more I understand that what makes code simple is really debatable. There are so many cost-benefit analyses at play. Do you go for what's efficient, or reliable? What's future-proof, or rapidly deployed? What's easily explainable, or compact?

These questions remind me of life, and the choices we're all making constantly at every moment. It's nice to find that even web development can be a place to contemplate these mysteries.

Thanks for reading!