I’ve been a professional programmer for about 30 years, self-employed for 25 years, and doing full-time corporate Python training for more than a decade.
I run a small business, which involves me writing, programming, and teaching, as well as handling all of the business-related stuff.
So, what’s my most important skill, the thing that helps me get lots accomplished in a short period of time? Easy: My ability to touch type.
It all started when I was in high school in the mid-1980s. I would use my family’s computer — yes, in those days, the entire family shared one — for schoolwork, for doing some introductory programming, and even writing newsletters for my high-school youth organization. The thing is, I was doing all of this typing with two fingers, and this drove my parents bananas.
Both of my parents can touch type. In those days, it was typical for office workers to record their correspondence, give the recording to a secretary, and then review the result before sending it out. My father never did that, because he typed at least as fast as his secretary, and the whole dictation process would slow him down. It wasn’t unusual to hear the rat-tat-tat of my father typing from his study at home.
It’s no surprise that it bothered my parents to be hunting and pecking. I was pretty fast at it, but I was no match for my father or any other touch typist. My parents strongly encouraged me to learn to touch type, but I was a teenager, which meant that I knew better than they did. And besides, I type fast enough, right?
Finally, my parents set a new rule: For every hour that I used the computer, I had to spend an hour doing a lesson from a touch-typing book. (How quaint, right?) I yelled. I screamed. I cried. I protested. But my parents didn’t budge.
At first, it was painful: When you start to touch type, you are learning to use your hands in a new way, one that feels completely foreign. You also type much more slowly than you did before, and feel like you’re wasting your time. I certainly had these feelings, and when I had to get something done quickly, I would refer to my old two-finger method.
But within two or three weeks, I was already touch typing as quickly as I did with two fingers. Better yet, and somewhat amazingly, I was able to type without looking at the keyboard! I could enter passages from a book, without having to move my eyes from book to keyboard and back. I could talk to someone while typing. I could even sneak a peak at the TV while I was typing.
Achieving true speed didn’t happen for a while. But when I started college in the fall of 1988, I was already typing at a pretty fast clip. At the student newspaper, I was frequently drafted to take printouts from the Associated Press and type them into our “world and nation” section. And at the computer labs, where we had loud, mechanical IBM keyboards, people would ask me if I could type more slowly, because the rat-tat-tat was disturbing them.
Fast forward to 2020, and I cannot imagine my work without being able to touch type:
Lots of professional writers know that they need to touch type. After all, they write for a living, and being unable to get the most out of their keyboard would seem like a crazy thing to do.
And yet, I find that a small number of the developers in my courses can touch type. They never really thought about it that much, or decided not to put time and effort into it, or thought that it was hard or impossible to learn. But it’s definitely not a priority.
Touch typing looks magical and impossible to achieve. It’s like watching a virtuoso pianist expressing themselves through the instrument, their thoughts and feelings flowing effortlessly from their brains to their hands, and then to the piano.
But here’s the thing: It’s not hard to learn. You’ll be frustrated for the weeks during which you’re learning and forcing yourself to work in a new way. But it pays for itself in spades, allowing you to write, edit, and express yourself — in code and text — more easily than you could ever imagine. And if I managed to learn from a book as an angry teenager, then you can certainly learn with the variety of online tools, many of them free, available today.
Ah, Git. It’s one of the best and most important tools I use as a software developer. Git is everything I want in a version-control system: It’s fast. It lets me collaborate. I can work without an Internet connection. I can branch and merge easily, using a variety of techniques. I can take a personal project and turn it into a large, collaborative one with minimal effort. And it’s cross platform, meaning that I know my clients and colleagues will be able to use it.
So, what’s the problem? Git’s learning curve is extremely steep. Until you understand what Git is doing, and how it works, you cannot use it effectively. Moreover, until you understand what Git is doing, you will likely be puzzled and frustrated by its commands, messages, and documentation.
I’m thus delighted to unveil my latest online course: Understanding and mastering Git. This course, which I have taught to numerous companies all around the world for more than a decade, includes:
If you have been frustrated by Git, or consider the commands you’ve been using to be a form of black magic, then this course is for you. It walks you through Git’s commands, objects, and methods for collaboration.
This course has been battle-tested for a decade at some of the world’s best-known companies. If you want to get the most out of Git, I’m sure that my course will help. And if it doesn’t? E-mail me, and I’ll give you a 100% refund.
Don’t let Git frustrate you any more. Understand it. Master it. Tame it. Learn from my “Understanding and mastering Git” course, today:
Not sure if this course is for you? That’s fine: You can preview a number of the course videos for free from the course sales page.
Also: If you’re a student or pensioner, then you qualify for a discount on the course. Just e-mail me, and I’ll send you a special discount code.
You can and should learn Git, and I want to help you to learn it. Try my course, and discover why so many software engineers won’t even think about using something else.
Back in July, I gave three live, online courses: Object-oriented Python, functional Python, and Python decorators. I have long found that all three subjects are misunderstood by many Python developers, and I wanted to help people to understand how and when to use each one.
I’m pleased to announce that recordings from all three courses are now available for sale.
These are the same courses that I give all over the world to engineers at such companies as Apple, Cisco, Ericsson, IBM, VMWare, and Western Digital.
If you have ever wanted to level up your understanding of these topics, I think that my courses will really help you out. Not only do I explain what’s going on, but I also ask you to do exercises to help cement these ideas in your mind. Of course, I go over every exercise as well, and provide the Jupyter notebooks and files that I created when doing so.
Want to buy learn more? Just click on the appropriate link for each one:
If you’re a student, then e-mail me for a discount code good on any (or all!) of these courses.
If you have any questions about the courses, just reply to this e-mail, or contact me at email@example.com.
I’ll be offering some more live courses later this month (October); I’ll be posting dates and topics on Monday of next week, so stay tuned for even more Python goodness!
I spend most of my time nowadays going to high-tech companies and training programmers in new languages and techniques. Actually, many of the things I teach them aren’t really new; rather, they’re new to the participants in my training. Python has been around for 25 years, but for my students, it’s new, and even a bit exciting.
I suggested the first solution that came to mind: Regular expressions.
Regular expressions are a lifesaver for anyone who works with text. We can use them to search for patterns in files, in network data, and in databases. We can use them to search and replace. To handle protocols that have changed ever so slightly from version to version. To handle human input, which is always messier than what we get from other computers.
Regular expressions are one of the most critical tools I have in my programming toolbox. I use them at least a few times each day, and sometimes even dozens of times in a given day.
So, why don’t all developers know and use regular expressions? Quite simply, because the learning curve is so steep. Regexps, as they’re also known, are terse and cryptic. Changing one character can have a profound impact on what text a regexp matches, as well as its performance. Knowing which character to insert where, and how to build up your regexps, is a skill that takes time to learn and hone.
Many developers say, “If I have a problem that involves regular expressions, I’ll just go to Stack Overflow, where my problem has likely been addressed already.” And in many cases, they’re right.
But by that logic, I shouldn’t learn any French before I go to France, because I can always use a phrasebook. Sure, I could work that way — but it’s far less efficient, and I’ll miss many opportunities that would come my way if I knew French.
Moreover, relying on Stack Overflow means that you never get a full picture of what you can really do with regular expressions. You get specific answers, but you don’t have a fully formed mental model of what they are and how they work.
But wait, it gets worse: If you’re under the gun, trying to get something done for your manager or a big client, you can’t spend time searching through Stack Overflow. You need to bring your best game to the table, demonstrating fluency in regular expressions. Without that fluency, you’ll take longer to solve the problem — and possibly, not manage to solve it at all.
Believe me, I understand — my first attempt at learning regular expressions was a complete failure. I read about them in the Emacs manual, and thought to myself, “What could this seemingly random collection of characters really do for me?” I ignored them for a few more years, until I started to program in Perl — a language that more or less expected you to use regexps.
So I spent some time learning regexp syntax. The more I used them, the more opportunities I found to use them. And the more I found that they made my life easier, better, and more convenient. I was able to solve problems that others couldn’t — or even if they could, they took much longer than I did. Suddenly, processing text was a breeze.
I was so excited by what I had learned that when I started to teach advanced programming courses, I added regexps to the syllabus. I figured that I could figure out a way to make regexps understandable in an hour or two.
But boy, was I wrong: If there’s something that’s hard for programmers to learn, it’s regular expressions. I’ve thus created a two-day course for people who want to learn regular expressions. I not only introduce the syntax, but I have them practice, practice, and practice some more. I give them situations and tasks, and their job is to come up with a regexp that will solve the problem I’ve given them. We discuss different solutions, and the way that different languages might go about solving the problem.
After lots of practice, my students not only know regexp syntax — they know when to use it, and how to use it. They’re more efficient and valuable employees. They become the person to whom people can turn with tricky text-processing problems. And when the boss is pressuring them for a
After you go through all 50 exercises, I’m sure that you’ll be a master of regular expressions. It’ll be tough going, but the point is to sweat a bit working on the exercises, so that you can worry a lot less when you’re at work. I call this “controlled frustration” — better to get frustrated working on exercises, than when the boss is demanding that you get something done right away.
If you have always shied away from learning regular expressions, or want to harness their power, Practice Makes Regexp is what you have been looking for. It’s not a tutorial, but it will help you to understand and internalize regexps, helping you to master a technology that frustrates many people.
To celebrate this launch, I’m offering a discount of 10%. Just use the “regexplaunch” offer code, and take 10% off of any of the packages — the book, the developer package (which includes the solutions in separate program files, as well as the 300+ slides from the two-day regexp course I give at Fortune 100 companies), or the consultant package (which includes the screencasts, as well as what’s in the developer package).
I’m very excited by this book. I think that it’ll really help a lot of people to understand and use regular expressions. And I hope that you’ll find it makes you a more valuable programmer, with an especially useful tool in your toolbox.
I was recently interviewed by Dave Rael for the “Developer on Fire” podcast. That episode has now been released, at http://developeronfire.com/Podcast/Episodes/reuven-lerner-sharing-insight. Enjoy!
What, exactly, do I do for a living?
Yes, I’m a programmer — or as I’m supposed to say nowadays, a “full-stack Web developer.” And yes, I’m a lead developer/CTO. And yes, I’m a writer, with two ebooks written (about Python and visiting China), two more on the way, and my monthly Linux Journal column now in its 20th (!) year.
But over the last few years, another role has increasingly dominated the others: Much of my time is now spent as a technical trainer, teaching a variety of open-source technologies — Python, Ruby, Git, and PostgreSQL — to companies around the world.
Some software developers believe that training is less demanding, less fulfilling, or even less lucrative than creating software. And for some of them, that might well be true.
I have personally found training to be no less demanding than developing software — but I have also found that it is extremely fulfilling, and that it does a more-than-adequate job of paying the bills. We all know that high-tech companies are desperately looking for high-quality developers; when I do my job right, I provide them with such developers, ready to use the latest technologies to solve problems more efficiently and reliably than would otherwise have been possible.
The good news is that my training business is going quite well; I’m now booked solid for several months in advance, and I get to work with some great companies and very bright engineers. Part of my motivation for writing ebooks is now to reach the people whom I cannot possibly teach in person.
Being a trainer requires a number of skills beyond knowing how to program: You also need to know how to organize a syllabus, prepare exercises, prepare slides and printed materials, speak in front of a group, and answer questions. Beyond that, you also need to understand the business side of training — what are companies looking for, how do you approach them, how much do you charge them, and how can you grow your training business when companies are satisfied with your work. These skills, like many others, take time develop, and everyone has their own strengths and weaknesses. But I believe that if you’re willing to put in the effort, then you can learn how to become a technical trainer, and have the same sense of job satisfaction that I do.
If you are such a person, interested in offering technical training — on any subject, not just the technologies in which I specialize — then I invite you to consider joining my coaching program for technical trainers. This isn’t a course; it’s a personalized program that will help you to improve, month by month, in all of the ways that you need to become successful. You’ll have access not just to me, but to other trainers with varying levels of experience, who will provide you with feedback — just as I hope you’ll help them. The program is still in its infancy, but I believe that I’ve put together a combination of resources that can help everyone to become a trainer.
I’m launching the coaching program in two weeks, on October 1st, 2015. There aren’t any formal start of finish times; if you want to start later, then that’s fine, as well. My hope is that you’ll stay in the program for as long as you need to improve, getting feedback from me and others. I also hope and expect that the program will more than pay for itself.
I’ll be holding a free Webinar on the subject of technical training on October 14th, at which I’ll also be taking questions from anyone who might be new to this field, or be curious about what it involves. I invite you to read more about my coaching program, to contact me if you have any questions about it, and to register for the Webinar that I’ll be holding next month!
If you’re like me, you love to learn. And in our industry, a primary way of learning involves attending conferences.
However, if you’re like me, you never have the time to actually attend them. (In my case, the fact that I live far away from where many conferences take place is an additional hindrance.)
Fortunately, a very large number of talks at modern conferences are recorded. This means that even if you didn’t attend a conference, you can still enjoy (and learn from) the talks that were there.
However, this leads to a new and different problem: There are too many talks for any one person to watch. How can you find things that are interesting and relevant?
My latest side project aims to solve this problem, at least in part: DailyTechVideo.com offers, as its name implies, a high-quality, thought-provoking talk about technology each day. To date, almost all of the talks reflect the technologies that are of interest to me, which typically means that they are open source programming languages, databases, or Web application frameworks. But I have tried to include conference videos that have provoked and prodded my thinking, and which are likely to be helpful for other professionals in the computer industry. Moreover, I’m hoping to receive suggestions from people who have seen interesting videos in fields with which I’m less familiar (e.g., hardware or robotics), who can help me to improve my own understanding and knowledge.
And if you can suggest videos to include, e-mail me at firstname.lastname@example.org, or tweet me at @ReuvenMLerner or @DailyTechVideo. I already have another 4-5 weeks of videos queued up, but I’m always on the lookout for new and interesting ones.
My first ebook, “Practice Makes Python” — containing 50 exercises that will help to sharpen your Python skills — is now available for early-bird purchase!
The book is already about 130 pages (and 26,000 words) long, containing about 40 exercises on such subjects as basic data structures, working with files, functional programming, and object-oriented development. But it’s not quite done, and thus I’m calling this an “early-bird” purchase of the book: Not all of the exercises are ready, the formatting isn’t quite there yet, and PDF is the only format available for now. That said, even in this draft version, there is more than enough here to help many Python developers to gain fluency and improve their skills with the language.
Anyone who purchases the book now can use the coupon code EARLY to get a 10% discount. Perhaps it goes without saying, but anyone buying the book now will also get all updates and improvements, free of charge, as they occur over the coming weeks. And anyone who finds that they didn’t get value from the book is welcome to e-mail me and say so — and I’ll refund 100 percent of your purchase price.
The basic idea behind “Practice Makes Python” is that learning Python — or any language — is a long, slow process. Even the best courses cannot possibly give you enough practice with the language for it to feel natural. That only comes with practice. Most people end up practicing, as it were, on projects at work. My goal with this book is to give people who have taken Python courses a chance to become more familiar with the language.
My PhD studies in Learning Sciences taught me a great deal about how people learn, and one of the most important lessons was that of “constructionism” — that one of the best ways to learn is through the creation of things that are important to the individual. I have tried to make the exercises in “Practice Makes Python” interesting and fun, as well as relevant to what people do with Python on a day-to-day basis. Perhaps you won’t be creating Pig Latin translation programs in your day job, but the techniques that you learn from writing such programs in the book will undoubtedly help you out. Certainly, by working through the exercises — not by reading the answers and discussions! — you will learn a great deal about Python programming.
If you recently took a course in Python, or even if you have been working with it for up to a year, I believe that “Practice Makes Python” will give you the knowledge and confidence you need to master this fun and interesting language. These exercises are based on the many Python courses I have taught in the United States, Europe, Israel, and China over the years, and have proven themselves to help programmers start to really “get” Python.
I’d be delighted to hear what you think about “Practice Makes Python,” and how it can help to improve people’s Python programming skills even more. Contact me at email@example.com if you have thoughts or ideas.
I love developing software. I also love helping people to learn how to develop better. That’s why I have been teaching programming classes for more than a decade, and why I write about programming. There is so much to learn; it’s a rare day on which I don’t learn something new, and it’s a rare week in which I don’t apply some new understanding to a problem that I’m solving for a client.
Now that I have finished my PhD, I have some more time to focus on creating products that I believe will help people to program better. I’m pleased to announce three initial such products, all aimed at Python developers who want to improve their skills:
These products (well, the paid ones, anyway) come with a full, 100% money-back guarantee. And of course, if you have questions, you can always contact me via e-mail.
In the wake of my last blog post, I’ve been thinking a great deal about the practice of teaching, and specifically the practice of teaching programming. I’ve realized that while instruction in programming is increasingly popular and important, the people engaged in such instruction aren’t comparing notes, learning from one another, or generally working to improve the trade.
I’ve decided to try to change that. I’ve created a new site, Teaching to Code, a discussion forum aimed at anyone who teaches programming to others. Whether you teach in person, produce screencasts, or lecture at the university level, I’m sure that there are techniques, ideas, and suggestions that you can share with other people, and which can help to improve the craft of teaching programming.
It’s true that many of us in this community are commercial instructors. As a result, there will undoubtedly be some overlap and competition among the people who participate. I’m optimistic that we can balance these competitive instincts and realities with the goal that we all (presumably) have, namely to improve our students’ knowledge and understanding of programming in general, and of the technologies we teach in particular.
In addition to general discussion on a variety of topics, I’m also aiming to have a monthly book/journal club. Each month, we’ll discuss a book, journal article, or blog post (or even a video, I guess) that can inform and improve our teaching. Some of the initial suggestions will come from readings I’ve had in graduate school; there were a number of papers that have really influenced my thinking, and that I believe will be interesting and useful for others, too. But I know that I’ve only read a minority of things written on this subject, and would be delighted to read and then discuss these items, as well.
If you’re a programming instructor of any sort, please join us! Contribute to the fledgling discussion, and suggest how we can make it better. If there is something that you feel could help you, or improve your teaching, then you can either ask on the forum or e-mail me at firstname.lastname@example.org. Either way, I hope that Teaching to Code will become a community of practice for programming instructors worldwide, helping teachers and students alike.