13 ms·
Like many other commenters (of a certain age?), I too have this unsatisfied feeling about a particular kind of modern software development. The kind where you
by Dave_Rosenthal 4y ago
Like many other commenters (of a certain age?), I too have this unsatisfied feeling about a particular kind of modern software development. The kind where you never really dig down and design anything, you just plumb a bunch of stuff together with best practices you find on stack overflow.
Many commenters are attributing this problem to the modern high-level tools we now have access to. But I don't think this is the crux of the issue. You can face the same issue (you're plumbing things, not a designing a system) whether you are working with low level or high level components.
Heck, you could be working on a hardware circuit, but if the only thing you had to do was make sure the right wires, resistors, capacitors, etc. were in place between the chips you're still just doing plumbing work.
To me, one of the most satisfying things about programming is when you can build something great by starting with a concept for your lower-level primitives, your tools, and then work up through the higher levels of design, ultimately having the pieces you designed fit together to form something useful to the world.
This building-things-to-build-things idea is even satisfying in other areas. Just gluing a bunch of wood together to make a piece of furniture is fine, but building your own jigs and tools to be able to do the kind of cuts that enable the end design you envision is way more satisfying, and opens up the design space considerably.
If I had to lament anything (and perhaps this is what's most in alignment with the post) it's that most of the high-level primitives you touch these days tend to be sprawling, buggy, not focused, and just generally not of high quality or performance. It's possible for high-level primitives to avoid these pitfalls (e.g. Sqlite, the canonical example) but it does tend to be the exception.
I think there is still plenty of interesting and satisfying software engineering work to be done when starting with high-level libraries and tools. You just need to think about how to use their properties and guarantees (along with maybe some stuff you build yourself!) to enable the design of something more than just the (naively-plumbed) sum of the parts.
- icedchai 4y agoYes. Whenever I work on a "serverless" app, I spend more time messing around with IAC tools like Terraform than I do writing actual application code. It's sad.
- aliqot 4y agoChallenge yourself to use stdlib only for a while, or the future. It sounds unrealistic and I'm going to get flamed, but hear me out. It works. Most of my development these days is in reasonably complete languages like go, rust, zig, and various scripting languages, so your mileage may vary if you're writing in something like rune, hare or carbon that is still taking shape. If you think I'm crazy but have a lingering skepticism, challenge yourself to spend one day, one week, or one month using the stdlib only. If that is unrealistic in your setting a compromise could be to only use libraries that were created by yourself. You wont come out of it as an enlightened samurai monk with a celebrity HN presence, but you will gain an immense sense of scrutiny that didn't exist before as you take a look at the libraries you want to use after that. For those who think this is just 100% bull, consider how we survived before google, youtube, and stackexchange existed.
- pclmulqdq 4y agoI am thinking very hard about the CAP theorem right now while working on a billing system for a cloud API right now and it is an absolute joy. No, it won't deploy in version 1, 2, or 3, but it might in version 4, and if it does, it will be glorious. You can find cool technical problems anywhere as long as you are willing to take the path less traveled.
- TeMPOraL 4y ago> You can find cool technical problems anywhere as long as you are willing to take the path less traveled. After doing that a few times, I'm no longer sure if the reward of tackling cool problems to create more robust, better, faster components is worth the stress of missing deadlines. Looking back on what value of better work materializes and what is, per YAGNI, usually wasted, I just had a thought: perhaps the right way is to take the easy/dumb way and focus all available time/effort to optimize it for performance - instead of abstraction and extensibility. Because in my experience, nobody ever extends the code the way you envisioned - if they do it at all, they do it by first refactoring it to suit their own idea. And, nobody ever goes back to fix performance. Therefore, making things abstract and extensible is mostly a wasted work - but making things fast pays back for as long as the code is in use.
- hsn915 4y agoA side effect of this is that almost all job position advertisement are disgusting to look at. They are all about this kind of mindless glue code programming, but wrapped in marketing speak to make it look like "you get to use awesome bleeding edge latest technologies" when in reality it is "you have to figure out how to configure 10 different things to work together to sort of kind of produce the intended behavior". In the last 3 years I think I never saw even once a job description on any popular job board where they advertise that you will do some actually interesting programming. The only ones I've seen have been on Twitter but from companies doing things in areas I have no experience in (e.g. game engine programming).
- throwandpatch 4y agoI have exactly the same problem.. got sucked into "the cloud" 4-5 years ago at my current employer. Now I desperately want to get another job. Something with preferably no or minimal cloud involved. The trouble is that the jobs that sound interesting don't reflect my expertise.. Now should I try to start from 0 with a junior salary? Does not make sense with a family. I don't really have an idea yet.. but I urgently need to change something because my current work is killing everything I ever felt for software development.
- aprdm 4y agoTry to find work in visual effects, lots of interesting work and they’re on prems. Anyone with software background can get in !
- myth_drannon 4y agoRight, but the hours are long and the pay is low. VFX is even worse than games from career perspective
- aprdm 4y agoThat's not true in programming. I was 9-5 on 7 years there over multiple studios. My last studio (one of the most known ones) actually had 4d weeks. It is definitely true for VFX Artists. And you will definitely get a pay cut compared to tech (50%-ish TC)
- cgh 4y agoOr, just don't work in webapps. Get into embedded programming. Or join a games studio. I have a friend who is writing code to run on a sort of exoskeleton meant to benefit disabled people and help them walk. He has never in his life "deployed to the cloud" and wouldn't have the foggiest idea of how to do it.
- Aeolun 4y agoIt’s only a matter of time before someone realizes how helpful a GPS transmitter would be in an exoskeleton for disabled people. Now you have a cloud component.
- imwillofficial 4y agoI wouldn’t call GPS the cloud
- bavell 4y agoYeah it's way beyond that
- PeterisP 4y agoYou know that all GPS transmitters are in space, right? GPS is a unidirectional technology where GPS receivers don't (and can't) talk back to GPS satellites in any way.
- melony 4y agoIf the caretaker wants to get the coordinates back, then you have to go through a server at some point. I think GP was thinking along the lines of something like Find My iPhone, where the GPS coordinates are sent to the cloud. You will need a mobile baseband radio alongside the GPS receiver.
- Aeolun 4y agoYeah, you are right of course. I was thinking of a GPS receiver with a mobile connection to send data to a central server, and it turned into ‘GPS transmitter’ :)
- RobotToaster 4y ago>Heck, you could be working on a hardware circuit, but if the only thing you had to do was make sure the right wires, resistors, capacitors, etc. were in place between the chips you're still just doing plumbing work. A lot of modern hardware design feels like that, take a microcontroller, some peripheral chips, connect them together, and copy the datasheets for whatever support passives they need.
- veqq 4y agoGo is mostly devoid of this. The general approach is all stdlib and the idle extra dependency. Of course, a lot of fields are inaccessible. Lisp can enable fantastic development speed allowing you to build your own primitives. Racket's ecosystem's all high quality too. I believe Julia has a less buggy ecosystem allowing you to pipe together natively written ML things, as opposed to Python's dumpster fire ecosystem
- geysersam 4y ago> I believe Julia has a less buggy ecosystem Love the Julia language. But its ecosystem is definitely less complete, less documented and arguably more buggy than the Python equivalences. This is not a failing on Julias part, the Python ecosystem is 50x bigger and backed by multiple of the largest IT/ML firms on the planet.
- 91edec 4y agoI came to this same conclusion last week when I started writing my own webgpu renderer. I went into it with no knowledge of graphics and without using libraries. Having to create my own generic abstractions for pipelines, passes and buffers has been a massive creative and educational experience. I haven't felt this satisfaction from programming in years from my day job.
- deleted 4y ago[deleted]
- contingencies 4y agoOn your hardware tangent vs. cloudgunk... People who are really serious about software should make their own hardware. - Alan Kay ... via https://github.com/globalcitizen/taoup https://github.com/globalcitizen/taoup