10 ms·
The Age of Software Artisans
- kurtispatrick9 2y ago[dead]
- foobarbecue 2y agoI would like to thank this website for reminding me to drink water.
- jairojair 2y agoYou're welcome!
- jagged-chisel 2y agoI have attempted, in vain, to bring this kind of thinking into the companies and teams that I have worked with. They don’t want it. And in interviews, no one wants a Software Artisan. The cynic in me says that it’s because people want the job security of the typical bullshit position and don’t want anyone upsetting that.
- Swizec 2y agoThe problem with hiring artisans is that most companies need a Honda Civic not an Enzo Ferrari. If they hire an artisan it’s just going to be frustrating for everyone involved. The business will pay more than the value received and wonder wtf and the artisan will be bored out of their mind looking for fun projects to do.
- zrobotics 2y agoOne thing where that analogy breaks down is that a Honda civic is more highly engineered and a more refined product than a Ferrari. The Ferrari makes all sorts of sacrifices for performance and styling, sacrifices such as manufacturability, cost, and reliability. We tend to forget or underestimate the sheer work that Honda engineers spend making a car that is fuel efficient, crashworthy, long-term reliable, and affordable. A civic certainly isn't as sexy as a Ferrari, but stepping back and thinking about the sheer amount of human effort that went into making such a good machine at such a reasonable (compared to a Ferrari) price is astounding. I would argue that software would be improved if it was approached in the same engineering fashion as a civic or corolla, what we have now is the engineering effort of a Ferrari with all the warts that entails but released to the mass-market. Ferrari can't invest the engineering effort to release as polished of a product as Honda or Toyota, but that's fine since it's a niche vehicle and the buyers accept the tradeoffs since nobody uses one as a daily commuter anyway. But a small team of software developers can release an under-designed product to market and that software is available nearly instantly worldwide with little limits. Making 1M physical items is far more difficult than having 1M users of a program.
- ahoka 2y agoThis is a false dichotomy.
- slowhadoken 2y agoMcDonalds isn’t looking for a chef.
- invalidlogin 2y agoChef?
- slowhadoken 2y agoI guess both work but chef makes more sense.
- jagged-chisel 2y agoActually, you make a great point: these companies attempt to convince employees that they’re not McDonald’s, when that’s exactly what they are. And I shouldn’t be falling for it myself.
- slowhadoken 2y agoI’ve avoided working directly for the tech industry. I was contacted by Google and Amazon without ever having reaching out to them but that was right before the mass layoffs. Beside high level proprietary projects I’d rather work for myself doing whatever I want.
- tkiolp4 2y agoCompanies don’t need software artisans. They need replaceable people who can do the job until they run out of investor’s money.
- WJW 2y agoNot all companies float on PE money.
- ChrisMarshallNY 2y ago> replaceable people Until that mindset changes, the disasters will keep coming. Achieving true "replaceable people" is a major task. I have seen it done (properly), and suspect most folks on this board would be aghast at the compromises that need to be made. I didn't like it. I managed a team of extremely experienced C++ engineers that were really hard to replace, so I did my best to keep them on board. As to "artisan"? I don't really care what I'm called. I like coding, and I like writing really good UX.
- luckylion 2y agoWhy do you think the mindset that everyone should be replaceable is wrong / leads to disasters? I agree completely that it's not trivial and comes with its own trade-offs and side-effects, but when you achieve a good chunk of it, it brings a lot of flexibility, stability and peace of mind for everyone involved. You can put more people on some task because it's not something only one person can do. You won't nose-dive when somebody leaves. And developers know that they can go on vacation and don't need to worry about what's going to happen to the rest of the team (I know that not everyone thinks like that, but in my experience enough people do).
- ChrisMarshallNY 2y agoIt's really a long topic, but the basic TL;DR, is that people are not interchangeable, unless you reduce the task to the lowest common denominator, and that means that we squander the talent of the most skilled, in order to cater to the least skilled. Basically, tell good coders to write bad code, because bad coders need to understand it. We get "meh" results. The issue is that everyone seems to be fine with "meh." That's a shame. The alternative is hire only good coders, and do what it takes to keep them around, and that's a really unpopular stance.
- rqtwteye 2y agoArtisans don't scale.
- zelphirkalt 2y agoWhat does scale?
- danielbln 2y agoPragmatism.
- lifeisstillgood 2y agoAgreed (in fact my profile claims I do artisanal software :-) But I go further - software is a form of literacy, and everyone should learn to code, just as at some point we thought “hey laws are written down, novels are great, policy manuals and international letters help, let’s teach the peasents to read” and all of a sudden we have working class people going to university and discovering things like Relativity and Covid vaccines. Software is literacy and we will all benefit when we can run / examine our society through it. Book to follow
- avaldez_ 2y ago> But I go further - software is a form of literacy, and everyone should learn to code, Why though? I've read a lot of people saying _everyone should know how to code_ but why? I don't see the same trend for example with physics, maths or music, which are arguably a form of literacy too. As cool as it may seem on paper, I can imagine everyone being able to write papers on topological quantum field theory, studying homotopy type theory as a hobby and shipping react to-do apps while playing Beethoven's Hammerklavier sonata.
- lifeisstillgood 2y agoBut why not? Not so long ago we did not teach the poor / women / slaves to read because similar reasons . One day we hope there will be sufficient wealth created in society, and distributed fairly so that toil is eliminated and all humans can choose to work - at which point what the hell is everyone going to do other than sit around and play guitar
- vijucat 2y agoArtisan is not a bad metaphor. Take furniture. There's a place for IKEA, and there's a place for expensive, hand-crafted Scandinavian furniture. https://www.scandinaviastandard.com/this-is-why-that-sofa-is-so-expensive/ https://www.scandinaviastandard.com/this-is-why-that-sofa-is...
- jairojair 2y agoyou get it! I think the exactly same way.
- deleted 2y ago[deleted]
- herval 2y agowhere in the analogy does social software fit?
- andai 2y agoAre you referring to that article about software that serves a small local community? I can't remember the name of the author but there was an interesting article about this, I think from some college or university in New York, talking about some examples of software that was set up at specific locations on the campus for specific purposes, and explaining how they wouldn't have worked as an online global thing. Edit: Here it is! https://web.archive.org/web/20040411012949/http://www.shirky.com/writings/situated_software.html https://web.archive.org/web/20040411012949/http://www.shirky...
- deleted 2y ago[deleted]
- actionfromafar 2y agoPurdue Pharma.
- gjsman-1000 2y agoLaravel has been using it for, what, a decade now? https://laravel.com https://laravel.com
- interstice 2y agoMy 10,000 hours are well behind me and I build web apps a bit like this. Previous jobs are like a shed full of parts that will get 60% of the way there, and the rest is making a couple of custom parts and a lot of fettling. Sometimes I build a table from scratch just to remind myself I can.
- lttlrck 2y agoAt what layer of abstraction are you no longer an artisan? Or doesn't it matter? It's a nice "label" but it's a bit murky what it means the farther away from machine code (the raw materials) you get. Are you an artisan if you use an IDE? I do enjoy the sentiment however.
- jairojair 2y agoGood take!
- skydhash 2y agoI think it all depends on amount of care you put in the human aspect of the software. Does it solve a specific need for a person you can name, or the stories are all about imaginary characters and generic persona. Crafting requires empathy and the realization that this will be used by and for people, and you want to make it easy for them (even if people means you as one person). And the promise to make it better the next time you're working on it or something similar.
- ok_dad 2y agoIs woodworking valid with power tools or is the tool doing the art? What about a CNC in the workshop? I think it’s all valid because the art is in the planning and resulting furniture. Same thing for coding. Even an LLM needs human creative input.
- moffkalast 2y agoIt depends purely on the level of snobbery you want to strive for.
- slowhadoken 2y agoIt’s not snobbery, it’s knowledge and craft. You depend on the transfer of that knowledge from one generation to the next.
- 2y ago
- boricj 2y agoArtisans can make objects out of raw material, but they can also take apart objects to reclaim raw material. Software engineering tends to only ever do the former, because traditional toolchains are a one-way street from source code to assembly code to object files to programs. That article rings very differently to me because of the tooling I've developed. With the ability to break apart programs into object files and reusing them to make new programs, I can do the latter. In a sense, using both pristine source code and second-hand binary code to make programs is as artisanal as software development can get.
- bschmidt1 2y ago> break apart programs into object files and reusing them So, libraries?
- boricj 2y agoNo, it's actually ripping out bits from an executable and turning them into relocatable object files. The technical term I've come up with for this is delinking, although the decompilation community calls it binary splitting. Putting it another way, you can make libraries out of a program with this technique.
- fallingsquirrel 2y agoIs that meaningfully different from reverse engineering? You can't use individual functions without knowing the data structures they operate on, and info about data structures is usually not present in the final binary*. * (excluding languages that compile to an IL like C# of course, but decompiling C# is trivial)
- boricj 2y ago> You can't use individual functions without knowing the data structures they operate on, and info about data structures is usually not present in the final binary. It turns out you can. Linkers do not care about types or data structures, all they do is lay out sections (a fancy name for arrays of bytes) inside a virtual address space and fix up relocations. I've written case studies on my blog where I've successfully carved out whole pieces out of a program and reuse them without reverse-engineering them. I've even made a native port of a ~100 KiB Linux a.out x86 proprietary program from 1995 to Windows and all I had to do was write 50 lines of C to thunk between the glibc 1.xx-flavored object file and the MinGW runtime. One user of my tooling managed to delink a 7 MiB executable for a 2009 commercial Windows video game in six weeks (including the time required to fix all the bugs in my alpha-quality COFF exporter and x86 analyzer), leaving out the C standard library. They then relinked it at a different base address and the new executable works so well it's functionally indistinguishable from the original one. They didn't reverse-engineer the thousands of functions or the hundreds of kilobytes of data inside that program to do so. This is complete heresy according to conventional computer sciences, which is why you can't apply it here. I'd be happy to talk at length about it, but without literature on the topic I'm forced to explain this from basic principles every time and Hacker News isn't the place to write a whole thesis.
- bayofpigs 2y ago[dead]
- jauntywundrkind 2y agoI sure hope we can get to a happier software harmony, of enjoying code and systems. One of the recurring trends thats cropped up is so called barefoot developers, folks just cobbling together some kind of task not for big industrial software with millions or even dozens of users, but just because it makes their lives or a small group of people's lives better. Maggie Appleton recently followed up with a post saying that these are the folks ML/LLMs might best be able to help. To get them their stuff. https://news.ycombinator.com/item?id=40633029 https://news.ycombinator.com/item?id=40633029 https://maggieappleton.com/home-cooked-software https://maggieappleton.com/home-cooked-software But I also have this feeling, that almost all the webdev we do is artisanal handcraft as is. We hand author endpoint after endpoint for our objects even though there's this high degree of similarity across endpoints; authorize/validate the request, do the thing in the db, return it to the user. Part of me is sick as shit of just how artisanal software is; it stinks like rot that we keep cranking out more piles of code for each entity & as we intricate/complicate/embellish each entity/resource. We so rarely have broader high level systems where we've escaped from hand crafting web server middle tier glorified-translators of a very basic 3-tirr client-server-db architecture. I just want companies to pay me to tell them how much less they could do, if they let me PoC their system in something ordered & higher order, such as Hasura. Like CORBA, the UML world also has great scorn as unmaintainable, but again it's like, those folks felt on to something amazing & mighty & we have immense unsurvivor anti-bias, we are pat & confident that this tower of babel built too high & all future towers too will fall & that the effort is folly. But man, the chaos & lines of code we have been creating as an industry is just so unnecessary & so out of control.
- eastbound 2y agoI agree obviously. But each time I look at my code, it’s subtly different from one entity to the next, each one with its intricacies. Yes I’ve coded permission systems a hundred times. But here it’s wired to the app we integrate with, and here it’s wired with groups. Here it’s by document, here it’s by space. A thousand hoops, never the same exact logic. Like a thousand humans, never the same identical one. We humans can see the same parts and easily designate “a human”, but this pattern recognition ignores a lot of important details. And those details are what makes IT accurate and reproducible, which has been the trait we’ve liked about it. Since 1970, have we misled ourselves in believing we were repeating the same patterns, while in fact, every program really was different?
- slowhadoken 2y agoThat’s what I’ve been working towards, even despite recent trends.
- jumploops 2y agoEveryone is saying that LLMs will kill programmers. The author here has the right idea, and the correct historical context to back it up. Generative AI will 10x (at least) the number of people that program computers, but that programming will look different than it does today. Gone are the semicolons and curly braces we’re so used to, just like BEQ and JMP before them. Truly gone? No, the next Rollercoaster Tycoon has yet to be built :)
- jairojair 2y agoGood point! A car built 10 years ago is very different from a car built today, but it's still a car, right? Some people like old cars, others prefer Teslas, and that's perfectly fine. The world will change, and that's not a bad thing.
- mlinhares 2y agoI might just be at a very different environment but the usual basic software discussions (class design, database modeling, architecture) are mostly irrelevant as there’s always some premade thing I can use to do the job and most of my time is either making sure requirements are clear of that the teams are aligned on their deliveries. I think 10 years ago I cared a lot about this whole software artisan thing, nowadays I’m happy when stuff gets to prod on time and doesn’t cause large scale incidents. I wish I could have these problems and spend time discussing what the best architecture is or what class design is the best
- boredtofears 2y agoIve always thought that software is a lot more of a creative expression than we give it credit for. As much as we try to think of it as an engineering discipline, code exists primarily to communicate to other humans before machine. There’s a lot of humanity in writing and reading code and therefore a lot of ways to observe art in it.
- cglan 2y agoIt definitely fulfills the same itch as painting or photography for me weirdly. But that goes away the more “corporate” and tedious it is. But luckily my job gives me a lot of leeway. It can be and largely is a creative field I’d say. There’s room for traditional and formal engineering in it, but I don’t think that’s the majority
- mustache_kimono 2y agoI'm going to be a little negative, so please bare with me. The world needs artisanal programmers like it needs artisanal attorneys. See: https://www.mcsweeneys.net/articles/i-am-an-artisanal-attorney https://www.mcsweeneys.net/articles/i-am-an-artisanal-attorn... How is an artisanal attorney different from any other attorney? Like other artisans, I pay close attention to my ingredients and process; I am intimately involved in all stages of creation. Other attorneys print their documents on paper they buy in mass-produced boxes, tens of thousands of sheets at a time, using ink that mechanically jets onto the page. I make my own paper by hand,... This article is so similar to this satire I couldn't believe so many commenters were taking it so seriously. If you are new to programming, this is a mostly ridiculous notion which plays to your vanity. While admiring your reflection, be careful not to fall, face first, in the pool. Now, how do I know? Because this isn't the first time I've encountered this idea. Jonathan Blow, in his own way, has been making the same silly argument for years. As I've said before -- his frame of "programmers were real men once" makes each video/rant seem both one note and self aggrandizing. For him, it seems to be a marketing exercise, but also an intellectual muddle, which with one breath tells you to romantically forget this is an engineering discipline, with economics and tradeoffs and constraints and compromises, and with the next, which actually helpfully(!), tells you about physical constraints of the machine. See: https://en.wikipedia.org/wiki/Data-oriented_design https://en.wikipedia.org/wiki/Data-oriented_design The problem as I see it is that Blow and Muratori are half right about most things. They're almost always right about the particulars of programming (strict OOP patterns and "Clean Code" aren't great for performance). It's their frame that "civilization is in decline" (or "programmers were real men once" as here) that is wrong/catastrophic. Civilization simply has different priorities than game engine priorities (performance is a constraint, but not the primary constraint of most software).
- FrustratedMonky 2y agoBut aren't there artisanal attorney's? There are some in specialized areas, perhaps even inside a specialized area there are a few firms that are known to be at the top, and find creative solutions to problems. They aren't all Law-and-Order. Same with accountants. Sure, it's all number crunching. But then why do some become the top business leaders, the CEO's. Maybe because in that field, being a top artisan and able to play with financial instruments, allows you to build a business. (and I'm playing devils advocate for the small percentage of accountants/business that are actually trying to build something, not just playing with money to bilk people)
- at_a_remove 2y ago"Artisan" is covering a great deal of ground. At a previous job, probably fifteen years ago, we were replacing one bit of niche software (the company was gone, it was unsupported, and it had some very antiquated methods of ingestion, like faxes) with another, mostly similar bit of software. Continuity was desired. Different philosophies went into structuring the two databases, so it was like lifting a vast set of webs made by social spiders from one tree and placing it on another, just for the data import. I interviewed various people who were in different roles as to how they they used the old system. I checked the databases to see what they did not tell me about how they actually used the system. I scoured over the incoming data feed sources and made robust ingestion processes, validating and correcting and logging. Knowing the vagaries of software vendors, I wrote bits to detect changes made by vendors to the database structure, or at least the portions I cared about, and whine when those occurred. I grokked how the several different roles people had in interactions with the system led to differing needs and desires, incorporating as much of how things "used to work." The eventual juggernaut which resulted was something of a force of nature, a compilation of my best thoughts on my best days, outperforming me. It would tell you if a new type of data appeared which had not been announced, whom to ask about this data, and where to put it. It functioned for a decade of my oversight, occasionally murmuring that it wanted this or that, but without changes to the code. That was the artisinal bit to me, that it was carved to fit some very exacting spaces, such that you hardly knew it was present. Yes, it took extra time. Yeah, it was just me. But the fit was tight and the finish was smooth. (Naturally, some bright spark got a touch of the New Broom Syndrome and blew it and all of the documentation away after I left, I am told that there are continual complaints about the system now. Sadly, with even minimal prompting, the various tiny details arose from memory, prompted by the SMS messages.)
- jairojair 2y agoHi folks! I really didn't think many people would see this post, thank you for the comments and discussion. The central idea is that technology is cyclical, new tools will emerge and the way we work will change. However, in my view, using tools doesn't make you less or more of a craftsman; creating something different from mass production does. In a world where everything is very similar, websites are copies of each other, every new startup has the same color palette, creating something with small flaws, but different, is a distinguishing factor. Perfection lies in imperfection. Keep coding!