How I failed 39 interviews, and what I’ve learned

I Failed Again! Therefore, I’m Restarting My Journey

It’s time to get back on the path

Photo by Ole Witt on Unsplash

“Do not be embarrassed by your failures, learn from them and start again.” — Richard Branson

Backstory

My name is Hassan. I’m a computer-science student at a university in Egypt. For over a year now, I’ve been trying to get a job as an iOS developer or get an internship at a big tech company like Apple, Google, or Amazon. But, sadly, I was constantly failing the interviews.

In order to maximize my odds to get my dream job at these big tech companies, I decided to start doing competitive programming. It’s fun for me, and I’m learning all of the algorithms and data structures needed to pass my interviews. So it’s a win-win situation.

The present

I interviewed with Google last month, and I got rejected. I also participated in Google Code Jam, and I only passed the qualification round and couldn’t pass any other round after that.

Last month, I qualified for the Egyptian Collegiate Programming Contest (ECPC) but, unfortunately, didn’t qualify for the Arab and Africa Collegiate Programming Contest (ACPC).

My team and I at ECPC 2019

What I did wrong

In order to improve my self — in my opinion — I should admit I did some stupid and wrong things and learn from them.

Like, for example, I procrastinated a lot and didn’t solve a lot of problems and just wasted a lot of time. I also worked really hard for just the month before the contest, and that’s really wrong. I should have been working all year — not just before the contest … it’s not a final exam!

My contest rating on Codeforces.com

As you can see from my contest rating on Codeforces, I wasn’t practicing contests for a long time, Then just right before the ECPC 2019 qualifications, I started participating in Codeforces rounds.

What Is Next

“I’m restarting my journey. It’s really the same journey, but it’s time to get back on the path. I will do this!”

tl;dr

I will study and solve problems, solve some more problems, and try again.

My strategy

Everything below is written with competitive programming in mind, but practicing for coding interviews is similar.

Your goal should be to get better in algorithms and data structures.

Solve problems

Solve problems slightly above your level — those that aren’t easy for you, but you can usually solve. If you’re stuck for 20–30 minutes (an hour in case of harder problems), read an editorial, and make sure you understand it. Implement a solution — and if you struggled, then go read other people’s code. See how they did it easier.

Note the word “stuck” in bold. If you aren’t out of ideas, then you aren’t stuck. You can give up only if you didn’t do any progress for some time.

Participate in online rounds as much as possible

You should participate in all Codeforces’ online rounds, and don’t be afraid if your rating drops down. Because even if it did, it will eventually go up again.

Upsolve contest problems

First of all, upsolve means solving the problems you couldn’t solve during the live contest. So you’ll upsolve problems you didn’t solve during a contest. Not all of them, just one or two more.

Don’t try something very hard because you likely won’t solve it. There will be a time when you can solve those much harder problems.

Practicing a particular data structure or algorithm

Use Google to find some tutorials, and read them. Solve problems on that topic. After a while, go back to solving random problems. You should now be able to recognize similar problems and apply the new algorithm/technique you learned.

For smaller algorithms/techniques, it’s enough to solve a few problems to understand it well enough. In the case of big topics, like dynamic programming, you should solve dozens of problems. But don’t spend months on that because you cheat a little bit by knowing what you should use in a problem. When you read a problem during a contest, you don’t know its tags/topics. Sometimes the hard part is to come up with what you should use.

Recognizing patterns is a valuable skill, and that’s why you need to mainly solve random problems.

Solving all of the problems in “Competitive Programming 3”

I know there are a lot of problems — around 1700 problems in this book — but honestly, they are really good problems, and the book is well organized.

Competitive Programming 3: The New Lower Bound of Programming Contests

Training for ICPC 2021

I’ll focus on solving old problems from this competition preferably with a team. Don’t worry too much about it, though. It’s still just about being good at algorithms. You don’t waste time by solving problems from random platforms.

Conclusion

I’ll solve more and more problems, and, hopefully, I’ll qualify for the ICPC next year and maybe become red or yellow on Codeforces.

Resources and references

Some YouTube channels for tutorials:

By Hassan El Desouky on November 1, 2019.

Canonical link

Tags: blogging, advice, interviews   |   Edit on GitHub

The best way to start learning React Native

The best way to start learning React Native

I’ll be doing a project using React Native this semester for college. So, I gathered every resource that I thought it might be helpful for…

