Download as pdf or txt
Download as pdf or txt
You are on page 1of 8

Becoming a six-figure developer...

with Python
by Reuven M. Lerner

I started to use Python more than 30 years ago, back in the early 1990s. At the time,
we early adopters saw it as an easy-to-learn, easy-to-use language that let us code
quickly and debug easily. Python programs didn’t execute as quickly as compiled C
code, but they took far less time to write, not to mention debug. In other words,
Python was a great way to get more done in less time.

In that sense, Python hasn’t changed over the years. It’s still a great language for
getting your work done, quickly and easily.

But at the same time, something has changed: Businesses understand that when
salaries are their greatest expense, a programming language that reduces coding
time saves them money. I’ve often said that Python is the perfect language for an
age in which computers are cheap and people are expensive, and that’s precisely
the age we’re living in now.

It’s thus no surprise that Python coders are in demand as web developers, data
analysts, devops engineers, and application coders. Someone who knows how to
solve problems with Python is worth quite a lot to these companies can demand a
top salary.

That someone? That could be you. In fact, with some time and effort, it can
definitely be you.

In this booklet, I’ll describe not only how to learn Python, but how to get your skills
to the level where companies will want to hire you, and will want to pay you a high
salary. If you follow this road map over the coming months and years, I’m positive
that you’ll advance in your career, getting the sort of job you’ve always wanted.

Who am I?

I’ve been using Python for more than 30 years, starting just after I graduated from
MIT’s computer science program. After working for Hewlett Packard and Time
Warner, I began to do freelance programming projects.

For years, I worked with clients around the world. At a


certain point, clients started asking me not to do the
projects myself, but rather to teach their people to
write and use Python effectively. That was the start of
my entry into the world of corporate training.

Fast forward to today, and training is all I do. Every


day, I teach Python and related technologies, such as
Pandas and Git. Most of the time, I’m working with
companies around the world, helping their staffs to become more fluent in
Python — teaching it to people who don’t know the first thing about programming,
and helping those who already know some Python to use it even more effectively.

I also have a wide variety of online offerings, including newsletters and video
courses. All of them have one goal, to help you have a better career — a higher
salary and greater satisfaction — via Python.

My teaching combines the technical education I got at MIT with the pedagogical
perspective I acquired doing a PhD in learning sciences at Northwestern University.
I’m a big believer in exercises to help you to improve, to identify weak spots in your
understanding, and to prepare yourself to solve problems on the job.

I’ve helped many thousands of people to improve their careers by improving their
Python skills. I firmly believe that after you improve your Python skills, you’ll be able
to join them, getting the sort of job you’ve always wanted, earning $100k or more
working on projects you like.

It will take time, effort, and some hard work, but there’s no reason why you cannot
achieve this.

Step 1: Learn the basics

When people first learn Python, they learn the core data structures (strings, lists,
tuples, and dicts), “for” and “while” loops, how to write functions, and how to
import modules. It’s natural to start there, much as it’s natural to start with the
alphabet when learning a foreign language.

Experienced developers often resent spending time on these core data structures
and concepts. If they’ve come from a language like Java or C#, they assume that
the most important thing is to create classes.

But here’s the thing: Even the most experienced Python developers, doing the most
complex tasks in the world, spend much of their day working with strings, lists,
tuples, and dictionaries. In many ways, a skilled Python developer demonstrates
their skills not by creating classes, but rather by using these builtin collections by
themselves and in combination with one another.

• Setting up a cache? Just use a dict.


• Database records? That’s a list of tuples.
• A tree structures? That’s a dict of dicts.

Know how to create each of these data structures — including via methods and
comprehensions. Understand not only their features, but also their limitations.

Now, I’d never argue that you only need these core data structures. But knowing
how they work, what methods they offer, and how to use them effectively is one of
the most important traits of an ace Python coder.
Besides, when you start to create your own classes, you’ll see that they’re wrappers
around those core data structures. Your classes will be smaller, more readable, and
more efficient because you’ll lean on those data structures’ functionality, rather than
reinventing the wheel.

