Poetry, Programming and People Management

The human brain does ambiguity well. Most of us are strangely drawn to multiple meanings, surrealities and pattern recognition. We thrive on metaphors and similes, rejoice in symbols, dance to nonsense syllables and ad hoc syncopations. And paradoxes? We both hate and love them — paradoxically, of course.

This may be one of the reasons so many people become frustrated and even fearful when confronted by math and logic. Those disciplines feel so cold and hard-edged with their unitary meanings and wearisome concatenations of implacable reasoning.

It’s the same with computer coding. If you take an Introduction to Computer Science course, the professors often go out of their way to compare natural languages (a phrase which itself is an oxymoron) with computer languages.

Yao graph with number of ray k=8; from Wikimedia, by Rocchini

The gist is that while while both types of language share common and, indeed, essential properties such as syntax and semantics, they differ widely in that natural language can often be understood even when the speaker or writer fails to follow basic spelling or grammatical rules. In contrast, a computer program (much like a mathematical equation) will typically fail to work if even a single character is left out or misplaced. An absent bracket can be a fatal bug, a backwards greater-than symbol can cause an infinite loop, a poorly assigned variable can inadvertently turn  100 dollars into a dime.

A computer has no use for the artful ambiguities and multiple meanings of poetry. If you give the machine a couple of lines of verse such asanyone lived in a pretty how town (with up so floating many bells down)”,  it will — unless you carefully guide the words into the code as a string —  give you an error message.  (I know a lot of people who might respond the same way, of course.)  Yet, without the precisely imprecise wordplay of e e cummings, those lines of poetry would not be poetry at all.

So, what does any of this have to do with people management?

Just this: people management is sometimes poetry, sometimes programming, and it helps to know which is which. Before the rise of civilizations and cities, when virtually all people were hunting and gathering in smallish bands and clans, people management (in the forms it would have existed then) was all poetry.

Walden Pond; from Wikimedia, by QuarterCircleS

Sure, there were unwritten rules, harsh taboos, constant rumors and deadly serious superstitions. And a leader, to the degree there were leaders as we understand them today, could leverage those cultural components to influence his or her clansmen. But this was mostly a matter of nuance, persuasion, the formation of alliances, the wielding of knowledge and lore (when, that is, it wasn’t a matter of force and coercion). In the largest sense, it was art and song.

Today, good managers must still be attuned to the poetry of human attitudes and actions, able to sort through the ambiguities of rumor mills and hurt feelings and arrogant posturings. But now managers must also cope with or even rely on laws, regulations and rules.

Is there a “zero tolerance” clause in the company policy somewhere? Then even a terrific employee who gets caught using illegal drugs may need to go.  Are there complex legal regulations barring a worker from having financial holdings in a certain client company? Well, then, the employee must divest or hit the door. There are countless other examples of rules that are as hard-and-fast as rule-of-law societies can make them. Although these human rules will never be quite as rigorous as the requirements of programming languages, they are a kind of human programming; there are true and false statements,  barriers that can’t be broken, classifications that should never be breached.

This is why we have legal departments. It is also why uncertain managers call in the hired gun of the HR professional to take care of dismissals and drug tests and background checks.

We simultaneously hate  this programming of human behavior and depend on it. We can, for example, rely on the kind of code that states:

while worker performance >= level 3: { {

provide paycheck and health insurance }

else if: {

performance <= level 2:

leverage performance review proceedings

 }}

Okay, the coding in companies is much more complex than that. Still, the point is that we rely on it because it’s clean, logical and, best of all, spares us from having to make hard and potentially dangerous decisions on our own. In such settings, we are no longer “poets of people management,” the kind of managers who might have led a clan though a vast and dangerous prehistoric wilderness in millennia gone by.

This dependence on programming is a shame in many ways, one that harried managers should ponder from time to time.  I know we can’t utterly avoid modern programming — at least, not unless we retreat into the wildness, as metaphorically  isolated as Thoreau in his cabin by Walden Pond. Nor should we. The rule of law is essential to our modern societies, and formal policies are often forged to protect employees from arbitrary or biased decisions. Still, we might strive to be better poets, respecting employees as the people they are rather than viewing them as components of a well-programmed machine.

Featured image: The Parnassus (1511) by Raphael: famous poets recite alongside the nine Muses atop Mount Parnassus.

