Erik Nielsen: EatStreet director of engineering, career coach master and computer programming ninja talks about his career path and gives some great advice to students on how to get into programming.
Q. Why did you get involved with computer programming? How old were you when you started?
A. I was in 4th grade when I wrote my first program in BASIC on an Apple IIe computer in my math class. My father worked on some early computer systems (before computer science was even a degree you could get) and was at that time in the tech industry. So we also had computers in the house, and I would play games and use other software but also boot the computer into BASIC mode to play around.
In high school, I joined a Boy Scout Explorer post (co-ed) at AT&T Bell Labs (now Lucent). There I learned basic UNIX and Linux skills. My high school also had a program where, if they didn’t offer an AP course that you wanted to take, you could enroll at Ohio State University (now “The” Ohio State University — I feel old). In my senior year, I took basic computer science courses like intro to programming courses and assembly language programming (of course, this was in languages like Pascal and Modulo-2 that no one uses anymore).
Q. What steps did you take to make this your career?
A. I knew I was going to go into some form of computer programming when starting college, but I always tried to get a job in some form of IT. Near the end of high school, I started looking for tech jobs for the summer. I was lucky to get a summer job after high school and before college at Progressive Systems, a company that made PPP communication software. These days, no one knows what PPP is, and Progressive Systems has long been acquired and merged with another company.
If I really think about steps, it’s using connections or whatever resources you have to find the first job, and then looking for the next opportunities that are going to advance your career.
However, there I got to learn a lot more about different flavors of UNIX systems and do some basic web programming. When I started college, I got another system admin job maintaining computers for the Computer Sciences department. I did an programming internship at SCO in Santa Cruz after my Freshman year. (That’s another company that doesn’t exist anymore… is it me?) After that, I looked for another programming job back in Madison, and I found one at the UW-Chemistry Department at the Smith Group.
At this point, I fell into biotechnology working control software for a genetic sequencer and various bioinformatics tools, and that set me off into my initial career doing software development and IT for biotech companies. If I really think about steps, it’s using connections or whatever resources you have to find the first job, and then looking for the next opportunities that are going to advance your career. All the while, you need to keep up with technology trends and update. You’ll note that I no longer program in BASIC or Pascal, nor do I use PPP with a modem to connect to the internet. Ironically, though, UNIX skills from systems developed in the 1970s are still relevant to my job today.
Q. Where did you get your degree?
A. I graduated with a Computer Sciences degree from the UW-Madison. Note that the “s” in Sciences is not a typo. I think it reflects the Computer Sciences departments acknowledgement that there are many fields under the department including Data Science, Software Engineering, Computer Architecture, Operating Systems, Databases, Mobile Devices, etc.
Q. When do you think an aspiring programmer should get started learning to code?
A. As early as they can follow a recipe. Or, better yet, as early as they can instruct someone else in following a recipe and correct them when they go wrong.
Q. What are some ways that a young person can get started on computer programming early?
A. LightBot and other apps are great to start thinking in the way programmers think. I had the advantage of taking programming in my early math classes, so that’s something that school curricula can provide. Also Google “programming resources for kids”.
The real answer, though is to start doing things, then do the next thing, and, before you know it, you’re a programmer. If you don’t have a computer, try to get one cheap off of craigslist. If it’s a PC, install Linux. If you’re interested in app development, the tools are mainly free to download. If you have computer course at your school, take it. Learn to touch type if you haven’t already.
Learn Linux commands (macOS is also based on UNIX, so there are cross-over skills there). Find a makerspace. If there’s a career exploration group like Boy Scout Explorer post in a career you’re interested in, join it. If you don’t have an internet connection at home, go to your local library.
(Note: I should say that I’m very biased towards Linux and macOS, but tools on Windows are equivalent and also generally free for students.)
Q. Are there other important subjects or skills a young person should learn to help them if they want to be a programmer? What are they?
A. Math and logic are very important, as are critical thinking skills. Soft skills are an increasing differentiator for employers, so good written and verbal communication skills (ala English and speech classes) are great complementary skills. Graphic arts and design are also important for visual communication and user experience. Though, if you believe Larry Wall, one of the luminaries of computer programming, the virtues of a great programmer are Laziness, Impatience, and Hubris (http://threevirtues.com/). (For hubris, pay attention when you study MacBeth in English class… that’s the only reason I know what hubris means without having to look it up).
For reference, I took AP Language and AP Literature in high school, and, even though I had to read Tess of the D’urbervilles, I don’t hold a grudge (or at least not too big of a grudge) against my English teachers. Doing a lot of reading and writing is very, very important to modern software development, where technology changes quickly and you are always reading and parsing documentation and writing code and documentation for other people. Thank your English teacher even if they say alright is “all wrong”. It’s at least nice to know the rules before you break them. And Google Docs didn’t underline “alright” in red, and neither does Microsoft Word. So there. I’m not bitter.
Q. What do you like most about your career as a programmer? What don’t you like?
A. Another way of saying impatience is being quick to get bored. I get bored very easily, so I need a constant stream of new challenges. Programming can provide that, because there’s always a new problem to solve, a new feature to implement, or a new bug to fix. The problems also vary in scale. Once you have something working for yourself, how do you make it work for 100 people? a thousand? a million? How do you fix it when it breaks?
One trend in computer programming is DevOps, which is a combination of development and operations. Modern websites need to be up and operational 24/7/365. That means that developers have to be available 24/7/365. On the one hand, this gives developers an incentive to write good code that’s not going to break at 2am. On the other hand, someone has to be on call at 2am when the code breaks, the site’s down, and the office is on fire. I’ve had my share of 2am calls. However, that’s the price you pay for working in a very fast paced environment.
And not all software development jobs are like that. Even most might not be like that. I think people can find the programming job for the level of excitement they’re prepared to deal with. The fun part is that that there are all kinds of programming jobs from manufacturing, automotive, aerospace, biotech, robotics, artificial intelligence, apps, web, whatever. You can apply computer programming skills to many, many jobs, even if your primary job isn’t computer programming. Even the marketing people need to know SQL for data access and analysis.