Understand Software Industry

On Careers in Tech

With regards to software engineering entry level, what topics should we know in advance aside from data structures and algorithms that are supposed to be learned outside of class when it comes to the coding interviews?

Check out this internship interview guide for all the details as explained above. Specifically regarding things that are important and would need to be learned outside of most traditional CS classes in college:

  • Real-world Javascript programming. Specifically using frameworks like React and jQuery. Javascript is used universally for building website front-ends and can now be used to build web application back-ends as well using Node.js.

  • Native iOS and/or Android. Specifically building and shipping native mobile apps for either iPhone or Android. Best if you are building your own app ideas and push them to the Play Store or App Store. Bonus points if you get your friends using them.

  • Web Back-end Development. We recommend you check out how to build web application back-ends (server-side development) using a language such as Node.js or Ruby on Rails

  • UNIX / Command-line. You’ll want to explore how to use the command-line in various ways especially on the UNIX platform. You’ll be really glad you are comfortable with UNIX.

  • Version Control / Git. You’ll want to explore using version control systems such as Git to store and track your code. Bonus points for using Git to build a project with a few friends.

You can check out our skills and knowledge tree for a more detailed look. Note that no one is going to become an expert at everything, this is not a checklist to complete. Instead, focus on exploring the areas that are most interesting to you, and enable you to develop projects.

I would like to learn about building a good personal brand and network for a successful career as a Software Engineer.

Although many students don’t start thinking about developing a personal brand and networking in the technology industry until later in their career, there are many ways to do that. Here are a few ways to get started:

  • Take CodePath classes, as many as you can 😄 and meet mentors and students through these programs. Become a student leader, and teach other students to push forward your mastery.

  • Start a blog (or post on medium) where you share concepts and journal concepts you are learning. Cover anything you find interesting as you learn. Later when you look back, you’ll be glad you did.

  • If you can, consider attending nearby hackathons. Hackathons are a great way to meet and talk to people from various companies. You can even try to meet one of the event organizers.

  • If you can, find a way to attend software conferences or events nearby. You can often find events on meetup.com or even on your campus.

  • Contribute in small ways to open-source online to build up your real-world skills and learn from top engineers in the industry. (Explained more below)

Be mindful that no one achieves all of these things at once, and this is not a checklist to complete. You may find you dislike hackathons, or dislike certain clubs or meetups. This is entirely normal, explore around and find what works for you.

On Software Engineering

What are the types of skills and knowledge required to be a great software engineer?

There are a number of different broad categories of skills and knowledge within the software engineering discipline:

  1. Team Collaboration and Cooperation - How to work well with a team, be a good team member, coordinate your work with other engineers and resolve conflicts.

  2. Data Structures and Algorithms - How to store and organize data in different ways and then solve many different types of problems using code.

  3. Technical Interviewing - How communicate clearly as you think through solving problems, asking the right questions, analyzing efficiency, and verifying solutions.

  4. Software Design Patterns - How to structure and design code in order to make sure the code is high quality, well-organized, easy to understand and easy to change over time.

  5. System Architectures - How different software systems all fit together and how to design them in order to be reliable, maintainable and efficient.

  6. Development Workflows - How to do specific processes common to writing software such as debugging when things go wrong, searching for possible solutions online, working with Git or other version control and more.

  7. Stack-Specific Knowledge - Knowledge of how to build things using particular technology and languages. For example, building iOS or Android apps, building web servers with Ruby on Rails, or writing Javascript.

You can check out our skills and knowledge tree for a detailed look at exactly the types of skills, knowledge and workflows you will develop over the course of your career as a software engineer.

Do I need to enjoy and be good at math if I want to be a software engineer?

While there is definitely some math involved in most Computer Science degrees in school, you might be surprised how infrequently many software engineers use math. There’s certain things you will encounter a lot in programming of all types such as boolean logic (if this, then that), arithmetic (addition, subtraction), percentages and fractions, basic algebra concepts (variables), etc.

Outside of those basic math concepts above, the amount of math you need in software engineering is entirely determined by what you are building and doing. There are many successful engineering roles such as web app development, front-end javascript, and mobile development that requires little to no math.

Certain other focuses such as game development, physics engines, data science, machine learning, artificial intelligence, inventing your own algorithms, etc. can require significant math. Ultimately though, you can decide how much math you want to use based on what you choose to do.

For more details, check out this post by Sarah Mei called Programming is NOT MATH.

