Explicit interfaces are a form of the “Explicit is better than implicit,” “There should be only one obvious way to do it,” “Practicality beats purity” and “Now is better than never” principles.
Doesn’t it seem weird that there’s support for aliases in .gitconfig? I guess this is sort of the logical succession from things like the porcelain commands but it really seems like messy scope creep compared to people just making aliases themselves in their shells or whatnot.
The internals of git feel really clean, but the UI is really hard to deal with…
I’m on the tools team for a tech company with a lot of smart engineers. But not everyone who needs access to various hosts is an engineer. Many of them can barely generate an SSH key, asking them to be able to import a signed key into their client is a non-starter. And we have to support weird proprietary SSH clients for which bare SSH keys are a new and exotic thing.
The next best solution, for us anyway, is to have a centralized place where users can log in with their SSO credentials and manage their public keys and then have OpenSSH look up their public key(s) from there.
Signed host keys, however, solve a bunch of problems around automation on the tools side and are completely optional from the user’s perspective. We don’t have them yet but I really want to have them everywhere soon.
invoke is great. I need to finish adding my terminal title setter feature… that’s the main missing element for a really nice automation tool for me is integration into the shell-in-depth. completion script was a pain point probably fixable w/ oh my zsh collab or debian packaging.
Interesting in that he’s entirely wrong but for the right reasoning. The formation of code not as an art but a practice precludes some very helpful observations… Capitalist production and production for art are obviously in contention but programming is treated as just a feature of chipsets and not a culture unto itself.
programming is treated as just a feature of chipsets and not a culture unto itself
This is why so much software is so awful: it’s so beholden to the larger context it is written in. The absolute worst part of this is that programmers don’t see this as a problem. They think they have a seat at the table. Meanwhile, they’re trying to out-thought-leader one another with craft-destroying narratives that focus more on saying the same thing as everyone else.
“Testing’s too hard, just keep shipping!”
“JavaScript on everything surely is the future!”
“Dynamic typing is the only way forward…wait, we all like TypeScript? Static typing is the only way forward!”
At this point, anyone who chimes in about any sort of mechanical sympathy is seen as slightly eccentric, because, like, V8 is magic, bro!
This is why so much software is so awful: it’s so beholden to the larger context it is written in. The absolute worst part of this is that programmers don’t see this as a problem.
It’s not a problem. I actually agree with the rest of your post, kind of, but that’s the difference between “fashion-oriented thinking is stupid” and “requirements are stupid”. Professional programmers building things that meet the needs of their customers is the good part of capitalism; it means they can have the software they want without actually having to learn how. It does mean that you wind up with coders building things with only half an understanding of what it’s for, but that seems like a small price in exchange for the benefits of specialization.
They think they have a seat at the table.
I’m not sure which table you’re talking about. If you mean negotiating their own pay, then yeah, obviously, everyone should have a chance to negotiate something that has so much of an impact on their lives. If you mean something like the set of business requirements, and the way software winds up being used? In most contexts, that is honestly a silly thing to ask for: most programmers work on specialized business software, and unless the coder is additionally a professional in the field, they (and by “they”, I mean “I”) would have little to offer at such a table. If an airline manufacturer, a doctor, a lawyer, a professional cook, a farmer, a teacher says they need such-and-such, and you’re not one yourself, and it’s not literally impossible, trying to correct them is just going to land you with foot-in-mouth disease.
Of course, that’s a gigantic blow to the ego, which is why so many programmers make crappy software and-or hate working in a field like that, but it’s true. Ego is such a gigantic problem in this industry, probably even worse than quality problems.
says they need such-and-such, and you’re not one yourself, and it’s not literally impossible, trying to correct them is just going to land you with foot-in-mouth disease
In my experience this is really only true if the domain expert has a good understanding of computers and requirements.
An experience I’ve had in multiple workplaces in unrelated industries: Experts ask for a report with particular data; when I ask hard questions about how they’ll use it, they reveal they plan to read through the report and manually, painstakingly update the source data based on a simple set of rules. When I point out that I could more easily create an automatic process that fixes the data for them, they are mildly surprised that it would actually be easier to do (since I don’t have to get a fiddly paper layout right).
One of the lessons that we took away from Doom 3 was that script interpreters are bad, from a performance, debugging, development standpoint. It’s kind of that argument “oh but you want a free-form dynamically typed language here so you can do all of your quick, flexible stuff, and people that aren’t really programmers can do this stuff”, but you know one of the big lessons of a big project is you don’t want people that aren’t really programmers programming, you’ll suffer for it!
I assume this is the part you’re alluding to? Basically, that the idea of having “non-programmers” programming is a fundamentally wrong-headed way of looking at everything, not only because you’re drawing a nonsensical and arbitrary line between the elite and the unwashed-masses, but also because having people write code with no respect for good practice is a bad idea.
Capitalist production is about achieving high profit and/or market share. A capitalist actor should go in that direction in every move. Most art, esp good art, isn’t produced for that reason. It’s usually personal, emotional motivations. Art whose goal is capitalist is very different in nature from that which isn’t. This isn’t always a bad thing (see AAA games).
In code, it often is given the nature of what businesses demand of those writing it. They’re not asking for a work of art. They might also be asking for messy requirements, contradictory things, or impossible things. They typically won’t give the artist much time to deeply understand and evaluate things. Resulting process and results are quite different than how an artist operates when driven from internal motivation on their own time.
Nice pile of snark. The only thing about Windows 10 that I really find annoying is the unexpected forced reboots. Everything else in there seems pretty insignificant to me.
Meanwhile, the last time I ran Linux on the desktop - it was something like 5 years ago, but I ran it for at least a year or two - it seemed like an endless pile of quirks. Lots of stuff like audio and video playback in various apps was finicky, package updates would often leave things in weird broken states etc.
Windows has some issues, but it’s never ended up in a weird broken state requiring googling around on a working system and following instructions from obscure web forums or lost data.
It has tumblr in its domain name and displays the tumblr logo in the top right corner, so yeah, I guess…
One thing I always hated about tumblr is that the post date is buried too deep and not displayed in the timeline. Now that it’s dead to the world, I guess I don’t care.
Additionally, the technology landscape had shifted away from the tools we chose in late 2012 (jQuery, Signals, and direct DOM manipulation) and toward a paradigm of composable interfaces and clean application abstractions.
I always find statements like this amusing. Composable interfaces and clean application abstractions are what I always heard was what programs were supposed to be. Did people in 2012 not care about writing good programs?
Are they going to look back in another seven years and say “we shifted away from react, redux, and virtual DOM manipulation toward a paradigm of composable interfaces and clean application abstractions” as the winds shift again? Or will it shift to “we shifted away from X toward performant interfaces and clean application implementations?”
Judging by [other] tech companies’ blog posts, there always seems to be enough time to move to $CURRENT_JS_ZEITGEIST_FRAMEWORK versus actually writing clean code to make your choice of libraries/frameworks irrelevant in the long run.
To their credit, it looks like Slack did the less sexy thing here while also upgrading to the current hotness.
FWIW, React is 5 years old now. Where I work, we’ve been using it for all of that time and don’t have any plans to switch. Sure, maybe we’d use Preact to save some bytes on the wire sometimes, but it’s still fundamentally the same.
I’m not saying there will never be a thing that replaces React or that there aren’t people out there using some new hotness. My point is more that React is fundamentally easier to reason about that jQuery DOM manipulation, and until someone offers a real step change, I’d expect a lot of folks to stick with it.
Related to this, I’m always surprised when a game company is able to switch rendering libraries (OpenGL -> Vulkan) in a few man-weeks but then I remember they usually abstract over it in their framework/engine.
A more accurate way of phrasing it would be “Additionally, as the original team got expanded and replaced, the Slack team had shifted away from the rapid prototyping tools we used in late 2012 and toward a paradigm of composable interfaces and clean application abstractions.” Apparently, they think their company is the whole universe.
It was a lot more work and discipline to develop and maintain a nicely organized codebase with their old toolsthan with their new tools, partly because composability and clean abstractions weren’t explicit design goals for those tools. React/redux really was a major improvement over previous front-end arrangements.
We believe that the Microsoft Store package is perfect for users starting out with Python, and given our experience with and participation in the Python community we are pleased to endorse it as the default choice.
Its not. The existing https://python.org page suits this purpose just fine.
This whole article is misleading, and reads like an ad for the Microsoft Store. Python is not in Windows 10 anymore than VLC is. This hearkens back to the crapware days, where you have all these shortcuts preinstalled to the Start Menu. Not to actual programs, but links to a purchase or download page.
Just preinstall Python properly. Windows has included a C Sharp compiler for at least 10 years, this isnt really that different. Dont need to worry about Python becoming out of date, because that same worry can be felt with any preinstalled software like .NET Framework.
this comment reads like you’ve either not searched “How do I install python on windows” or you are experienced enough to already know the correct answer and have forgotten the tangled web of out of date tutorials that led you there. This isn’t aimed at you, it’s aimed at beginners. Now a “How to Code in python” tutorial can say:
open cmd.exe
type python
the store will open
click install
you’re done
I would have been very happy for that when I was a kid.
As for preinstalling, that just leads to ancient versions sticking around for years. there’s a good reason why mac and rhel are both deprecating the system python
I have to restrain myself from commenting on the usual crop of Microsoft shaming comments whenever anyone posts anything they had a part in.
I’ve been hearing Python educators for years cite the difficulty of getting Python properly installed and running on Windows as a severe barrier to entry for non technical people who want to learn to program.
As to why not bundling it with Windows by default, it pays to remember that Windows has a MUCH longer tail than most technical folks even think about in the enterprise and commercial worlds where there are still legions of Windows XP machines floating around and even connected to the internet.
I’ve been hearing Python educators for years cite the difficulty of getting Python properly installed and running on Windows as a severe barrier to entry for non technical people who want to learn to program.
you speak the truth. Getting a dev environment set up is tuned for experienced devs. Not surprising, but it is frustrating when you want to help someone.
Related: I remember something like this being exceptionally helpful in Debian or Ubuntu at one stage: the default config was set up so that, any time you were at an interactive tty and you typed a command that didn’t exist but was available from the repos, it’d run a little thing that suggested to apt-get the package on stderr and quit with an error.
So I could just blindly type “python” or “gcc” or “irb” or whatever, and it’d either run it right away or trivially tell me where to get it. This interacted really nicely with the fact that almost every programming language under the sun is in the repos for Debian. ❤
I believe it was originally developed for/in Ubuntu and got backported to Debian at some point. But I’m unable to confirm that. (Ever try searching the web for ‘command-not-found’?)
I always uninstall it on sight; I prefer apt-cache search -x /<name-of-program>$.
hold on, don’t you just go to the official python website, click “downloads”, download the windows installer, then run the installer and click next a bunch of time? Yes it’s more involved that “apt install python3” but the steps are simple and intuitive enough.
OK, I’ll bite. What do you do once you get to the download page? You’re a beginner. Which one should you get? Why are there two significantly different versions of Python given equal weight on that page? Maybe the older one is more stable and safer so you should get that?
OK so maybe you heard you need to get Python 3, so you click through to the latest stable release page (for Windows, btw) … except on this page you see a bunch of files: Gzipped source tarball … macOS 64-bit installer … a bunch of Windows installers…. So which one to get?
Now, let’s compare: you’re reading a Python tutorial, it says to type python and press Enter in the command line to open the REPL … you do that, and Windows guides you through installing it, with the latest and greatest package straight from the Windows Store. Call me crazy, but this is a big win for people getting started with Python.
This is the death-knell of usefulness but ok.
You should elaborate on your feeling here!
This doesn’t seem pythonic? idk why you’d appeal to the zen of python if you’re already skipping it.
Explicit interfaces are a form of the “Explicit is better than implicit,” “There should be only one obvious way to do it,” “Practicality beats purity” and “Now is better than never” principles.
… please google “look before you leap” it’s explicitly rejected by our community.
“Explicitly”
“Rejected”
“Our”
“Community”
Cite?
Doesn’t it seem weird that there’s support for aliases in
.gitconfig
? I guess this is sort of the logical succession from things like the porcelain commands but it really seems like messy scope creep compared to people just making aliases themselves in their shells or whatnot.The internals of git feel really clean, but the UI is really hard to deal with…
git already is two layered CLI UI-wise. see: porcelain
I love the idea of well made bridge code…
If there are any oversight abilities that rms has that require ethical judgement they should be removed. I am unfamiliar with his exact roles.
I’m on the tools team for a tech company with a lot of smart engineers. But not everyone who needs access to various hosts is an engineer. Many of them can barely generate an SSH key, asking them to be able to import a signed key into their client is a non-starter. And we have to support weird proprietary SSH clients for which bare SSH keys are a new and exotic thing.
The next best solution, for us anyway, is to have a centralized place where users can log in with their SSO credentials and manage their public keys and then have OpenSSH look up their public key(s) from there.
Signed host keys, however, solve a bunch of problems around automation on the tools side and are completely optional from the user’s perspective. We don’t have them yet but I really want to have them everywhere soon.
oof why can’t devs use ssh-keygen?
I’m confused. Can someone explain how this is related to Donald Trump?
His campaign was a featured client of the service for several years on their front page.
why doesn’t this help with batch abstraction?
Do you mean pagination or batch insertion or both?
invoke is great. I need to finish adding my terminal title setter feature… that’s the main missing element for a really nice automation tool for me is integration into the shell-in-depth. completion script was a pain point probably fixable w/ oh my zsh collab or debian packaging.
Interesting in that he’s entirely wrong but for the right reasoning. The formation of code not as an art but a practice precludes some very helpful observations… Capitalist production and production for art are obviously in contention but programming is treated as just a feature of chipsets and not a culture unto itself.
what?
This is why so much software is so awful: it’s so beholden to the larger context it is written in. The absolute worst part of this is that programmers don’t see this as a problem. They think they have a seat at the table. Meanwhile, they’re trying to out-thought-leader one another with craft-destroying narratives that focus more on saying the same thing as everyone else.
At this point, anyone who chimes in about any sort of mechanical sympathy is seen as slightly eccentric, because, like, V8 is magic, bro!
It’s not a problem. I actually agree with the rest of your post, kind of, but that’s the difference between “fashion-oriented thinking is stupid” and “requirements are stupid”. Professional programmers building things that meet the needs of their customers is the good part of capitalism; it means they can have the software they want without actually having to learn how. It does mean that you wind up with coders building things with only half an understanding of what it’s for, but that seems like a small price in exchange for the benefits of specialization.
I’m not sure which table you’re talking about. If you mean negotiating their own pay, then yeah, obviously, everyone should have a chance to negotiate something that has so much of an impact on their lives. If you mean something like the set of business requirements, and the way software winds up being used? In most contexts, that is honestly a silly thing to ask for: most programmers work on specialized business software, and unless the coder is additionally a professional in the field, they (and by “they”, I mean “I”) would have little to offer at such a table. If an airline manufacturer, a doctor, a lawyer, a professional cook, a farmer, a teacher says they need such-and-such, and you’re not one yourself, and it’s not literally impossible, trying to correct them is just going to land you with foot-in-mouth disease.
Of course, that’s a gigantic blow to the ego, which is why so many programmers make crappy software and-or hate working in a field like that, but it’s true. Ego is such a gigantic problem in this industry, probably even worse than quality problems.
In my experience this is really only true if the domain expert has a good understanding of computers and requirements.
An experience I’ve had in multiple workplaces in unrelated industries: Experts ask for a report with particular data; when I ask hard questions about how they’ll use it, they reveal they plan to read through the report and manually, painstakingly update the source data based on a simple set of rules. When I point out that I could more easily create an automatic process that fixes the data for them, they are mildly surprised that it would actually be easier to do (since I don’t have to get a fiddly paper layout right).
I assume this is the part you’re alluding to? Basically, that the idea of having “non-programmers” programming is a fundamentally wrong-headed way of looking at everything, not only because you’re drawing a nonsensical and arbitrary line between the elite and the unwashed-masses, but also because having people write code with no respect for good practice is a bad idea.
Obvious?… In what way are they in contention?
Capitalist production is about achieving high profit and/or market share. A capitalist actor should go in that direction in every move. Most art, esp good art, isn’t produced for that reason. It’s usually personal, emotional motivations. Art whose goal is capitalist is very different in nature from that which isn’t. This isn’t always a bad thing (see AAA games).
In code, it often is given the nature of what businesses demand of those writing it. They’re not asking for a work of art. They might also be asking for messy requirements, contradictory things, or impossible things. They typically won’t give the artist much time to deeply understand and evaluate things. Resulting process and results are quite different than how an artist operates when driven from internal motivation on their own time.
Nice pile of snark. The only thing about Windows 10 that I really find annoying is the unexpected forced reboots. Everything else in there seems pretty insignificant to me.
Meanwhile, the last time I ran Linux on the desktop - it was something like 5 years ago, but I ran it for at least a year or two - it seemed like an endless pile of quirks. Lots of stuff like audio and video playback in various apps was finicky, package updates would often leave things in weird broken states etc.
Windows has some issues, but it’s never ended up in a weird broken state requiring googling around on a working system and following instructions from obscure web forums or lost data.
Yeah there’s a severe lack of empathy for people who’ve done support on windows and how much better win 10 is in every way on shit like that.
this is bad advice.
Why is it bad advice?
tumblr? why? Let the dead bury the dead.
This specific tumblr is old and definitely from the times where tumblr was popular.
Is it bad that I thought it was Medium until I read these comments?
It has tumblr in its domain name and displays the tumblr logo in the top right corner, so yeah, I guess…
One thing I always hated about tumblr is that the post date is buried too deep and not displayed in the timeline. Now that it’s dead to the world, I guess I don’t care.
I always find statements like this amusing. Composable interfaces and clean application abstractions are what I always heard was what programs were supposed to be. Did people in 2012 not care about writing good programs?
Are they going to look back in another seven years and say “we shifted away from react, redux, and virtual DOM manipulation toward a paradigm of composable interfaces and clean application abstractions” as the winds shift again? Or will it shift to “we shifted away from X toward performant interfaces and clean application implementations?”
Just silly.
Judging by [other] tech companies’ blog posts, there always seems to be enough time to move to $CURRENT_JS_ZEITGEIST_FRAMEWORK versus actually writing clean code to make your choice of libraries/frameworks irrelevant in the long run.
To their credit, it looks like Slack did the less sexy thing here while also upgrading to the current hotness.
FWIW, React is 5 years old now. Where I work, we’ve been using it for all of that time and don’t have any plans to switch. Sure, maybe we’d use Preact to save some bytes on the wire sometimes, but it’s still fundamentally the same.
I’m not saying there will never be a thing that replaces React or that there aren’t people out there using some new hotness. My point is more that React is fundamentally easier to reason about that jQuery DOM manipulation, and until someone offers a real step change, I’d expect a lot of folks to stick with it.
Related to this, I’m always surprised when a game company is able to switch rendering libraries (OpenGL -> Vulkan) in a few man-weeks but then I remember they usually abstract over it in their framework/engine.
No they did not and they don’t now.
A more accurate way of phrasing it would be “Additionally, as the original team got expanded and replaced, the Slack team had shifted away from the rapid prototyping tools we used in late 2012 and toward a paradigm of composable interfaces and clean application abstractions.” Apparently, they think their company is the whole universe.
It was a lot more work and discipline to develop and maintain a nicely organized codebase with their old toolsthan with their new tools, partly because composability and clean abstractions weren’t explicit design goals for those tools. React/redux really was a major improvement over previous front-end arrangements.
You can’t even get the certs over tls (misconfigured… to use their own CA)
That’s super cool and probably a little more sensible than keeping the bezel itself.
5 months to py 2 EOL. https://python3statement.org/ https://pythonclock.org/
Most code is not open source.
Its not. The existing https://python.org page suits this purpose just fine.
This whole article is misleading, and reads like an ad for the Microsoft Store. Python is not in Windows 10 anymore than VLC is. This hearkens back to the crapware days, where you have all these shortcuts preinstalled to the Start Menu. Not to actual programs, but links to a purchase or download page.
Just preinstall Python properly. Windows has included a C Sharp compiler for at least 10 years, this isnt really that different. Dont need to worry about Python becoming out of date, because that same worry can be felt with any preinstalled software like .NET Framework.
Shame on you, Microsoft.
this comment reads like you’ve either not searched “How do I install python on windows” or you are experienced enough to already know the correct answer and have forgotten the tangled web of out of date tutorials that led you there. This isn’t aimed at you, it’s aimed at beginners. Now a “How to Code in python” tutorial can say:
I would have been very happy for that when I was a kid.
As for preinstalling, that just leads to ancient versions sticking around for years. there’s a good reason why mac and rhel are both deprecating the system python
Thank you.
I have to restrain myself from commenting on the usual crop of Microsoft shaming comments whenever anyone posts anything they had a part in.
I’ve been hearing Python educators for years cite the difficulty of getting Python properly installed and running on Windows as a severe barrier to entry for non technical people who want to learn to program.
As to why not bundling it with Windows by default, it pays to remember that Windows has a MUCH longer tail than most technical folks even think about in the enterprise and commercial worlds where there are still legions of Windows XP machines floating around and even connected to the internet.
you speak the truth. Getting a dev environment set up is tuned for experienced devs. Not surprising, but it is frustrating when you want to help someone.
Related: I remember something like this being exceptionally helpful in Debian or Ubuntu at one stage: the default config was set up so that, any time you were at an interactive tty and you typed a command that didn’t exist but was available from the repos, it’d run a little thing that suggested to
apt-get
the package on stderr and quit with an error.So I could just blindly type “python” or “gcc” or “irb” or whatever, and it’d either run it right away or trivially tell me where to get it. This interacted really nicely with the fact that almost every programming language under the sun is in the repos for Debian. ❤
It’s still there in the version of Ubuntu running on my VPS.
Sweet. I wasn’t really expecting they’d have removed it, but it’s been a few years since I checked. (Switched to Fedora, then a Mac.)
yeah that’s their cnf command-not-found package. highly underrated.
Here is the homepage/source code for that little utility for Ubuntu. https://launchpad.net/command-not-found
I believe it was originally developed for/in Ubuntu and got backported to Debian at some point. But I’m unable to confirm that. (Ever try searching the web for ‘command-not-found’?)
I always uninstall it on sight; I prefer
apt-cache search -x /<name-of-program>$
.Yeah, modern search engines are the fucking worst.
hold on, don’t you just go to the official python website, click “downloads”, download the windows installer, then run the installer and click next a bunch of time? Yes it’s more involved that “apt install python3” but the steps are simple and intuitive enough.
why would you search for that when you can simply download and install it?
https://python.org/downloads/windows
Because you might not know where to go to download it.
It’s literally linked from the home page…
OK, I’ll bite. What do you do once you get to the download page? You’re a beginner. Which one should you get? Why are there two significantly different versions of Python given equal weight on that page? Maybe the older one is more stable and safer so you should get that?
OK so maybe you heard you need to get Python 3, so you click through to the latest stable release page (for Windows, btw) … except on this page you see a bunch of files: Gzipped source tarball … macOS 64-bit installer … a bunch of Windows installers…. So which one to get?
Now, let’s compare: you’re reading a Python tutorial, it says to type
python
and press Enter in the command line to open the REPL … you do that, and Windows guides you through installing it, with the latest and greatest package straight from the Windows Store. Call me crazy, but this is a big win for people getting started with Python.Can’t agree more !