Do You Treat Employees Like Fixed-Program Computers?

Computers didn’t always work they do today. The first ones were what we now called “fixed-program computers,” which means that, without some serious  and complex adjustments, they could do only one type of computation.

Sometimes that type of computer was superbly useful, such as when breaking Nazi codes during World War II (see the bombe below). Still, they weren’t much more programmable than a calculator, which is a kind of modern-day fixed program computer.

The brilliant mathematician John von Neumann and colleagues had a different vision of what a computer should be. To be specific, they had Alan Turing’s vision of a “universal computing machine,” a theoretical machine that the genius Turing dreamt up in 1936. Without going into specifics, let’s just say that the von Neumann model used an architecture has been very influential up the present day.

One of the biggest advantages associated with Turing/von Neumann computers is that multiple programs can be stored in them, allowing them to do many different things depending on which  programs are running.

Von Neumann architecture: Wikimedia

Today’s employers clearly see the advantage of stored-program computers. Yet I’d argue that many treat their employees and applicants more like the fixed-program computers of yesteryear.  That is, firms make a lot of hiring decisions based more on what people know when they walk in the door than based on their ability to acquire new learning.  These days, experts are well paid largely because of the “fixed” knowledge and capabilities they have. Most bright people just out of college, however, don’t have the same fixed knowledge and so are viewed as less valuable assets.

Employers aren’t entirely in the wrong here. It’s a lot easier to load a new software package into a modern computer than it is to train an employee who lacks proper skill sets.  It takes money and time for workers to develop expertise, resources that employers don’t want to “waste” in training.

But there’s also an irony here: human beings are the fastest learning animals (or machines, for that matter) in the history of, well, the universe, as far as we know. People are born to learn (we aren’t designated as sapiens sapiens for nothing), and we tend to pick things up quickly.

What’s more, there’s a half-life to existing knowledge and techniques in most professions. An experienced doctor may misdiagnose a patient simply because his or her knowledge about certain symptoms or treatments are out-of date. The same concept applies to all kinds of employees but especially to professionals such as engineers, scientists, lawyers, and doctors. In other words, it applies to a lot of the people who earn the largest salaries in the corporate world.

Samuel Arbesman, author of The Half-Life of Facts: Why Everything We Know Has an Expiration Date, stated in a TEDx video, “Overall, we know how knowledge grows, and just as we know how knowledge grows, so too do we know how knowledge becomes overturned. ” Yet, in our recruitment and training policies, firms often act as if we don’t know this.

The only antidote to the shortening half-life of skills is more learning, whether it’s formal, informal or (preferably) both. And the only antidote to a lack of experience is giving people experience, or at least a good facsimile of experience, as in simulation-based learning.

The problem of treating people like fixed-program computers is part of a larger skills-shortage mythology. In his book  Why Good People Can’t Get Jobs , Prof. Peter Cappelli pointed to three driving factors behind the skills myth. A Washington Post article sums up:

Cappelli points to many’s unwillingness to pay market wages, their dependence on tightly calibrated software programs that screen out qualified candidates, and their ignorance about the lost opportunities when jobs remain unfilled…”Organizations typically have very good data on the costs of their operations—they can tell you to the penny how much each employee costs them,” Cappelli writes, “but most have little if any idea of the [economic or financial] value each employee contributes to the organization.” If more employers could see the opportunity cost of not having, say, a qualified engineer in place on an oil rig, or a mobile-device programmer ready to implement a new business idea, they’d be more likely to fill that open job with a less-than-perfect candidate and offer them on-the-job training.

The fixed-program mentality should increasingly become a relic of the past. Today, we know more than ever about how to provide good training to people, and we have a growing range of new technologies and paradigms, such as game-based learning, extended enterprise elearning systems, mobile learning and “massively open online courses” (aka, MOOCs).

A squad of soldiers learn communication and decision-making skills during virtual missions: Wikimedia

With such technologies, it’s become possible for employers to train future applicants even before they apply for a position. For example, a company that needs more employees trained in a specific set of programming languages could work with a provider to build online courses that teach those languages. Or they could potentially provide such training themselves via extended enterprise learning management systems.

The point is that there are more learning options today ever before. We live in a new age during which smart corporations will able to adopt a learning paradigm that is closer to that of stored-program computers, one that they’ve trusted their technologies to for over half a century.

