# Regular Python Engineer Skills

Warning

This post is still in-progress. Please be patient and don't read it if you are lazy to re-read it when it's ready. When I'm finished, I will publish it on hacker news, reddits and so on, and if you are interested -- you will probably won't miss it.

Note

In my company HR's saw a problem that there's very often case when some person is hired to a position of regular developer (that should be able to handle most of future project work by himself) with comment "he's cool, but has serious gaps in XXX". I was asked to write a document that would cover some most often basic knowledge areas for people who want to become regular python engineer. So, based on that comments, I'll try to write that doc. I believe it's best to show it to community, otherwise it would be just a wase of time.

Note

You can improve this document by either writing a comment, or creating a pull-request to this post's source

This document aims to cover different gaps that regular engineer might have, and ways to improve them in most common aspects. This document is incomplete and should be updated with missing common needs for regular python engineer.

Most of topics should cover lots of practical impact of typical python engineer's tasks (also some topics assume web and can be skipped if it’s not). Of course, list of literature is incomplete and should be considered as a hint or starting point.

## Testing

### Questions

• What is functional/integrational/unit-testing? Describe the difference, needs and common problems.
• What are mocks? What’s they’re purpose? How do you use them?

### Extra-points

Imagine you have function create_consumer from module proj.consumer.bl that looks like this:

# module proj/consumer/bl.py

from proj.consumer.model import Consumer
from proj.email.consumer import send_welcome_email

if company is not None:

send_welcome_email(consumer)


Write such unit-tests for this function that make sure:

• consumer gets created
• add_company_employee gets called when company is not None
• send_welcome_email gets called with consumer as parameter

## Clean Hypermedia API Design

### Questions

• Describe main REST principles and restrictions.
• How would you implement flight ticket-ordering API?
• Why would it be bad to implement API via POST /order_ticket/from/Kiev/to/London?

### Extra-points

You need to design API for your bookmarks list. Each of your bookmarks has these fields:

• id
• title
• url
• tags
• date_created
• date_modified

Show how to list bookmarks. Add pagination, filtering by tags and date-range.

## Environment, Deploy & Automation

### Questions

• What is virtualenv? Why would you need it? How do you use one?
• What is WSGI? Why was it invented?

### Extra-points

Create a small hello-world project, serve it, write a deploy-cmd for it.

## Databases, indexes, query profiling

pass

Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.