Step 2: Go deeper

The fact is, you can do a heckuva lot with the basics I’ve outlined in step 1. Many of
the full-time Python developers who attend my corporate training are at that level,
and they have pretty good jobs.

But if you want a really great job, you’ll have to do even more. You’ll need to
understand more of how the language works, and how to wrestle it into place in
difficult situations. Python is a tool, and like any tool, knowing how, when, and
where to apply it is a big part of expertise.

Among the topics that you can and should learn are:

• Object-oriented programming: Learn not only how to write classes, but how
they work. How are new objects created? What does the “__init__” method do?
What are class attributes? How does inheritance work? What are “type” and
“object”?
• Comprehensions: These are one of the most useful, and yet confusing, parts of
the Python language. Learn how to write list, set, and dict comprehensions. Know
how to use more than one “for”, and/or more than one “if”, in a comprehension.
Understand the differences between comprehensions and regular “for” loops.
• Data structures: Learn how the core data structures work behind the scenes.
Learn the non-core data structures that come with Python’s standard library, such
as “Counter” and “defaultdict”.
• LEGB rule: Variable scoping (i.e., when variables’ values are available, and when
they cease to exist) is an important topic, but an admittedly boring one. Python’s
scoping rules are rather different from those in other languages, and internalizing
how it searches for variables is a crucial part of working with the language.
• Attribute lookup: Python has two separate storage facilities for data, variables
and attributes. You can think of attributes as an object’s private dictionary, albeit
accessed with different dot syntax rather than square brackets. Understanding
attributes is crucial to using modules and objects, including such topics as
inheritance and descriptors.
• Iterators and generators: “for” loops are ubiquitous in Python. Understanding
how the iterator protocol works, how we can add it to our own classes, and how
we can write generator functions, will help you to integrate into some of the most
important Python conventions (e.g., comprehensions) and also write efficient code
that can handle potentially huge data sets.
• Decorators: Decorators are one of the most powerful techniques Python offers.
They allow you to replace both the definition and the execution of a function or
class with any code you want. You can add timing or logging, filter arguments and
results, or add caching to your functions. A growing amount of Python
functionality (e.g., in Pytest, Django, and Flask) is implemented using
decorators — so even if you don’t write them yourself, you’ll undoubtedly see
them sprinkled throughout code you have to read and maintain.
• Testing. Writing code is hard, and maintaining it can be a drag. But an even
bigger drag is fixing code, only to discover that you’ve broken something that
previously worked. Automated testing can give you confidence that your code
works, even as you modify and improve it over time.

Seems like a lot? It is! Don’t expect to learn all of these topics in a week, or even in a
month. It takes time to understand each of them, not to mention when it’s
appropriate (and not) to use them.

Little by little, you can learn each of them, and use them in your day-to-day work.
Each time you do, you’re adding a new tool to your toolbox, making yourself more
valuable to your current employer and more attractive to potential new ones.

Step 3: Specialize

When I started to freelance, I thought that I could (and should) provide lots of
different services. No matter the language, no matter the technology, I would do
whatever it took to help people out.

There were two problems with this approach: First, you can’t be an expert in every
problem under the sun; you have to choose. Second, people aren’t looking for a
general-purpose problem solver. They’re looking for someone to solve very specific
problems, in a particular domain.

My business improved dramatically the moment I announced that I specialized in


one thing (training) in a particular domain (Python).

If you’re looking for a great job that uses Python, you won’t get it by marketing
yourself as a top-notch Python developer. (And yes, looking for a job is a form of
marketing.) Rather, you should make it clear that you can solve specific types of
problems using Python — problems that companies have, and that they need to
solve.

This will require knowing more than just Python. It’ll require specializing in a
particular problem domain for which Python is suited. Here are a few areas you can
explore:

