Developers Corner

Remote software developer enjoying remote work
Developers Corner

Tips for Succeeding as a Remote Software Developer

Being successful in freelance software developer jobs means setting clear responsibilities, managing finances, and maintaining a healthy work-life balance

Many people dream of working as a remote employee. Aside from working from wherever they want, remote workers can better establish their workload and terms. However, not everyone dares to leave their corporate, in-office jobs—because remote work doesn’t always offer job security.

One profession that is flourishing in the boundaryless world is software development. Even if you’re not from the US, working with US-based firms like Turing can help you take advantage of labor arbitrage and potentially earn more than local, full-time roles.

If you’re looking to say goodbye to your 9-to-5 and join the remote workforce, we’ve listed some of our top tips to help you succeed as a remote software developer.

Set Your Responsibilities Clearly 

To manage your workload better, you should first understand the scope of your skills and responsibilities. Doing this allows you to avoid any miscommunications with your client. Because you’ll have to manage your projects, this means you’re also responsible for organizing and directing your activities—as well as ensuring your work is on time, on budget, and within scope. The best way to set your tasks and manage the expectations of your clients is by formalizing your arrangement or partnering up with solutions like Turing. Turing offers developers and clients a contract that covers both their interests⁠—effectively eliminating any chances of miscommunication and allowing both parties to set the record straight. Thus, you can avoid doing tasks outside of your role and protect yourself if your client decides to challenge you legally.

Get Your Finances in Line

If you want to achieve your professional and personal goals as a remote developer, you should organize all aspects of your life, including your finances. It’ll do you well to ensure that you get paid on time as a remote employee. Thankfully, solutions like Turing have payment management facilities that guarantee on-time payments for developers.

One way to take hold of your finances is by creating a budget. Through this, you can track all of your expenses and see where you need to be careful with your spending—whether it means choosing the most budget-friendly equipment or even cutting back on your coffee expenses. In addition, having a budget allows you to fully utilize your available resources and be more disciplined when it comes to spending.

Another way to find financial success as a remote developer is by using tools that can maximize your money. One such tool is a high-yield savings calculator, which allows you to figure out which banks and savings accounts have high annual percentage yields (APY) that will allow your money to grow. Yes, you can indeed make a lot of money by being a remote software developer. But without getting your finances in order, you might not be able to maximize your profits and secure your financial success.

Maintain a Healthy Work-Life Balance

Another way to find financial success as a remote developer is by using tools that can maximize your money. One such tool is a high-yield savings calculator, which allows you to figure out which banks and savings accounts have high annual percentage yields (APY) that will allow your money to grow. Yes, you can indeed make a lot of money by being a remote software developer. But without getting your finances in order, you might not be able to maximize your profits and secure your financial success.

While freelancing allows software developers to control their schedules and lifestyles, many are still prone to overworking themselves and taking on nightmare coding projects that creep into their personal time. If you want to succeed as a freelance software developer, you should understand the importance of having a healthy work-life balance. For one, it allows you to take better care of your relationship and retain a healthy social life outside of work. In addition, achieving a healthy work-life balance can also prevent you from feeling burnt out.

To achieve a good work-life balance as a freelancer, you should set a daily schedule that allows you to put a clear boundary between your personal life and career. However, don’t be afraid to also be flexible with your schedule, since your work arrangement allows for it. Another way to create a solid work-life balance is by understanding your limitations and not putting too much pressure on yourself. While more clients mean more money and better professional stability, over-committing yourself can hamper your productivity and result in poor quality work.

If you want to say goodbye to your corporate lifestyle and thrive as a freelance software developer, be sure to heed the tips we’ve listed above. Or better yet, you can turn to solutions like Turing — which combines the flexibility and independence of freelancing with the stability and financial security of a full-time position. Turing pairs remote software developers with top US companies for long-term roles. Plus, they are continuously re-matched with clients once their engagement ends.

Join a network of the world's best developers and get long-term remote software jobs with better compensation and career growth.

Apply for Jobs

By Jul 1, 2021
Developer Testimonials

How to be a successful remote software engineer

This blog post covers how a developer can be recognized, find a remote job, and be successful working remotely. However, it’s important to understand what is in it for organizations hiring remote developers.

