* and Journey(wo)men
TL;DR? Please scroll the bottom with a view to contributing advice
Hello Arup,
I appreciate your confidence and trust in writing to me personally.
Hoping I have not betrayed that, but despite your concerns this reply is
posted on-list. I trust it won't, but apologise if it feels
embarrassing. Please allow me to explain...
Hello DL Neil,
Sorry if it feels like random. I need some advices about the Python. I am
learning Python to learn basically Flask, because I am a web developer and
understands it well. Having prior knowledge in Ruby, JS, I thought it will be
quicker for me to get a control on this language. But it feels like vast so
far, lot of concepts. Which books would you recommend to get to the
intermediate position from beginner level? Also asides web development, how
good the future is as a Python developer? Many people online, offline I heard
to discuss about learning Functional programming. While I know Ruby, JS, do you
think it is fine to learn another similar language, or learning something new
like others says will be a good idea.
Again sorry if it sounds like irritating. You can have the rights to ignore
this email 100%, I would not mind, as I understand people like you are really
busy at your own work. I couldn’t post it in the ML, but have little hesitation
how others would react on this.
Thanks,
Arup Rakshit
If I have understood correctly, I detect five questions in-all:
1 Learning to apply Python
2 Python eco-system
3 Functional programming
4 "Good ideas", other people, and 'the next great thing'
5 This list and requesting assistance
I'll (attempt to) respond, but please excuse me if I do so in reverse
sequence...
5 The list
The benefits the list brings (cf personal correspondence) is that your
question is exposed to a larger number of "eyeballs" (that word sounds a
bit crude, but if you've not seen the term used before, you will find
context in error-hunting and code-proving throughout the Open Source
world). Thus, better minds than mine (alone) can be brought to bear.
Secondly, there are other readers, sometimes referred-to as "lurkers";
who subscribe to the list specifically to read and learn from 'good
ideas'. Accordingly, whilst it might seem that you ask a question and it
is answered, to your benefit/relief/advancement (eg last month we
discussed "scope"); a number of other people probably also learned
something about "scope" along-the-way*. So, when you ask a question, it
is likely that you are not the only-one asking it. Thus answers to
'your' question, will benefit more people than we can know!
* it is an interesting phenomenon that answering someone else's
questions can cause 'the answerer' to advance his/her learning at the
same time! (in fact, if I might put my cognitive-psychology 'hat' on for
a moment, it is an excellent way to learn - and to prove that one has
learned something)
Using the link at the foot of each posting, you can back-track to a
web-page of Python discussion lists. There you will find details of
"Tutor". If you feel a question might be 'embarrassing' posed to this
list, try there...
However, my impression of the members of this list is that there is no
such thing as a 'silly question'. Recollecting recent Q-s and A-s
(sadly) evidences short/lazy/unhelpful ways to ask a question.
Accordingly, people who expect help but fail to provide code, errmsgs,
and the like; receive equally short replies addressing their
*short*comings (hah!). Human nature is that people prefer to help people
who are helping themselves: the more background-information that is
given: 'here's my code', 'I tried this', 'the manual says...', 'my text
book...' the more information the 'helpers' have to formulate a (useful)
response - compare this with [I'm not telling you that this is my
homework] "How do I pile all the round blocks on top of the rectangular
ones?".
In this mode, I recall asking you, which book you were working from.
When you replied, I was able to immediately look-up the problem-set -
and thus gather more background. (we also started a side-conversation
about 'resources', which appears to continue here!)
Most lists talk about "respect" (for other subscribers). If I may
'indulge': respect for people's time is high on my list. (to my
knowledge, no-one is specifically paid to be 'here' and to be 'helpful';
and a volunteer's time should be valued in $big (if you must) )
Another benefit of the list - which is often 'missed', even by
'StackOverflow aficionados', is that the list is archived. Accordingly,
there are likely similar questions, previously asked and answered. No
need to ask again! (temporal issues aside) Accordingly, questions about
'learning resources' abound!
4 What should I learn next?
(this answer aligns to your previous?next question)
I've been in this business for decades. There are always people
trumpeting 'the next great thing'. Sometimes they are enthusiasts,
genuinely excited about some version of 'the future'. Sometimes they are
marketing people (see also 'Snake Oil Salesmen') - apologies if
excessive cynicism. Conversely, there are people who decry and criticise
a particular 'future'. Some time (cough) back, amongst our internal
consulting group where I was working, no-one wanted to tackle the
project introducing IBM PCs to the (multi-national) enterprise - "they
are only toys". I had long-practice in toning-down the IBM sales
rhetoric and had played-with micro-computers (what we now call "SBCs").
So, to great concern amongst my colleagues, and amidst phrases like
"professional suicide" and "you're going to regret this", I decided to
take it on. Oh yeah! At the same time, I could list mis-guesses - but
perhaps I'd prefer everyone to think that I'm perfect... (cough,
splutter). As I've said to many people: there's exactly one person who
knows the stock-market - and you see him in the shaving mirror each morning*
* topical neutrality: for "stock-market" substitute any form of
forecasting or 'crystal ball gazing'
* gender neutrality: substitute "shaving" for "make-up" and "him" for
"her", as desired
The answer (to me), is that you combine the ideas that attract your
personal interest (also known as "scratch your own itch"), eg building a
framework to do 'xyz'; ideas which feature in job ads, eg "full stack
web" (whatever that REALLY means!); and ideas which are of-interest to
your current employer, eg we want to better collect and analyse our
sales data (ie "big data"). That type of exercise inevitably still
produces a list. From there, you can refine and re-consider - eg there's
no point in looking at 'big data' if one 'hates' working with databases
or 'doing the math'! However, it literally comes-down to the point of
'pick one'. But which one? YMMV! Arghhhhhhhhhh!
3 Functional programming
Apologies, but I'm the wrong person to ask. My mind translates the title
into map() and zip(), which I do use occasionally; but it's not my area
of expertise - hopefully others on the list will be able to step-in.
Interestingly, I was having a similar conversation with a friend who is
retiring from his career in bioinformatics and asking 'what should I
learn as my first retirement project?'. We covered Python (of course!),
Scala (which he has already learned, as a functional programming
language), and disappeared so deeply into functional programming
applications that I started to struggle for oxygen. However, he was
attracted to elements of a later topic in this msg...
2 Python
One of Python's most attractive features is also a significant draw-back
- as you have pointed-out. Python is not merely a programming language
(per Wikipedia's description). Can I also call it an eco-system?
Python is highly portable, which means that it offers various facilities
on various platforms or in particular modes, eg (recent topic on-list)
logging has the complexity of two syslog features (one for Linux, the
other for Windows), yet that portability whilst creating the appearance
of complexity, at the same time, offers simplification because I can
ignore MS-Windows at this time!
The books which aver you can 'learn Python in five gulps of iced soy
caffè mocha latte (with sprinkles on top)', claim 'rapid results' ONLY
if they limit content to 'the language itself'. However, and (most
importantly, IMHO) Python is highly extensible. Thus 'the language' is
but a foundation. 'On top' of that comes the Python Standard Library
(PSL). If that's not enough, then comes the Python Package Index (PyPi,
accessed using pip/pip3/and others). Then there are all the gists,
GitLabs, SourceForges, private contributions, and... and... Please give
me a moment for the dizziness and vertigo to fade!
Per earlier suggestions, simplification comes from realising the
much?most?nearly-all of those indexes and catalogs are irrelevant* to
you - they are still valuable, even indispensable to others, but if you
are not using them, they are essentially 'invisible'! True, when I start
a new project (including refactoring/updating 'old work') I will search
and scan such libraries - updates may have been made offering advanced
or more powerful features than were available 'before', and there is
always the possibility of something 'new' (or newer) having 'entered the
fray'. Once chosen though, all else can fade-away! I guess the key
thought might be to have an 'open mind' at appropriate points in a
project, but once chosen, to achieve the requirements using the tool-set
'provided'. The 'checks and balances' comes when you sit down to code
something - you should ask the question: is this so basic or such a
common task (for example) that it is likely someone has done this
before? If so, it is possible that a library exists - earlier this week,
as an improvement/update task, I was coding the reporting of a large
number of 'events' and as I (went back into the code) to collect the
counters and code the summary report-lines, I remembered - hey don't
"re-invent the wheel", 'there's an app for that' (um, "Counter" in the
collections class of the PSL). Such 'lateral thinking' enables
short-cuts and (hopefully) efficacy, but also 'learning experience'!
(are you only "working" if you are cutting code?)
So, when people claim "I know Python", they (had better) mean the narrow
language itself - they definitely don't mean 'skilled usage of every
package in the PSL' (leave alone all those other code-sources).
Feelings of 'over-load' lead to "fear". Embrace the "fear"! (actually:
manage it, and put it back in its place!)
1 Learning resources
I've written (short) ideas recently (see 'archives', above). IIRC cost
is an important criteria in your circumstances. So, rather than my/us
listing Python books (which may or may not be available to you) perhaps
visit any local libraries to see what they have (be wary of the
Python2/Python3 issue though). NB university libraries are (usually)
open to all for in-house study! Reading almost anything (skipping 'the
easy bits') advances knowledge - I try to be reading something 'daily'!
The "10,000 hours" observation of "Peak" skills (Ericsson) 'trending'
amongst professionals, talks of "deliberate practice" - meaningful
application of existing knowledge and continuous, if gradual, extension
(advancement).
Given your preparedness to work through LeanPub's "Python Journeyman"
book, if you feel confident in your capabilities as an autodidact (with
the back-stop of list-members) may I suggest looking at MOOCs (Massively
Open On-line Courses)? Many such courses are offered for $free
(terminology is "audit") but one can (also/later) pay to have
assignments graded and (hopefully) receive a certificate. Most/all
(depending upon platform) are offered by recognised universities.
I guess I must start with edX*
https://www.edx.org/course?search_query=python (prepare for yet another
'over-load') There are courses in a huge variety of specialist areas as
well as at different learning-levels. I noticed Georgia Tech offerings,
and IBM.
Coursera is another 'big name' in MOOCs
(https://www.coursera.org/courses?query=python&) I've been looking at
some of the U.Mich courses (previously mentioned) and one of THE most
famous/long-standing courses for beginners is their 'Dr Chuck's' "Python
for Everyone" series.
On Udacity, I have previously recommended and received positive feedback
on Dave Evans'
"https://www.udacity.com/course/intro-to-computer-science--cs101". They
offer 22 courses referring to Python. (With due apologies to Dave) I
have an impression that they, like Lynda (on LinkedIn) offer courses
from a wider variety of (private) organisations, cf 'recognised'
institutions - also, perhaps because of that, fewer seem to be free (YMMV!)
On the subject of 'computer science', and in case it is of-interest, one
of the most famous Internet courses is Harvard's CS-50* Intro to ComSc.
Something in my InBox mentioned that it is still available. How old must
it be by now? - hopefully updated since I first took a look! Similarly,
in the on-line education 'pioneer group' is that MIT video-ed a number
of their ComSc courses. Can't say if Python was featured, or even if
they are still available. Ah, nostalgia...
* (IIRC the course code)
Finally, FutureLearn often has some quirky 'gems'. Their seven listings
(https://www.futurelearn.com/search?q=python) seem to have mostly come
from the Raspberry Pi Foundation. Go SBCs!
*Disclaimer(s):
'My' courses are on the edX platform - they are not related to Python. I
have audited Coursera offerings for institutions, and have also
'studied' both 'there', on edX, Stanford, etc, etc. Some of these
courses are ageing, and I am unaware of how expeditiously they are
updated (that, and grumping about Java-esque approaches to coding in
Python, appear in both my public and private critiques). I cause
discomfort by criticising (long) lectures from 'talking heads', and
referring to thin layers of 'courseware' over an existing text-book as
"glorified advertising". I'm enthusiastic about 'active text book' type
systems where we are using the computer to do 'more' than act as a
video-player and features which present the material in multiple
ways/shapes/forms! (NB the latter has nothing to do with the false and
debunked, pop-psy idea of different "learning styles")
Back to business: Another advantage of MOOCS (to you), is the 'social
network' of "Discussion Boards" within each course. These enable
trainees to exchange notes and seek assistance, both from their peers
and the instructors - another form of support and encouragement in your
endeavors...
There are other on-line tutorials and training organisations, eg 'Data
Camps', 'Coding Camps', ... I am not competent to comment, either from a
trainer's, or a trainee's, point-of-view. Again, widely varying by
subject-specialisation, organisation, trainer, quality, age, etc, etc. YMMV!
FWIW and IMHO, you seem to be taking the most constructive approach to
your learning: consider what you know now, choose 'the next' topic that
interests you/for which you have an identified need, and research it.
Then find people to answer your (intelligent) questions when you get
so-far, but feel 'stuck'.
Wishing you well...
--
Regards,
=dn
--
https://mail.python.org/mailman/listinfo/python-list