• Data analytics. Analyzing data is the key to increased revenues and decreased
expenses. Python is the leading language in this field; companies around the
world are switching from Matlab and Excel to Python/Pandas. Python is being
used in this way by everyone from banks to drug companies to high-tech firms to
auto manufacturers. People who can make sense from data are worth quite a lot,
and are in very high demand.
• Machine learning. Data analytics is all about understanding the past. Machine
learning is about using past experiences to predict the future. Python is the
leading language in the world of machine learning, with massive user bases of
such libraries as scikit-learn and PyTorch.
• Automated testing. Hardware and software companies can’t possibly test their
products manually any more. Instead, they use automated tools, often written in
Python, to make sure things work before they’re sent to customers. Learning how
to write tests, and a test framework such as “pytest”, will allow you to check a
wide variety of products in scalable, maintainable ways.
• Devops. Companies are regularly working with many thousands of servers. The
configuration and deployment of such cloud servers is often handled with Python,
using such packages as Ansible.
• Web development. It’s easy to forget, but Web applications are another common
use for Python. Packages such as Flask and Django make it easy to write code
that connects to a database, manages users and permissions, creates output in
HTML, and even connects to JavaScript front ends.
• APIs. We often think of people surfing through Web sites with their browsers. But
a large number of Web sites are for machines, not humans, to read. These are
known as APIs, and they help to connect everything from financial institutions to
hospitals to schools to cars to mobile apps. Python is right there, not ony with its
traditional Web offerings, but also with a new package known as FastAPI.

If you can develop real expertise in one or two of these fields, then you’ll be in a
position not just to solve problems with Python, but to solve specific kinds of
problems with Python. A company that has those specific kinds of problems will
pay top dollar for people who can solve them.

Also: It doesn’t really matter what you choose; there is demand for all of these.
There is no perfect, or best, choice from among this list. It’s a matter of finding
something that matches your interests and experience, and then becoming an
expert in it.

Step 4: Practice and improve

I don’t know much about sports, but I do know that the world’s best athletes never
say, “I’m great at what I do, so I don’t really need to practice.”

On the contrary: They got to where they are by constantly practicing their craft. If
they were to stop practicing, they would no longer be great.

No matter where you are on your Python journey, you need to constantly practice
and improve. That doesn’t mean looking at code, thinking about solving problems,
reading books, watching videos, or attending conferences.

Nope: It means rolling up your sleeves, writing the code, getting things wrong,
getting frustrated, fixing your code, and then feeling the satisfaction of a job well
done.
As you solve more and larger problems, you’ll find your skills getting sharper.
Problems that used to confuse and frustrate you will be easier to solve.

Moreover, you’ll know how to attack problems, breaking them down into the smaller
parts needed to understand and solve them.

Here are some ways that you can sharpen your Python skills regularly:

• Use Python at work (in new ways): If you’re using Python in your work each day,
then you’re already getting practice — sort of. Yes, you’re using Python, and yes,
you’re getting the crucial hands-on practice. But most people I know use a small
subset of Python in their day-to-day jobs. This means that they aren’t stretching
their knowledge in new directions, or forcing themselves to try new techniques
and libraries. Force yourself to grow in this way.
• Join an open-source project: Maybe you aren’t using Python at work, or you
don’t think that work is a good place to try new things. Why not join an open-
source project? Choose a project that appeals to you, that seems well managed,
where the participants respect and encourage newcomers, and where you believe
you’ll be able to both contribute and learn. Most major Python conferences have
several days of “sprints,” when people get together to code on open-source
projects. This is a great opportunity to meet and learn from some of the best
coders out there, and for you to find a niche that suits both you and them.
• Practice exercises: There are numerous sites offering exercises in Python. Some
are more mathematical and theoretical, while others are more practical. Find a
style of exercise you like, and keep at it. It’s even better if you can discuss and
solve the problems with other people, rather than just work on them yourself.
• Teach: It’s often said that the best way to learn something is to teach it to others. I
can say, as someone who teaches nearly every day, just how true this is. The
research and preparation that I do in preparing to teach a class, or even give a
conference talk, forces me to understand things in greater depth and detail than
before. You’ll be doing yourself a great favor if you try to speak at conferences and
user-group meetings. You’ll learn a great deal when preparing, and then again
when people ask you questions.