*Full Disclaimer: All the views expressed in the blog are solely my personal views and biased based on my personal experience. The best-practices, technologies, or benefits listed are no silver bullets. The article is focused on engineers in the web development space. 

Remote working is not a new concept but working remotely is gaining popularity during these times. Many organizations are forced to rethink how they work. Covid-19, has impacted every person in the world, but with the challenges the pandemic has created comes opportunity.

There has never been a better time to work remotely, especially for engineers. Many organizations have now turned remote-friendly, some have also started hiring developers from regions unheard of – the reason? Untapped potential!!

This blog post covers how a developer can be recognized, find a remote job, and be successful working remotely. However, it’s important to understand what is in it for organizations hiring remote developers.

Why organizations should hire remote developers

It would be unfair to say that organizations do NOT want to hire remote developers as they are bound by government laws which prevent them from going beyond their country to hire a person on their payroll. It’s only possible for large corporations.

Let’s first understand the benefits of hiring remote engineers. As an organization you can:

  • Hire engineers who have untapped potential – these engineers have high productivity and are eager to learn.
  • Hire engineers from countries with lower GDP – allows you to pay people less than you would if you hire local talent.
  • Add diversity to your company culture – allows sharing different ideas and perspectives that you did not have before.
  • Become a 24×7 company – by hiring engineers in varied timezones you can move faster and support customers globally.

Now that you understand why a company wants to hire you, let’s discuss why a developer would want to work remotely.

Why engineers should consider remote jobs

There are many benefits (and few drawbacks) of working as a remote engineer. 

  • Choose your hours – Since you work in a different timezone, you can choose the hours you want to work, though it’s important to have some overlap. (more on that later)
  • Work with people with diverse backgrounds – there is a different thing about people who are well-traveled, right? Why is that?
  • Get paid more than your peers – you can only earn what your industry pays you, what if you changed the local industry? 😉
  • Choose where you work– Home, Coworking office, Coffee Shop? It’s recommended though you have a consistent setup (again, later!)
  • Better work-life balance – Save time traveling, get more time off (remote organizations are usually flexible), be with your loved ones often.
  • Choose your own technologies – though it helps get better jobs depending on the tech you work with, organizations are looking for the skills you’ve developed to help them identify what you’d work on.
  • Immense growth – working with people globally brings a lot of different perspectives allowing you to 10x your growth.

Why would organizations consider you

We have established that organizations want remote engineers, now let’s look at why an organization would consider you? What do you need that makes an organization believe you are remote-friendly?

Open Source Contributions
Organizations want to look at the work you have done. 

  • It increases the credibility of your work
  • It shows that you love writing code
  • It gives them a glimpse into the code you write

Remote-friendly technologies
If you are looking to join a startup, most likely they use technologies that are popular right now. Having experience in current tech is a great way to get noticed. Some of these technologies are (but not limited to):

  • Javascript (Node and React)
  • GraphQL
  • Python (Django)
  • Kubernetes and other cloud devops experience is a huge plus

It usually helps to be able to work on both backend and frontend (Full-Stack), since it’s crucial to be self-driven in a remote environment.

Solid previous experience and profile
Organizations love when they find a person who is a great problem solver. Working on multiple projects and industries, at different roles, are usually indications that you will do well in their company. Companies will also check your Linkedin profile to understand you better. Having an updated profile and strong recommendations from previous employment can go a long way towards helping you find the right remote job.

Attitude
I saved the most important one for the last. Companies hire for attitude rather than skill. Skill can be learned, but attitude takes a long time to correct. Having the right attitude is the only way to get good remote jobs. 

So what do I mean by having the right attitude? 

Display a willingness to learn more about their company, show a genuine interest in the company’s industry and what it cares about. Read the company’s vision, its core values, culture, and apply only if these attributes excite you. It’s essential that you’re a quick learner so that you can developed the required skills to perform at the company.

How to find remote jobs

So, if you have what it takes to be a good remote engineer, the question is, how do you find a remote job that you love?

Apply to a company’s remote jobs (via portals or company website)

If you do a quick search on Google, you will see many platforms like WeWorkRemotely, remote.co, and others.

