site banner

Culture War Roundup for the week of October 3, 2022

This weekly roundup thread is intended for all culture war posts. 'Culture war' is vaguely defined, but it basically means controversial issues that fall along set tribal lines. Arguments over culture war issues generate a lot of heat and little light, and few deeply entrenched people ever change their minds. This thread is for voicing opinions and analyzing the state of the discussion while trying to optimize for light over heat.

Optimistically, we think that engaging with people you disagree with is worth your time, and so is being nice! Pessimistically, there are many dynamics that can lead discussions on Culture War topics to become unproductive. There's a human tendency to divide along tribal lines, praising your ingroup and vilifying your outgroup - and if you think you find it easy to criticize your ingroup, then it may be that your outgroup is not who you think it is. Extremists with opposing positions can feed off each other, highlighting each other's worst points to justify their own angry rhetoric, which becomes in turn a new example of bad behavior for the other side to highlight.

We would like to avoid these negative dynamics. Accordingly, we ask that you do not use this thread for waging the Culture War. Examples of waging the Culture War:

  • Shaming.

  • Attempting to 'build consensus' or enforce ideological conformity.

  • Making sweeping generalizations to vilify a group you dislike.

  • Recruiting for a cause.

  • Posting links that could be summarized as 'Boo outgroup!' Basically, if your content is 'Can you believe what Those People did this week?' then you should either refrain from posting, or do some very patient work to contextualize and/or steel-man the relevant viewpoint.

In general, you should argue to understand, not to win. This thread is not territory to be claimed by one group or another; indeed, the aim is to have many different viewpoints represented here. Thus, we also ask that you follow some guidelines:

  • Speak plainly. Avoid sarcasm and mockery. When disagreeing with someone, state your objections explicitly.

  • Be as precise and charitable as you can. Don't paraphrase unflatteringly.

  • Don't imply that someone said something they did not say, even if you think it follows from what they said.

  • Write like everyone is reading and you want them to be included in the discussion.

On an ad hoc basis, the mods will try to compile a list of the best posts/comments from the previous week, posted in Quality Contribution threads and archived at /r/TheThread. You may nominate a comment for this list by clicking on 'report' at the bottom of the post and typing 'Actually a quality contribution' as the report reason.

24
Jump in the discussion.

No email address required.

Maybe this is because I'm self taught, but I don't think either of your two options are how I think about intro to coding.

The order I learned languages (so far) was perl -> python -> C -> common lisp -> JS -> Kotlin -> Scala -> Go (with a smattering of others in between when I needed them for specific things). I don't think explicit data structures/data types came into (as opposed to them being an implementation detail) that until I hit C, but by the time I did, they were quite intuitive.

Maybe this is just me being solution oriented, but the way I've always looked at it (and introduced people to programming when I teach them) was to start with a problem they were solving, start with a blank page (I've not found giving them starter code to produce good results), and walk them through each of the relevant tools, being careful not to tell them the combinations that they need. For synthetic problems, stealing music from the internet is usually a good place to start. People like music, and getting it is a quick way to go from the "I don't know what I'm doing" to the "I'm a god" adrenaline rush that hooks people on programming. They build up a toolbox of solutions to problems, and later combine them into bigger solutions for bigger problems.

But having the power and agency to solve my own problems (real problems, not synthetic assignments created by an academic) myself is what got me into this, and it's what keeps me doing it every day.

I will, however, agree that the (often quite useless) abstractions do get in the way more than they help, and leave people in a nebulous "I have no idea what's going on" state of mind. Maybe that's the benefit of going through C at some point? It strips away almost all of the magic. Maybe I'm being hard on abstractions here, but library specific abstractions (as opposed to the ones built into the language itself) tend to be poorly done and make my life harder rather than easier.

Solving your own problems is exactly the rush. And it can't be something that someone told you would be a good problem for practicing programming. It has to be something where you want to have the result and are eager to get closer and closer step by step.

For example I wrote bots to automatically fill out various HTML forms, or modded games, built websites for gaming clans, processed and synced subtitles for downloaded movies, scraped websites like the parliamentary election result website to slice and dice the data myself, to process Wikipedia dumps in various ways etc. Nobody told me to do any of these, but such things led me through lots of classic CS topics and I read up on how to do them with a goal in mind. That's so much better than the prof dropping some artificial problem on you.

Like if I have two subtitles in two languages and one is properly synced up, but the other isn't, but might also not correspond to the first subtitle perfectly one-to-one, then how do I find out a plausible correct alignment? This leads to various algorithms like edit distance, longest common subsequence etc.

But this presupposes that you have such computational or automation use cases in your life. For example today with Netflix existing, I might have never learned about video file formats, subtitle file formats, never had to correct audio or subtitle sync issues. If my parents had been rich and Steam existed, I wouldn't have had to learn how to play with the Windows registry, to mess with the Program Files, to understand how to use firewalls to set up LAN games etc. And all such endeavors open up new problems to solve, now you have to install an IDE, figure out environment variables, understamd that vague C++ compiler error, read up on what the words mean, all still with the goal that you want to get that thing working, but without any external pressure like deadlines, so if I want, I can take a side quest into deep diving into graph algorithms for a few days or whatever.

If you don't see such problems around you, if you don't care to customize stuff on your computer, you may look at project ideas but those always seem artificial because someone already did them and we know there is a solution. It's a schoolish problem. When you build something for yourself, you have to define the problem, the scope, then go further and further. Some riddle websites are also cool, like http://www.pythonchallenge.com/

I'm not saying that such self study is sufficient but it made my formal studies much easier because I could tie the concepts to first hand experiences.