The best way to start learning React Native

I’ll be doing a project using React Native this semester for college. So, I gathered every resource that I thought it might be helpful for someone starting to learn React Native.

But firstly… What’s React Native?

What’s React Native

React Native is an exciting framework that enables web developers to create robust mobile applications using their existing JavaScript knowledge. It offers faster mobile development, and more efficient code sharing across iOS, Android, and the Web, without sacrificing the end user’s experience or application quality. The tradeoff is that it’s new, and still a work in progress. If your team can handle the uncertainty that comes with working with new technology and wants to develop mobile applications for more than just one platform, you should be looking at React Native.

Why React Native

The first and foremost reason to use React Native is that the developer has to write one set of code, (JavaScript code) to enjoy the performance of the REACT Native Mobile Applications.

Pros:

  1. Cross-Platform The React Native apps can be developed via using a single codebase for both the platforms simultaneously, which increased its popularity even more.

  2. Performance At the initial stages, ‘hybrid’ or ‘mobile web’ apps were popular for their uncommonness mainly. However, when it comes to performance, the complicated the apps, the more lags it experienced. The REACT Native apps are compiled into natively written code, which enables it to not only work on both the operating systems but also functions the same way on both the platforms with no lags at all.

Other benefits of using REACT Native Framework include its faster development, ability to reuse components and ease to be maintained. Besides, it is a timesaving process and therefore many industries and even individuals today prefer using React Native along with NodeJS for creating astonishing mobile applications.

Cons:

  1. It’s Technological Edge Though the React Native’s pre-packaged elements set you aside from having much technical advancement, however, you will still need a professional developer to watch out some technical glitches and bugs.

  2. Might be killed overnight! Since the social media giant Facebook has developed this framework, its existence remained uncertain as Facebook has all the rights to kill off the project anytime. Though with the current popularity of the technology, it is unlikely to happen.

Introduction

First of all, if you know how to code, then you are all set… but if you don’t know how to code you should check out some introductory courses first to get you started with programming and after that, come back again.

The best way to learn React Native is to understand what mobile development is. I am coming from iOS, so I have an idea of what building an app looks like. What I mean is that you need to know the basic concepts like NavigationController and TabBar… etc.

You need to get these things straight because you will be using them in React Native. A few people would suggest implementing them in Kotlin, Java or Objective-C/Swift and then see how they work in React Native, but I don’t think that is strictly necessary.

The next steps

  • Start by reading the getting started tutorial and try to run it on your machine. It’s the first thing I did. This will give you a sense of what we are talking about. Getting Started — React Native | A framework for building native apps using React
  • Read about the Components specs and lifecycle in React. RN comes from ReactJS, they have a lot of things in common and understanding things like componentDidMount() or componentWillMount() will help you. Component Specs and Lifecycle | React
  • Then read Pete Hunt’s tutorial about ReactJS. You need to understand what components are and how they are implemented. Thinking in React
  • I would suggest going through the other sample apps, all of them. Read code and when you don’t understand something, just Google it. If you want to see how an app needs to be structured in the proper way, you may want to have a look at the Facebook8 App (fbsamples/f8app). This is really good, but it’s not for beginners. Come back here when you want to see how to use Redux in a React Native app.
  • There are plenty of tutorials that explain how to write a simple app in React Native. You can use this one: Going native with React, an introduction. It’s probably outdated by now, but it will give you an idea on what you need to complete your project.
  • Yes, I said project. You need something to start with. You learn by coding (and reading), not just reading or (even worse) watching. Why don’t you try to implement Instagram? Tinder could be another idea.
  • Don’t read the Docs. It’s not a book, but just a reference to the things you will need to use along your journey, so while developing keep a tab open, if you are not familiar with it. Keep in mind that React Native is moving fast, so you may want to check them from time to time.
  • Have a look at Share and test your React Native code in the browser. This is a really interesting resource with a lot of examples. You will find it integrated in the docs as well.
  • Download the Facebook 8 app, Facebook Groups (this is not 100% React Native), Facebook Ads’ Manager and open the events view on your Facebook app. Welcome to React Native.
  • React Native Training

Other courses

Resources

By Hassan El Desouky on October 24, 2019.

Canonical link

Tags: cross-platform, react-native, advice, blogging   |   Edit on GitHub