adamant's blog

By adamant, history, 20 months ago, In English

Hi everyone!

I saw that a lot of people write meta blogs recently. As my blog count approaches 90, I feel like it may make a lot of sense to write another one that kind of focuses on the philosophy behind my blogs and explains potential readers what they should expect from my blogs and how to approach them. So, without further ado...

Tldr.
  1. Read my blogs if and only if the general setup itself appeals to you. Don't feel obliged to do it to get better at competitive programming.
  2. Don't be driven away by seemingly dense math notation if the topic looks interesting. Ask questions if something is difficult to comprehend, I will explain in a more detail and it will help others too.
  3. Be ready to fill some possible gaps in the story yourself, as an exercise.
  4. Be open-minded about analyzing setup in general, rather than working towards predetermined goal.
  5. Be prepared to see too little explanation on how abstract nonsense from my blogs connects with concrete applications.
  6. Give feedback, it motivates me a lot and helps make future blogs better.
Be interested

First thing you should decide for yourself when reading my blogs is to understand if it is of interest to you. And I want to be as transparent here as possible, my blogs are not designed to be useful for competitive programming. I mean, of course I have some blogs that might be, but only in very rare circumstances I have a goal of helping someone perform better in competitive programming when writing a blog.

My main motivation is to share something that I found interesting or fascinating in one way another, and I mostly expect the same motivation from any potential readers. So, in my opinion, most of the time you can decide on whether you should read my blog or not by reading the title and skimming through first 2-3 paragraphs. Does the setup and the problem at hand sound exciting to you? If yes, please tag along for the journey! If not, you probably won't miss anything important by skipping it :)

Don't be afraid

One piece of feedback that I often get is that my blogs are scary, and many potential readers think that they require some very advanced math to comprehend. For example, it seems that many people assumed that my blogs on combinatorial species require some advanced knowledge in category theory. In reality though, while there were some links to category theory stuff in the blog, they only scratched the very surface and very basic definitions of the subject, which I myself only got to know while writing the blog, and all of it was defined in the blog itself, so it was not a requirement to be familiar with the concepts in advance.

I may have a lot of links to advanced stuff, e.g. Wikipedia pages, in my blogs, but their purpose is mostly to provide additional context and some connection to a grander picture, as well as some opportunities for further learning to a curious reader, rather than to indicate some kind of prerequisite for reading the blog. I try, especially in later blogs, to be more or less clear about the hard prerequisites for reading my blogs (and try to keep them low whenever possible).

If you really struggle with understanding something, but the topic is interesting to you, feel free to reach out to me directly, I may try to explain some stuff in a more clear manner, or even improve the blog a bit :)

Be ready to think

Another piece of feedback that I often get is that my blogs are often terse and lack examples. While I try my best to act on it in my later blogs, I think that in learning it is generally very important to be able to come with your own examples and think through tersely described explanations to fill some gaps on your own. I recognize that it might be unpleasant to do so, and I'm trying to ease your pain, but ultimately I think that the best way to really understand something is to read some very high-level description and try to reinvent it based only on that little information that you have.

I think, this is the best way to develop your own intuition, and carve a better, simpler path to something that others take for granted. I spend some crazy amount of time doing just that, trying to reinvent the wheel, to come up with my very own examples and ways to define and do things and this is exactly how I managed to come up with the stuff described here or here or here or here or here or... Well, you get the idea. I learnt and found out so much in exactly this way, I couldn't recommend it enough :)

Accept that the journey is more important than the result

I once received a piece of feedback that there are essentially two ways of explaining things:

  1. From result to research. This is western approach, when we start by clearly defining the end result towards which we are working first, and then explain how we reach it.
  2. From research to result. This approach is more common in the eastern part of the world (say, in Russia). In this way, we do not have a pre-existing result that we're working towards, but rather we start with a generic, somewhat obscure, setup and just analyze it in detail, to learn what results follow from it.

While the first is argued to be much better for understanding, as it is easier for people to connect what we're doing right now with what they're going to get in the end, I vastly prefer the second approach. There are quite a lot of reasons for it:

  • It is what you naturally do when you approach new open-ended problems. You do not know in advance what you will get when dealing with the problem, you do not even know if you will find out anything at all. You start with a setup, and you find the conclusions about it, you analyze its properties, until you eventually find out something of interest. Thus, more often than not, I write things in this way simply because it corresponds to how I found them out in the first place.
  • Generally, proving the known result and finding out a new unknown result are vastly different things. A lot of textbooks just give you the theorem and provide with the simplest or shortest proof available. While such proofs may be shorter and easier to comprehend, they throw away what I think is the most important part: reproducibility. You should generally be able to reproduce the result even if you forgot some details about it. And motivation behind the proofs play tremendous role here. If you understand the motivation, you're likely be able to reproduce the proof just using the same natural reasoning. If you don't, most likely you won't be able to reproduce it.

And I can't stress enough how important it is, in my opinion, to provide motivation for any step that you make. When you start with a setup and do not know the result beforehand, motivation most of the times is very simple: you just do what you think is natural to do to analyze the problem. Structuring the blogs in such a way, generally, allow me to avoid a pitfall of many textbooks when they have a sequence of lemmas that eventually allow you to prove the end result, but for each of them, you have no idea why would you ever make such assumption of you were to analyze the setting on your own. Yet, I hear the feedback, so you may notice that in my later blogs I try to provide some additional insight as to what are the core results and applications that we're going to derive.

Think abstractly

Okay, this is a bit of my personal preference towards abstract nonsense over concrete stuff. I feel like, generally, concrete formulations often have a lot of diversions. You may be able to solve concrete instance of the problem, but if it is some kind of approach that may be applied to many similar problems, it is important to understand what is the actual underlying structure of the things at hand that allows them to behave in a similar way.

