Archives

Categories

Category: languages

I’ve been working on how to do live online training for close to a year now. After many random problems, missteps, and changes to how it works I think I’ve finally figured out how to teach people online without eating up too much of everyone’s time and resources. I’ve been doing this latest format called Learn Code Live (or just LCLive) for about 4 months and it’s working really well. Today I’m opening it up to everyone, and this blog post will explain what it is and how to join.

TLDR

I have no idea why people put the TLDR at the end, so here it is. If you’re a junior developer who wants help, someone who’s looking to get into python, or you’re interested in next week’s Python Basics Workshop, then you can sign up for 30 days of Learn Code Live here for $99. The billing system is not recurring, so don’t worry about being charged $99 every month without your permission. Instead, you get a reminder email at 7 days, 3 days, and 1 day before your 30 days are up. If you renew then you get another 30 added on. If you don’t then you’re done and I’m totally alright with that. Learn Code Live is intended to be something you join and leave as you need.

Lessons Learned

I originally wanted to do a whole school that was online, but I found that online interactive education is simply too time consuming for most people. Overall I found the problems to be:

Streaming live content is a royal pain and full of all kinds of technical issues (which I’ll talk about in another blog post).

Most people just don’t have the time to complete work on a rigid class schedule. When they miss one seminar they just give up and don’t bother continuing.

Interactive chat is terrible for education. People ask terrible questions, are always in a panic, treat the chat like their personal therapist, do more socializing than working on code, and eat up too much time from everyone.

If everyone is expected to follow a course schedule they start to compete with other students and give up if they fall behind or can’t do as well.

Everyone has different goals in learning to code and many times just need help with small problems they encounter in their own work.

There were other little things I had to change, but in general these were the biggest wins when it came to improving the experience of online students who are busy. I should make it clear that I’m talking only about people who have limited time to learn to code. These things may work for people who are in an actual class setting.

How I Fixed It

When it comes to teaching busy people online I simply found that chat and a rigid class schedule did not work at all. What I did to fix it is:

Got better at live streaming. I managed to sort out a ton of technical issues around streaming my own videos. Everything from dedicated audio hardware, to how to edit the videos quicker, to how to stream it to a CDN with reduced costs. I even managed to write my own little (and right now terrible) live chat for during the video, and have videos showing how I wrote the little chat too.

Got rid of the chat. We were using Discord for a while and I found that the quality of questions and my ability to answer were just substandard. It seems like, if you have access to chat, then you don’t really think about your question much and you don’t try to solve it on your own first. With chat you’ll just run screaming in a panic at the first error and dump tiny one-line questions, forcing everyone to eventually tease out what would have been a single forum post. The chat also required 24/7 monitoring and if I missed someone they would usually just drop off rather than ask again.

Switched to a forum for announcements and getting help. Programmers use IRC a lot, but if I’m being honest I think the quality of assistance on IRC is absolutely terrible, and I should have realized that would be the same on Discord or any chat. Switching to the forum solved all the problems we had with chat. The quality of questions went up, the quality of answers went up, people don’t have missed messaged anymore, and nobody wastes time socializing when they should be coding. I now believe that highly interactive chat influences students to not attempt to think through their own problems and to rely on other people to do the thinking for them. I also think that trying to give answers to people on chat was way too difficult. The forum simply solves all of these problems.

Changed to curriculum checks instead of a defined curriculum. In the past I’d lay out a curriculum for people to follow and then do the live presentations to match it. And everyone would be pumped for a week, not listen to anything I told them about slowing down and going at their own pace, and when they fell behind they’d just give up. It seemed a defined schedule just hit all the fear of failure buttons and prevented people from going at their own pace. Now what I do is at the beginning of a month I put up a Curriculum Check post and find out where people are and what they need. I then tailor the next series of videos and topics to hit what most everyone is working on or needs help with.

Gitlab but less code review. We had a gitlab that I was using to do code review, but the tools in gitlab for reviewing code are terrible. Gitlab is great, but without a way to organize my review queue it was simply too hard to do it efficiently. I found this also made people afraid to ask for help with their code because it has this big label of “CODE REVIEW BY ZED”. Now I give people access to our lab so they can practice storing things in git and using it, and then they can ask me on the forum to look at projects they’re having a problem with.

Implemented Refactor School instead of code review. I still think students need to learn how to write their code the way someone like me would, so now I do something called Refactor School. I ask for a volunteer who gives me their code, and then I go through it live and refactor it to be what I’d expect. This is similar to sitting with a Junior developer and refactoring their code so they know how to write it. We found that this is a much better way to get feedback on how code should be written and helps them learn some great tricks that I might not have realized they don’t know.