Featured image: A rebuild of a British Bombe located at Bletchley Park museum. Transferred from en.wikipedia to Commons by Maksim. Wikimedia Commons.

An (“Evolving”) [List] of Python Resources

This list of Python resources for beginning coders is in (mostly) alphabetical order. I haven’t tried to provide different headers for videos versus MOOCs versus books, etc. I figure you can always search the page if you’re looking for something in particular. Where I can, though, I’ve given you the sometimes dubious benefit of my first-hand knowledge. In other cases, I’ve gone by what the website says or let you know what I’ve heard from others.

If you know of other sources that you think could be on this list, please shoot me a comment. Also, clue me in if any of the links don’t work properly.

16 Resources to Learn Python Programming: A shortish list of some of the best resources for learning Python. Many of these resources also appear in my list below, but there are few here that I’ve not yet checked out.

80+ Best Free Python Tutorials, eBooks & PDF To Learn Programming Online : A nice collection of resources. I especially like its list of cheat sheets, which is something few other resource guides provide.

After Hours Programming Python 3 Tutorial: An online tutorial with which I’ve not had much experience. It does have a code simulator, but it doesn’t seem to require you to code something correctly to move on with the tutorial. That can be a good thing when you’re sick of being tested, and it can be a bad thing when you need to be really challenged.

The Best Way to Learn Python: A handy, dandy list of some great Python resources.

Bootcamps: Bootcamps are places (physical or virtual) you go to learn specific programming skills in a matter of a few weeks. I’ve never attended one, but there are a number of websites devoted to helping you distinguish one from another. They include SwitchUp, Techendo, and Bootcamps.in. Bootcamps can be quite pricey, so it pays to be cautious and selective.

Byte of Python: An introductory text for beginners. For the most part, I think it’s clearly written. The author, Swaroop C.H., wrote it for Python 2, then updated it to Python 3, and then revised it back to Python 2 for reasons he explains in his book. But I’m glad I still have his PDF version on Python 3 on my mobile.

Check iO: I have a crush on this gamified tutorial (or, maybe it’s more of a game that teaches). Here’s the hitch: you need to solve the problems before you can see how other people of have solved them. This drives me mad, though usually in a good way. I don’t have the chops to get to the end anytime soon, but it’s a terrific vehicle for taking my own lame solutions and then comparing them against some other tightly written solutions by programmers who are much better than I. This is usually humiliating, but also in a good way. And it’s a great way to learn how to write code that is more Pythonic.

CodeBuddies.org: This is a group of people who meet on Google Hangouts at scheduled times to talk about code (usually as it relates to specific books or projects) while sharing their screens. It’s intended to help participants stay motivated and learn faster. I’ve only been to a few hangouts, but it seems worthwhile.

Codecademy: It has a very good, interactive online Python tutorial as well as a community to help support it. I recommend it.

Codementor: For a fee, this service “connects you with experienced mentors for instant help via screen sharing, video, and text chat.” I’ve not yet used it, but I’ve been tempted a few times when banging my head on an especially recalcitrant problem.

Computer Game Development Tutorial: This is a series of videos on how to develop games in Python.

Computer Science Circles: A nice little interactive online tutorial sort of along the lines of the interactive version of How to Think Like a Computer Scientist, which I reference below.

Dive into Python 3: Classic book on Python that can be found online.

Drag and Drop Programming: A growing number of sites allow beginning programmers to build code by dragging and dropping “blocks” (or other visual widgets)  rather than manually writing text-based code.  These do not necessarily use the Python language, but they are a place where beginners — including children — can go to get a feel for how to code. Among them are MIT ScratchCode.org, and Google Blockly. There’s a blurred boundary between these types of sites and sites that teach via gamification.

The Django Book: If you hang around the Python community for any length of time, Django will come up. It’s a Web framework — meaning, that you can use it to write Web apps — written in Python. Last time I looked, this particular book came with a warning about being out of date, though the site indicated it was in the process of being updated. I’ve read that the official Django tutorial is good and that Tango With Django is another useful resource.

Exercism.io: Here’s how Wired described it: “Exercism is updated every day with programming exercises in a variety of different languages. First, you download these exercises using a special software client, and once you’ve completed one, you upload it back to the site, where other coders from around the world will give you feedback.” Exercism may be a sophisticated, crowd-sourced learning experience, but, at least for now, it requires you to use GitHub and command lines. In other words, it’s somewhat complicated to get off the ground with it. Still, if you’re beyond the early beginner stages, it may be a natural next step. Newcoder.io/ seems to be a similar site.