You can start by looking at the skill you want to target and applying on the posts (make sure you research the company before applying). You need to have a great cover letter. Cover letters are a great way to express why you are the best person for the job they posted. A strong cover letter makes you stand out as companies receive 100s of applications.

Which application do you think they are most likely to open first? The one with the cover letter! You can also search for companies which are remote-friendly and apply directly via their websites.

Freelance

Freelancing is also another way to get jobs. Freelance positions offer more flexibility and let you have a better work-life balance. Freelance work also gives you the chance to choose your hourly rate, but you may sacrifice job security, and you might also waste time hunting for your next gig.

Platforms like Turing, guru, Upwork, and freelancers are good places to find remote gigs.

Personal Connections

Twitter is a great place to build relationships with other fellow developers. These connections will help you find your next job. 60% of organizations hire people that are referred by the people already working in their companies. This means the more people you know in the industry, the better chance you will have to get a good job.

Turing.com 

Turing is a unique platform that bridges the gap between a freelance platform and a job portal. It is truly focused on the developer’s well-being, growth, and tools to be successful in working remotely.

Turing is different because:

  1. You do not have to hunt for jobs – Turing will understand your goals and find you a job that you want. 
  2. You get long term work – You will work with a real company as their team member. You get the benefits of the company you are working for under turing. 
  3. You still get the flexibility as you choose your own hours and your rate.
  4. Turing pays you on time – you do not have to follow up with your clients to get paid or depend on a rating system to get jobs. 
  5. Turing handles issues that may arise between you and the client. 

Turing gives developers peace of mind by allowing them to focus on their skills and their job instead of spending time doing administrative work that reduces their productivity.

Working Remotely

Getting a job is only the first step. There is a lot more that you need to do to be successful at your job. 

Communication
Being an effective communicator is the key to being successful at a remote job. Working remotely means you need to make extra efforts to communicate with your manager.

  • Have regular check-ins with your manager (weekly as well as monthly)
  • Have at least 3 hours of time overlap between yours and your team’s work hours. 
  • Make sure you and your manager(and your team) are always on the same page, and that expectations are clearly understood. 

Turing.com actually does a great job improving your communication with your manager. 

Self-driven
You need to be self-driven. The more you have to depend upon another person on the team, the more difficult it will get to be productive in your job. It certainly helps if you are a full-stack engineer, as this allows you to do both the frontend and the backend by yourself – if it is not possible then you must try to separate (but not isolate) your responsibilities.
The more time overlap you have with your team, the more flexible you can be with respect to separating your work responsibilities.

Setup
Having a decent office and workstation setup is very important. You cannot be productive at your work if you have “pebbles” on the race track you are trying to win.

  • Make sure you have a good (and consistent) place to work
  • Your environment should be distraction-free
  • Good camera and microphones to have calls with your team. 
  • A fast computer that can handle your daily workload

Trust
Remote teams are happy and do more if they trust each other.

Here is a great article.

With this, I wish you luck finding a great remote company to work at. It can be hard, but rewarding. I trust that turing.com can help you find the next job that you love. 🙂

Join a network of the world's best developers and get long-term remote software jobs with better compensation and career growth.

Apply for Jobs

By Oct 27, 2020
MySQL Client / Server Protocol Using Python & Wireshark: P2
Developers Corner

Understanding MySQL Client / Server Protocol Using Python & Wireshark: Part 2

In this blog, we’ll learn how to write our own native MySQL client from scratch without using a connector or external libraries.

In the previous article we researched MySQL Client / Server Protocol using WireShark. Now lets start to write our code in python to simulate MySQL native client. Final codes are here: Github repo

First of all we have to create MYSQL_PACKAGE class. MYSQL_PACKAGE class is the parent of all other package classes (HANDSHAKE_PACKAGE, LOGIN_PACKAGE, OK_PACKAGE and etc.)

It accepts resp parameter on initialization. Resp is the binary response received from the server in bytesarray type. One of the important and interesting method of this class is next method.