And it is much better when we're able to unearth this underlying structure that connects different instances of similar problems together. While it may seem that analyzing concrete examples may shed some light on what's going on, my personal experience tends to say that it is too easy to get distracted into a very specific way of doing things and miss the common structure if you work with concrete stuff too much. This is also the reason my blogs lack examples that often. I don't work with them much on my own, and even consider them harmful to some extent :)

Give feedback

I can't thank enough all the people who reached out to me to tell when something in my blogs was difficult to comprehend or plainly wrong. While I may not always be able to right all wrongs, I take feedback very seriously, crave for it (well, yes, I am an attention and validation seeker alright) and try my best to act on it. So, if you see any issues in my blogs (or contrary to it, like it and want to praise it), please feel free to tell! This will help me in writing future blogs, and give me some motivation, as I would know that the blogs are of interest to somebody. I must say that these days it especially warms my heart when someone I barely know approaches me in real life and tells that my blogs helped them in one way or another :)

  • Vote: I like it
  • +52
  • Vote: I do not like it

| Write comment?
»
20 months ago, # |
  Vote: I like it -46 Vote: I do not like it

I don't like this blog and downvoted it.

You just repeated the platitudes that can be seen everywhere on the Internet. Go get life.

  • »
    »
    20 months ago, # ^ |
      Vote: I like it +64 Vote: I do not like it

    Today I learned the word platitudes.

»
20 months ago, # |
  Vote: I like it +13 Vote: I do not like it

As always, I just upvoted your blog post.

FAQ

What does this mean?

The amount of contribution (points) on your blog post and Codeforces account has increased by one.

Why did you do this?

There are several reasons I may deem a blog post to be not worthy of negative or neutral karma. These include, but are not limited to:

  • Politeness towards other Codeforcers,
  • Spreading correct information,
  • Sarcasm correctly flagged with a /s.
Am I banned from the Codeforces?

No — not yet. But you should continue making blog posts like this in the future. Otherwise I will be forced to issue a downvote, which may put your commenting and posting privileges in jeopardy.

I don't believe my blog post deserved an upvote. Can you un-upvote it?

Sure, mistakes happen. But only in exceedingly rare circumstances will I undo an upvote. If you would like to issue an appeal, shoot me a private message explaining what I got wrong. I tend to respond to Codeforces PMs within several minutes. Do note, however, that over 99.9% of upvote appeals are rejected, and yours is likely no exception.

How can I prevent this from happening in the future?

Accept the upvote and move on. But learn from this mistake: your behavior will be tolerated on Codeforces.com. I will continue to issue upvotes until you improve your conduct. Remember: Codeforces is privilege, not a right.

  • »
    »
    20 months ago, # ^ |
      Vote: I like it +36 Vote: I do not like it

    The amount of contribution (points) on your blog post and Codeforces account has increased by one.

    I don't think this is true.

»
20 months ago, # |
  Vote: I like it +20 Vote: I do not like it

First, open your eyes. Enjoy!

»
20 months ago, # |
  Vote: I like it +29 Vote: I do not like it

This looks like a chatGPT prompt. Sorry.

  • »
    »
    20 months ago, # ^ |
      Vote: I like it +6 Vote: I do not like it

    That feel when you wasted several hours to write a thorough and inviting text of 9000+ characters only for someone to call it “a ChatGPT prompt”…

    • »
      »
      »
      20 months ago, # ^ |
      Rev. 3   Vote: I like it -46 Vote: I do not like it

      I didn't see through and inviting anywhere. Please don't idolize him just because of his high contribution.

      I don't deny his previous blog contributions and his mathematical abilities, I just don't really understand the significance of this blog.

      • »
        »
        »
        »
        20 months ago, # ^ |
        Rev. 3   Vote: I like it +42 Vote: I do not like it

        It appeared somewhat significant to me, because I was often approached with something like

        • "What's the point of this blog? It doesn't seem applicable to competitive programming";
        • "I was scared of reading this blog, as it had a lot of scary mathematical formulas";
        • "I feel like your blogs are often too terse/lack concrete examples";
        • "It would be better to structure your blogs results-first".

        As those are the points that were raised often, I felt like a lot of people may have some similar thoughts. So it made sense to me to express my views on the issues, so that it would be easier for some people to understand why I structure my blogs in some specific way, and to decide whether they want to engage with them or not.

        Or maybe someone just explains me that some of the views that I expressed here are wrong, and I should indeed do things differently? Who knows :)

        I mean, I get why the blog might seem like empty self-obsessed platitudes, but it wasn't the intent behind it, really.

»
20 months ago, # |
  Vote: I like it +166 Vote: I do not like it

How do I read this blog? Somebody please explain

  • »
    »
    20 months ago, # ^ |
      Vote: I like it +101 Vote: I do not like it
    • »
      »
      »
      20 months ago, # ^ |
        Vote: I like it +118 Vote: I do not like it

      How do I read this blog? Somebody please explain

      • »
        »
        »
        »
        20 months ago, # ^ |
        Rev. 2   Vote: I like it +93 Vote: I do not like it

        AddressSanitizer:DEADLYSIGNAL

        ===========================================

        ==66091==ERROR: AddressSanitizer: stack-overflow on address 0x735562bc625a3

        #0 0x5562b63462c12 in readBlog() (/home/codeforces/swistakk)
        
        #1 0x5562b63462d23 in readBlog() (/home/codeforces/swistakk)
»
20 months ago, # |
  Vote: I like it 0 Vote: I do not like it

Thank you for the blog. I can now read every last of your blogs.

»
20 months ago, # |
  Vote: I like it +3 Vote: I do not like it

This reminds me of the "Um_nik Manual"