Instant Hacking: A super, duper abbreviated tutorial designed to teach Python on the fly.

Intro to Computer Science: I started and took a large segment of this Udacity MOOC when it was still relatively new. I enjoyed it. As far as I can tell, the courseware is still free, but there is paid version that includes extras such as project feedback, personal guidance, personalized pacing support, and a verified certificate.

Game-Based Learning: I’ve already mentioned Checkio, which is geared more toward adults, but there are other games as well that are even more “game-like” and sometimes geared toward younger audiences, including CodeCombat, Codingame, and Code.org. PythonChallenge is closer to Checkio but, instead of starting with pretty clear instructions about what goal you need to achieve, you have to interpret clues as you go along. I should note that some games (such as CodeCombat) are free to start but charge you something, such as a monthly subscription fee, once you’ve ascended to certain levels.

Google (and not just the search engine): It’s no secret that the famous search engine is often the coder’s best friend. You put a question into the magic rectangle and it serves up lots of possible answers, usually good ones. And then there’s Google’s Python Class, which has both text and video. It’s fun largely because it is delivered to Google employees in what I assume is a Googleplex classroom.

Hands-on Python Tutorial: This is actually a full university course taught by Dr. Andrew N. Harrington. I like it very much, having stumbled onto it via iTunes.

The Hitchhiker’s Guide to Python!: Bills itself as an “opinionated guide [that] exists to provide both novice and expert Python developers a best-practice handbook to the installation, configuration, and usage of Python on a daily basis.” Most of what I’ve read is not for rank beginners, but there seems to be a lot of canny advice. It also contains a good list of other Python resources.

How to Build a Python Bot That Can Play Web Games: This is based mostly on text and screenshots, and it entails building a Computer Vision-based game bot in Python.

How to Think Like a Computer Scientist: Various versions of this book exist, but my favorite is the interactive version to which I’ve linked here.  In my experience, it is a fine blend of beginner book and online tutorial. I hope more computer “books” will follow this approach in the future.

Introduction of Python’s Flask Framework: Like DjangoFlask is a Web framework for Python but it is often billed as smaller and easier to learn. Therefore, it may be an appropriate starting place for beginning programmers who want to use a Web framework.

Invent with Python: I’m a big fan of the book Invent Your Own Computer Games, which is geared toward kids but which is terrific for beginner programmers. There’s a free online version. It takes you through the process of code for specific games. He note only provides all the code but shows you how and why it works. There’s nothing else quite like it, in my experience. The author, Al Sweigart, has also authored Making Games with Python & Pygame and Hacking Secret Ciphers with Python, also available for free.

Invent with Python Bookshelf: This is a very nicely laid out list of books, many of which can be gotten for free. Al Sweigart, the owner of the site, not only includes his own books but many others as well.

Learnpython: This is an interactive Python tutorial that has a set of tutorials that teach the basics as well as more advanced lessons. I’ve used it and liked it. It’s straightforward, fast and without many bells or whistles.

Learn Python The Hard Way: Based on my experience in online communities, a lot of people use and swear by this. I’ve gone through parts of it. Some people say they’ve done it in a weekend, but I know I couldn’t complete it that quickly. There’s a free book online and also a relatively inexpensive (last time I checked) course that includes videos, among other things.

Introduction to Computer Science and Programming Using Python: An introduction to computer science as a tool to solve real-world analytical problems using Python 3.5.

Nettuts+’s Python from Scratch: This is a combination of text and video that demonstrates the “ins and outs of Python development,” starting from the most basic levels possible.

Non-Programmer’s Tutorial for Python 3: Also not interactive but, as with the 2.6 version, a nice set of Wikibooks-based lessons on learning the basics.

One Day of IDLE Toying:  A succinct introduction to IDLE, which stands for Integrated DeveLopment Environment. It’s the “integrated development environment” (that is, the doodad into which you write and run your programs) that’s bundled with Python, so you have it when you download the program.

Online Python Tutor: Free educational tool that allows a teacher or student to “write a Python program in the Web browser and visualize what the computer is doing step-by-step as it executes the program.”

