Interview with Josh Tynjala
Name: Josh Tynjala
Major, minor, graduation year: Computer Science (comprehensive), 2005
Job Title: Open Source Software Engineer
You're a Open Source Software Engineer, what does that entail? What are your responsibilities?
I'm a software engineer who works on an open source project called Feathers. Feathers is a library that lets people create graphical user interfaces with some of the web and mobile technologies created by Adobe Systems. The Feathers library includes things like buttons, lists, and pretty much anything that you interact with by touching a smartphone's touchscreen or using the mouse and keyboard on a desktop or laptop computer.
When a software project is "open source", the source code is available for anyone to download for free. You can modify the code, use parts of it in other projects,and share it with others. Many open source projects are maintained during a software engineer's free time on evenings and weekends. Often, simply for fun. Sometimes, to stay practiced with new technologies. Other times, projects are funded by companies who see value in helping a community project. Perhaps the funded project is used by the company behind the scenes in some way, or maybe it is vital to the company's customers. In my case, I have partnered with Adobe, who provides funding for part of my time working on the project. The folks at Adobe have plans to integrate Feathers into their future design tools.
Working on an open source library like Feathers involves a lot of interaction with other software engineers because people use Feathers merely as building blocks for creating their own apps. They may request new features or report bugs in my code. They may have questions about how use the library in a certain ways that I may not have originally anticipated, or they may not be sure if an issue is caused by a problem with their code or mine, and I often need to help them track it down.
In addition to writing code, I also need to spend time writing tutorials that help people get started with Feathers. These tutorials usually focus on teaching specific common tasks that may people may encounter when working with Feathers. Often, I need to write articles that explain how certain parts of the code work so that people can extend Feathers to add new features on their own instead of asking me to do it.
What part/s of the job do you enjoy?
I've always enjoyed building things. As I see the parts start to come together and work correctly for the first time, it's very satisfying. I like seeing what others have built with Feathers, and I love being surprised as they push my code far beyond what I expected.
What part/s of the job do you not enjoy?
It's never fun to track down bugs. It's an important skill to have, though, and I always feel better knowing that something has been fixed. It can be frustrating during the process, though.
With anything that's free, some people feel entitled to make unreasonable demands.They build up expectations that my code should do something it doesn't, and they expect me to make it work their way immediately. Any job where you communicate with people will be like this sometimes, and I just do my best to be polite while firmly establishing boundaries.
Where (office/lab/outdoors) do you spend most of your day?
I spend most of my day in my home office. It's meant to be an extra bedroom, but I've set up a couple of desks, and I have various computers and mobile devices close at hand for testing my code.
I try hard to separate my work from the rest of my life, though, and I avoid my office when I'm done working for the day. It's been a long process to get used to working from home. It's very easy to get distracted, and if you're not careful, you can let the rest of your life creep into your working hours. It feels great once you strike the proper balance, but in many ways, commuting somewhere else can be better.
How did you become interested in your field?
Where and/or what do you hope to be in2-5 years? 5-10 years?
In 2-5 years, I hope to continue working on Feathers. Perhaps I'll find some time to build a couple of apps on my own. In 5-10 years, I'm not sure. Feathers is less than a year old, at least in any recognizable form, so it's still largely a new experience to me. I'm certainly enjoying myself right now, and I think I will want to keep working on similar types of projects.
What are the qualifications needed toget into your line of work?
A bachelor's degree is pretty important to get a job in software engineering. Computer Science is often the most desired major when companies are looking for people to hire, but I've known a number of software engineers who come from more creative technology backgrounds with degrees in other areas. For the more creative side of software, skills in visual arts are very valuable, and I'm glad that I spent many years taking art classes in high school and college, often just for fun. It has made it easy to work with designers and to help craft an experience that users will understand.
To become an open source developer on a funded project like mine, it requires many years of experience in the field. I started out at various companies working on their software products, from small startups to large corporations. I spent some time at Yahoo! in their "platform engineering" department, and my job was very similar to working on Feathers. I built user interface components, graphs and charts in particular, that other folks at Yahoo! used to build full apps. After that, I decided to go out on my own. I did a little freelance work here and there, and I also created some games for smartphones. Over all of those years, I spent time blogging, on social networks like Twitter, and going to various industry events to meet with some of the smartest folks in my field. I even spoke at a couple of events. Basically, I ensured that people know me, and they knew what I was capable of. By the time that I started Feathers, I had established a proven track record for creating good software. I recognized that a project like Feathers was needed, and I found myself in the right place at the right time.
What degree/s is appropriate for yourline of work?
See above. A bachelor's degree is strongly recommended, especially majoring in Computer Science.
Are there any classes you would have paid more attention to in college, or classes that you wish you would have taken?
I think I could have spent some more time learning about the design of algorithms. When an interviewer sees the Computer Science major on your resume, they'll definitely focus on that with their technical questions.
Do you have any bits of advice for a college student interested in this job?
Don'texpect to get this type of job right after you get your degree. There's so much more to learn about software engineering after you graduate. Never stop learning, and find ways to show others that you're passionate about your work. Start a blog, interact with smart people that you look up to. Some of my best memories of being a software engineer aren't related to writing code, but of simply talking to colleagues and people I've met who are in the same field.
Ask questions of the senior-level engineers that you work with. They've been around for a while, they're smart, and they can help you a lot. Don't worry that you'll look stupid. They were once in your shoes, and they needed to ask for help sometimes too. I once read that the smartest people are the ones who aren't afraid to say "I don't know". I've tried to help that guide me to be more open about what I need to work on to get better at what I do.
On the other hand, you should also learn to recognize a situation when you need to do the hard work and figure something out entirely on your own. Sometimes, you won't understand something until you've torn it apart and figured out how all of the little pieces work. It can be a long process, and often frustrating, but once you put it all back together, you'll be a better engineer.
In college, people claim that a bachelor's degree isn't enough anymore and that you need a master's or doctorate degree to get your foot in the door. What's your opinion?
I've felt no pressure to get a master's degree. From time to time, I feel like I want to go back to school to study another subject, though. Not because I'm tired of being a software engineer or that I feel like I'm lacking in opportunities. Instead, I feel like my capabilities as a software engineer would be greatly expanded by understanding another field more deeply. One of the hardest parts about creating software is the fact that you are often not the person who will be using the software every single day. You can often learn a lot by talking to your users, but some things are only truly understood when you experience them directly. I'm not sure if I'll ever go back to school, but if I do, it will probably be for that reason.