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

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to