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

help-circle






  • 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.





  • 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.


  • I don’t know if this is a reasonable thing to want, but I want to create it if it doesn’t. Or I need to understand why my expectations are warped.

    I have this impression that, in 1995, you could just stand up a Solaris or Sys V UNIX box on the public internet, run some common default services that most people wanted on a “standard internet host” and they would more or less do ok. Try that today, of course, and things would not be ok.

    I think there should be a guide for creating a similar environment with free (and/or “free”) software. My version would start with: you’ll need server hardware totaling around 32 GB of RAM or more, on one machine or several. Recycled laptops or corporate desktops work, though you’ll need vlan aware switching if multiple machines. We’ll assume a static ip and a domain with dnssec support. Here’s what that means.

    And then a sort of step by step for a management vlan, a vm hypervisor, management vm, firewall, gsa/openvas, an apt-mirror VM, and then we start setting up services. Each service gets its own VM, and gets a /30 net and firewall rules allowing minimum permissions. DNS, then OpenLDAP, then haproxy, then email, etc.

    I’ve been on a journey setting this all up for myself, and I think my biggest problem has been understanding the abstract concepts. I was following an OpenLDAP walkthrough, for example, without really understanding how different clients would be using it. I found a whole series of articles on setting up email, and was able to adapt their approach (single hosted VM, sql storage for user info) to my own (four VMs, LDAP storage for user info). But I’m still struggling with postfix mapping tables for example.

    Setting aside if it’s possible to find this sort of “follow these steps for an exceptionally secure, though maintenance heavy, internet site!” walkthrough, is this even something people want? Maybe I’m being too egocentric, assuming everyone must want what I want. The whole thing is unmaintainable if the reader is just walked through the steps without getting a deep understanding of what and why. Maybe people looking for walkthroughs generally don’t want all of the extra steps.

    Does what I’m proposing make sense? Should it exist? Does it already?


  • Is it ok to post about homelab projects and journeys?

    I stood up a home server in June of 2000, looking for a bit of that “whee I’m a sysop too!” social interaction I missed out on due to growing up poor. Gave out shell accounts and web hosting to anyone who asked. Surprisingly the server lasted until 2015, despite me being a terrible sysadmin with no idea what he was doing.

    I’m trying to bring it back up as something slightly more modern. Recently got OpenLDAP loaded with my old users and mail set up, using seven VMs, each on its own vlan and /30 net: openldap of course, postfix, opendkim, dovecot, roundcube, and two for bind9. I figure I’m certainly going to forget things and get compromised, but hopefully this isolation will minimize how useful a rooted VM is.

    I have this hesitation to ask for too much help, as I feel like it’s the same kind of help someone would use for a small business and would need to pay for. I feel like I should write this up and share it, once I get everything working. Most people doing this for commercial reasons wouldn’t share what they did on company time, I feel like.