How to get an engineer job?Come on cleanliness. Are you a good candidate for an engineer? How do you rate yourself? Are there many companies in which you have been to the interviews? What is the attitude of the interviewed interviews to the received job offers? Try using the following formula (this is my spherical dimension in vacuum, which does not mean absolutely nothing):
')
# x = ,
# y = ,
= 100 * log(x) * y / x
If your rating is <90, be sure to read this. If> 120, you may not need it, but read it anyway.
Who am i?
I don't have a university crust about education. Programming became a profession for me at the age of 19, when I moved from Chicago to Southern California. All my belongings easily fit in the car. 400 dollars in my pocket and a job offer for a junior for an insane 40,000 dollars a year - that's all I had. 12 years have passed since then ... But that's another story.
I worked at
Double Helix ,
Namco Bandai ,
Google ,
Obvious and
Square .
* Received job offers from companies such as
Naughty Dog ,
Activision ,
Riot Games ,
Blizzard ,
Pinterest ,
Goldman Sachs and many others. If anyone is interested - my rating is based on the formula that I cited above - 132.
During my life I have spent at least 500 interviews with applicants for the position of engineer. Approximately 10% of them received job offers. Less than 3% I consider as “stars” and remember each of them.
There is no way to guarantee you a successful job. Too many variables in this equation. Especially in companies like Google. You are planted with 5-7 randomly selected engineers and a list of questions they will ask. Such interviews usually have to write code on the board by hand. Some engineers are terrible interviewers. They love questions with a tattle and prejudice you appreciate. Do not worry - it happens with the best of us. Usually, it is allowed to fill up one interview from the series.
The best thing I can do in this situation is to tell you how to prepare. Let's get to the point - here are my tips.
Technical Tips
- Constantly write the code. It's simple: more code - above your level. When you program, you back up knowledge with practical experience. And the best practice is focused practice. Constantly keep your goals in your head, explore new areas, challenge yourself. After some time, you should have a portfolio of projects in progress, as well as completed projects. GitHub is a great place to put your portfolio; besides, it’s helpful to have an electronic copy of your work.
- Become a professional in at least one of the multi-paradigm programming languages. Learning a language will give you a good perspective. To achieve this, you have to write a huge amount of code and more to read. Learn the pitfalls and best practices. Ideally, the language you choose should be quite popular and have a dynamic community that produces a huge amount of code. Good candidates are C #, C ++, Java, PHP, Python and Ruby.
The most common question that people like to ask in C ++ interviews is: “On a scale from 1 to 10, where 10 is the highest mark, how would you rate your knowledge of C ++?”. I hate him. And may God help anyone who answers 9-10. He will be torn apart for this. Bjarne Stroustrup assesses his knowledge as 8 or less. This language is too complex, too extensive, with a very long evolution. I got distracted again.
- Know your weaknesses. Read this list , and then evaluate your understanding of the work of all this. Implement basic computational algorithms such as Dijkstra's algorithm, Floyd-Warshall, Traveling Salesman, A *, bloom filter, breadth-first iterative search, binary search, k-way merge, buble / selection / insertion sort. in-place quick sort, bucket / radix sort, closest pair and so on. And do not stop programming . Here is another very good article.
- Invent the wheel. You must manually implement the basic data structures in your language. Do not rely on standard libraries. Implement and write tests for the following: vector (dynamic array), linked list, stack, queue, closed queue, hash map (hash map), set (set), priority queue, binary search tree, etc. You should be able to quickly implement them when needed.
- Solve your language problems. Forget questions like this. It all comes down to the fundamental concepts of programming. Spend at least 40 hours coding solutions for various tasks. I think TopCoder is one of the best resources for this. Read this. Try to solve problems. Choose those that test your ability to implement recursive, pattern-matching, greedy algorithms, dynamic programming, and tasks with graphs ...
View the list of tasks from the archive.
I'm sure the main reason that I was hired by Google is my two weeks of obsession with TopCoder. I could write the Dijkstra algorithm with my eyes closed and with one hand behind my back. I could solve all the problems with graphs in the world. This was my rehearsal. As Eric Schmidt says, “Rehearsing a prayer doesn't spoil.”
- Make programming easier. At least make it simple in appearance. Of course, not immediately - with time. I believe that coding is the most honest and easy way to be an engineer. I often call it “the simplest programming step,” because the hardest part of it is before and after writing code. For example, developing what you are going to encode and checking that the code is ready for delivery and performs its tasks. Make your interviewer understand that programming is just a means to an end.
Also note that coding can be the most intimidating step. Try to practice writing the code with your hands on the board and in pair programming. Google often uses both of these approaches.
And also read the article by my friend and former colleague Dan.
General tips
I will not argue that I am an expert here. In fact, there are people who can say that I am not very good at communication. And yet, I have to give you some non-technical advice, some of which may be too obvious.
- Know why you're here. If you have an interview in a company about which you do not know anything - it is better not to come to him at all. The people in charge of hiring workers smell it a mile away. This will get away with you only in large companies, in small ones - do not even try.
- Be interested in If you do not care, the rest - too. Be passionate about something. How about programming your hobby? Do you like to develop compilers in your free time? Do you assemble quadrocopters? It does not matter - if you are passionate about something, you can make it interesting for yourself.
- Do not make assumptions. Ask questions if unsure. If you are still not 100% sure that you figured out after asking a question - ask again. Many times I watched the applicant silently moving in the wrong direction. As a result, he spends time solving the wrong task.
- Smile Keep active, be happy and positive. But do not overdo it. People will evaluate you biased. Make sure that the first impression you make is positive. A smile is contagious. When I come to an interview not in the spirit, absorbed in my own affairs, the positive attitude of the candidate can also improve my mood.
As I said, there is no silver bullet that guarantees getting a job. The best thing you can do as an engineer is to not stop programming.
* Currently, I work for myself, creating something new.Thanks for attention! Good mood, good luck in your career and in general!
It was a translation. Original: ABC: Always Be Coding by David Byttow (A pirate building things)