Method next reads a portion of the bytes from the binary response. When we call this method, it reads some portion of bytes and puts a pointer to the last position where reading ended (changes a value of self.start and self.end properties). When we call this method again, it starts to read bytes at the point it last stopped.
Method next accepts five parameters: length, type, byteorder, signed, and freeze. If freeze is True it reads some portion of bytes from the binary response but does not change pointer position. Otherwise it reads a portion of bytes with given length and changes the position of pointer. If length is None then method reads bytes until the end of response bytesarray. Parameter type can be int, str, and hex data types. Method next converts a portion of bytes into the appropriate datatype according to the value of type parameter.
Parameter byteorder determines the conversion of bytes to integer type. It is up to the architecture of your computer. If your machine is big-endian, then it stores bytes in memory from the big address to the little. If your machine is little-endian, then it stores bytes in memory from the little address to the big. Thats why we have to know the exact type of our architecture to be able to convert bytes to integer correctly. In my case, it is little-endian, that’s why i’ve set the default value of byteorder parameter to “little”.
Parameter signed is also used in conversion of bytes to integer. We tell the function to consider each integer as unsigned or signed.
A second interesting method of this class is encrypt_password. This method encrypts a password with the given algorithm.

This method accepts two parameters: salt and password. Parameter salt is the concatenation of two salt1 and salt2 strings from the Greeting Packet received from the server. And parameter password is the password string of mysql user.
In the official documentation password encryption algorithm is:
password_encrypt_algorithm
Here “20-bytes random data from server” is concatenation of salt1 and salt2 from the Greeting Packet received from server. To remember what the greeting packet is look at the previous article
Now I want to explain the encrypt_password method line by line.
bytes1 = sha1(password.encode(“utf-8”)).digest()
We are converting password string to bytes, then encrypting it with sha1 function and assigning to bytes1 variable. It is equal to this part of algorithm:
password_encrypt_algorithm1
Then we are converting salt string into bytes and assigning to the concat1 variable.
concat1 = salt.encode(‘utf-8’)
password_encrypt_algorithm5
Third line of the method is:
concat2 = sha1(sha1(password.encode(“utf-8”)).digest()).digest()
password_encrypt_algorithm2
Here we are double-encrypting password string with sha1 function and assign it to the concat2 string.
Now we have two concat1 and concat2 variables. We have to concatenate them into one byte array:
bytes2 = bytearray()
bytes2.extend(concat1)
bytes2.extend(concat2)
password_encrypt_algorithm6
Then we have to encrypt concatenated bytes with sha1 function and assign to the bytes2 variable.
bytes2 = sha1(bytes2).digest()
password_encrypt_algorithm3
So we have two variables with encrypted bytes: bytes1 and bytes2. Now we have to do bitwise XOR operation between these variables and return the obtained hash.
hash=bytearray(x ^ y for x, y in zip(bytes1, bytes2))
return hash
password_encrypt_algorithm4

CLASSES FOR DATATYPES

In the previous article we’ve learned about Int and String data types of MySQL Client / Server protocol. Now we need some classes to be able to read fields from received packets.

INT CLASS

