I did two streams this weekend that you can now find on my youtube channel. The first with quite easy Codeforces problems that I solved from scratch (I haven't seen them before), also implementing them. The second one with a bit harder Topcoder problems that I've solved before, but I didn't necessarily remember the solution now — and for those I only described the solution, without implementation. The streams were fine but there are a lot of things to improve.
I wanted to see two things:
- Can I stream? Am I able to try to solve a hard problem and at the same time talk in English, that isn't my native language? So so. It wasn't a disaster, but I hoped to be better, more efficient. I think I'm not able to stream solving hard problems from scratch, without knowing the solution already. Not if I want to keep it educational and spend time explaining everything.
- Do people like it? Yes, apparently they did :)
I watched some of Petr's streams and I would say he shares his thought process, basically saying out loud what he thinks about. But he doesn't explain things. It's an interesting thing but I don't see learning from that. Still, I think it's the best possible format of streaming an actual contest, where you shouldn't waste time. I also think that I would do it much worse: I'm worse in CP and in English proficiency.
As mentioned above, I want my content to be "educational" for sure. I'm glad that I was talking all the time and I mentioned some similar problem, or explained some general technique needed in a problem. But maybe I talked too much and I should sometimes spend a few minutes silent, or just thinking loud like Petr. Especially in hard problems.
Let's now see what I can and should improve in my stream. This list is for me to note down everything, and for you to maybe discuss or suggest something. It doesn't include things related to the actual content/format (choice of problems, the way to explain things, etc.).
- My English — I don't have a reach vocabulary but that's fine, I guess. I think it's more important for me to improve my accent. That will improve with time, maybe a bit faster if I take some lessons.
- Using Twitch/Youtube efficiently — I must learn to add timestamps for a video later. Adding a proper title and description would also help to gather more people. There should be some description explaining things for people not from Codeforces. I need to become a "partner" on Twitch if I want to stream with adjustable resolution, what turns out to be important. In the Youtube stream, I didn't have sound at the beginning of a stream, even though I had the same configuration I used before for Twitch. Things like this will happen sometimes but will be less and less frequent, I guess. And it won't hurt to add some graphics, like banner and not-default follower notification.
- Get used to chat — at one moment, for a few minutes I had my stream playing on background with sound, what was for sure extremely annoying. I should check chat more often, or maybe put it on my main screen.
- Sound quality — I use a small logitech camera (won in some contest btw.) with a microphone built-in. A stand alone microphone would be better for sure, but I think the sound is surprisingly good right now. So I don't see a need to upgrade in the near future.
- Drawings — a place to draw pictures and formulas is necessary, and I think drawing in paint isn't that good or professional. I should either have a whiteboard (and a good camera with that) or a graphical tablet. I think the latter is a better idea, much more convenient for me. I'm able to spend like 200$ for that.
- OS — I use Ubuntu and I couldn't do programming efficiently on Windows. That might often hurt, with most streaming tools being only for Windows and Mac. I should also be careful when buying a graphical tablet, because some might not work properly with Ubuntu. Maybe it would be easier to just switch to a different OS and learn a few commands there.
- Youtube or Twitch — I must eventually stick to one platform. I mentioned some differences in a previous blog. The main disadvantage of Twitch right now is that it doesn't allow viewers to choose smaller resolution, unless I'm a "partner", what might require some time to get.
- Schedule — I should inform about my stream earlier, perfectly fixing a schedule to something like: Wednesday evening at this hour, Saturday morning at this hour.
- Learning from other streamers — there aren't many programming streamers, so there aren't many guides about that. I checked out a few channels to see what I enjoy to watch, to then try to achieve the same thing. One good streamer is Adam13531 who also created a guide that should be useful for me.
- Stress — with time I will become more chilled while streaming, I hope. It's weird to talk to a camera in an empty room. And I feel a pressure that I must solve everything correctly, and explain things well. I was focused so much that even avoided checking a phone, not to be distracted. I'm quite confident person, but still — I was more stressed than you can see in a video. Maybe my friends would notice that easier, e.g. kostka wrote to me after my first stream that I look stressed out.
And the most important thing is what I actually do during a stream.
I realized after the first two streams how hard it is to try to come up with a solution, and talk English at the same time. If I need 20 minutes for something normally, I would need more than an hour here, if I'm talking constantly. A funny thing was solving Gangsters from TCO. I solved that problem during a contest quickly, but during a stream I didn't remember the solution. So I just shared my initial thoughts and ideas, that turned out to be completely different from my solution. They would lead to some worse complexity, I think. I then opened my code and after a moment understood the easier and faster approach. I was embarrassed a bit during a stream, because I started with worse ideas and had to analyze my old code, but now I think it was completely fine. I still showed what are reasonable ideas and why.
I think that sometimes I can prepare in advance, and then do something harder, like solving problems from POI or maybe giving a lecture about geometry. If I want to solve new problems and explain everything, they must be easy problems. I don't want to take a hard problem and try to solve it for two hours. It wouldn't be unwatchable, but would be quite boring and viewers wouldn't learn much. I can do that from time to time.
I want to try streaming problem setting, maybe creating an unrated educational round. The results mean nothing then, but it might be the only possible way of streaming how a contest is created. I also plan to practice a bit for TCO Marathon, so maybe I will solve some optimization problem the other time.
Yet another possibility is popularizing CP. Solving 50 easiest problems on CF or SPOJ wouldn't be useful for anybody here, but it would be a bit of fun and any programmer could watch that.
Please do post any feedback, thoughts. Thanks! And I invite you for my next stream, announced at the top of the blog.