This morning I got an e-mail from a 10th grade student asking me some questions about software engineering for a school assignment. I found his questions to be well-posed and thoughtful, so I figured I’d post my responses as a blog post. I’ll be sending this post to Jordan, so if anyone has additional comments or advice for the kid, please feel free to leave some wisdom in the comments!
Q: Describe the duties and responsibilities of someone working in software engineering.
It really depends on your title — ultimately the job is about building great software for whomever is paying you. There are different roles however: you have developers and project managers / lead developers. I perform the duties of both. As a developer, I spend a lot of time simply writing code, fixing bugs, etc. As a project lead, I also have developers working under me and it is up to me to make sure they are on-task, not getting stuck, making sufficient progress, etc.
Q: What is your specialty in software engineering?
My specialty is PHP and back-end web development, however my day-to-day projects involve a wide range of languages and tools.
Q: What are some of the projects you’ve worked on?
Check out my Github account, most of my projects are open source! https://github.com/EvanDotPro
Q: Do you have assignments that seem to drag on forever, or are they usually pretty quick?
Yep! it seems that most projects are never truly complete. For example, I’ve been working on SouthwestMedical.com since 2008 — we’re currently working on a new version of the site to add a ton of new features that we’ve wanted for a long time. There are some rare, quick projects, but I usually find myself involved in larger, more complicated projects.
Q: How much of your time is spent on the computer?
A LOT! At least 8 hours a day, usually much more. I try to stay involved in hobbies off of the computer as well — e.g., I fly remote control helicopters and airplanes.
Q: Does your job deal mainly with people, data or things?
As a project lead, I deal with my developers and boss on a daily basis. However most of my time is spent writing code and mentoring my developers.
Q: Are there any specific tools or equipment required for your job?
A computer, of course. Me and my team use Fedora Linux on our computers with Nginx, PHP-FPM, and MySQL. We use Vim for editing code, as it’s much more efficient than your typical IDE like Eclipse or Netbeans once you are proficient with it.
Q: What are the advantages of this occupation?
My job is my hobby — so it really never feels like work! That’s by far the best part. Also, flexible hours, relaxed working conditions, etc.
Q: What are the disadvantages?
There are some annoyances you can run into as a software engineer: requirements changing mid-project, unrealistic deadlines, being held to deadlines despite being assigned other distracting side-projects in the meantime. These are pretty common, and I’ve learned to just not let them bother me anymore. There may be some companies where this isn’t an issue, but I’ve experienced it everywhere I’ve worked. At two of my jobs in particular, there were sales teams that would deliberately sell features of software that me and my team haven’t even finished or started working on yet. Stuff like that can make the job somewhat stressful at times.
Q: How about advancement opportunities?
It really varies by employer — generally there’s always room to advance from a junior to a senior level software engineer, and if you like managing people, eventually project manager / lead developer. I run a business on the side, and the developer I have working for me started as a junior developer working for me while we were both still in high school — he’s now graduated from college and I recently made him my partner / co-owner of the company due to all of his hard work and loyalty over the years. How’s that for advancement opportunities?
Q: So do most people work for themselves, private industry, or the government?
It’s mixed. There are a lot of developers / software engineers that are also entrepreneurs. For example, in addition to my day job, I also run my own business, http://www.mediatechdesigns.com/ and http://www.smscloud.com/.
Q: Does where you live make a difference in your salary?
Absolutely! It’s pretty much proportionate to cost-of-living from what I’ve seen. Typically, you’ll get paid much more as an engineer in more expensive locations such as San Francisco (silicon valley) or New York.
Q: Is there overtime pay?
If you’re paid hourly, yes. If you’re on salary, unfortunately not. Some employers will give bonuses for completing projects, etc. It really depends on the employer though.
Q: How many hours do you work per week?
Minimum 40, with deadlines and also running my own company on the side, I’ve been known to work well over 80 hours in a week. It usually doesn’t bother me if I’m working on a fun project, though!
Q: What about vacations?
As a software engineer, you’ll definitely get vacation time from pretty much any employer (if not, find a better employer!). In the last couple of years I’ve traveled to Switzerland and gone sailing in the Virgin Islands with my girlfriend!
Q: Is there further education offered where you work?
Not formally, but I’m sure if I asked, I’d be accommodated. My employer has paid for me to travel to conferences in the past.
Q: Do you have to travel?
I don’t have to but I do choose to travel and speak at conferences. For example in October, I’m flying to Manchester, UK to give a live tutorial on the new Zend Framework 2 at the PHPNW conference.
Later in October, I’m also flying to Santa Clara, CA to give another tutorial and also give a talk about the new module manager I wrote for Zend Framework 2 at ZendCon.
Q: What are the retirement benefits?
Most employers offer a standard 401k package. Some start-ups offer very, very competitive benefits packages that would blow standard employers packages out of the water. Protip: If your employer offers 401k contribution matching, at least take advantage of however much they offer to match! It’s free money!
Q: In what kind of environment is the work done? Indoors? Outdoors?
Typically indoors, but on occasion, I’ve been known to go sit outside of Starbucks or go to the park with my laptop on a nice day and work there.
Q: Is it possible to work at home (like if you’re sick)?
Absolutely! Many software engineers work from home all of the time, even when they’re not sick! I only go into the office once per week for a meeting.
Q: Were there any tests or licenses you had to get before you became an engineer?
Nope — what’s key is having code available online to prove your abilities. Use websites like GitHub to showcase your projects and code, and show off your GitHub profile on your resume and during interviews. I do have two certifications, ZF ZCE and PHP 5.3 ZCE, but I don’t believe those to be nearly as beneficial to my career as my practical experience, open source contributions, and available work online.
Q: What is your most satisfying experience so far?
One of the more rewarding things I’ve done is building the replacement wheelchair parts system on SouthwestMedical.com.
Prior to me building this, it was incredibly difficult for those in wheelchairs to find a way to purchase the simple little parts on wheelchairs that might break: bearings, hinges, footrests, etc. They’d have to get a huge parts manual from the manufacturer, find the part number in the huge cryptic book, then call around local wheelchair repair shops trying to find one willing to sell them the part (many will only do it if the customer also pays to have the part installed, and some people don’t live anywhere near a wheelchair repair shop at all). We get e-mails all of the time complimenting us, saying how great the parts system is and how it’s helped them so much, etc. The best thing was, I wasn’t even asked to build this — I just identified the need and asked my employer if he’d let me try building something new to help solve the problem. It’s turned out to be the most successful part of our website, and parts sales now account for large portion of our online revenue!
Q: Is this what you thought you were going to do in high school?
Yep — I was already doing it!
Q: What degree did you get in college?
No degree — I strongly believe software engineers should prove their abilities with code, not just a piece of paper. In my experience, >90% of companies agree with this mentality. I’ve had job offers from companies like GoDaddy, Panasonic, PayPal, etc. My lack of a formal degree has never once been a hinderance. That said, I also don’t discourage anyone from getting a degree. It certainly doesn’t hurt, a degree should only serve as a supplement to practical experience, not as your sole qualification.
Q: How long have you work in your profession?
I’ve been programming since I was about 12, and I got my first job when I was 14. It was originally an internship but after the first week they put me on payroll because I was already teaching them stuff and substantially helping them with a large project.
Q: Do you have any advice for someone looking to go into software engineering?
Keep learning! Never, ever, ever stop learning. Always look for new, more efficient solutions to your problems. My rule of thumb is that every year you should be able to look back at your code from the previous year and it should look terrible. This is a very good sign that you’re learning and becoming a better software engineer. Also, find an open source project and contribute to it. Contributing to open source projects helps you on several levels: the peer review involved will help you become a better developer, and at the same time, your contributions will serve as a great addition to your resume and talking point during job interviews.
Q: That’s about it. Is there anything you want to add?
Keep learning new stuff and don’t let yourself get bored with it. Have fun, don’t be afraid to try new things and challenge yourself. Also remember that as long as your job is your hobby, you’ll never have to work a day in your life.