Int class implements INT data type of MySQL Client / Server protocol. It accepts package parameter on initialization. Parameter package should be the instance of any package class inherited from MYSQL_PACKAGE class. Method next detects the type of integer (int<fix> or int<lenenc> (see previous article) and calls the next method of package object to read the byte portion of received response.

STR CLASS

Str class implements STRING data type of MySQL Client / Server protocol. It accepts package parameter on initialization. Parameter package should be the instance of any package class inherited from MYSQL_PACKAGE class. Method next detects the type of String (String<fix>, String<Var>, String<NULL>, String<EOF> or String<lenenc>. See previous article) and calls the next method of package object to read the byte portion of received response.

HANDSHAKE_PACKAGE CLASS

HANDSHAKE_PACKAGE class is used for parsing the Greeting Packet received from server. It is inherited from MYSQL_PACKAGE class and accepts resp parameter on initialization. Parameter resp is the Greeting Packet response in bytes type recieved from the server.

Method parse reading fields from the response using Int and Str classes and puts them into a dictionary and returns.

LOGIN_PACKAGE CLASS

This class is used for create Login Request packet.

OK package and ERR package are the response package of server after authentication or after sending query to server on command phase.

MYSQL CLASS

MYSQL class is the wrapper class which creates TCP connection with server, sends and receives packages from server using above classes.

I think everything is clear in this class. I’ve defined __enter__ and __exit__ to be able to use this class with “with” statement to automatically close TCP connection. In __enter__ method i’m creating TCP connection over socket. And in __exit__ method i’m closing created connection. This class accepts host, port, user and password parameters on initialization.
In the connect method we receive greeting packet from server:
resp = self.client.recv(65536)
return HANDSHAKE_PACKAGE(resp)
In the login method we create Login request package using LOGIN_PACKAGE and HANDSHAKE_PACKAGE classes and sends to the server and gets OK or ERR packages.
That’s all. We’ve implemented the connection phase. To avoid making this article too long I will not explain the command phase. Because the command phase is easier than the connection phase. You can research it yourself with the knowledge you’ve accumulated from this and previous articles.
Demo Video:

If you’re a brilliant developer looking for remote software jobs, Turing may be able to help you very quickly. Head over to the Jobs page to know more!

Join a network of the world's best developers and get long-term remote software jobs with better compensation and career growth.

Apply for Jobs

By Oct 9, 2020
MySQL Client / Server Protocol Using Python & Wireshark: P1
Developers Corner

Understanding MySQL Client / Server Protocol Using Python & Wireshark: Part 1

This blog explains what the MySQL Client / Server protocol is all about, according to the official MySQL documentation.

MySQL Client / Server protocol is used in many areas. For example:

  • MySQL Connectors like ConnectorC, ConnectorJ and etc.
  • MySQL proxy
  • Between master and slave

What is MySQL Client / Server protocol?

MySQL Client / Server protocol is accepted conventions (rules). Through these rules client and server “talks” and understand each other. Client connects to server through TCP connection with special socket, sends to server special packets and accepts them from server. There are two phases of this connection:

  • Connection phase
  • Command phase

Next illustration describes phases:

STRUCTURE OF PACKETS

Each packet consists of valuable data types. Maximum length of each packet can be 16MB. If the length of packet is more than 16MB, then it is separated into several chunks (16MB). First of all let’s see the protocol data types. MySQL Client / Server protocol has two data types:

  • Integer types
  • String types

(See the official documentation: https://dev.mysql.com/doc/internals/en/basic-types.html)

INTEGER TYPES

Integer types also separates into two section:

  • Fixed length integer types
  • Length-encoded integer types

Fixed length integer type consumes 1, 2, 3, 4, 6 or 8 bytes. For example if we want to describe number 2 in int<3> data type then we can write it like this in hex format: 02 00 00. Or if we want to describe number 2 in int<2> then we can write it like this in hex format: 02 00

Length-encoded integer types consumes 1, 3, 4 or 9 bytes. Before length-encoded integer types comes 1 byte. To detect the length of integer we have to check that first byte.

  • If the first byte is less than 0xfb ( < 251 ) then next one byte is valuable (it is stored as a 1-byte integer)
  • If the first byte is equal to 0xfc ( == 252 ) then it is stored as a 2-byte integer
  • If the first byte is equal to 0xfd ( == 253 ) then it is stored as a 3-byte integer
  • If the first byte is equal to 0xfe ( == 254 ) then it is stored as a 8-byte integer

But if the first byte is equal to 0xfb there is no need to read next bytes, it is equal to the NULL value of MySQL, and if equal to 0xff it means that it is undefined.

For example to convert fd 03 00 00 … into normal integer we have to read first byte and it is 0xfd. According to the above rules we have to read next 3 bytes and convert it into normal integer, and its value is 2 in decimal number system. So value of length-encoded integer data type is 2.

STRING TYPES

String types also separates into several sections.

  • String – Fixed-length string types. They have a known, hardcoded length
  • String – Null terminated string types. These strings end with 0x00 byte
  • String – Variable length string types. Before such strings comes fixed-length integer type. According to that integer we can calculate actual length of string
  • String – Length-encoded string types. Before such strings comes length-encoded integer type. According to that integer we can calculate actual length of string
  • String – If a string is the last component of a packet, its length can be calculated from the overall packet length minus the current position

SNIFF WITH WIRESHARK

Let’s start wireshark to sniff the network, filter MySQL packets by ip (in my case server ip is 54.235.111.67). Then let’s try to connect to MySQL server by MySQL native client on our local machine.

>> mysql -u[username] -p[password] -h[host ip] -P3306

As you can see after TCP connection to the server we several MySQL packets from the server. First of them is greeting packet.

picture1

Let’s dig into this packet and describe each field.

First 3 bytes are packet length:

picture2

Next 1 byte is packet number:

picture3

Rest of bytes are payload of Greeting packet of MySQL Client / Server protocol

picture4

Let’s describe each field of greeting packet.

  • Protocol number – Int<1>
  • Server version – String
  • Thread id – Int<4>
  • Salt1 – String
  • Server capabilities – Int<2>
  • Server language – Int<1>
  • Server Status – Int<2>
  • Extended Server Capabilities – Int<2>
  • Authentication plugin length – Int<1>
  • Reserved bytes – 10 bytes
  • Salt2 – String
  • Authentication plugin string – String

Server language is integer, next table will help us to pick appropriate language by integer value:

In my case server language is 0x08 (in decimal number system it is 8 also). From above table we can see that equivalent of 8 is latin1_swedish_ci. Now we know that default language of server is latin1_swedish_ci.

Server capabilities and server status are also integers. But reading each BIT of these integers we can know about server capabilities and status. Next illustration describes server capability and status bits:

Using greeting packet client prepares Login Request Packet to send to the server for authentication. Now let’s research login request packet.

picture5

  • First 3 bytes describes payload length
  • Next 1 byte is packet number
  • Client capabilities – Int<2> / Same as Server capabilities
  • Extended client capabilities – Int<2> / Same as Server extended capabilities
  • Max packet – Int<4> / describes the maximum length of packet
  • Charset – Int<1> / in my case it is 0x21 (in decimal number system is 33), from the table we can see that it is utf8_general_ci. We set server’s default charset from latin1_swedish_ci to utf8_general_ci
  • Username – String
  • Password – String
  • Client Auth Plugin string – String

As you can see the password is encrypted. To encrypt a password we will use sha1, md5 algorithms, also salt1 and salt2 strings from previous Greeting Packet sent from server.

Then we get OK packet from the server if we are authenticated successfully. Otherwise we would get ERR packet.

picture6.png

  • 3 bytes are packet length
  • 1 byte is packet number
  • Affected rows – Int<1>
  • Server status – Int<2>
  • Warnings – Int<2>

That’s all. We have finished the theory. Now it’s time to start the practical part. In the second part of this article we will write our own MySQL native client from scratch using no external module or library.

If you’re a brilliant developer looking for remote software jobs, Turing may be able to help you very quickly. Head over to the Jobs page to know more!

Join a network of the world's best developers and get long-term remote software jobs with better compensation and career growth.

Apply for Jobs

By Oct 2, 2020
Developers Corner

Things to know to get hired as a Turing Engineer

To help you out, we’ve reached out to some Turing engineers who passed Turing’s tests with exceptionally high marks and are now enjoying their time working with Silicon Valley companies. We asked them to share what they think is most important for a software engineer to know or do before applying to Turing.

If you’re reading this, you’re likely a software developer who is considering applying for Turing.com. You might have just learned about Turing a few minutes ago, or you might have already gotten past the teaser coding problem on Turing’s landing page, created a profile, and are now staring at an extensive list of Turing tests. Either way, you (most likely a high-achieving and high-aspiring software developer) are on the right track. The number of high-profile silicon valley companies that hire  remote software developers through Turing  is increasing each week, and more than 160,000 software developers have signed up for Turing in its first year alone. You’re smart to be jumping on this opportunity now! But, if you’re like most developers, some part of you is likely starting to wonder if you’re sufficiently prepared to dive into the application.

Even the most seasoned software developers can get anxious in the days or hours leading up to a technical interview. So, to help you out, we’ve reached out to some Turing engineers who passed Turing’s tests with exceptionally high marks and are now enjoying a remote software job with top US companies. We asked them to share what they think is most important for a software engineer to know or do before applying to Turing. We even asked the primary designer of the Turing Tests himself, Turing’s VP of Engineering, Zan Doan, (previously an Engineering Manager at Facebook) to give his thoughts. Here is what they said:

1) Sharpen your problem-solving skills

First and foremost, as in any silicon valley technical interview process, Turing engineers are expected to be expert problem solvers, able to manipulate data structures and common algorithms to solve a variety of problems while optimizing for speed and efficiency. Everaldo, a Turing engineer based in Curitiba, Brasil, gave the following advice:

 “Turing applicants should familiarize themselves with sites like HackerRank and Codewars, where they can sharpen their problem-solving skills. They should also study dynamic programming and Big O notation to understand techniques for coding challenges, since, if you implement a naive solution, it will get a lower score or might timeout if the solution is quadratic or exponential.”

Everaldo also recommended studying the well-known book “Cracking the Coding Interview” by Gayle McDowell. Not a bad idea considering one can always count on seeing a few Stanford CS students crouched over that “little green CS bible” in the Stanford dining halls during the interview season. Mastering the material there will put you in a position to get the same caliber jobs that many of those same Stanford students are pursuing!

2) Know your tech stacks