Programiz: I stumbled on this site while looking for information on keywords in Python. Not only does it have an excellent explanation of keywords, complete with sample code, but the other parts of the online tutorial also look very clean and helpful. I’m looking forward to getting to know this site better.

Primers on Python: There are surprisingly few good, short, introductory Python primers online. As I’ve been learning, I’ve created the oddball Quick and Quick for Python, and I recommend First Steps With Python as a less quirky alternative. One (perhaps overly) succinct work is Patrice Koehl’s Python Primer. There’s also Crash into Python, although I think that’s geared toward people who know how to code but are new to Python.  A Beginner’s Python Tutorial seems like a pretty nice tutorial for complete beginners, and I think After Hours Programming can also be a useful primer.

Programming for Everybody (Python): A University of Michigan MOOC from Coursera. You’ll need to register and login to see it. I’ve not taken this course. Last time I looked, there were a number of other Coursera offerings was well, such as  An Introduction to Interactive Programming in Python and Algorithmic Thinking from Rice University.

Pygame: A  set of modules designed for writing games in Python.

Python 3 Programming Tutorial: This is a series of videos on Python programming on YouTube. Generally speaking, YouTube is an amazing source of knowledge about programming and software usage in general. I’m pretty sure I could spend weeks there just watching hundreds of Python-related videos.

Python Books: From the official Python website, this is a list of books for both beginners and advanced practitioners. From what I can tell, it’s regularly updated (which is not always the case for other book lists). Here’s a much shorter list from a different source.

Python Course: By U.S. standards, this isn’t a course but, rather, an online tutorial that is almost all text and graphics. It has tutorials for both Python 2 and Python 3, and these tend to have pretty good explanations: or, at least, better than a lot of the official Python documentation, in my view.

Python for Beginners: From the official Python website, it has recommendations for installing, learning and otherwise investigating Python.

Python for Non-Programmers: From the official Python website, it has links to video tutorials, online courses, websites, books, and resources for younger students.

Python for You and Me: This simple but effective online book is written for programmers new to Python.

Python Turtle: I haven’t downloaded this but have used a version in a tutorial. It was fun. In essence, you write code to move your animated turtle in various ways. It “strives to provide the lowest-threshold way to learn (or teach) software development in the Python programming language.”

Python Docs: These are from the official Python.org website. My experience is that these contain a ton of great information but are, at times, difficult to parse. I sometimes need to go to other tutorials that are easier to understand, but I often start here.

Python Weekly is a “A free weekly newsletter featuring the best hand curated news, articles, new releases, tools and libraries, events etc. related to Python.” I receive it and enjoy it, but I find that it’s geared to more seasoned Python coders rather than to beginners.

Pythonic Perambulations is not a blog for beginners but it’s well-written and fun to read (even when I can’t quite grasp the details). Think of it as aspirational. When you start to really grok this blog, you’re past the beginner phase.

StackOverflow: If you do a Google search to find out how you do something in Python, you’ll likely be directed to this website, which is where both beginners and experts go to ask questions and have those questions answered by various Python programmers. It’s invaluable. Because this has been going on a while, your question has usually already been asked and answered here, so do a search before asking anything.

Steven Thurlow’s Python Tutorial: I stumbled onto this tutorial while looking for a decent explanations of modules  and classes. I believe his are the clearest I’ve seen anywhere.

Stupid Python Ideas: I’m only beginning to be able to parse a blog like this one, which goes into detail on more sophisticated Python coding concepts and practices. This blog strikes me as one of the clearer ones. It has helped me, for example, understand how the function called grouper works. I just couldn’t understand the official documentation on it.

Ten Python Blogs Worth Following: I’m not really up on which Python blogs to follow, but here are some recommendations by the author of Bite Sized Python Tips.

Tutorials Point: When I’m searching Google to find out how to do something in Python, I often wind up here, especially if I can’t understand the official Python documentation (a not uncommon occurrence for me). The explanations here tend to be written in clear English and the examples are usually helpful. You can also move through the tutorial in a systematic way if you like.

Twitter accounts: There are four that seem particularly worth following to me:  @ThePSF @planetpython @gvanrossum. I’m always interested in following other accounts if you have any recommendations.

Featured image: Català: Poema visual transitable en tres temps (Joan Brossa). Segon temps: camí -amb pauses i entonacions-. Jardins de Marià Cañardo, Velòdrom d'Horta (Barcelona). Author: Dvdgmz