Step 5: Get your name out there

As I wrote above, my first job out of college was with Hewlett Packard. They took a
while to offer me a job, which got me nervous. One of the managers, who was
particularly nice to me, explained that when HP offers someone a job, they’re
basically guaranteeing them a position for life. They thus wanted to be absolutely
sure that I was a good fit before taking on such a commitment.

I can guarantee you that no company in the world has this attitude any more. (Even
then, it’s not clear how accurately he was describing things.) Today, companies hire
and fire people all the time.

The flip side is that people also switch jobs all the time. It’s not unusual for someone
to change to a new job every 2-3 years — sometimes to earn more money,
sometimes, to work on new kinds of projects, and sometimes because of internal
political issues. The reasons are as varied as the people and the companies they
worked for.

Even with the lack of qualified software engineers, this means that there are often
numerous people vying for the same job. You want to stand out, to make it clear
that a company should look at you first, before considering other candidates.

How can you do that? Here’s the best part: All of the things that I mentioned in the
previous section, about sharpening your skills, are also great for making yourself
seem attractive to new employers:
• Using Python on a project at work: You’ll be able to talk (to some degree) about
what you’ve done, what obstacles you overcame, and what techniques you used
to solve it. Employers want to know that you have experience, and experience
means having dealing with difficulties. In many cases, if you’re working at a well-
known company on a well-known project, you can even discuss your role.
• Contributing to an open-source project: For many people, their GitHub
account, which lists their open-source contributions, is an important part of their
resume. It shows how much they’ve contributed, what comments they’ve given
and received, and generally what the style and quality of their code is. Plus, if
you’re a contributor to a major package, and if you’re interviewing with a company
that uses that package, you’ll be seen as an expert, someone who can help them
with the package when they have issues.
• Teaching: This is a fantastic way for people to learn who you are and what you
know. If you are a regular speaker at conferences, then people will see how well
you explain yourself, understand concepts, and break down complex thoughts.
Also, if you’ve already spoken at conferences, then companies might see you as a
potential brand ambassador, someone who can get the word out about their
company being a great place to work.

There are other options, too: Volunteer at a conference, at a teaching session


sponsored by PyLadies or Django Girls, or even on online forums.

Even if you’re not a freelancer, today’s job market requires that you think like one,
building a personal brand and making it such that a company wants to hire you
even more than you want to work for them.

Feeling overwhelmed?

When I started to use Python in the early 1990s, we thought of it as a fun and useful
language. It wasn’t a ticket to a corporate job — quite the opposite! But today,
Python is a vital part of many companies’ tech stacks. If you can help them, then
you can get a great job.

However, after reading everything I’ve written here, you might be feeling
overwhelmed. Indeed, you might be feeling more overwhelmed than when you
started to read. Python offers so many possibilities, and so many directions, that it’s
often hard to figure out just where to start, and what direction to go in.

Indeed, that’s a complaint that I often hear from people who want to start with
Python — and even those who have been using it, and want to advance. They feel
overwhelmed, and aren’t sure where to start. How can you choose from among all
fo the courses, videos, blog posts, and books?

I’m happy to say that I’m able to help. I’ve been teaching Python for nearly three
decades now, at huge companies like Apple and also as a 1-on-1 coach. I love
helping people to advance their careers, and do what I can to ensure that they’ll
succeed with Python as much as possible.

I now offer a combination of video courses, a private forum, and office hours to
people who join my Python membership program. If you join that program, I’ll give
you a road map to Python success, and thus to career success. Moreover, I’ll be
available to answer your questions, to clarify things you don’t understand, and to
offer you no small number of exercises and problems to improve your Python skills.

I’ve helped many thousands of people to improve their careers with Python. I’d love
to help you, too. Click HERE to learn more about my membership program, and
how it can help you achieve the career goals I’ve laid out here.

Any questions, about what I’ve written here or about my program? You can always
e-mail me at reuven@lerner.co.il. Anything you write goes straight to my inbox. I
look forward to hearing from you!

Reuven Lerner

You might also like