One thing that is relatively unique about Turing’s tests is that you have the opportunity to demonstrate mastery in an array of tech stacks with which you’re familiar. Whether you’re a Swift iOS developer, a MongoDB + React + Node.js full-stack developer, a Frontend developer with expertise in Flutter, a Python developer capable of scaling a Django backend, or anything else, you can find corresponding tests on Turing’s platform. Dhyey, a Turing engineer based in Ahmedabad, India, says, “Make sure to take and pass as many tech stack tests as possible. Proving you have a range of skills will make you eligible for multiple roles and increase your chances of getting hired.”

Doing well on these specific tech stack tests might require a little review before you jump into them. Zech, a Turing engineer, based in Addis Ababa, Ethiopia, recommends you do the following:

 “Take a little time to lightly review anything about that particular technology or language you’re not very familiar with because the tests tend to assess your knowledge about it from end to end. Of course, this doesn’t mean you should dive into a full-on ‘study for exam mode’ but just refresh your knowledge of a few things. If you’ve used a language/technology professionally for some time, you should pass the test without much problem.”

3) Showcase your technical experience

Investing time into filling out all the details of your profile and past experiences may be a hassle, but it will give you an edge over other vetted candidates. Dhyey emphasizes this point saying, “since the process is highly competitive and there is very little human interaction, it is very crucial for your profile to accurately reflect your ability for you to get picked over other vetted candidates.”

