I just finished an on-site interview with Google a few days ago. I’m not sure if I got the job yet, but I thought it might be useful to shed some light on what I was asked and what skills you need to get a software engineering job at Google.
First off, I should mention that I’m a graduating senior at UC Santa Cruz who has never worked professionally as a software engineer before, so everything I’m about to say about interviewing techniques applies to my situation. It may be different for someone who has 5 years of professional experience in the field. Also, the following details are based on my personal experience — your interviewer may ask you completely different things. But the overall gist will probably be similar since they seem to follow a standard interview process.
The first two interviews were coding interviews where they gave me a problem and asked me to code up a solution in C++ or Java. You can use whatever language you want as long as your interviewer knows it (hence why you can’t use languages like Lisp or Haskell). They don’t give you any hints. You have 45 minutes to solve the problem by yourself while they watch and take notes silently in another room.
It’s generally understood that being a software engineer at a large corporation requires significantly less technical expertise than being an engineer at a startup.
Indeed, many things make working at a big company more attractive than working at a startup, especially when you’re considering the long-term. But one of the big tradeoffs worth considering is the lack of autonomy and responsibility that you have as an individual contributor.
Big companies tend to be very process-driven, with formalized systems and tools to help control and track work. You may not be writing much code or solving particularly difficult technical problems, but you will likely be expected to adhere to specific standards and processes that could be in place for a variety of reasons (e.g. regulation, security, etc.)
If you’re looking for an environment where you can own end-to-end features and have a significant impact on your product’s success or failure, then it might be worth looking into startups rather than large companies. However, if you don’t mind having less influence on what gets built, then many other perks come along with working for larger businesses.
What Are Big Companies Looking For In Software Engineers
To become a software engineer, you will need, at the least, a bachelor’s degree in computer science, computer engineering, or other related fields. In addition, many employers will require at least some experience and skills in coding and/or programming as well as special training since this is a field that is technically and scientifically driven.
Software engineers work in an ever-changing industry, and therefore, must continue to adapt to new technologies as they are developed. Due to the many shifts involved in this profession, multiple paths and steps can be taken to become a software engineer. However, the following steps are the most likely to put you on the path to software engineering.
Step 1: Get a Formal Education with a Specialty
Step 2: Complete an Internship
Step 3: Pursue Entry-Level Employment
Step 4: Get Certified
Step 1: Get A Formal Education With A Specialty
The first step to becoming a software engineer is completing a formal education. Students may select between traditional training programs and non-traditional programs to be able to work their way up to an entry-level position.
Typically, there are two specializations you can focus on within software engineering:
- Systems/software development and applications. What’s more, there are specialized fields within these areas.
- You can also choose to become an expert in a variety of software development types or a single programming language such as:
DevOps Mobile Development Web Development Technical Stack (e.g., Ruby, Python). Incidentally, the educational path to your career begins in high school where you can start developing your skills and getting the training that will help you on your journey. To get a head start and maybe even earn some college credits, students can take classes in science, mathematics, and/or programming.
After earning your high school diploma, you will need to pursue a bachelor’s degree in software engineering, computer science, or software development from an accredited college or university. Here you will gain comprehensive knowledge of software testing, software architecture, and programming. Check with the Accreditation Board for Engineering and Technology for a list of software engineering accredited programs.
A software engineering undergraduate degree shouldn’t take more than four to five years to earn if you attend full-time.
Step 2: Complete An Internship.
Internship programs allow you to gain real-world experience in your chosen area and get a feel for how things are done. Some students choose a certain major, but after completing an internship, decide that it’s not really what they want and rethink their focus.
Multiple organizations offer these programs to students pursuing a master’s degree in software engineering or a related field to develop and expand their skills in certain areas including SQL, XML, and Java.
Internships usually last from three to six months and provide students with an opportunity to experience what it’s like to work on specific field-related projects.
Step 3: Pursue Entry-Level Employment.
Once you have obtained a bachelor’s degree in software engineering, computer science, or a related field and also gained some hands-on experience through an internship, you can start applying for an entry-level position in software engineering. Although you may aspire to work for a major organization like Google, Microsoft, or another, don’t get your hopes up just yet, as major businesses such as these require years of experience before you can even get your foot in the door. However, many small businesses will hire individuals fresh out of school.
You will first need a good resume and a cover letter or a portfolio to show prospective employers, which you can create by yourself or have one professionally done for you without much cost.
Step 4: Get Certified.
Gaining the credentials you receive from obtaining certification verifies your abilities, knowledge, and understanding of your craft. Combining education with certification and experience puts you ahead of the rest in a marketplace where competition is constantly increasing.
Certifications are tailored to specific areas and are available from a variety of professional organizations, like IEEE, and technology vendors such as Oracle, Cisco, Microsoft, and more.
To become a licensed software engineer you will need to obtain the Professional Engineer credentials. To earn this credential, the requirements can vary by state but are similar to the following: hold a four-year college degree from an accredited college or university, pass the Fundamentals of Engineering exam, have at least four years of experience working under a professional engineer, and finally, pass the professional software engineering exam.
Once you have earned professional engineer certification, you must maintain it. To get specific information about your state’s requirements to earn the PE credentials as well as how to maintain them, contact your state’s board of engineering.
What Is The Difference Between A Software Engineer And A Software Developer?
To numerous individuals, there is no difference between software developers and software engineers, but within the technical worldview, there are major differences.
The real variances between the two start with job function. Software engineering may also focus on software development, where software developers are rarely involved with software engineering duties.
To better explain, software engineers combine technology solutions applicable to the client’s needs with the software development life cycle. They do this by applying engineering principles to develop the requested software programs to provide specific functions.
Software developers are the creative driving force behind software programs and are responsible for the complete development process. They will first collaborate with the client to develop a theoretical design and then work with programmers to create the code required for the software to run properly.