Ever since I was a child, I wanted to work at a big software company like Google, Facebook, Amazon, or Apple. In 2013, when I was in ninth grade, I first got introduced to programming. From then I knew what I wanted to do with the rest of my life.
My goal became to join a major tech company. One day, I told my teacher in Computer class, I will work at Google. A lot of my friends laughed at me for having such a dream. Some of them even called me funny names, such as “Google boy”, for the rest of the semester.
Now I’m a computer science sophomore. I feel like one day my dream will come true.
I think it’s really difficult to get a full-time offer at a big company when you are a student with a lack of job experience. As someone who really wants to work at such places, I really believe internships are the key.
An internship is a great opportunity for junior iOS developers. It will allow you to gain industry experience, improve your technical and communication skills, test yourself in a real project. Also, you will know more about the company from inside. Do you like their culture? Does their processes, development speed, toolset suit you? Is it the company and the team you want to spend the next several years with?
Next year I plan to get an internship at a big company, ideally outside of Egypt (and maybe this year’s summer too, if I’m lucky). Therefore after I finished my freshman year I did a lot of personal iOS projects and made the first resume. Then, I applied a lot to almost every company in Silicon Valley, and as you already know… I failed!
So in this blog post, I’ll be talking about:
Why did I fail to get an internship?
The first mistake was that I applied a lot to almost every internship opening at Google, Facebook, and Apple. A lot of my applications were directed to the United States offices. I found out that was wrong because I’m an Egyptian. It’s very hard and almost impossible to get a visa sponsorship to the USA.
Secondly, I didn’t prepare myself to actually pass my technical interviews if I got one. I just submitted my resume to any internship opening I can find. I wanted to get my feet wet and apply to find out if my resume is good enough or not.
Finally, I don’t have any work experience and I think it’s one of the reasons why I didn’t pass a lot of resumes filtering.
What I have learned?
Believe it or not, but I actually learned a lot by just failing interviews.
A former software engineer at Microsoft always says that…
“It’s a numbers game!” — Mohamed ElSherif
Therefore, you just have to apply a lot and eventually, you will get an interview.
I also learned how valuable networking is. Getting an interview at a big company is very difficult and almost impossible. Networking is very important you can get a referral through someone who’s working there and finally get the interview.
I applied a lot to Google and eventually got a snapshot survey with a coding sample. However, I failed because I didn’t prepare well for the interview, I was really happy that I got this opportunity.
After I finished the coding sample interview, I found out similar questions on websites like LeetCode and GeeksforGeeks. So, I really recommend checking those websites if you have a technical interview.
Advice from a software engineer at Google
I try to connect with a lot of people who works at big companies like Google and Apple, to get their opinion on my resume and personal projects. I wanted to get any advice that will help me achieve my dream goal. Actually, I wanted to build a connection that will be definitely helpful for me in the future.
I got to know a software engineer who works at Google. He was kind enough to set up a Google Hangouts video call and give me some advice that I wanted to share with you.
Computer Science Fundamentals
Understanding computer science fundamentals are really crucial to become a good software engineer. You have to have a pretty good understanding of Math, Algorithms, and Data Structures.
It’s better if you don’t rush into learning new technologies in the first two years in college. The better thing is to learn the fundamentals very well and become very solid in problem-solving skills. It’ll help you a lot in your future career. After these two years, you can start learning any technology you like and start making personal projects.
Know what’s going on under the hood
When you start learning a new technology, it’s better if you go a bit deeper to know more about it. Learn what’s going on under the hood, not just take a sneak peek of what it does. That will definitely make you a better learner and better software engineer.
There’s a lot of programming languages and learning a lot of them is not actually bad. However, you should have at least one programming language that you are comfortable with. Type in it at an acceptable rate without googling obvious syntax.
Communication skills are equally as important as technical. As work in a team might be one of the most challenging aspects of being a software developer.
Your online presence is important for your career as a software engineer. You should have a blog and write on a regular basis. Write about what are you learning, how do you approach the problems that you encounter in your personal projects and how you solve them. Marketing yourself can open a lot of working opportunity for you in the future.
Open source contribution
Contributing to open source projects is really beneficial for you as a software engineer. Not just open source contributions can give you a huge boost in your job application. Contribution to the community also can be the reason why a company contacts you to hire.
When you have an open source contribution, the company see that you can navigate your way through a large code base and fix a bug. That’s what really matters as when you are in your full-time job. You won’t reinvent the wheel and more likely you will just fix bugs in a very large code base. Therefore, navigating your way through code that you didn’t write is a crucial skill for software engineers.
You should take advantage of your summer vacations and go to internships as much as you can. It will give you industry experience that you won’t get from any online courses, nor college. Internships will also improve your communication skills and teach you how to work in a team environment.
Difference between Startups and Corporates
Everything has its own ups and downs. Therefore, working at a corporate teach you how to write proper code not just writing a code that works. It also gives you the opportunity to write code that has a big impact and solves a problem for a very large scale of audience. It will teach you how to work in a team environment and how to communicate with different teams in the company.
Working in a startup will make you reach your limits, and actually, know what your limits are. It will also teach you how to deal with ambiguous problems and how to finish a lot of work in a relatively small portion of the time. Finally, when you work at a startup you will write a lot of code and learn how to get things done.
The resume should be just one page long, especially if you are still a student or don’t have a lot of experience. Also, it should be nicely formatted.
Preparing for interviews
When you are preparing for interviews you should have a solid understanding of algorithms and data structures. After that, you should start with reading and doing the problems in Cracking the Coding Interview book. Then, you should start in Elements of Programming Interviews book as the problems in this book are harder than those in the CtCI book.
How to approach a problem?
More likely, in your interview, you will hear a new problem but kind of similar to a problem that you solved before. The key here is to try to make the problem that you heard like the one you already know. Then start approaching the problem from there.
How I’m preparing for my next interview?
I really want to get an internship at a big company next year, and if I’m lucky I want to get one also this year. Therefore, I’m trying and doing my absolute best to get that internship. Here’s what I do:
I write in my blog
Having a blog gives you great exposure in the community, and sometimes it can be the reason you get an interview. Therefore, in December of 2018, I started writing here on Medium, and it’s been a pleasure! I really enjoyed writing and I really like the feedback that I get from you guys.❤️
I build apps
One of the things I enjoy is building iOS applications. I love the ability to solve a real-world problem with just an app on your iPhone. I haven’t made any big application yet. I’m still learning and I have a very long way to go. Eventually, I’ll be there and very soon I’ll have an app on the App Store. I guess, having an app on the App Store will definitely be a huge boost in my resume.
Programming competitions are a great thing to do while you are at school. By doing programming contests, you gain an intimate understanding of data structures, algorithms, and their complexities. Solving contest problems is an excellent way to familiarize yourself with a programming language, data structures, as well as get better at converting procedural ideas to code. These are very useful skills for a coding interview.
There are some famous programming competitions in which I plan to participate in this year. Like, Google’s Hash Code and Code Jam, ACM ICPC, Facebook Hacker Cup, and more. Just try to do your best to join these programming competitions, the experience that you will gain is priceless in terms of problem-solving skills. Maybe it’ll be the reason you will get an interview. Also, you can participate in online competitions on websites like Codeforces, LeetCode, TopCoder, HackerRank, and many more.
I plan on joining hackathons this year. At a hackathon, It is very important to learn how to network with others. You’ll meet students who are interested in the same things that you are and love to work on projects. You will also connect with companies and it might be the reason you get interviewed. Finally, if your project won, it will give you a huge boost in your resume.
I went to SwiftCairo meetup twice now, and it’s been a pleasure so far. Meetups are a great way to communicate and build a network. You’ll meet people who are interested in the same things that you are and they will be more than happy to help you.
Preparing for the Technical Interview
Of course, we can’t ignore this portion. It’s a must to be good at problem-solving to pass an interview with any one of the “big four” companies. So, here’s what I do/ what I plan on doing:
- The programming language
I already know C++ and I did a lot of Problem Solving with it. I was very comfortable with it until I got the chance to interview with Google. In the interview, Of course, I used C++. I didn’t have much time and I found out that I spend a lot of time writing a lot of code that has nothing to do with my solution. So, I decided to learn a new language. I chose Python because it’s very fast to type in and I feel like it’s almost like pseudocode. You can also search online why it’s a good language to use in your interview and keep in mind everything has its ups and downs.
- Algorithms and Data Structures
You must be good at algorithms and data structures to be able to pass your technical interview. I read a book about algorithms and data structures in Python. The book called Data Structures and Algorithms in Python — Michael H. Goldwasser, Michael T. Goodrich, and Roberto Tamassia, it’s a really great book. It starts with teaching you the basics of Python, then it starts in the algorithms and data structures portion. I’ll add also all of the other great resources that I use in learning algorithms and data structures down in the resources section.
- Solving problems
After I read a chapter on a specific part, or study a specific data structure. I solve problems from Cracking the Coding Interview, and Data Structures and Algorithms in Python books. Then, I solve easy to medium problems about the topic in which I’m studying from LeetCode. Finally, I might solve a problem or tow about the same topic from HackerRank’s Interview Preparation Kit.
- Mock Interviews
It’s really recommended to practice the interview style with someone of your friends. You can arrange to do mock interviews, as each one takes a problem and tries to solve it on his own. The next day you can ask your friend the problem that you already know the solution for it, and vice versa. So, at the end of the day, each of you had a mock interview and learned about two different problems. Another great resource, that you can practice mock interviews on, is a website called Pramp.com. I really recommend this website, for practicing an interview-like setting.
Hopefully, I’ll be committing to my plan, as I’ll be consistently learning, making apps, and solving problems. I’ll also try to get an interview at one of the “big four” in April this year, and hopefully, I’ll pass.
I’d love to hear about any experiences you may have about interviewing at one of the “big four”. How did it go, how did you prepare? Also, what do you think of my plan? Is it good, or maybe you have a suggestion to improve it?
Feel free to find & add over LinkedIn.
- Cracking the Coding Interview (Affiliate link)
- Elements of Programming Interviews (Affiliate link)
- Data Structures and Algorithms in Python (Affiliate link)
- Coding Interview University (GitHub repo)
CIU is a great repo for preparing for your next interview, you have to check it out.
- Awesome Interview Questions (GitHub repo)
A curated list of lists of technical interview questions.
- Python for Algorithms Data Structures and Interviews (GitHub repo)
This repo is really simple and helped me a lot to learn some basics data structures and algorithms. Pick a topic a read the Jupyter notebook file, then do the problems.
- Complete Python Bootcamp (GitHub repo)
If you have prior knowledge in any programming language and want to learn the basics of Python. I strongly recommend giving this repo a shot.
- Pramp.com (Invite link)
I highly recommend this website for practicing mock interviews with a real person.
- HackerRank Interview Preparation Kit
- Why do people participate in hackathons? (Quora answer)