Source

blog / source / en_posts / 2012-07-12-regular-python-engineer.rst

Full commit

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
from proj.company.bl import add_company_employee

def create_consumer(email, password, company=None):
    consumer = Consumer(email, password)
    if company is not None:
        add_company_employee(company, consumer)

    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.

Algorithms, complexity

Databases, indexes, query profiling

pass