14 ms·
The Stupid Programmer Manifesto
- xupybd 3y agoHow can you store program state on disk like that? You'd need serialization and deserialization. A DB might be easier.
- dmingod666 3y agoYou have things like rocksdb, SQLite etc that are simple have serialization-deserialization built-in, so no external app dependencies
- p886 3y agoMaybe a bunch of JSON files on the local file system? Find the files and read the contents as needed.
- lylejantzi3rd 3y ago> How can you store program state on disk like that? You'd need serialization and deserialization. You need serialization and deserialization when interacting with a DB, too. You're trusting a library to do most of that for you. This is the difference between a junior engineer and a senior engineer. As a junior engineer, you don't trust your own judgement and use a library. As a senior engineer, you don't trust the library writer's judgement, so you write it yourself.
- mjr00 3y ago> As a junior engineer, you don't trust your own judgement and use a library. As a senior engineer, you don't trust the library writer's judgement, so you write it yourself. What? No. As a senior engineer you realize that loading data from a database is a solved problem, has nothing to do with the core use cases you're addressing, and would be a massive waste of time to build yourself.
- aruss 3y agoDunning-Kruger begs to differ...
- xupybd 3y agoYeah, this is true but I tend to hand craft my persistence to a database. I'm not sure how using files would be any easier. I'd have to manage a bunch of files on top of what I'm already doing.
- CM30 3y agoMy first thought was the way early 1990s forum and blog scripts did it, aka the UBB/Movable Type method of storing everything as static text files in a directory somewhere. That would be really inefficient though. I vaguely recall database driven blog and forum scripts taking over because of how poorly the old solution worked at scale.
- mcv 3y agoI can't tell if this is an honest call to keep things simple, or if it's meant to ridicule that idea. Because I strongly, deeply agree with some of these points, and am absolutely horrified by some of the others.
- mjr00 3y ago> I can't tell if this is an honest call to keep things simple, or if it's meant to ridicule that idea. Me neither. All of these things involve tradeoffs. Multiple repos vs monorepo highly depends on your organization. Microservices vs monolith has been discussed to death. A simple, locally-driven deploy process is great for solopreneurs but doesn't scale to full companies. Load balancers might be required depending on your availability requirements. Storing all your data on disk is easier than maintaining a database, but aside from performance bottlenecks, it's harder to define a recovery process (RTO/RPO) in the case of a hardware failure. And as much as I dislike them, there are ease-of-use benefits in using dynamically-typed languages. The biggest technical challenge in most software engineering roles today is evaluating the pros and cons of these types of choices and choosing the right one for your situation.
- nerdchum 3y agoYeah this is a sane take. Completely agree except for I think theres more performance bottlenecks with a database than files on disk no?
- madeofpalk 3y agoSkeptical of the person who is "not smart enough to figure out docker", yet is smart enough to know about building a "web application into a self contained statically linked binary executable file". I think they are smart enough, they just don't want to, or don't see the value in it (even if they've made an uninformed decision)
- mcv 3y agoYeah, I'm not smart enough to figure out either. I'm smart enough to rely on the command line tools provided by the framework I'm using.
- cientifico 3y agoI am another stupid programmer. Even if I have the experience, I still decide to use sqlite, single binary, local files, vps, monorepo. At least until market-fit is proven.
- renegat0x0 3y agoMost projects are created by programmers. That means that projects are not maintained properly, as most programmers focus on code, not on the build scripts. Making projects user friendly is an after thought. Projects are not advertised properly. Are missing documentation, screenshots, youtube tutorials. Some projects live long enough to become bloated, big, do-everything projects, full of experimental technologies that were forbidden to use at work. Adding layers, abstractions, interfaces may lead to adding unnecessary complexity, or dependency. How to spot code written by a senior? It is dead simple, obvious. How to spot project managed by a senior? Is is easy to install, well documented, easy to kick-off, uses little-to-none resources.
- draw_down 3y ago[dead]
- ketzu 3y ago> I’m not smart enough to figure out docker confiuration, so instead I compile my web application into a self contained statically linked binary executable file. I'd reverse that for myself. I am not smart enough to cross-compile my project or statically link, so I throw it in a docker container and call it a day.
- chrisldgk 3y agoIt’s important to keep in mind that pretty much all the techniques you’re too „stupid“ for all aren’t necessities for small projects, but rather being able to manage complexity (or workload) at scale. For an MVP or a small product, keeping with the simpler techniques is absolutely fine, and adhering to those standards in many cases can even be considered overengineering. Though there’s one thing I take issue with. „I’m too stupid“ implies that these techniques are impossible to understand, while I think it’s just a matter of being able to put in the time and effort to learn the intricacies. It’s absolutely fine if the resources (mainly time) aren’t available to you, but I don’t think it’s a matter of cognitive function.
- chrisldgk 3y agoBy which I mean „I don’t have the time to learn X“ would be more precise, even if less catchy for a HN headline
- mattdeboard 3y agoIt's a rhetorical device
- bluefirebrand 3y ago> It’s important to keep in mind that pretty much all the techniques you’re too „stupid“ for all aren’t necessities for small projects, but rather being able to manage complexity (or workload) at scale Most of the techniques people use to manage complexity at scale are too stupid to actually do that. Their only benefit is that following them prevents people from doing something even worse. It also prevents people from doing anything better. Instead we dogmatically follow patterns with mountains of useless boilerplate and unnecessary abstraction, but somehow it's considered less complex. I hate software sometimes.
- chrisldgk 3y agoBoilerplate and abstraction for the sake of it may be bad, sure, but there’s something to be said about having Standards anyone can adhere to. If I use a certain structure of code that requires more boilerplate but also means that anyone who has worked in that framework before knows exactly where to find and how to edit things, that’s a net gain, even more so in bigger teams. Think about tradeoffs, the most lean and elegant solution may not always be the best.
- jasmer 3y ago[dead]
- lvncelot 3y agoRelated: The Grug Brained Developer https://grugbrain.dev/ https://grugbrain.dev/
- the__alchemist 3y agoI feel the same way. I'm never sure what to think when I can write my own UAV firmware, but can't get the toolchain/build dependencies working for popular open source ones.
- deleted 3y ago[deleted]
- deleted 3y ago[deleted]
- memefrog 3y agoThis post is the programmer equivalent of teenage girls posting photos of themselves captioned with "I'm so ugly" to farm praise from their friends. I have come to dislike this growing trend that celebrates mediocrity and failure. Posting proudly that you are stupid, terrible and incompetent seems to result in applause and high praise. Why? Why is that a good thing? I hope this was intended to be a parody.
- pyrale 3y agoIt's a much needed coping mechanism, because the tech buzzword churn prescribed with an imperative tone is the equivalent of media setting unrealistic expectations for teenage girls. You may be experienced, but a large part of people in our industry are just out of school and don't have the experience to sort through it.
- graypegg 3y agoThe “10x 1x 0.5x developer” talk at the start is the only thing giving me that feeling. That I find annoyingly grating. Resigning yourself to some self-flagellating label because you don’t like to use docker is just begging for sympathy. I’d be more open to empathizing with the author if they just wrote about why they like their system. Doesn’t have to be a “why X is better Y” where you have to defend everything. Just “how I do Z with out Y” and people might be interested.
- nonbirithm 3y agoIt may be similar to the idea that if you are deemed to have imposter syndrome, then you cannot be an actual imposter, so if people perceive you to have imposter syndrome then it's in some ways a good thing. It's impossible to know if the author has imposter syndrome or not without some way of measuring his competence. However, I think "imposter" has become a loaded term as a result of the syndrome it's associated with. There are cases describing workplace incompetence, or not being qualified for a job, or being rejected for cheating at interviews, but there is no discussion of imposters in those cases. They're just deemed incompetent or not the right fit and moved on from. Actual imposters who game interviews and do manage to land jobs aren't called imposters either, they're called dishonest, but there's no "dishonesty syndrome." So I hesitate to reach for explanations of imposter syndrome if I'm not actually qualified for something. It can become used as a crutch to fall back on like a lot of diagnoses, instead of addressing the root causes of qualification. Waking up on that cycle made me realize I have a lot to work on in some areas.
- pyrale 3y agoNot smart enough for all this, but probably still aware enough of all these issues to find a method that works and actually ship stuff. And I suspect oblivious enough to document their process properly. I wouldn't have made all the same choices, but I admire the decision-making process.
- deleted 3y ago[deleted]
- fedeb95 3y agothis is for a stupid programmer that doesn't want or need to work for a corporation. by the way, I'd say: I'm too stupid to keep my configuration in order, so I use Docker.
- ianpurton 3y ago> I’m not smart enough to figure out docker confiuration, so instead I compile my web application into a self contained statically linked binary executable file. Good luck getting that to run in different environments because static or not, nearly every executable has dependencies. > I’m not smart enough to figure out cloud services and auto scaling groups, so I just upload my static binary file using scp to a linux server I rent from a VPS provider. Which of course you'll need to setup, patch, figure out how to restart apps when they go down and on and on. There's no easy out. > I’m not smart enough to figure out how to setup all the databases and firewalls and load balancers, so I just embed the http server and data storage engine as libraries in my static binary. And how do you back that up? I get the gist of the article, but some things are not always replaceable with an easy alternative. Most alternatives also have disadvantages as well as their own learning curves. Postgres, Docker, Infra as Code and Kubernetes are pretty much best practices on any development. Don't kid yourself that the learning curve is not worth it.
- actionfromafar 3y agoI’ll take a static binary any day over some virtual image, thanks.
- ianpurton 3y agoDocker images run native on Linux. The virtual part is just to get Docker working on MacOs/Windows
- __MatrixMan__ 3y ago> Good luck getting that to run in different environments because static or not, nearly every executable has dependencies. Maybe he's using nix to parameterize his builds with the system architecture, but left it out because it didn't fit his idea for a blog post.
- hsn915 3y agoNo. I'm too stupid to even understand what that means.
- pilgrim0 3y agoI’m stupid too. It’s hard to make sense of complexity when it’s senseless and doesn’t directly address a problem, instead being an inner abstraction. Every day there’s more things to learn in web development, and the scope of most engineering jobs is too large for most people to perform at a peak without burning out. I guess much more stupid is someone who doesn’t realize this and try to do everything and end up doing it badly. Of course you can spin up whatever layer in your stack, but maintaining and debugging it at large is a whole other problem. Usually people who prefer simplicity are the ones wise enough to see the big picture, software in its entire lifecycle. Being stupid has allowed me to deliver fast and secure software that I can explain to the next maintainer in a very short time, not to mention figuring out a problem just by its context in my head. There’s a whole set of principles that makes being a stupid programmer viable, such as Pareto and YAGNI, so much so that often people confuse you with a bright, productive programmer. It came to the point that I like being stupid, because by focusing on the bare minimum, software can be shipped really fast and with great quality overall.
- benjaminmikiten 3y agoFor someone who's "too stupid" to understand these techs, they certainly can explain them and their drawbacks and alternatives well. This reminds me of a bit of advice from Austin Kleon that I've used frequently -- "Make bad art, too"[^1]: > “Good” can be a stifling word, a word that makes you hesitate and stare at a blank page and second-guess yourself and throw stuff in the trash. What’s important is to get your hands moving and let the images come. Whether it’s good or bad is beside the point. Just make something. This is a perspective I have to come back to, as an engineer building enterprise-scale things, when I'm working on small-scale projects. I don't need to use the same tools I use at work, I can pick "bad"[^2] architecture, I just need to build _something_. [^1] https://austinkleon.com/2020/04/15/make-bad-art-too/ https://austinkleon.com/2020/04/15/make-bad-art-too/ [^2] "Bad" in that I know precisely how and when and what would bite me in the ass when I try to scale it.
- quickthrower2 3y agoFor a side project I used some PHP to get a job done. Why? because you can edit the file on the server and keep trying it out till it works. On 90s style hosting that is cheap and honest. The iteration speed is amazing. CI/CD took <100ms.
- bbkane 3y agoWhen I wrote PHP on the server I had real problems with the "CI" part- I would refresh my page an manually test each change. Do you have Continuous Integration tests (i.e. automated) for this code or are you also doing the manual refresh cycle? No shame either way, I think the juice isn't worth the squeeze for automatic testing short-lived code myself
- quickthrower2 3y agoSorry that was my silly subtle joke. The CI I am referring to here is refreshing the page! And I agree the juice isn't worth the squeeze. (I love CI systems at work and wouldn't live without them, but that wait time :-(, so everyone tries to get the OODA loop on their local machine ) One idea I had would to build an Elm-like backend language BUT with PHP's "edit the file on the server and it runs" nature. Combine that with some source control, forking and more of a VSCode editor on the server, and you would have a nice DX for small projects. All those features exist but they live in different languages/stacks, you can't have them all at once (I hope this is where someone replies "you say that... but have you tried X"!)
- nerdchum 3y agoUnironically have no problem with any of this at at small and maybe even medium scale which is like 99% or more of applications. As long as the disk written data is being backed up rock and roll!! When they say 'compiled binary' are they using Java or are they writing web apps in C?
- sailorganymede 3y agoAs someone who’s career started doing ‘stupid programmer’ things, it’s 100% worth investing time in learning how to do a lot of the things which are “too smart”, purely because a lot of these smart things were built to solve problems which will cause a lot of headache down the line.
- CM30 3y agoHonestly, the truly 'smart' programmer isn't someone who does or doesn't use a bunch of techniques or best practices, it's the one who can look at the situation and do what's right for that particular project/job. Most of the things in this post could be the right answer if the project is a weekend side project that's going to get a few hundred views a month, or a website for a small business. Bob's Restaurant doesn't need a Google scale website built with microservices, Docker and SPAs hosted on AWS and S3. But something like Google or Amazon or Netflix would. Use the right tool for the right job. Plus, even a 'stupid' or '0.05x' programmer can be a rockstar at a small company or organisation where a lot of complexity isn't required.
- EnragedParrot 3y agoThere's also the fact that those complex solutions aren't engineered by a solo developer but by teams, typically even multiple teams each working on a compartmentalized piece of the whole thing.
- CM30 3y agoThat too. It's a lot easier to work on a complex project if you've got a large team working on it. Like the teams that the 10s of thousands of devs at your average FAANG company can staff. Well, that and how most complex projects didn't start that way. A lot of the time, these things were built in a much simpler way, and dealing with increasing demand over the last decade or two caused them to balloon in complexity.
- nerdchum 3y agoId venture to say that as this is implemented in the authors post this could scale to many many thousands of QPS by just bumping VPS resources. Funnily a lot of these 'simple' techniques actually speed things up like writing to a local disk, or static binary. Theres no High Availability so in the chance it went down theyd be screwed and have no failover but makes you wonder if its cheaper just to lose traffic for a few minutes while theyre upscaling VPS resources or pay for all the HA scaling stuff running around the clock.
- vsareto 3y ago
- graypegg 3y agoThere’s always someone smarter and more successful out there. Someone that can do everything you can without even breaking a sweat, and then do more. They have no reason to consider your existence. Calling yourself stupid is stupid because the graph of those you->betterperson relations has no leaves, and is a totally closed loop. You’re the smarter, better benevolent version of someone else.
- jagged-chisel 3y ago"Smart" is certainly subjective. And one can, given enough time and practice, "figure out" all the things the author listed. The problem is time. A lone dev just can't take the time to setup the full stack every time for every project at every client. What to do? Templates, scripts, pre-made configs ... soon you have a stack that will deploy itself and all you have to think about is structures and algorithms. And now you look like a 10x dev. Not because you "know everything in the universe," but because you leveraged technology ... much like our customers want to leverage technology.
- osigurdson 3y agoI'm convinced the difference between the "10X" dev and the 0.5X dev isn't intelligence, it is rather the strength of the "rabbit hole detector". The 0.5X dev jumps right in, never to be seen again.
- jagged-chisel 3y agoOT ramble: I met a -0.5x dev once. .NET dude, lots of experience. Standup, every day, was something gone awry with dependency injection. Every. Single. Day.
- ResearchCode 3y ago> standup The one of you who came up with that idea was the true -0.5x engineer.
- jagged-chisel 3y ago“Came up with?” None of us invented Agile/Scrum/wtfe malfunction requires daily standup meetings. Management insists, management observes, management signs the paychecks, so … here’s your DSM.
- throw1234651234 3y agoMost projects don't need Docker. I have built multiple billion-dollar-a-year company websites from scratch (no, I don't make a lot of money, just a dev) that get tens of thousands of users a day and we barely ever need more than one or two instances of anything, all of which the major cloud providers can scale out of the box with Azure App Service / Elastic Beanstalk / etc. Docker/K8S is pure hype and never fills the "oh it simplifies development on various OS" argument. Sure, you can orchestrate in K8S to spin up the front end, back end, and database instance, but one day someone has to troubleshoot that. That someone being a dev who doesn't work with K8S all the time - good luck.
- 2023throwawayy 3y ago> Docker/K8S is pure hype and never fills the "oh it simplifies development on various OS" argument. This is demonstrably untrue and a hilariously bad take. Docker absolutely simplifies things. Give me a docker-compose file any day over “install X version of Y and Z version of Q”.
- throw1234651234 3y agoYea, except I literally never have that problem. Get latest Node and .NET (as an example) and you are good to go after NuGet restore or npm i. Sounds like you guys need to keep your libraries up-to-date. Which you will need to do anyway if you want your project to be maintainable. On a similar vein - don't pull in every single dependency you can all the time. Btw, this isn't directed at you specifically, obviously, just easier to phrase it that way. Edit: I am actually not arguing just to argue and think about this a lot. A "real world" example is "well, I need to mock out AWS SQS locally and now I have to pull in a fake local queue" or "I need to mock out RabbitMQ locally", etc. The short answer to those things is that you mostly don't - test the endpoint handling queue messages independently / write integration tests for it if you have to. There is no point to having the whole system mocked on your local - SQS/Kafka/whatever will do what it's supposed to do for the most part.
- pcthrowaway 3y agomultiple billion per year with tens of thousands of users per day? Assuming conservatively that this is 1B/year and 100K users/day, that's still $273/user/day. What are you selling?
- birracerveza 3y agoSimple != stupid, even though sometimes it's hard to discern stupid simple from simply stupid.
- throwawaaarrgh 3y agoI appreciate the attempt at honesty, but it's not true that you're too stupid. You're too lazy. A trained monkey could learn these things (I know, because I learned them!) and you're not stupid if you know how to program. There's no shame in being lazy. Let's call a spade a spade.
- Cpoll 3y agoIt's not an attempt at honesty, it's either allegorical or satire. Other recent posts by author are an article about BoltDB and B-Trees, https://hasen.substack.com/p/indexing-querying-boltdb https://hasen.substack.com/p/indexing-querying-boltdb. Juxtapose with "I'm not smart enough to figure out SQL queries."
- 2devnull 3y agoRight. And it’s therefore quite lame. “Look at me I’m smart because I use Docker” is for sure a stupid thing to post under your own name. Youth is wasted on the young.
- malkosta 3y agoOf course you don't need a hammer if got no screws to hit. You probably only worked in very small projects. Use the right tool for the right job. The tradeoffs on each scenario for each tool is one of the most important things we have to learn everyday, on every task. If you can't do that...well, good luck.
- temporallobe 3y agoBitter humor aside, I think this is a pretty good lament about the current state of software development and its often seemingly unnecessary layers of complexity. But all those things were invented to solve particular complex problems. The issues is that somehow we keep telling ourselves that we need to use these complex solutions to solve simple problems. One of my favorite examples of this is the inappropriate use of XML as a data format - it was intended to be a markup language, but of course it is flexible enough to be a data format, so people started using it like that, and then it became the standard (thank goodness that is changing now).
- Cpoll 3y agoFor anyone not sure if it's satirical (or perhaps allegorical), a click on the author's profile may help. Juxtapose this article about BoltDB, B-Trees and "moving away from SQL", https://hasen.substack.com/p/indexing-querying-boltdb https://hasen.substack.com/p/indexing-querying-boltdb, with "I'm not smart enough to figure out SQL queries."
- marcrosoft 3y agoI guess I’m stupid too. I do all of these things. It’s awesome.
- awkward 3y agoIt sounds like he still has to do a bunch of BS. What stack is this buzz marketing for? Golang?
- 0x445442 3y agoThe main problem is Google, Amazon et. al. publish how they handled some difficult problem they encountered and then middle management at Foo Inc. decided that’s the way they need to design their 40 user internal orders app.
- gwbas1c 3y ago> I’m not smart enough No, you're "brilliant." You know how to make something that's simple enough to get the job done.
- FrustratedMonky 3y agoI used to consider myself 10x years ago. But now probably like the author. There are too many tools, too many configurations, too complicated to get it all to work together. That is no longer 'programming', it is fighting a dozen tools that rarely get along. This all becomes inertia that takes 10x and slows it down to .5x. The environment is no longer suited towards focused work. If the day is spent futzing around with some library that stopped working then it is not spent on problem solving. Maybe that is the key, you are 10x if you are solving a real problem. But now you are spending that 10x on solving stupid problems with tooling, which is not aimed at the main problem. (10x Programmer) - (9x time spent on tooling) = a 1x Programmer.
- sesm 3y ago> embed the http server and data storage engine as libraries in my static binary. That's very interesting, I've been looking for DB + web server + application server in one process solutions some time ago, but the only thing I found back then was Tarantool. I wonder which solution the author had in mind when he was writing this.
- quickthrower2 3y agoIt is all reasonable stuff for most apps that don’t need scale EXCEPT writing files to disk as a database. Doing that for “blobby” stuff like profile pic is OK but for shared data that needs granular mutation I feel you will end up with a buggy, adhoc, ill specified half of postgres in your app.
- gunapologist99 3y agoIf you write data to a temporary file and then rename that file to its final name, renaming is an atomic operation on a POSIX filesystem, so you will cleanly overwrite the original file. However, you then need to deal with the risk of lost writes if another process or thread is reading/writing at the same time (i.e., sequential writes with in-memory cache, or just architect so that only one writer at a time; of course, if the shape of the data fits SQL and you don't mind compiling C libraries into your app which might remove the ability to static compile, using pure SQLite in WAL mode might be a better approach since it handles multiple writers for you.) Even with that risk, for certain types of apps, this can be a way to avoid a database which might need a separate process to backup/dump etc, the skills of a DBA-type of person in some environments, adding yet another database to an enterprise "approved" list, etc. This technique presents a nice, clean view of real data and allows backups of just the live data directory itself. On SSD, it's also much more performant than you might expect. It's quite possible to make the author's approach work very well with nearly zero long-term maintenance and no external database dependencies, as long as you are careful to manage the expectations and requirements.
- deltarholamda 3y agoI've had similar crises of faith every now and then. I never got into Docker, and every time I read somebody's K8s horror story I get hives. I begrudgingly learned enough about systemd so I wouldn't become a hermit, but I'm not happy about it. I still more or less prefer to do Web things without the SPA-like features. Some of this is because this is what I know, but some of it is because I'm too dumb to see the benefits of the added complexity. I'm not going to do "WEBSCALE!" things, more than likely, so why not just run a FreeBSD server and, if needed, stand up a jail here and there. Chasing the tech rabbit can be fun, but it is also exhausting.
- collyw 3y agoI feel the same, but docker is actually a net positive in my opinion. You can learn enough of it to be useful in a fairly short period of time, though it does throw up own set of problems that need debugging from time to time.
- agentultra 3y agoYou’re not too stupid, nobody is. If you need to learn it, you can, and you will. Some things are hard to learn but it’s worth it because they help us do things we couldn’t otherwise. As others have pointed out: don’t use k8s to deploy a web app for your local soccer team. All of the suggestions in this article are fine. It’s actually kind of smart. Update: ... except the REST/HTTP part. It doesn't matter for a small friends-and-family website, sure. But if you're building something you want to have grow and stick around and be used by others you'll just be setting yourself up for problems down the line. I dunno why RPC has come back into vogue, it was a pain in the 90s and early aughts that I had hoped we'd abandoned. It doesn't play well with the wider web ecosystem, it's a pain to grow horizontally, and locks you out of some pretty neat tools that can take your website further as you grow without much effort.
- AMerrit 3y agoSome of the things in this are a bit much, but I think some of this comes from the cult of the 10x developer. I feel like I'm a 10x developer on some very specific things, and a 0.5x developer when it comes to others, but that I'm mostly an average 1x dev. I think a lot of devs are like this, they get really good at some specific stuff, but feel lost as soon as they start looking at some new project on a totally different stack or in a different area. Like when I first migrated to using git from svn I definitely had a productivity drop from screwing stuff up, but I eventually adjusted. Most devs I know went through something similar, shot themselves in the foot a few times and then acclimatized to the new tool, not many instantly switched without a productivity drop.
- reneberlin 3y agoI really think, he was just making a joke!
- tfrutuoso 3y agoIf it works, it ain't stupid.
- interlinked 3y ago> so I just store my objects in their entirety as-is on disk. Every time I decided to use filesystem as db for my program, a couple months down the road that turned out to be a wrong approach.
- 2d8a875f-39a2-4 3y agoOne trusts he's not too dumb to protect his webapp from the OWASP top 10
- jroseattle 3y agosed -i 's/I’m not smart enough/I have not made the effort/g' {url-in-a-file} (Pardon my syntax, might not be 100% correct here) Devs work in a performance business, and most of the time "smart" can be replaced with "effort". Heck, even "experience" often equates to "outcome from prior effort". If you don't care to understand something, therefore making you less "smart", we're often just talking about a choice in applied & focused effort. Of course, there are caveats to this. Effort alone can't compensate for capability to learn (I keep this bookmarked: https://cdn.shopify.com/s/files/1/0535/6917/products/incompetencedemotivator.jpeg https://cdn.shopify.com/s/files/1/0535/6917/products/incompe...) And there are times where effort requires a lot, and we might not have the room/time to simply add that capability to our repertoire. But all this said, I have found that being "smart" enough is more often just a status of where my efforts have been applied.
- sailfast 3y agoThe "and that's OK" part of the sub-title of this post needs some support!
- brentm 3y agoBeing smart enough to create click bait content is probably more valuable anyway.
- kayodelycaon 3y agoSigh. I hope this is satire. Or this person is only referring to their personal projects. Otherwise, I agree with their premise and suggest they find a different career. HTTP Verbs? You really can't get more basic. At least you could try to wrap your brain around the idea that GET reads and POST writes. Not using SQL? Okay. You're spending a lot of time and effort hand-rolling your own shitty database. The combination of things suggests to me they have can't or don't want to deal with with non-trivial mental models. Things like transforming data between layers or figuring out how someone else will read your code. The next person to work on their stuff is going to have a massive headache figuring out what "made sense" to this person.
- taneq 3y ago> The combination of things suggests to me they have can't or don't want to deal with with non-trivial mental models. You mean… they’re stupid? Like they say in their title?
- kayodelycaon 3y agoBeing limited in time, effort, or ability isn't stupid. I've got my own mental hardware limitations with reading math and some functional programming languages. Bad enough I don't put in the effort to learn certain things. Now, writing an article conflating limitations or lack of desire with intelligence shows... poor self-awareness. But yeah, I prefer not to say stupid when I can be more specific. :)
- bedobi 3y ago> HTTP Verbs? You really can't get more basic. Every REST API codebase I've ever worked on would like a word. There's TONS of subtleties that determine whether you should be creating a GET, POST, PUT or PATCH for many different use cases. And this isn't even taking into account the hundreds and hundreds, maybe thousands of endpoints I've come across that were obviously wrong, but some Senior or even Principal dev had somehow managed to completely botch it - NOT a rare occurence.
- 3y ago
- avgcorrection 3y agoAn argument for a particular kind of opinionated simplicity with humility used as a rhetorical Trojan Horse.
- Solvency 3y agoEh? What's in this alleged horse?
- avgcorrection 3y agoThe opinionated simplicity.
- itissid 3y agoNoob Observation: There is an element of knowing what saves you time and then on top of that why and how it does. The saving I will divide into two categories: 1. Easy wins category: Don't repeat code, cause you will take twice to change it. This is clearly visible to even the author. 2. What I call the "tougher" win category: When you require more executive function like breaking a bad habit, managing cognitive load; in short understanding why it saves you time in the long run. A reasonable example of this is using typing in python. I and many of you know that you can catch errors way faster using types+pyre(for example) than writing tons of unit tests, but it takes an old python programmer longer to get used to putting in the types and some times remembering to set up and use Pyre to get used to the idea of how it saves time. Pre-pyre used to python dev might just think "I will write tons of unit tests". There is obviously a psychological/mental health component to this.
- JohnFen 3y agoI wonder if it's not that he's not smart enough, but that he doesn't enjoy it. Personally, I loathe developing on the web stack. I find it tedious and boring, and as a result, I do it poorly. Not because I'm not smart enough, but because I dislike it. All that means is that sort of programming isn't for me. It doesn't mean I'm a terrible programmer.
- ftxbro 3y agocontrarian substack clickbait
- gavinhoward 3y agoBoy, I feel this. I am also a 0.5x programmer. I write dead-simple C; I don't even touch web development, which I consider more complex than C development with Valgrind. In fact, I've spent nearly 3 years writing a build system. That's how slow I am, and it's made some acquaintances laugh at how long I've worked without result. But in reality, I'm not just building a build system. I'm also building my own stack, a la [1], including replacing as much of libc as I can and changing the OS API's I use. I think that soon enough, this stack and this simplicity will become my superpowers and make me a 10x programmer. Being a stupid programmer means you won't be clever. And if you're not clever, you will be able to debug it, even though it is twice as hard to debug than to write. [2] Good debugging is a superpower in itself. [1]: https://youtube.com/watch?v=443UNeGrFoM https://youtube.com/watch?v=443UNeGrFoM [2]: https://www.defprogramming.com/quotes-by/brian-w-kernighan/ https://www.defprogramming.com/quotes-by/brian-w-kernighan/
- whstl 3y agoGreat point about debugging. We're currently trying to simplify a monolith that is too hard to maintain, and the biggest issue for us that debugging is heavily impacted the call-stack size. Sometimes 100 functions before it gets to the point you want. All this due to very complex class and function hierarchies. I'm responsible for a rewrite of some modules and I'm personally gonna stick with simple stuff.
- whoomp12342 3y agoouch, right in the feels
- Dudester230602 3y ago[flagged]
- bazoom42 3y agoSmart is not chosing a particular techology (whether simple or complex), smart is choosing the right technology for the problem at hand. The primary difference between good and bad developers is good developers understand context. Every tool, technique, and practice were developed in a particular context to solve specific problems. Good developers understand the contex and limitations. Bad developers use the golden hammer or follow all “best practices”. The OP calls all the technologies they dont use “bullshit”,so they are probably a bad developer. But a good developer might choose exactly the same set of techonologies for good reasons. “Keep it simple” is a great principle, but it is also bordering on a platitutde because determining what is simple is not trivial.
- chpmrc 3y agoObviously great article (for real) but it's sad that so many people still misunderstand containers and orchestration. > I’m not smart enough to figure out docker confiuration [sic], so instead I compile my web application into a self contained statically linked binary executable file. That might be fine for something that needs to run once. What if it crashes? And what about everything else that's required. Database, centralized cache, queues, workers, load balancers. You can't build a fully functional product without those and what are you going to do Install all of the dependencies on a VM, by hand? What if you have to migrate to a different machine for whatever reason? Are you going to write scripts to automate all that and test them and change them and test them again? What if your program crashes? Are you installing supervisor? Will you turn your nice little binary into a daemon and deal with the whole initd/systemd configuration? What about the development environment? Are you going to do all that again when you switch laptop or when you hire someone? (I personally prefer a PaaS like Heroku, Vercel or Render but that's besides the point) Complexity very quickly gets out of control. What if you could, instead, define what your project requires in terms of environment, services, dependencies, networking etc. and just give it to a magical (today we'd say "AI powered") DevOps entity that makes sure everything runs smoothly no matter on what machine it's running, assuming it has enough resources? Locally you'd just run a single command and the whole thing would magically come to life. That's what Docker and Compose/Kubernetes are. A very convenient abstraction layer that makes it very easy to define your underlying architecture in a declarative way and have something else worry about how to get there. And, let's be honest, it's not even that complicated. You get 80% of the benefits with (less than) 20% of what Docker etc. are capable of. I learned how to use it once 8 years ago and I'm still using it to this day, just occasionally googling the odd command or Dockerfile keyword. I've seen the same with git. So many people just memorize a few commands and can't be bothered to learn how it conceptually works. I guess I just went on a long rant here but I'm really surprised how, in a constantly evolving industry like tech, there are so many people who are afraid of learning something new or to change how they do things, sometimes out of pure irrational spite or fear of whatever is new. Reminds me of the bit from Brett Victor's talk "The future of programming" where (paraphrasing) he says "binary people thought assembly was a bad idea and assembly people thought C was a bad [...]" etc. etc.
- gazelle21 3y ago[dead]
- MetaWhirledPeas 3y agoI like this kind of discussion, but I'm too stupid to know what the author's point is.
- munro 3y agoI feel like all of these could easily be flipped >> I’m not smart enough to figure out how to manage multiple repositories with shared code, so I put all my code in one repository. > I'm not smart enough to manage a monorepo, so I put all my projects in separate repositories. There's no reasoning behind the opinions other than "bc dumb".