If that alone doesn’t convince you of the importance of highlighting your past accomplishments, projects, and experiences, this is the area that Zan Doan, the primary designer of the Turing Tests, also believes is most important. He says: 

“The word I would use to describe the best Turing developers is ‘hands-on.’ Turing jobs often require developers to adapt to a startup environment and make an impact quickly. Because of this, Turing tests not only ask the candidates questions about their general work experience but also hands-on questions about detailed implementations.”

Showcasing your ability to excel in a hands-on environment by taking care to describe your past technical experiences in your profile accurately will prime you for success on Turing.

4) Finally, prepare your workspace for success.

The Turing application process is similar to any technical interview, with the added caveat that the online tests (and later on, the possible interview) are all done remotely, meaning you’re in charge of preparing your space. 

On this point, Zech recommends, “make sure you’re in a relaxed environment with little to no distractions. You’ll need to have a working and stable internet connection, especially since you can’t retake an exam within three months in the event you fail.”

Similarly, if you qualify for an interview, Everaldo says, “it’s just like a regular interview: be ready, on time, dress code, be polite, and don’t be afraid to ask questions. Also, it helps to have a good setup for the interview. Have a strong Internet connection, headset, mic, and test the setup before the meeting.

And that’s about it! If you feel well-enough prepared in the above four areas, you should have no problem feeling confident clicking “start” to begin taking Turing’s tests or signing into a remote Turing interview. Silicon Valley opportunities are at your doorstep. The most beautiful thing about Turing’s application process is its hyper-focus on finding talent. We believe talent can be found anywhere and can be of all races and genders. And if, by chance, you’re not successful in your first shot at applying to Turing, a computer science education has become so democratized that we’re confident you can study up, come back, and succeed another day.  Remember, at Turing, we know that not only is talent universal, but opportunity as well.

Ready to get started? Apply to Turing’s remote software developer jobs now

Join a network of the world's best developers and get long-term remote software jobs with better compensation and career growth.

Apply for Jobs

By Sep 17, 2020