Upload
mohit-grewal
View
218
Download
0
Embed Size (px)
Citation preview
7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
1/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 1
HIRE A DEVELOPER APPLY AS A DEVELOPER LOGIN
TOP 3% WHY CLIENTS COMMUNITY BLOG
ABOUT US
CALL US: +1.888.604.3188
The Vital Guide to
Python InterviewingSo youve found what appears to be a strong Python developer. How do you
determine if he or she is, in fact, inthe top 1% of candidates? Here are proven,
effective techniques and questions for findingtrue masters of the language.
Risk-Free Trial, Pay Only If Satisfied.
HIRE A TOP PYTHON DEVELOPER NOW
The Challenge
As a rough order of magnitude,
Giles Thomas (co-founder of
PythonAnywhere) estimates that
there are between 1.8 and 4.3
million Python developers in the
world.
Hire a top Python
developer now.
Toptal is a marketplace for top
Python developers, engineers,
programmers, coders, architects,and consultants. Top companies
and start-ups choose Toptal
freelancers for their mission
critical software projects.
See their profiles
666Like Share 68
Share 540 Tweet
http://www.gilesthomas.com/2013/06/how-many-python-programmers-are-there-in-the-world/https://www.pythonanywhere.com/http://www.gilesthomas.com/2013/06/how-many-python-programmers-are-there-in-the-world/http://www.gilesthomas.com/2013/06/how-many-python-programmers-are-there-in-the-world/http://www.toptal.com/pythonhttp://www.toptal.com/developershttps://www.toptal.com/companies/apply?interested_in=developershttp://www.toptal.com/developers/joinhttps://www.toptal.com/users/loginhttp://www.toptal.com/whyhttp://www.toptal.com/clientshttps://www.pythonanywhere.com/http://www.toptal.com/developers/joinhttp://www.toptal.com/top-3-percenthttps://www.facebook.com/pages/toptal/141928212544793http://www.toptal.com/abouthttps://www.toptal.com/companies/apply?interested_in=developershttp://www.toptal.com/clientshttps://www.toptal.com/companies/apply?interested_in=developershttp://www.toptal.com/developershttp://www.toptal.com/pythonhttp://www.toptal.com/developershttp://www.toptal.com/bloghttp://www.gilesthomas.com/2013/06/how-many-python-programmers-are-there-in-the-world/http://www.toptal.com/communityhttp://www.toptal.com/whyhttps://www.toptal.com/users/loginhttps://plus.google.com/+Toptalllc/https://twitter.com/toptalllc7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
2/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 2
So how hard can it be to find a
Python developer? Well, not very
hard at all if the goal is just to find
someone who can legitimately list
Python on their resume. But if the
goal is to find a Python guru whohas truly mastered the nuances and
power of the language, then the
challenge is most certainly a
formidable one.
First and foremost, a highly-
effective recruiting process is
needed, as described in our post In
Search of the Elite Few Finding
and Hiring the Best Developers in
the Industry. Such a process can
then be augmented with targeted
questions and techniques, such as
those provided here, that are
specifically geared toward ferreting
out Python virtuosos from the
plethora of some-level-of-Python-
experience candidates.
Python Guru or Snake in the
Grass?
Brian HammondUnited States
[click to continue]
Python +10 more
William LylesUnited States
[click to continue]
Python +6 more
Javier Jair Trejo
GarcaUnited States
[click to continue]
Python +5 more
Ken Whaley
Brian has over 15 years of
experience as a full-stack
developer, including creating a #1
iOS game in 2008 and scaling
HIRE
William is a top architect, engineer,
and developer with a proven ability
to develop efficient, scalable, and
fault-tolerant server solutions for
HIRE
Javier is a web developer, manager,
and consultant with 6 years of
Python development experience.
He has a solid understanding of
HIRE
http://www.toptal.com/resume/ken-whaley?category=pythonhttp://www.toptal.com/resume/brian-hammond?category=python#skills-listhttps://www.toptal.com/companies/applyhttps://www.toptal.com/companies/applyhttp://www.toptal.com/pythonhttp://www.toptal.com/pythonhttps://www.toptal.com/companies/applyhttp://www.toptal.com/freelance/in-search-of-the-elite-few-finding-and-hiring-the-best-developers-in-the-industryhttp://www.toptal.com/pythonhttp://www.toptal.com/resume/brian-hammond?category=pythonhttp://www.toptal.com/resume/william-lyles?category=python#skills-listhttp://www.toptal.com/resume/brian-hammond?category=pythonhttp://www.toptal.com/resume/ken-whaley?category=pythonhttp://www.toptal.com/resume/william-lyles?category=pythonhttp://www.toptal.com/resume/javier-jair-trejo-garcia?category=pythonhttp://www.toptal.com/resume/javier-jair-trejo-garcia?category=python#skills-listhttp://www.toptal.com/resume/javier-jair-trejo-garcia?category=pythonhttp://www.toptal.com/resume/william-lyles?category=python7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
3/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 3
So youve found what appears to
be a strong Python developer. How
do you determine if he or she is, in
fact, in the elite top 1% of
candidates that youre looking to
hire? While theres no magic or
foolproof technique, there are
certainly questions you can pose
that will help determine the depth
and sophistication of a candidates
knowledge of the language. A brief
sampling of such questions is
provided below.
It is important to bear in mind,
though, that these sample
questions are intended merely as a
guide. Not every A candidateworth hiring will be able to
properly answer them all, nor does
answering them all guarantee an
A candidate. At the end of the
day, hiring remains as much of an
art as it does a science.
uss an e erat on
[click to continue]
Python +9 more
Gianfranco
ReppucciItaly
[click to continue]
Python +8 more
Borko JandrasCroatia
[click to continue]
Python +3 more
Alessandro IobAustria
Ken is a top architect, engineer, and
developer with proven ability to
understand, optimize, enhance, and
create from scratch significant
HIRE
Gianfranco is a full-stack software
developer and architect focusedmainly on web and system
applications. He is responsible and
HIRE
Borko is a software engineer and
programmer with many years of
experience in the field. He is well-
versed in a number of technologies,
HIRE
Alessandro is a top freelance
http://www.toptal.com/pythonhttp://www.toptal.com/resume/gianfranco-reppucci?category=pythonhttp://www.toptal.com/resume/ken-whaley?category=pythonhttp://www.toptal.com/resume/borko-jandras?category=pythonhttp://www.toptal.com/resume/borko-jandras?category=pythonhttp://www.toptal.com/resume/gianfranco-reppucci?category=python#skills-listhttp://www.toptal.com/resume/borko-jandras?category=python#skills-listhttps://www.toptal.com/companies/applyhttp://www.toptal.com/resume/alessandro-iob?category=pythonhttp://www.toptal.com/pythonhttp://www.toptal.com/resume/gianfranco-reppucci?category=pythonhttps://www.toptal.com/companies/applyhttp://www.toptal.com/pythonhttp://www.toptal.com/resume/ken-whaley?category=pythonhttp://www.toptal.com/resume/ken-whaley?category=python#skills-listhttps://www.toptal.com/companies/apply7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
4/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 4
Python in the Weeds
While its true that the best
developers dont waste time
committing to memory that which
can easily be found in a language
specification or API document,
there are certain key features and
capabilities of any programming
language that any expert can, and
should, be expected to be well-
versed in.Here are some Python-
specific examples:
Q: Why use function decorators?
Give an example.
A decorator is essentially a callable
Python object that is used to modify
or extend a function or class
definition. One of the beauties of
decorators is that a single decorator
definition can be applied to multiple
functions (or classes). Much can
thereby be accomplished with
decorators that would otherwise
require lots of boilerplate (or even
worse redundant!) code. Flask, for
example, uses decorators as the
mechanism for adding new
endpoints to a web application.
Examples of some of the more
common uses of decorators include
adding synchronization, type
enforcement, logging, or pre/post
[click to continue]
Python +12 more
Michael TruogUnited States
[click to continue]
Python +5 more
Sandro Fernandes
Brazil
[click to continue]
Python +3 more
architect and developer with a
number of skills. He has designed
HIRE
Michael is a top architect, engineer,
developer, and entrepreneur with a
proven ability to develop efficient,
scalable, and fault-tolerant server
HIRE
Sandro has been an entrepreneur
from an early age. He has extensive
experience in developing
sustainable solutions, loves learning,
HIRE
http://www.toptal.com/resume/michael-truog?category=python#skills-listhttp://www.toptal.com/resume/michael-truog?category=pythonhttp://www.toptal.com/resume/sandro-stefano-de-almeida-fernandes?category=pythonhttp://www.toptal.com/pythonhttp://www.toptal.com/resume/alessandro-iob?category=pythonhttps://www.toptal.com/companies/applyhttp://flask.pocoo.org/http://www.toptal.com/resume/alessandro-iob?category=python#skills-listhttp://www.toptal.com/resume/michael-truog?category=pythonhttp://www.toptal.com/resume/sandro-stefano-de-almeida-fernandes?category=python#skills-listhttps://www.toptal.com/companies/applyhttp://www.toptal.com/pythonhttp://www.toptal.com/resume/sandro-stefano-de-almeida-fernandes?category=pythonhttps://www.toptal.com/companies/applyhttp://www.toptal.com/python7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
5/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 5
conditions to a class or function.
Q: What are lambda expressions,
list comprehensions and generator
expressions? What are the
advantages and appropriate uses
of each?
Lambda expressionsare a
shorthand technique for creating
single line, anonymous functions.
Their simple, inline nature often
though not always leads to more
readable and concise code than thealternative of formal function
declarations. On the other hand,
their terse inline nature, by
definition, very much limits what
they are capable of doing and their
applicability. Being anonymous and
inline, the only way to use the samelambda function in multiple
locations in your code is to specify
it redundantly.
List comprehensionsprovide a
concise syntax for creating lists. List
comprehensions are commonly
used to make lists where each
element is the result of some
operation(s) applied to each
member of another sequence or
iterable. They can also be used to
create a subsequence of those
elements whose members satisfy a
7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
6/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 6
certain condition. In Python, list
comprehensions provide an
alternative to using the built-in
map() and filter() functions.
As the applied usage of lambda
expressions and list
comprehensions can overlap,
opinions vary widely as to when
and where to use one vs. the other.
One point to bear in mind, though,
is that a list comprehension
executes somewhat faster than a
comparable solution usingmap
and lambda (some quick tests
yielded a performance difference of
roughly 10%). This is because
calling a lambda function creates a
new stack frame while the
expression in the list
comprehension is evaluated
without doing so.
Generator expressionsare
syntactically and functionally similar
to list comprehensions but there
are some fairly significant
differences between the ways thetwo operate and, accordingly, when
each should be used. In a nutshell,
iterating over a generator
expression or list comprehension
will essentially do the same thing,
but the list comprehension will
7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
7/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 7
create the entire list in memory first
while the generator expression will
create the items on the fly as
needed. Generator expressions can
therefore be used for very large
(and even infinite) sequences andtheir lazy (i.e., on demand)
generation of values results in
improved performance and lower
memory usage. It is worth noting,
though, that the standard Python
list methods can be used on the
result of a list comprehension, but
not directly on that of a generator
expression.
Q: Consider the two approaches
below for initializing an array and
the arrays that will result. How will
the resulting arrays differ and why
should you use one initialization
approach vs. the other?
>>> # INITIALIZING AN ARRAY -- MET
...
>>> x = [[1,2,3,4]] * 3
>>> x
[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2
>>>
>>>
>>> # INITIALIZING AN ARRAY -- MET
...
>>> y = [[1,2,3,4] for _ in range(
>>> y
[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2
>>>
>>> # WHICH METHOD SHOULD YOU USE
7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
8/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 8
While both methods appear at first
blush to produce the same result,
there is an extremely significant
difference between the two.
Method 2 produces, as you would
expect, an array of 3 elements,each of which is itself an
independent 4-element array. In
method 1, however, the members of
the array all point to the same
object. This can lead to what is
most likely unanticipated and
undesired behavior as shown
below.
Q: What will be printed out by the
second append() statementbelow?
>>> # MODIFYING THE x ARRAY FROM T
>>> x[0][3] = 99
>>> x
[[1, 2, 3, 99], [1, 2, 3, 99], [1,
>>> # UH-OH, DONT THINK YOU WANTE
...
>>>
>>> # MODIFYING THE y ARRAY FROM T
>>> y[0][3] = 99
>>> y
[[1, 2, 3, 99], [1, 2, 3, 4], [1,
>>> # THATS MORE LIKE WHAT YOU EX
...
7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
9/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 9
When the default value for a
function argument is an expression,
the expression is evaluated only
once, not every time the function is
called. Thus, once the list argument
has been initialized to an empty
array, subsequent calls to append
without any argument specified will
continue to use the same array to
which list was originally initialized.
This will therefore yield the
following, presumably unexpected,
behavior:
Q: How might one modify the
implementation of the append
method in the previous question
>>> def append(list=[]):
... # append the length of a l
... list.append(len(list))
... return list
...
>>> append(['a','b'])
['a', 'b', 2]
>>>>>> append() # calling with no ar
[0]
>>>
>>> append() # but what happens w
>>> append() # first call with no
[0]
>>> append() # but then look what
[0, 1]
>>> append() # successive calls k[0, 1, 2]
>>> append() # and so on, and so
[0, 1, 2, 3]
7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
10/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 10
to avoid the undesirable behavior
described there?
The following alternative
implementation of the append
method would be one of a number
of ways to avoid the undesirable
behavior described in the answer to
the previous question:
Q: How can you swap the values
of two variables with a single lineof Python code?
Consider this simple example:
>>> x = 'X'
>>> y = 'Y'
In many other languages, swapping
the values of x and y requires that
you to do the following:
>>> tmp = x
>>> x = y
>>> y = tmp
>>> x, y
('Y', 'X')
>>> def append(list=None):
... if list is None:
list = []
# append the length of a l
... list.append(len(list))
... return list
...
>>> append()
[0]
>>> append()
[0]
7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
11/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 11
But in Python, makes it possible to
do the swap with a single line of
code (thanks to implicit tuple
packing and unpacking) as follows:
>>> x,y = y,x
>>> x,y
('Y', 'X')
Q: What will be printed out by the
last statement below?
In any closure in Python, variables
are bound by name. Thus, the
above line of code will print out the
following:
[2, 2, 2]
Presumably not what the author of
the above code intended!
A workaroundis to either create a
separate function or to pass the
args by name; e.g.:
Q: What are the key differences
>>> flist = []
>>> for i in range(3):
... flist.append(lambda: i)
...
>>> [f() for f in flist] # what
>>> flist = []
>>> for i in range(3):
... flist.append(lambda i = i
...
>>> [f() for f in flist]
[0, 1, 2]
http://stackoverflow.com/questions/530530/python-2-x-gotchas-and-landmines7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
12/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 12
between Python 2 and 3?
Although Python 2 is formally
considered legacy at this point, its
use is still widespread enough that
is important for a developer to
recognize the differences between
Python 2 and 3.
Here are some of the key
differences that a developer should
be aware of:
Text and Data instead of
Unicode and 8-bit strings.
Python 3.0 uses the concepts of
text and (binary) data instead of
Unicode strings and 8-bit
strings. The biggest ramification
of this is that any attempt to mix
text and data in Python 3.0
raises a TypeError (to combine
the two safely, you must
decode bytes or encode
Unicode, but you need to know
the proper encoding, e.g. UTF-
8)
This addresses a
longstanding pitfall for nave
Python programmers. In
Python 2, mixing Unicode
and 8-bit data would work if
the string happened to
contain only 7-bit (ASCII)
7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
13/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 13
bytes, but you would get
UnicodeDecodeError if it
contained non-ASCII values.
Moreover, the exception
would happen at the
combination point, not atthe point at which the non-
ASCII characters were put
into the str object. This
behavior was a common
source of confusion and
consternation for neophyte
Python programmers.
print function.The print
statement has been replaced
with a print() function
xrange buh-bye. xrange()
no longer exists ( range() now
behaves like xrange() used to
behave, except it works with
values of arbitrary size)
API changes:
zip() ,map() and
filter() all now return
iterators instead of lists
dict.keys() ,
dict.items() and
dict.values() now return
views instead of lists
dict.iterkeys() ,
7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
14/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 14
dict.iteritems() and
dict.itervalues() are no
longer supported
Comparison operators.The
ordering comparison operators (
< , = , > ) now raise a
TypeError exception when the
operands dont have a
meaningful natural ordering.
Some examples of the
ramifications of this include:
Expressions like 1 < '' ,0 > None or len
7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
15/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 15
malformed. Python itself is nothing
more than an interface definition (as
is true with any language
specification) of which there are
multiple implementations.
Accordingly, the question ofwhether Python is interpreted or
compiled does not apply to the
Python language itself; rather, it
applies to each specific
implementation of the Python
specification.
Further complicating the answer to
this question is the fact that, in the
case of CPython (the most common
Python implementation), the answer
really is sort of both. Specifically,
with CPython, code is first compiled
and then interpreted. More
precisely, it is not precompiled to
native machine code, but rather to
bytecode. While machine code is
certainly faster, bytecode is more
portable and secure. The bytecode
is then interpreted in the case of
CPython (or both interpreted and
compiled to optimized machine
code at runtime in the case of
PyPy).
Q: What are some alternative
implementations to CPython?
When and why might you use
http://pypy.org/7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
16/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 16
them?
One of the more prominent
alternative implementations is
Jython, a Python implementation
written in Java that utilizes the Java
Virtual Machine (JVM). While
CPython produces bytecode to run
on the CPython VM, Jython
produces Java bytecode to run on
the JVM.
Another is IronPython, written in C#
and targeting the .NET stack.IronPython runs on Microsofts
Common Language Runtime (CLR).
As also pointed out in Why Are
There So Many Pythons?, it is
entirely possible to survive without
ever touching a non-CPython
implementation of Python, but there
are advantages to be had from
switching, most of which are
dependent on your technology
stack.
Another noteworthy alternative
implementation is PyPywhose key
features include:
Speed.Thanks to its Just-in-
Time (JIT) compiler, Python
programs often run faster on
PyPy.
http://pypy.org/http://www.toptal.com/python/why-are-there-so-many-pythonshttp://www.jython.org/http://ironpython.net/7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
17/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 17
Memory usage.Large, memory-
hungry Python programs might
end up taking less space with
PyPy than they do in CPython.
Compatibility.PyPy is highly
compatible with existing python
code. It supports cffiand can
run popular Python libraries like
Twistedand Django.
Sandboxing.PyPy provides the
ability to run untrusted code in a
fully secure way.
Stackless mode.PyPy comes by
default with support for
stackless mode, providing
micro-threads for massive
concurrency.
Q: Whats your approach to unittesting in Python?
The most fundamental answer to
this question centers around
Pythons unittesttesting framework.
Basically, if a candidate doesnt
mention unittest when answering
this question, that should be a huge
red flag.
unittest supports test automation,
sharing of setup and shutdown
code for tests, aggregation of tests
into collections, and independence
https://docs.python.org/2/library/unittest.htmlhttps://pypi.python.org/pypi/cffi/0.8.2https://twistedmatrix.com/trac/https://www.djangoproject.com/7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
18/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 18
of the tests from the reporting
framework. The unittest module
provides classes that make it easy
to support these qualities for a set
of tests.
Assuming that the candidate does
mention unittest (if they dont, you
may just want to end the interview
right then and there!), you should
also ask them to describe the key
elements of the unittest framework;
namely, test fixtures, test cases, test
suites and test runners.
A more recent addition to the
unittest framework is mock. mock
allows you to replace parts of your
system under test with mock
objects and make assertions about
how they are to be used. mock isnow part of the Python standard
library, available as unittest.mock in
Python 3.3 onwards.
The value and power of mock are
well explained in An Introduction to
Mocking in Python. As noted
therein, system calls are prime
candidates for mocking: whether
writing a script to eject a CD drive, a
web server which removes
antiquated cache files from /tmp, or
a socket server which binds to a
TCP port, these calls all feature
https://pypi.python.org/pypi/mockhttp://www.toptal.com/python/an-introduction-to-mocking-in-python7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
19/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 19
undesired side-effects in the
context of unit tests. Similarly,
keeping your unit-tests efficient and
performant means keeping as much
slow code as possible out of the
automated test runs, namelyfilesystem and network access.
[Note: This question is for Python
developers who are also
experienced in Java.]
Q: What are some key differences
to bear in mind when coding in
Python vs. Java?
Disclaimer #1.The differences
between Java and Python are
numerous and would likely be a
topic worthy of its own (lengthy)
post. Below is just a brief sampling
of some key differences betweenthe two languages.
Disclaimer #2.The intent here is
not to launch into a religious battle
over the merits of Python vs. Java
(as much fun as that might be!).
Rather, the question is really just
geared at seeing how well the
developer understands some
practical differences between the
two languages. The list below
therefore deliberately avoids
discussing the arguable advantages
of Python over Java from a
7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
20/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 20
programming productivity
perspective.
With the above two disclaimers in
mind, here is a sampling of some
key differences to bear in mind
when coding in Python vs. Java:
Dynamic vs static typing.One of
the biggest differences
between the two languages is
that Java is restricted to static
typing whereas Python supports
dynamic typing of variables.
Static vs. class methods.A static
method in Java does not
translate to a Python class
method.
In Python, calling a class
method involves an
additional memory
allocation that calling a
static method or function
does not.
In Java, dotted names (e.g.,
foo.bar.method) are looked
up by the compiler, so at
runtime it really doesnt
matter how many of them
you have. In Python,
however, the lookups occur
at runtime, so each dot
counts.
7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
21/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 21
Method overloading.Whereas
Java requires explicit
specification of multiple same-
named functions with different
signatures, the same can be
accomplished in Python with asingle function that includes
optional arguments with default
values if not specified by the
caller.
Single vs. double quotes.
Whereas the use of single
quotes vs. double quotes has
significance in Java, they can be
used interchangeably in Python
(but no, it wont allow
beginnning the samestring with
a double quote and trying to
end it with a single quote, or
vice versa!).
Getters and setters (not!).
Getters and setters in Python
are superfluous; rather, you
should use the property built-in
(thats what its for!). In Python,
getters and setters are a waste
of both CPU and programmer
time.
Classes are optional.Whereas
Java requires every function to
be defined in the context of an
enclosing class definition,
7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
22/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 22
Python has no such
requirement.
Indentation mattersin Python.
This bites many a newbie
Python programmer.
The Big Picture
An expert knowledge of Python
extends well beyond the technical
minutia of the language.A Python
expert will have an in-depth
understanding and appreciation of
Pythons benefits as well as its
limitations. Accordingly, here are
some sample questions that can
help assess this dimension of a
candidates expertise:
Q: What is Python particularlygood for? When is using Python
the right choice for a project?
Although likes and dislikes are
highly personal, a developer who is
worth his or her salt will highlight
features of the Python language
that are generally considered
advantageous (which also helps
answer the question of what Python
is particularly good for). Some of
the more common valid answers to
this question include:
7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
23/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 23
Ease of use and ease of
refactoring,thanks to the
flexibility of Pythons syntax,
which makes it especially useful
for rapid prototyping.
More compact code,thanks
again to Pythons syntax, along
with a wealth of functionally-rich
Python libraries (distributed
freely with most Python
language implementations).
A dynamically-typed and
strongly-typed language,
offering the rare combination of
code flexibility while at the
same time avoiding pesky
implicit-type-conversion bugs.
Its free and open source!Need
we say more?
With regard to the question of when
using Python is the right choice
for a project, the complete answer
also depends on a number of
issues orthogonal to the language
itself, such as prior technologyinvestment, skill set of the team,
and so on. Although the question as
stated above implies interest in a
strictly technical answer, a
developer who will raise these
additional issues in an interview will
7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
24/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 24
always score more points with me
since it indicates an awareness of,
and sensitivity to, the bigger
picture (i.e., beyond just the
technology being employed).
Conversely, a response that Pythonis always the right choice is a clear
sign of an unsophisticated
developer.
Q: What are some drawbacks of
the Python language?
For starters, if you know a languagewell, you know its drawbacks, so
responses such as theres nothing
I dont like about it or it has no
drawbacks are very telling indeed.
The two most common valid
answers to this question (by no
means intended as an exhaustive
list) are:
The Global Interpreter Lock
(GIL).CPython (the most
common Python
implementation) is not fully
thread safe. In order to support
multi-threaded Python
programs, CPython provides a
global lock that must be held by
the current thread before it can
safely access Python objects.
As a result, no matter how many
https://wiki.python.org/moin/GlobalInterpreterLock7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
25/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 25
threads or processors are
present, only one thread is ever
being executed at any given
time. In comparison, it is worth
noting that the PyPy
implementation discussedearlier in this articleprovides a
stackless mode that supports
micro-threads for massive
concurrency.
Execution speed.Python can be
slower than compiled
languages since it is
interpreted. (Well, sort of. See
our earlier discussionon this
topic.)
Wrap Up
The questions and tips presented
herein can be extremely valuable
aids in identifying true Python
masters. We hope you find them to
be a useful foundation for
separating the wheat from the
chaff in your quest for the elite few
among Python developers. Yet it is
important to remember that these
are merely intended as tools to be
incorporated into the larger context
of your overall recruiting toolbox
and strategy.
http://-/?-7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
26/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 26
And, for those who may have
mistakenly read this guide hoping
to learn how to capture a reptile
(sorry dude, wrong kind of python!),
we recommend instead checking
out the Wildlife Foundation ofFloridas Python Challenge.
See also: Toptal's growing,community-driven list of essentialPython interview questions.
Trusted
by
Toptal connects
the top 3%
of freelance
designers and
developers
all over the
http://www.toptal.com/top-3-percenthttp://www.toptal.com/python/interview-questionshttp://www.pythonchallenge.org/7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
27/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015
http://www.toptal.com/python#hiring-guide 27
world.
Join the
Toptal
community.
OR
HIRE A DEVELOPER
APPLY AS A DEVELOPER
HIGHEST IN-DEMAND TALENT
iOS Developer
Java Developer
.NET Developer
Front-End DeveloperUX Designer
UI Designer
ABOUT
Top 3%
Clients
Freelance
developers
Freelance
designers
About Us
CONTACT
Contact Us
Press Center
Careers
FAQ
SOCIAL
Hire the top 3% of freelance talent
Copyright 2010 - 2015 Toptal, LLC Privacy Policy
Website Terms
http://www.toptal.com/toshttp://www.toptal.com/http://www.toptal.com/privacyhttp://www.toptal.com/front-endhttp://www.toptal.com/developers/joinhttps://www.toptal.com/contacthttp://www.toptal.com/faqhttp://www.toptal.com/top-3-percenthttp://www.toptal.com/developershttp://www.toptal.com/javahttps://www.linkedin.com/company/toptalhttp://www.toptal.com/dot-nethttps://www.facebook.com/pages/toptal/141928212544793http://www.toptal.com/designers/uihttp://www.toptal.com/abouthttp://www.toptal.com/designershttps://www.toptal.com/companies/apply?interested_in=developershttp://www.toptal.com/press-centerhttp://www.toptal.com/clientshttp://www.toptal.com/designers/uxhttp://www.toptal.com/careershttps://plus.google.com/+Toptalllc/http://www.toptal.com/ioshttps://twitter.com/toptalllc7/25/2019 Top 10 Freelance Python Developers for Hire in December 2015
28/28
12/24/2015 Top 10 Freelance Python Developers for Hire in December 2015