• 0 Posts
  • 21 Comments
Joined 1 year ago
cake
Cake day: July 1st, 2023

help-circle
  • Also, the development and evolution of these open technologies relies on human interest and attention, and that attention can be diminished, even starved, by free, closed offerings.

    Evil plan step 1: make a free closed alternative and make it better than everything else. Discord for chat, Facebook for forums and chat/email, etc.

    Step 2: wait a few years, or a decade or more. The world will largely forget how to use the open alternatives. Instant messengers, forums, chat services, just give them a decade to die out. Privately hosted communities, either move to Facebook, pay for commercial anti-spam support, spend massive volunteer hours, or drown in spam.

    Step 3: monetize your now-captive audience. What else are they going to use? Tools and apps from the 2000s?








  • And those jobs are critical to the process of making new developers.

    An important part of my education - the part that grad school can’t teach you, you have to learn it on the job - was being new and terrible, grinding on a simple problem and feeling like a waste of money. Any of the experienced guys sitting behind me could have done this thing in a few hours but I’ve been working on it for a week. “What’s the point? Any minute now they’re going to tap me on the shoulder and tell me I’m done, it’s time to go find another job.”

    But that never happened.

    Those early problems weren’t fun. At home I would have never chosen to work on them. I’d leave them for someone else. “But now that I’m collecting a paycheck for it, this isn’t up to me. I have to work on it. I can’t give up. I can ask for help, but I need to show my peers that I belong. I can solve difficult problems. I can persevere.”

    As a mediocre professional developer, I had to struggle to learn that. I wasn’t getting far on my own, without mentorship and motivation. Homework, pursuing degrees, wasn’t getting me there. (And even now, I seem to have about two weeks of attention span, for projects at home.)


  • As a professional C# developer since 2012, I’d say a programmer needs four kinds of knowledge. As an organizational user of Github Copilot for a couple months, I’d say AI tools can help with one, maybe two of those.

    Understanding language and syntax, so you can communicate the ideas in your head to the machine accurately: AI is fairly good at this, will certainly get a lot better.

    Understanding algorithms and data structures, well enough to compare and contrast, and choose the most appropriate ones for each circumstance: AI can randomly select something, unless it’s a frequently solved problem. I don’t expect this to get better except for the most repetitive of coding tasks.

    Understanding your execution environment and adapting your solutions to use it well: I don’t see the current generation of AI tools ever approaching this. I don’t think they have context for how a piece of code is used, when trying to learn from it. One size fits all is not a great approach.

    Understanding your customer’s needs and specific problems, and creating products, not code. Problem domains and solutions are a business’s entire reason for existence. This is all kept confidential (and outside the reach of an AI training data set) for competitive reasons. As a human employee, you get to peek behind the curtain and learn these things yourself.


  • Really great ideas. I read up a bit on Fediblock and I think you’re absolutely right.

    If I could riff off of your ideas a bit: instance-blocking recommendation lists bundle an entire stack of things together:

    • statements of fact or intent: this is wrong, this is right, this is insulting and harmful, this is insulting but not harmful if you can laugh at it

    • value judgements about those statements: I care about this issue but not that issue, this wrong statement is easily disproven, that wrong statement takes paragraphs to disprove, etc.

    • actions to take based on those value judgements: block, tag with a statement, link to an article, etc.

    With things bundled, the whole stack has to be a pretty close match for a user’s own values, or else there’s friction. The user can just tolerate the friction, maybe miss out on some content, or they can decide to switch to a whole new list.

    Suppose we could unbundle those from each other. Subscribe to the work of a group of volunteers that recommends safe defaults but lets you customize things when you encounter friction points.


  • I feel like we need different ways to share and learn things about harmful posts and comments. Like, sure maybe your server aggregates the posts, and because you own the server you can remove or edit things if you really want to. But I should be able to say “this is objectively wrong in a dangerous way, and here’s proof” in a side channel that the server owner can’t block.

    And for it to have any point at all, clients should be able to subscribe to feeds. Like, a science educator I respect can say “I trust this foundation that fights harmful disinformation” and I should be able to click a button and see their stuff. Without the server owner banning me for some weird reason.





  • I’d love to see this become something greater. Consider this challenging problem:

    Suppose you have an instance with a community (“C”) that likes to promote subtle but wrong things.

    Suppose there’s a community of fact checkers (“F”) who wants to promote actual, verifiable/falsifiable facts by responding to lies with compelling and relevant references. They want to help by directly replying to posts or applying tags in community C, but they are not permitted to contribute by that instance. The community C seems to want their lies to remain unchallenged.

    And then suppose there’s some opted-in users (“U”) who want to receive help understanding when posts in community C are not factual. They would like to receive posts or tags from fact checkers, because people they trust have recommended they listen to these fact checkers.

    I’d love to see a tagging system that can help “U” and “F” connect, even if the owners of “C” don’t want them to, when browsing content in “C”. Ideally in an extensible way that lets some future implementer come up with novel ways to organize and maintain the fact-checking side of things in response to new threats.

    I probably explained this badly, and the letters are probably more pretentious than helpful. But I hope someone smarter can pick this up and run with it, because it’s something the world desperately needs.


  • That’s right. I know I was thrown off by large projects earlier in my career. The more you learn the stronger you get at understanding and packaging/setting-aside larger and larger pieces of a project. Bigger projects stress this ability in new ways. I think I lost a job in 2016 because I couldn’t stretch my brain around something bigger, at a small business with maybe 14 devs.

    This might be a bad way to communicate this, and I think I’m taking this in a weird direction, but: I’ll use the Mozilla project as an example of a large project, though I’ve never looked at its source.

    Suppose you were in an interview, and due to the specifics you are expected to be fast and fluent with the same technologies used in the Mozilla project, though you’ve never looked at the source before. Given a machine with the source already checked out and open in an IDE, you have one hour to read through the source and familiarize yourself with it, so you can answer questions about how you would approach adding features or test coverage.

    What I want to know is: how high does your heart rate go? Does it go up just a little, as expected for a high stakes situation? Or does it go up a lot, because you honestly have no idea how much another dev in your situation would be expected to accomplish, so you have no clue what “good enough” looks like?

    This is a crappy example because no interviewer could ever actually use this metric. But I’d say if it goes up a lot, for the reason I gave, you might not be ready for senior. And by this metric, it might not ever be possible to grow to “senior” without working at a company with large multi-team projects. But I think that’s accurate.

    (Edit: yes, sorry, Software Development Engineer. I think that’s a protected term in the US, in Texas and California at least, but anywhere else in the US you don’t need to pass an engineering board exam to use that title.)


  • It sounds like you’ve got enough familiarity with the whole development lifecycle, as applied to a smaller single-dev-sized project, that you’d be great as an SDE 2 at a larger company, ready within a few years to step up to Senior. There are companies with hundreds of developers who only rarely hire straight out of college, where your level of experience is exactly what they want.

    (There are also companies with hundreds of developers who do hire straight out of college, and I’m not trying to disillusion recent grads.)


  • When I last had to job hunt (2016) - I just jinxed it didn’t I? - I was complimented by interviewers for separately listing “Classroom experience” and “Professional experience”

    I think you get a lot of points for a resume that says “I may or may not be the best fit for you, and that’s ok. Here’s accurate information, so you can make that determination for yourself. I trust you.”



  • Think of a programming language as a crutch for the human brain. Processors don’t need it: they don’t have to think about the code, they just execute it. Our mushy human brains need a lot of help, however.

    We need to think about things on our own terms. Different programming languages, different APIs that do the same thing, different object models, these all help people tackle new problems, or even just implement solutions in new ways.

    Some new languages have a completely different model of execution you may not be familiar with. Imperative languages are what we traditionally think of, because they work most similarly to how processors execute code: the major pattern used to make progress, do work, is to create variables and assign values to them. C, COBOL, BASIC, Pascal, C# (my personal favorite), Javascript, even Rust, are all imperative languages.

    But there are also functional languages, like ML or F#. (The latter, I keep installing with Visual Studio but never ever use) The main pattern there is function application. Functions themselves are first order data, and not in a hacky implementation-specific way like you’re passing machine code around. (I’ve only ever used this for grad school homework, never professionally, sadly.)

    And declarative languages like Prolog helped give IBM’s Watson its legendary open question answering ability on national TV. When you need a system to be really, actually smart, not just create smart-sounding text convincingly like a generative AI, why not use a language that lets you declare fact tables? (Again, only grad school homework use for me here)

    Programming is all about solving problems, and there are so many kinds of problems and so many ways to think about them. I know my own personal pile of gray mush needs all the help it can get.