[Tutor] What all technologies should a python developer know?

Dave Angel davea at davea.name
Wed Jul 17 14:42:39 CEST 2013


On 07/17/2013 08:00 AM, Tim Golden wrote:
> On 17/07/2013 12:13, Karan Goel wrote:
>> So I want to be good at python (web) development. What all technologies
>> do I need to know? Git. Linux. Django. webapp2. Heroku?
>> What else? How proficient should I be in each?
>
>
> You don't *need* any of those specifically. It would make sense to be
> competent with:
>
> * Some version control system (possibly git)
>
> * The O/S on which your apps are developed and/or deployed (possibly Linux)
>
> * Some web framework that fits your need (possibly Django)
>
> (Very optionally):
>
> * Some PaaS for deployment (possibly Heroku)
>
>
> But the main points are to understand how the web works, both the older
> (CGI-derived server-refresh) world and newer (Single-Page App /
> Javascript-heavy) world, and how Python works.
>
> That sounds suspiciously like a tautology: To be good at Python Web
> Development, you need to be good at Python and at Web Development! But
> I'm constantly amazed at people who launch out without either, hoping
> for a drag-and-drop experience and frustrated when they don't get one. :)
>

I'm also amazed at how many people launching into programming (usually 
with degrees in Computer Science) still don't have a good knowledge of 
bits, bytes, concurrency, protocols, namespaces, recursion, caching, 
memory management, algorithms, flow control, indirection, virtual 
functions, dispatch tables, syntax trees, ...)

Understanding many of these things and other similar, regardless of 
which programming language, makes it much easier to learn a new 
language, a new environment, and to avoid traps that every environment 
has for you.

If you (Karan) just want to do web development, and using a particular 
set of tools, then learn those.  If you're trying to get a first job, 
learn the things that the job requires.  But if you're also trying to 
build a career, dig.  Dig deep.  And that will require either a very 
good teacher(s), a very good student, or a large variety of 
"environments," preferably all three.

Another, seldom-mentioned, useful tool is a thesaurus.  Get used to 
finding meaningful names for things.

Several times I've joined a new company or new department, and my first 
task was to learn the programming language I was to be using.  Something 
like 35 during my career, plus many more for recreation and study. 
Learn at least one language in each of several categories, and your mind 
will be much more nimble, whichever one you actually need to use: 
assembler, C++, lisp, Forth, Python, ...

When you're learning Forth, don't just write an application.  Extend the 
compiler, learn what a code field really is, and think about how it 
relates to the vptr in C++.

When you're learning lisp, think about what it means that "functions" 
are no different than other data, and can be manipulated as readily. 
You do similar things in Python and C++ too, but the meaning is entirely 
different.

When you're learning Python, write a decorator of your own, don't just 
use the ones in the standard library.

When you're learning java, study the byte code file format, and think 
about what it means to have a const static variable in a class.  (Maybe 
they fixed the file format and semantics since I last looked, but this 
was a fundamental flaw in the original format)

When you're learning C++, step through a constructor of a derived class 
that calls virtual functions that have been overridden.   Watch the vptr 
change while the object is being constructed, and see what that means to 
your code.  Naturally, this is only possible since you learned assembler 
first.

I could continue, randomly attacking other aspects of a development 
environment.  The point is that there are traps everywhere, and 
beautiful symmetries everywhere.  Learn how to recognize the former, and 
learn to appreciate the latter.  Learn what to do when the docs fall 
short (eg. drop to assembler to see what the language construct is 
really doing, reverse engineer a file format, write some code to "do it 
by hand,"  etc.).


-- 
DaveA



More information about the Tutor mailing list