Fellow former popes, you mean, by reading this message you hereby excommunicate yourself.
Fellow former popes, you mean, by reading this message you hereby excommunicate yourself.
It’s the last one, the “wait a day” option and the “pay $20” options aren’t equivalent. If it’s still a day away from viability, it isn’t viable yet, but if it’s $20 away, it is. You may be of the opinion that waiting a day isn’t a big deal, or is only $20 worth of hardship, but that’s not your choice to make for others.
You’d think ending a doomed pregnancy would be a simple matter even for pro-lifers, yes. They often don’t consider the issue, or assume that it’ll always be clear-cut and obvious in every circumstance, or worry that any exception will be used as a loophole.
I can’t believe this word doesn’t seem to have made it into any part of this thread, but I think you’re looking for viability: the point where a fetus can live outside of the womb. This isn’t a hard line, of course, and technology can and has changed where that line can be drawn. Before that point, the fetus is entirely dependent on one specific person’s body, and after that point, there are other options for caring for it. That is typically where pro-choice folks will draw the line for abortion as well; before that point, an abortion ban is forced pregnancy and unacceptable, after that point there can be some negotiation and debate (though that late into a pregnancy, if an abortion is being discussed it’s almost certainly a health crisis, not a change of heart, so imposing restrictions just means more complications for an already difficult and dangerous situation).
I empathize with that frustration. The process of thinking you’re right, learning you’re wrong, and figuring out why is very fundamentally what coding is. You’re taking an idea in one form (the thing you want to happen in your mind) and encoding it into another, very different form, a series of instructions to be executed by a computer, and your first try is almost always slightly wrong. Humans aren’t naturally well-adapted to this task because we’re optimized for instructing other humans, who will usually do what they think you mean and not always what you actually said, can gloss over or correct small mistakes or inconsistencies, and will act in their own self-interest when it makes sense, but a computer won’t behave that way, it requires you to bend completely to how it works. It probably makes me a weirdo, but I actually like that process, it’s a puzzle-solving game for me, even when it’s frustrating.
I do think asking an AI for help with something is a useful way to use it, that really isn’t all that different from checking a forum (in fact, those forums are probably what it’s drawing from in the first place), and hallucinations aren’t too damaging because you’ll be checking the AI’s answer when you try what it says and see if it works. It’s more the blindly accepting code that it produces that I think is harmful (and you aren’t doing that, it sounds like.) In an IDE it’s really easy to quickly make pages of code without engaging the brain, and it works well enough to be very tempting, but not, as I’m sure you know, well enough to do the whole thing.
Yeah, totally fair. I’ll note that you’re kind of describing the typical software development process of a customer talking to the developer and developing requirements collaboratively with them, then the developer coming back with a demo, the customer refining by going “oh, that won’t work, it needs to do it this way” or “that reminds me, it also needs to do this”, and so on. But you’re closer to playing the role of the customer in this scenario, and acting like more of an editor or manager on the development side. The organizers of a game jam could make a reasonable argument that doing it this way is akin to signing up for the game jam, coming up with an idea, then having your friend who isn’t signed up for the game jam implement it for you, when the point is to do it all in person, quickly, in a fun and energetic environment. The people doing a game jam like coding, that’s the fun part for them, so someone signing up and skipping all that stuff does have a little bit of a “why are you even here then” aspect to it. Of course it depends on the degree the AI is being used, how much editorial control or tweaking you’re doing, it’s a legitimate debate and I don’t think you’re wrong to want to participate.
I’ll acknowledge that there’s definitely an element of “well I had to do it the hard way, you should too” at work with some people, and I don’t want to make that argument. Code is also not nearly as bad as something like image generation, where it’s literally just typing a thing and getting a not-very-good image back that’s ready to go; I’m sure if you’re making playable games, you’re putting in more work than that because it’s just not possible to type some words and get a game out of it. You’ll have to use your brain to get it right. And if you’re happy with the results you get and the work you’re doing, I’m definitely not going to tell you you’re doing it wrong.
(If you’re trying to make a career of software engineering or have a desire to understand it at a deeper level, I’d argue that relying heavily on AI might be more of a hindrance to those goals than you know, but if those aren’t your goals, who cares? Have fun with it.)
What I’m talking about is a bigger picture thing than you and your games; it’s the industry as a whole. Much like algorithmic timelines have had the effect of turning the internet from something you actively explored into something you passively let wash over you, I’m worried that AI is creating a “do the thinking for me” button that’s going to be too tempting for people to use responsibly, and will result in too much code becoming a bunch of half-baked AI slop cobbled together by people who don’t understand what they’re really doing. There’s already enough cargo culting around software, and AI will just make it more opaque and mysterious if overused and over-relied on. But that’s a bigger picture thing; just like I’m not above laying back and letting TikTok wash over me sometimes, I’m glad you’re doing things you like with the assistance you get. I just don’t want that to become the only way things happen either.
The irony is that most programmers were just googling and getting answers from stackoverflow, now they don’t even need to Google.
That’s the thing, though, doing that still requires you to read the answer, understand it, and apply it to the thing you’re doing, because the answer probably isn’t tailored to your exact task. Doing this work is how you develop an understanding of what’s going on in your language, your libraries, and your own code. An experienced developer has built up those mental muscles, and can probably get away with letting an AI do the tedious stuff, but more novice developers will be depriving themselves of learning what they’re actually doing if they let the AI handle the easy things, and they’ll be helpless to figure out the things that the AI can’t do.
Going from assembly to C does put the programmer at some distance from the reality of the computer, and I’d argue that if you haven’t at least dipped into some assembly and at least understand the basics of what’s actually going on down there, your computer science education is incomplete. But once you have that understanding, it’s okay to let the computer handle the tedium for you and only dip down to that level if necessary. Or learning sorting algorithms, versus just using your standard library’s sort()
function, same thing. AI falls into that category too, I’d argue, but it’s so attractive that I worry it’s treating important learning as tedium and helping people skip it.
I’m all for making programming simpler, for lowering barriers and increasing accessibility, but there’s a risk there too. Obviously wheelchairs are good things, but using one simply “because it’s easier” and not because you need to will cause your legs to atrophy, or never develop strength in the first place, and I’m worried there’s a similar thing going on with AI in programming. “I don’t want to have to think about this” isn’t a healthy attitude to have, a program is basically a collection of crystallized thoughts and ideas, thinking it through is a critical part of the process.
I’m so confused that the same people can say “why does everyone get their undies in a bunch that we happily accept putting arbitrary data in columns regardless of type, that’s good, it’s flexible, but fine, we’ll put in a ‘strict’ keyword if you really want column types to mean something” and also “every other SQL says 1==‘1’ but this is madness, strings aren’t integers, what is everyone else thinking?!”
Conspiracy theorists: “scientists know it’s all wrong but they’re preventing the truth from coming out to protect their precious ‘theories’”
Actual scientists: “crap, our theories were dead on yet again, damn it, will someone please finally blow even a tiny hole in this thing so we can move forward”
A VPN is just a way to say “wrap up my normal internet packets and ship them somewhere specific before they continue the normal way.” The normal way is you want to get a message to some other server, and as a part of setting up the network you’re on, your machine should already have a list of other devices it’s physically connected to (“physically” could be “via radio waves” so not just wired) and they should have already advertised “hey, I’ve got access to these places too” for your information. Your router is likely the only one in your home network advertising anything that is on the larger internet, so all your outgoing messages will have to go that way to get to their destination. For example, I’ve got a phone, a wifi access point, a router, and my ISP’s box; my phone knows the WiFi access point is two hops away from internet because the access point said so, that’s the best one it can see, so it sends it that way and hopes it makes it. Each machine in between does the same thing until hopefully it gets where it is supposed to.
With a VPN, the same messages are wrapped in a second message that is addressed to the other end of the VPN. When it gets to the VPN provider, it’s unwrapped, then the inside message is sent off to wherever it’s supposed to go. If a message comes back to the VPN provider addressed to you (ish, this is simplifying a bit), it’s wrapped up the same way and sent back to you.
Big companies often put resources “behind” the VPN, so you can’t send messages from the outside addresses to the office printer, they’ll get blocked, but you can request a connection to the VPN, and messages that come in through that path do get allowed. The VPN can be one central place where you make sure everything coming in is allowed, then on the other side the security can be a little less tight.
VPNs also encrypt the internal message as a part of wrapping them up, which means that if you’re torrenting via a VPN, all anyone else can see is a message addressed to your VPN provider and then an encrypted message inside. And anyone you were exchanging messages with only ever saw traffic to and from the VPN provider, they never saw where it was going after your VPN provider got it. Only you and the VPN provider know what was happening on both ends, and hopefully they don’t look too closely or keep records.
Hopefully now it’s clear that Mullvad and similar won’t help you access your own things from outside, they’re only good for routing your stuff through them and then out into the rest of the internet. However, this isn’t secret magic tech: you can run your own VPN that goes in the other direction, allowing you into your own home network and then able to connect to things as if you were physically there. Tailscale is probably the easiest thing for things like that nowadays, it’ll set up a whole system where your devices can find each other and set up a mesh of secure, direct connections no matter where they are physically located. By default, just the direct device-to-device connections are re-routed, but you can also make a device an “exit node” that can route all your traffic like a traditional VPN.
Of course, that will be the exact opposite of what you want for privacy while torrenting, as it’s all devices that you clearly own and not hiding their identities whatsoever. But it’s very cool for home networking and self-hosting stuff.
Yeah, they’re probably talking about nulls. In Java, object references (simplified pointers, really) can be
null
, pointing nowhere and throwing an exception if you try to access them, which is fine when you don’t have a value for that reference (for example, you asked for a thing that doesn’t exist, or you haven’t made the thing yet), but it means that every time you interact with an object, if it turns out to have been null, a null pointer exception is getting thrown and likely crashing your program. You can check first if you think a value might be null, but if you miss one, it explodes.Kotlin has nulls too, but the type system helps track where they could be. If a variable can be null, it’ll have a type like
String?
, and if not, the type isString
. With that distinction, a function can explicitly say “I need a non-null value here” and if your value could be null, the type system will make you check first before you can use it.Kotlin also has some nice quality of life improvements over Java; it’s less verbose (not a hard task), doesn’t force everything to belong to a class, supports data classes which are automatically immutable and behave more like primitive values than objects, and other improvements.