[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