12 ms·
40+ years of experience here, and I'll tell you the #1 thing I've learned: * Software is a social service. Its for other humans. Incredibly, it doesn't m
by boffinAudio 5y ago
40+ years of experience here, and I'll tell you the #1 thing I've learned:
* Software is a social service. Its for other humans.
Incredibly, it doesn't matter how educated the developer, they still seem to have to learn this lesson themselves, over and over, until it sinks in...
- nonima 5y agoSoftware is whatever you want it to be. I can write software that is not for other humans. That's the most fun part of software engineering to me, when you don't care about the users and just do it just for the fun of doing it.
- matheusmoreira 5y ago> when you don't care about the users and just do it just for the fun of doing it Yes!! That makes me so happy.
- mattcwilson 5y agoAnd, as the article says, your advice and the GP’s are contextual. If you’re interested in creating software that makes people happy, solves their problems, gets cherished and recommended - then work hard to not lose sight of that goal in the thick of crafting a massive code edifice. If you’re interested in pushing the limits of your own creativity, and building a technical structure capable of handling domain complexity with ruthless efficiency - then sure, don’t worry too much about how it looks, how it reads, or how others respond to it. If you’re lucky, you might get to do both in the same body of code. But not likely.
- boffinAudio 5y agoEven if YOU are the only user, you're still writing software for a human. Hopefully.
- lucumo 5y agoWell, you could create software as art. Basically to create it for the fun of creating it, not to use it. But yeah, the end result is useless then, and can be thrown out.
- lazide 5y agoOr, like some art, of variable degrees of folks caring about it based on other interesting properties - and made for some purpose other than maintainability. Demoscene, obfuscated coding contests, etc. seem to fall under that category. Uselessness in the eye of the beholder or something like that.
- lucumo 5y agoBut in those cases you are creating for other people. The point was made about software that didn't have any use for any people. In those cases, only the creation itself has a use, not the end result. By definition.
- Jensson 5y agoWith that argument you could say that everything humans ever did was for humans. So either it is a platitude or it is wrong.
- boffinAudio 5y agoYou could say that, but my cat thinks you'd be wrong. However, I'm yet to see my cat boot up the computer.
- Jensson 5y agoUltimately pets are for humans, whatever you do for your cat you do for humans. The same logic works there.
- 5y ago
- koonsolo 5y agoSo you write code in machine language? Or are you writing in a language that tries to be readable by English speaking humans?
- schwartzworld 5y agoOr they write it for themself and not _other_ humans.
- j7ake 5y agoYour future self can be seen as “other” humans given a long enough time frame. Anybody who has looked at their own code done more than 5 years ago can surely attest.
- SketchySeaBeast 5y ago5 years is optimistic. A lunch break can be enough.
- goto11 5y agoAlmost any advice is useless if you write code purely for your own enjoyment. This is why the context is so important. If you enjoy writing convoluted unmaintainable useless code then who is to stop you? Just understand most advice does not apply to your context. Most software development advice tacitly assume you want to write code which works and is long-term maintainable (potentially by someone other than yourself) and which fulfills some purpose beyond just the fun of writing the code.
- matheusmoreira 5y ago> If you enjoy writing convoluted unmaintainable useless code then who is to stop you? Does anyone actually do this? I think it's the opposite. I've spent truly absurd amounts of time thinking about how to do things properly. I read books, read other people's code, read programming language implementations, I just read and learn as much as I possibly can before I even start doing anything. I want my code to be right. I want it to represent the truth of how the world works. In a professional context where people actually have deadlines, working code is usually enough to satisfy them. How complex and maintainable it is tends to be a lesser concern, to be addressed at a later time or never.
- warkdarrior 5y ago> > If you enjoy writing convoluted unmaintainable useless code then who is to stop you? > Does anyone actually do this? I think it's the opposite. Code style, structure, and design are more of an art than a science, so different people will have wildly different opinions (extreme examples notwithstanding).
- goto11 5y agoI don't think anyone deliberate writes unmaintainable code except as a joke. Hard to maintain code happen when some other objective takes priority - performance, abstractions, architectural purity, DRY or whatever else a developer might enjoy focusing on. The most maintainable code tend to be the least clever. But developers enjoy being clever, so without any outside pressure to deliver maintainable code, developers will tend towards less maintainable code.
- nkssy 5y agoDon't forget to write for future you. They'd appreciate some consideration as well. Mostly along the lines of "wtf does this module do?"
- throwaway14356 5y agoThe best one for me was documentation to complicated for me - by me.
- nkssy 5y agoYou seem to have a complicated relationship with your past self. I foresee further trouble in your future. Its best if you take a torch or you'll be eaten by a grue.
- chii 5y agoyou can replace the word "software" with basically any other professional work and that is still the same. I don't know what you can learn from the fact that it's a social service.
- wccrawford 5y agoI've met a lot of people who are writing code to satisfy requirements and collect a paycheck. They're good people, but just don't automatically think about the end user. They stop when the requirements are met, instead of when the user will be happy. That's what they're supposed to learn from that, IMO.
- chii 5y ago> They stop when the requirements are met, instead of when the user will be happy. that's because they are doing software "for other humans" - aka, their manager and PM, who gave them the requirements. So the problem is not the software engineer, but the person who creates those requirements to be fulfilled.
- lazide 5y agoI think what the parent may have been complaining about is essentially myopia in interpreting things - ‘well, this technically checks the box of what they ask for’ while willingly avoiding thinking about the larger context of what is being attempted or trying to understand requirements that don’t make much sense. Don’t get me wrong - it has it’s place, and if everyone always tried to understand everything, there are a lot of organizations and situations it would be crushing - but it’s also very frustrating in many situations for those who want high quality products. It’s the ‘not my job’ syndrome, essentially.
- dragonwriter 5y ago> I think what the parent may have been complaining about is essentially myopia in interpreting things - ‘well, this technically checks the box of what they ask for’ while willingly avoiding thinking about the larger context of what is being attempted or trying to understand requirements that don’t make much sense. I think what your post’s parent was pointing out is that in lots of environments, such myopia is just an engineers job definition, for which they will be punished if they stray. Interpreting end-user needs is someone else's job.
- xwdv 5y agoIsn’t this true of basically any job?
- boffinAudio 5y agoSure, but that doesn't make it any less useful as a fact - especially when you are working with other developers who choose to try to ignore/avoid it as a maxim. Please don't tell me you've never met such a developer ..
- xwdv 5y agoI am such a developer.
- boffinAudio 5y agoSee you in 30+ years! :P
- Annatar 5y agoI reached quite the opposite conclusion: the purpose of software is to make a computer do work. Then again, I purposely refrain from writing end-user software and focus on backend automation. It is a deliberate choice.
- boffinAudio 5y agoFor whom does the computer do work?
- pbourke 5y agoOther computers
- Aeolun 5y agoI see you work in finance. Where the humans are just office decoration.
- boffinAudio 5y agoIt may be computers all the way down, but at the bottom there is a human. Somewhere. Poor thing.
- kiklion 5y agoUnless it’s consumed by an AI. Which I don’t fully understand but am comfortable assuming that the AI might be able to ‘teach’ itself to consume an API.
- koonsolo 5y agoDo you keep your code human readable? Why?
- Annatar 5y agoI do. It’s a point of pride in my work.
- Aeolun 5y agoProbably something to do with the computer not caring about that. If you constantly divide your time between someone that’s 100% logical, and someone that generally isn’t, you’re bound to get confused.
- pjmlp 5y agoApproching the same experience level and fully agree. A piece of coding art that doesn't fulfill customer needs, or requires understading of language standard minutia for fellow devs to do maintainance updates is worthless.
- mooreds 5y agoCan't agree with this enough. Sometimes it is directly for other humans (a GUI), other times it is indirectly related (an ETL job that converts data into a form that can be easily used to drive a recommendation engine which provides recommendations ... to people). This is tied into asking "why", another one of the author's points. At the end of the day, if you dig deep enough, the why will be related to human happiness. Bonus! If you keep this in mind, you'll also gain perspective. While you don't want to live at 30k feet all the time, periodically gaining high level perspective of the problem you are solving has been, for me, one of the joys of software development. (Not the only one, but definitely a significant one.) Hopefully it is that way for you too.
- kiklion 5y ago> At the end of the day, if you dig deep enough, the why will be related to human happiness. At one of my jobs, one of my tasks was to take client HR feeds and load them into downstream systems for travel management. On your second day of employment at your company, you should have a profile in our system which was a portal that displayed all travel policies and a profile in whatever booking tool your company used. We knew who your manager was so approval emails went out automatically. We knew what corporate card was assigned to you, so you never had to deal with that. We knew what preferred vendors your company had agreements with etc All I was doing was data manipulation and loading on a scheduled or triggered basis. But ultimately it allowed new hires in a new environment to have an easy time booking their trip for mandatory training. Any time our process failed, you had a traveler stressed out that they wouldn’t be able to book the trip in time or have to outlay money and reimburse later or get stuck at a distant airport.
- Waterluvian 5y agoWhat do I do with this, though? I think I get what it means but how do I act on it?
- boffinAudio 5y agoAlways keep the human in mind, whatever software you are righting. Its turtles all the way up to the human.
- DrBazza 5y agoIs this meant to be "code is for the reader, not the compiler", or "people are the ultimate end users of your software"?
- euske 5y agoI think this applies to not just software, but engineering in general. See, science is mostly about observing the natural phenomena. On the other hand, there are jobs that are mostly about taking care of people's needs. Engineering sits in the middle. It's a mediator. We have to understand the circumstance of both sides - nature (this could be something like hardware capacity in our case) AND people. Just taking care of one side makes you a bad engineer. You need to be technical and sympathetic at the same time.
- pydry 5y agoIt applies to every job not just engineering. I thought this was considered obvious.
- lazide 5y agoFor many people it definitely is not - some folks get into software engineering because they have the mistaken (albeit not as mistaken as if they were going into another career like medicine!) belief they can avoid people and just deal with machines.
- BoiledCabbage 5y agoTo clarify, you're saying that you vire that that being technical and observing natural/physical phenomena are important parts of selling clothing at retail, being a novelist and working as a receptionist? I think those are important jobs, and completely disagree with you. I'm trying to understand if those are jobs you weren't considering, or if we view each the responsibilities of those jobs very differently.
- pydry 5y agoNo. I'm saying that retail, much like being a novelist or a receptionist or a software programmer or indeed any job is, as the OP puts it, a "social service". That being one of the defining charactetistics of a job.
- 5y ago
- zanethomas 5y agoanother 40+ here w0rd!
- gjvnq 5y ago> Incredibly, it doesn't matter how educated the developer, they still seem to have to learn this lesson themselves, over and over, until it sinks in... That's probably because many devs were socially isolated when growing up. (How do you think they got so much time spent tinkering with computers?) Also, it is generally hard to imagine yourself in other's shoes. Example: imagine trying to use your UI but with a 60-year old vision instead of that of a 20-yo. Example: imagine having no formal address or no citizenship (stateless).
- hungryforcodes 5y agoI fully agree with this.
- chaps 5y agoI do a lot of dev work with non-profits and such. About a year ago I was working on an extremely difficult project as a volunteer where I was insistent that a specific part was vitally important to getting the project to move forward (generalizing tables extraction from scanned OCR docs) and I was spending a lot of time on it. One of the devs I worked with, with 40+ years of experience, basically told me this exact thing. He argued that what I as working on was a waste of time and that I shouldn't work on "code golf" problems, because of the likelihood of failure and that ultimately I should consider the human side of the problem. He said it was best to work on other things instead. Fast forward a month later, I managed to actually do it, and it worked almost flawlessly, across about 100k scanned PDFs. Multiple long-term projects spawned off from the extracted information, including some projects from the dev who told me to stop. My point being -- sometimes it seems like that line is used as an excuse to not tackle hard problems if they seem likely to fail. I agree with the line, and it's the exact reason I worked on it as hard as I did, but the dev failed to consider that I understood the social part of the problem, on experienced principle.
- cbsmith 5y agoAs per the blog's opening statement: context is key. The industry (and really, it's not specific to the industry) is rife with people who take pearls of wisdom out of their context and apply them without the context to serve their own ends.
- quickthrower2 5y agoPredicting the future is hard. You were both right. You only have the outcome to judge the decision, not the full probability distribution.
- superpope99 5y agoThis is so important - it's so hard to gauge what another person's mental model of a scenario is compared to yours. As in - perhaps OP and 40+ year person had the same, accurate mental model of the probability distribution of success, but OP and 40+ had different attitudes towards risk/reward. Or perhaps the OP happened to have a much more realistic picture of the probability of success, and 40+ was unnecessarily pessimistic. So hard to evaluate these things, and to internalise the fact that other people don't have the information you have all the time.
- 535188B17C93743 5y agoWhat's the quote? Knowledge can be taught. Wisdom can't be taught or told... it can only be learned through experience? Edit: Ah, found it. "Wisdom cannot be imparted. Wisdom that a wise man attempts to impart always sounds like foolishness to someone else ... Knowledge can be communicated, but not wisdom. One can find it, live it, do wonders through it, but one cannot communicate and teach it." - Siddhartha
- hutzlibu 5y ago"Wisdom can't be taught or told... it can only be learned through experience" I recently had the thought, that good education guides you to certain experiences to really learn the subject and not memorize some definitions.
- Jensson 5y agoProblem is that people learn the wrong things from their experiences, not that they lack the experiences.
- ArteEtMarte 5y agoThe way I was told it: "Knowledge is knowing it's a one-way street. Wisdom is learning to look both ways anyway."
- svilen_dobrev 5y ago35y+ here, i just sent him something along: "software is communication, made by people, for people" (which is more or less what you say :) With all the consequences. Most people, on either side, don't get it. Ever.
- jeffwask 5y ago20+ years and I concur. Improvements in my "soft skills" have carried me further than any technical learning.
- vnorilo 5y agoI think software is human expression. It can be a social good or a business driver. But it does not have to be. It can have no users, no IO or never run on a computer and still encode deep meaning. Does it need to be social to be useful? That is a value system. Many here communicate (beautiful) value systems, and that's great! But ideas and software can transcend those.
- JohnL4 5y agoA corollary-ish observation of my own: * If coders could write useful documentation (starting w/inline comments) they probably wouldn't be coders.
- michaelmdresser 5y agoWhat would they be instead?
- deleted 5y ago[deleted]
- JohnL4 5y agoCommunicators. (Writers, marketers, teachers, ...)
- cutemonster 5y agoThen they'd make less money. Why would they choose less money (Unless of course if they like those other jobs better)
- jnaddef 5y agoThey would be what then?
- taneq 5y agoGonna expand on this just a bit. Software isn't a product or a service. It's a tool. No end user cares what your stack looks like, they just want to click a button that solves their problem. Nothing between "click button" and "problem solved" is your user's problem, they're all yours.
- dxbydt 5y ago> Software is a social service. Its for other humans. I deeply disagree with this Calvinist utilitarian sentiment. Its akin to saying sex is for making babies. Maybe its an academic thing - When I went to grad school for CS, on Day 1 my Algorithms Professor paraphrased Perlis's famous quote on the blackboard - "Shaft the paying customer!" You can find the whole quote on the first page of SICP[1], or elsewhere[2]. imho its a highly toxic sentiment to think that whatever a programmer does is for other humans. Software as a Social Service...SAAS :) imho the best software is written to scratch a personal itch. Not to appease this customer. Not for other humans. Not as a social service. In fact all the people I deeply admire in the software world - Arthur Whitney, Kenneth Iverson, Mattis & Kimball, Perlis, Dijkstra, hell even Linus, are generally characterized as egotistical assholes in the public space who really don't give a flying fuck about social service & humans but care deeply about the software they created for their own selfish reasons. Mattis is quite explicit about this - "You should understand that the GIMP and GTK weren't written to fill holes in the software available under the GPL...GIMP was started because I wanted to make a Web page. GTK was started because I was dissatisfied with Motif...These are purely selfish reasons. That is probably why the projects...eventually succeeded. I find it much more difficult to work on something for selfless reasons." Perlis - "I hope we don’t become missionaries. Don’t feel as if you’re Bible salesmen. The world has too many of those already. What you know about computing other people will learn." otoh the people I deeply detest in software (too numerous to name) are generally these do-gooder types who write software to save the world & provide social service, employment to the masses, add "value" insert-marketing-speak-here etc... I'm ok with the hypocrisy in pretending to care about software as a social service because I need to put food on the table like any other programmer on the market, but deep inside, I write code only for myself. I think a big fraction of developers are like that. There's no harm in saying it out loud. [1]https://cloudflare-ipfs.com/ipfs/QmQ3C4ooSCmBMuK7mKq4sqVAfGq9y5EJpWNGVTQzC1FRms?filename=sicp.pdf https://cloudflare-ipfs.com/ipfs/QmQ3C4ooSCmBMuK7mKq4sqVAfGq... [2]https://www.goodreads.com/quotes/405620-i-think-that-it-s-extraordinarily-important-that-we-in-computer https://www.goodreads.com/quotes/405620-i-think-that-it-s-ex...
- wizzwizz4 5y ago> provide social service, employment to the masses, If I want the computer to do XYZ, and I can provide an XYZ service to other people? They're paying me to do my bug testing, and I get to feel good about it. If you're providing something that you think is a really good service, but not for people like you, and not for somebody specific you know either, it's probably going to be rubbish.
- SavantIdiot 5y ago30+ years here, so I'm just a youngster compared to you, but yes, that seems to get lost. My first mentor in the 80's was a jolly drunken programmer genius who enjoyed getting me to laugh at how bad my code was. His biggest lesson was that other people need to read and use my code, not just me. It isn't enough to just hack a solution -- "Anyone CAN write code, but not everyone SHOULD write code" was his favorite quote -- but code needs "style" and "heart". He even had a t-shirt made for me after my internship ended that had those two words and a bunch of my worst code examples printed on it. I still have it: just a bunch of MASM code. I'll Never forgot that guy.
- bbarn 5y agoThe biggest mistake people in our industry make is thinking they are somehow exempt from the rules of society and business just because they can use a computer better than most people. Heads down genius coder everyone steps around ends up fired or stuck in mid level forever, in reality. Guy who makes friends with the Customer Service department and Sales team with mediocre fixes get promoted, and in reality achieves more with his career. Software is useless without users.
- agumonkey 5y agoVery few recent programs i've seen were socially useful. Some might find comedy in this but the app my current gig uses: - is un ergonomic and redundant (typing the same thing over and over, no keyboard shortcut jquery era procedural code) - the overall design is useless, it produces libreoffice templates that takes ages to be badly filled - secretaries go faster using fucking paper and filling everything by hand - the application has all the data at hand but nobody has access to stats or complex queries, people have to also write down stats with stick marks on paper so the hierarchy knows what's going on alas