What are the different domains of software engineering that are relevant in industry?

At a high-level, the following software engineering domains are most common within the tech industry:

  • Web Front-end (HTML/CSS/Javascript)

  • Web Back-end (Ruby/Python/Node.js)

  • Mobile Engineer (iOS/Android)

  • Graphics/Games (OpenGL/Unity)

  • Data Scientists (SQL/Python/R)

  • DevOps and Infrastructure (Jenkins/Docker/Kubernetes)

  • Embedded Systems Programming (C/C++/Assembly)

  • Blockchain Systems Engineer (C/C++)

  • Security (Python/Ruby/C++)

  • Desktop Software Development (Windows/Mac/Linux)

  • Software Testing Engineers (Selenium/Expresso)

For a more detailed breakdown of roles within the software industry, check out our software engineering roles guide.

What is it really like working as a software engineer day-to-day?

Working as a software engineer is a broad space, and you can work in all sorts of different and interesting ways depending on the company and the team. However, here are a few things to keep in mind:

  • If you enjoy collaborating a lot with others, being a software engineer can be highly creative, working closely with other engineers, as well as designers and product managers to craft a product that users love.

  • If you are interested/enjoy design, as a front-end web engineer or UI engineer, there can be a lot of design work involved. Lots of illustration and design, colors, use of space, placement and layouts.

  • If you kind of like to keep to yourself, and stay heads down working on the code, working quietly and thoughtfully, there are roles where you can work uninterrupted or even work remotely from home. You can work on teams where in-person meetings are infrequent, and your communication happens largely through email and Slack.

  • If you are interested in helping people or social impact, you can work with non-profits or startups that work on cool ways to make the world better in various ways. You can have a lot of control over product decisions, and get to meet with users to improve your product.

At the end of the day, there are so many different companies, teams and software engineering roles, that you can find a work environment that fits almost anything you are looking for. The trick is learning about yourself and your preferred work style and then finding a company/team that is a good fit for your preferences. Don’t worry too much if you don’t know yet what you want, experiment with different environments in order to learn.

The following provides a rough cheatsheet of the various technical areas as a software engineer, and related languages/frameworks:

Technical Area

Related technologies/keywords

Web Front-end

Javascript, jQuery, Angular, React, Ember, HTML, CSS, Bootstrap

Web Back-end (Startup)

Python, Django, Flask, Pylons, Javascript, Node.js, Express, Sails, Ruby, Rails, Sinatra

Web Back-end (Enterprise)

Java, J2EE, JEE, Spring, Struts, Play, Grails, Scala, Lift, Go

Web Back-end (Other)

PHP, Symfony, CakePHP, Zend, C#, ASP.NET, .NET, LAMP

Mobile (Android)

Kotlin, Java

Mobile (iOS)

Swift, Objective-C

Mobile (Web)

React Native, Javascript, Cordova, Sencha Touch

Data Science

Python, R, Matlab, NumPy, SciPi, TensorFlow

Desktop

Javascript, Electron, WPF, Cocoa, wxWidgets, Kivy

General

C, C++, Go, Assembly, Rust, C/C++, VHDL, Verilog

This is intended to give you a rough sense of the technical landscape, and by no means is comprehensive. There are hundreds of active programming languages and frameworks still being used today across the world.

How do I know that I have “what it takes” to be a software engineer?

Many students are unaware of a big challenge among software engineers that people rarely talk about openly. The challenge is called “Impostor Syndrome”, which is defined as a “collection of feelings of inadequacy that persist even in face of information that indicates that the opposite is true. It is experienced internally as chronic self-doubt, and feelings of intellectual fraudulence”.

This often manifests as the thought that you might not “be cut out for being an engineer” or “I’m not a real engineer” or “I am less talented than other people around me”. The most important thing to be aware of is that this is actually an experience that the majority of engineers encounter many times through their careers. If this happens to you, the first part is knowing you are not alone:

How can I deal with this? Be sure to read about and understand impostor syndrome. This other guide focuses on overcoming impostor syndrome.

Software engineering is both a creative and technical skill, and as with any skillset, this can take time to pick up for anyone that’s new. Anyone willing to put in the time and that enjoys building digital things can succeed as a software engineer. Remember that the field is incredibly broad and there are so many good paying roles out there. Bottom line is that this feeling is much more common than you think, and there are so many available opportunities, that there is a place for everyone that wants to be there.

Last updated