No set schedule or expectations at all. I mentioned this before but having a schedule or a list of expected tasks simply kills people’s motivations, especially if they’re perfectionists or have a fear of failure. I found that when there was any kind of deadline I would have people trying to finish things off last minute in a massive panic and making all kinds of simple mistakes. They’d also get behind and then beat themselves up over it rather than just keep grinding through it at a slower pace. Finally, they also simply didn’t take the time necessary to learn the materials and study since they were always in a rush. Now, there’s no expectation at all and everyone works at their own pace. We use the curriculum check and we also do a weekly accountability thread.

Accountability threads. The only goal in LCLive is keep working. Even if you only did 1 exercise during the week, just keep working. To enable this we have an accountability thread once a week where people basically do a standup and explain what they’ve done, what they need to do, and blockers keeping them from moving forward. This is much better than tracking their work and having a schedule as it allows for people with different lives.

What’s in LCLive Now?

Many products are developed for the Live students first so you don’t have to buy them. VimSchool is one example where students in Live watched for free and can download it. You can also check out my free TV site at tv.learncodethehardway.com to see other examples of what you get.

About 2-4 live seminars a week on requested topics from students. You can watch them live and chat with others, or download them after.

Many seminars involve watching me code on real things that run my business, but we also cover a huge number of topics from getting your editor setup, to OOP, to advanced javascript hacking.

You get the Python Basics Workshop I’m announcing tomorrow. This will be a 1 week workshop to get people started in Python or refresh their Python skills. Even if you can’t attend you can download it later, and then you have 30 days for the subscription so you can get help while you review it.

An account on a private gitlab server to learn how to use git, get help on complex topics, and get access to special LCLive projects I publish.

Advice and help on most any programming topics, not just my books.

What’s Coming Soon?

I’m going to be doing more workshops, a lot more Zed Codes, and focusing on specific trouble spots that I find people have. I’ll also be adding an option to add all of my books to your subscription for an additional cost. I used to include them but it became very confusing to manage so I dropped the price and then removed that option. Other than that I think this mix of features is the best I can do for online training.

Can I See What It’s Like?

How Do You Buy It?

You just have to go to the Learn Code Live Buy Page and purchase it like any of my other books. You’ll receive a special email saying that you bought it and that I have to setup your forum and lab access. After that you can go to the /live/ section of the site to attend the next seminar, and visit the private section of the forum.

What’s Python Basics Workshop?

This will be announced tomorrow, but I’m going to spend next week (August 13-17) doing a special crash course for people who want to get into Python 3. The goal is to get people who are just starting out a way to slam through a “detailed overview” of the book’s contents, with the idea that you’d then go back and spend more time on the exercises. The PBW would also work for people who want to get back into Python and just want a fast way to learn it.

It’s not expected that you’d be a master Python programmer at the end of the week. It’s more that you’d know what’s involved and then can have a realistic expectation of how to do the book from the beginning again. It also works as a way to make you do the work for one week. Here’s how it would work:

We meet live every morning at 10am EST, Mon-Fri, and go over the exercises for the day. I’m planning on 5-10 each day depending on how everyone is doing.

After each seminar I hang out in the chat and help people get through the first part of the exercises and get through and road blocks.

You then go off and do the exercises yourself, and if you miss the seminar then you can just watch the recorded one and then do your work.

At the end of the day at 3pm EST we hop on chat (and maybe video) to check up on where everyone is at and to answer any questions.

During the day, as you work, you can ask for help on the forum and I’ll be monitoring it so the response will be fast.

I’ve been meaning to start learning a new language for a series of books after Python. My list is pretty long, including Nim, Elixir, Go, Rust, JavaScript, and I even might, just maybe, who knows, do a PHP7 book. Currently though I have to do three more courses covering Python before I can move on to the next book, but I do want to start getting off Python for my business software soon.

The first thing I’d like to replace is my current Django web stack. It works, and powers my things, but honestly it’s not the greatest functionality. I’d love to just code a replacement in anything else, but my time is limited. I have to work on books right? Gotta record those videos.

A while back I heard that there’s people who hate my books for total beginners because they are too repetitive and slow. Alright, sure, if it’s going too slow then chances are it’s not the right book for you. I actually admit that the book is not for people who can’t handle doing some rote work or are already experts. No book can perfectly train everyone, and it’s insane to expect my book aimed at a person with zero knowledge to also train everyone else.

But, I’m a problem solver, and I like to solve my problems by combining many things at once. Solving one problem is boring. I need to do three at once:

I have a problem that I’d like to learn a new language to do some web development and replace my current Django stack.

I also have the problem that I need to learn a new language for my next book.

I then have this problem that people who feel my beginner books are beneath them seem to think the books don’t work for anyone else.

I believe there is a class of person who feels they can’t learn by practice, but only that they can learn by “building stuff”. I don’t really write books for them, but there was a tickle in the back of my brain that said, “You sure?”

Then it hits me! I got my next book Learn More Python 3 The Hard Way in the works, I need to learn Elixir, well why don’t I just try to do the Learn More exercises in Elixir as my way to learn Elixir? Then when I’m done I’ll have learned enough Elixir to work on my own site, and then I can probably do a Learn Elixir The Hard Way, and then…

Wait! What if I do a “Learn Elixir The Beast Mode Way”, or probably a better title because that’s super weird, but I think you know what I mean. What if I take the projects in Learn More Python The Hard Way, do them in Elixir, then add a large initial “crash course” that teaches enough Elixir to make you dangerous enough to do the projects? Then, the only structure is the projects, and you can do those in almost any order you want.

I’m actually very into this idea now. I freely admit that when you’re an expert that rote practice style of learning isn’t very useful. Learn More Python is kind of the list of projects I work through when I’m learning a new language, so why not just do them with Elixir too?

Starting maybe tomorrow or next week (time permitting) I’m going to “beast mode” Elixir using the projects from my Learn More Python The Hard Way and probably find a place to post the results. I think what I’ll do is go through this awesome Elixir School website as the fast crash course part, then I’ll start going through my book using Elixir. If it works then this may become the new format for future books aimed at people who aren’t total beginners.

I have purchased LPTHW, but was hoping I old ask you for some general advice, I hope that is okay.

I am one of those people who would like to learn programming as a complete novice, but keeps going round in circles with how to start.

I started LPTHW, and as I continued to research into first language to learn, I came across an article where a university professor said that python being multi paradigm is not a good first language, and instead recommended Smalltalk. I then researched into this and found some resources on Squeak.

However I’m struggling with learning something for the sake of it, so decided a project to work would be a lot more motivating. If I went into this area as a job I would be more likely to choose web development than software, and [realized] javascript is a language that would be really useful.

However I’ve seen many people online who have said it is a bad language and can make follow up languages hard to learn.

What is your opinion on this, and how much in the way of bad habits do you think it installs?

Well, university professors in computer science are notorious for being completely clueless about teaching beginners. Most of their advice is based on teaching only people who’ve been coding since they were 12, and most of them have no training in educational theory. In many cases they even have super weird ideas that have no basis in any research. In this case I’d say you ran into this type of professor and should just ignore the advice.

Look, you’re probably like many people who are looking for the “best” first language because you think of learning a programming language is like investing in a stock. You expect, after X months, to receive a Y benefit from the investment. If you don’t then you get disillusioned. You are probably also hoping that you only have to learn one language because learning new languages is difficult, so you want to make sure you pick the best one and only language.

Programming languages are not like investments, but more like a vacation. You don’t go on a vacation to Bali and say, “Alright, if I spend $10k and 3 weeks in Bali I expect my return to be $20k/year.” Instead you happily spend the $10k and walk away with photos, memories, and experiences you can use in your life after. You also don’t go, “Ok I have only one vacation place to choose from for the rest of my life so I better pick the best one. Is Bali the best?” Instead you go to multiple places during your life to gather experiences, and each one costs you, but the return is intangible.

Programming languages are like vacations in that you aren’t investing in something to get a return, and you aren’t going to learn just one. The right attitude is to enjoy your vacation in Python and come away with knowledge and experience to use in your daily life, then go learn another language. Try to learn 4, so that you’re experienced at learning languages. If there’s one thing that never changes about programming it’s that you have to keep learning new programming languages.

So, get back to learning Python. My book guides you through it. Nothing else matters until you’re done with that. After that try building some things with Python. Nothing fancy, just small little projects and hacks so you can have experience using Python. After that, learn 3 more languages if you can. It seems that after the 4th language it becomes easier to learn more and you’ll also feel more competent in programming.

One final note: If you’re the type of person who hits adversity then tries to find a way around it, you’ll need to stick with my book and resist that temptation. I put points in my book where it gets more difficult, but all of those points are solvable if you just stick with it and print out variables. I’m not kidding. Print print print. If you do that, then you’ll crack it. If you go “Oh this is hard, well I work better when I have something to work on so I’ll go switch to Elixir and build a Facebook” then when you hit problems doing that you’ll do it again and again until you never do anything.