12 ms·
Handmade: A Community for Self-Rolled Performant Software (2016)
- willvarfar 6y agoSo the bottom of the linked article says 2016, which made me immediately think 'old!' It makes complete sense for the manifesto to be timestamped, but the surprise was that I didn't realise I was reading the manifesto rather than this actually being the normal landing page... there's no title or anything and HN usually links to homepages. But a quick glance at the forum and the homepage shows there's activity there still! Clicking around, this seems really interesting :)
- TheUndead96 6y agoI felt that the manifesto gave the best description of the community. The homepage is mostly news about specific projects. I'm not directly affiliated with the group, but I follow some of the developers. And their podcast is pretty good too!
- coldtea 6y ago>So the bottom of the linked article says 2016, which made me immediately think 'old!' Only if you're 20-something or less. If you're 40 something, even 2000 is not "old".
- mrkeen 6y ago> So the bottom of the linked article says 2016, which made me immediately think 'old!' I yearn for the day when the industry reaches a state of reliability where we see "old" as a good thing, i.e. "this problem was solved ages ago!", rather than it seeming out-of-date. Probably not in my lifetime!
- bArray 6y agoI love all the game engines in there! Really makes me feel like hacking some game together to test them!
- Stierlitz 6y ago“Why does it take your operating system 10 seconds, 30 seconds, a minute to boot up? Why does your word processor freeze when you save a document on the cloud? Why does your web browser take 3, 4, 10 seconds to load a web page?” Bloat !!!
- Cthulhu_ 6y agoWhile "handmade" code may be faster, it's also a big time sink and as a developer your job is to make tradeoffs. For most software, you should probably focus on architecture instead of the lower level of your code. Sane code and architecture solves most performance issues. This includes technology decisions, like using web tech for applications instead of the native platform. For example, Apple has had a lead of at least five years over Android when it comes to performance and user experience, because their system and apps were all built in native environments, instead of the JVM abstraction layer. It took at least five years for Android to catch up, and it took quadcore CPU's to do it. Around then, Apple carefully started using dual-core CPUs. Meanwhile, companies like Facebook and Twitter spent dozens of work-years on trying to make web technology feasible in native apps and never really cracked it. If they had just focused on building good native apps they wouldn't have wasted so much time. Caveat / Aside: IIRC Facebook is having / has had massive issues with having too much code / classes / files in their app(s), on both iOS and Android. Which is (I believe) one of the reasons why they split off Messenger into its own app at the time.
- gridlockd 6y agoHere's the fundamental difference between iOS and Android, and it's related to memory management: On iOS, you pay for memory management in small installments, which make your code slower overall (reference counting in ObjC/Swift), but predictably so. On Android, you pay almost nothing for memory management until at some random point the garbage collector shows up and stops your program to clean up your mess. Your program is going to be janky. Apple deliberately ships devices with little RAM and kills applications that use too much of it. As a developer you better pay attention, or you will be flooded with bad reviews. Google leaves RAM up to vendors. The secret to good performance with GC is to make the heap twice as large as the data which it contains. Low-end Android devices feel low-end, not just because of slower CPUs, but also because of too little RAM. It has nothing to do with the "JVM abstraction layer". Java code on a good JIT easily runs faster than Swift or ObjC if there's a lot of allocations involved, but the GC behavior must be accounted for to give a good experience.
- deleted 6y ago[deleted]
- arcin 6y agoThe handmade hero community is wonderful. It is a portal to a lot of knowledge transfer. If you're looking to approach C/C++ in a welcoming environment and/or love getting closer to the metal, I highly recommend the community. I also recommend the handmade video series. Casey Muratori has been live streaming himself build the same game for the past few years. He try's to build everything from scratch, which is entertaining and quite the brain dump. Also, the video archive and live chat is searchable. I can't count the number of times I - searched for some keyword or phrase, like "CPU" - was greeted by a link that read something like this "Day 025: Finishing the Win32 Prototyping Layer (01:38:59) Isn't the CPU Memory bandwidth only valid for on-die memory?" - clicked the link to receive 3-10 minutes of extremely dense but well-explained information on a topic. - spent the next hour or so googling technical terms and subjects that filled massive holes in my knowledge. If you love learning, treat yourself to jumping around the video archive :) https://guide.handmadehero.org/ https://guide.handmadehero.org/ Two favorites of mine from the archive Undefined Behavior: https://guide.handmadehero.org/chat/chat011/ https://guide.handmadehero.org/chat/chat011/ Modern x64 Architectures and the Cache: (https://guide.handmadehero.org/chat/chat017/ https://guide.handmadehero.org/chat/chat017/) P.S. Its worth mentioning that you can buy the game hes building and get access to the source code. I'm not associated with handmadehero.org or Casey Muratori in anyway. The community just led to me becoming a better programmer over the past 5 years. I hope someone reading this finds the value I did in rabbit-holing for hours and laughing at the rants of a seasoned game dev. *edit: formatting
- Udo 6y agoThere also used to be a meetup in Seattle https://www.handmade-seattle.com/ https://www.handmade-seattle.com/ (which has since moved online due to the pandemic situation) but in the past they had some pretty good presentations and interesting speakers. You can find some videos of them online (Youtube: "HandmadeCon" and "Handmade Seattle") although regrettably there are no recordings of last year's meetup.
- abnercoimbre 6y agoI'm in the process of getting a few of them officially up. I had lost contact with the cameraman after COVID, but we're in touch again!
- phtrivier 6y agoTL,Dr : knowledgeable, skilled programmers writing semi-confidential software in C for mostly a single OS, by themselves, with total control of the feature set and release schedule, can produce pretty fast binaries. Which is great ! I just don't know how to transfer that to building software as a team with multiple skillsets, unknown feature set (because market feet is still searched for) aggressive schedule, (We don't know what we want to build , but we need it in six months), large target audience ("what do you mean they have to install stuff ? Where is the link I can paste in an email so they open it in IE6 ?") , and,let's be honest, less knowledgable and more lazy developers. (To be clear : I'm not criticizing the network or project. I just find it interesting that they had a goal - making fast software - and that, to the ebest of my knowledge and without a rigorous analysis - it seems that most projects converged on a very particular kind of software. Which just happens not to be the kind most of us will ever be working on, but it does not matter. Go them !)
- arcin 6y agoFor me, it's just about learning from others or getting in touch with the part of myself that was excited about programming. I worked in web development for a few years (2010-2015) and then left to start a company with a friend (mid 2015). We decided to build audio reactive visualization software written in C/C++/glsl, way different from where web development was and is (still do web stuff but primarily backend services for our app and React for the sites). The industry we're in focuses primarily on international music festivals (burning man, boom) and specialized art installations/exhibits. We were successful and now we have employees, a vibrant community, ambitions plans for new products, and aggressive deadlines. I say that only to point out that work is work. Whether you're working for someone or working for yourself, you can always find things to stress about and reasons to push yourself to the brink of burnout. As corny as it sounds, Handmade hero has been a reminder of the reason I quit my job 5 years ago to do something technologically and emotionally challenging. It keeps me in touch with the younger me that that just wanted to learn everything I could about programming, web/native/embedded whatever. To your point, though, it definitely is not for everyone. If you see software as simply a means to an end, then there is nothing wrong with focusing on components that make products viable. I enjoy the craft but I also understand you can't have success by being precious about every little technical detail. Just wanted to share my experience. I wish I would have come across something like handmade sooner in my dev journey.
- Vai1sail 6y agoDamn, this place looks amazing, it looks like El Dorado in a sea of despair, for someone being used to make the same points than this manifesto and being looked as a weirdo in response. Sadly they block Tor users, because they use Cloudflare. Maybe we're not that much on the same page after all.
- jgrahamc 6y agoCloudflare doesn't block Tor users by default and I just visited the site using TBB: https://imgur.com/a/GHpbvTD https://imgur.com/a/GHpbvTD
- Vai1sail 6y agoAre you kidding? Or is it corporate speak, like "it does not block Tor, only 99% of its users"?. Cloudflare is what makes the web unusable for Tor users. Every two websites you try to reach, yup, blocked by Cloudflare. The fact that you try to deny it makes it painfully obvious how there is no hope for Cloudflare. Sorry, I can't wish any good to your company.
- senko 6y agoWhy is that we praise hand-crafted objects in the real world while at the same time deriding such hand-crafted code as a quaint curiosity that can only make sense as a hobby of the hopelessly romantic? Do we compare your local carpenter with IKEA, or that delicious, nutritive and healthly meal you cooked with McDonald's, in terms of pure (developer) performance? Do we obsess over how a handmade jewelrer can't scale operations to five continents? Why do we copycat every process or idea from tech behemoths but laugh when someone tells us that maybe a chat client shouldn't gobble up gigs of RAM? In the real world, both craft workshops and assembly lines have their place. Maybe that should be true for the digital world as well.
- TheUndead96 6y agoI agree 100%. I see many comments here critiquing the fact that this type of programming does not scale. Modern programming methodologies and this low-level hobby programming can coexist in the world.
- jasode 6y ago>Why is that we praise hand-crafted objects in the real world while at the same time deriding such hand-crafted code [...] In the real world, both craft workshops and assembly lines have their place. Maybe that should be true for the digital world as well. I'm not sure what the complaint is here. The concept of "hand-crafted software" _is_ being praised. Consider: + the domain url exists : https://handmade.network/ https://handmade.network/ ... this means some enthusiasts spent money to host a focal point for showcasing the work to others + the submission is currently on the frontpage of HN ... which means it was upvoted many times (more than 50+ as of this writing) + comments in this thread showing appreciation of it Are you annoyed that there isn't universal absolute flattery because a few want to mention caveats of tradeoffs? Well, that's true of any piece of technology/method.
- senko 6y agoYes, it's being praised here (however this is also in the "hobby" context, supporting my argument somewhat). But what I am saddend, more than annoyed, about, is that it's extremely lopsided in general. I don't have a tally, but reading HN and other tech sources (HN is not an outlier here), these kinds of stories are buried under the mountain of articles and resources that hype up the "software industrial complex" (for lack of better description).
- miki123211 6y agoWhat people don't realize is that modern, high-level languages and abstractions give you much more than just speed of development. If you use a garbage collector, you don't have to do manual memory management, which is amazing for security. You also don't need to worry about buffer overflows and weird pointer exploits. If you use web tech, you get a lot of important stuff, like sandboxing, handling of esoteric keyboards, RTL languages and screen reader accessibility almost for free. If you use some extremely fast, small and lightweight GUI framework, you will probably not implement those, as they seem boring, and who needs that anyways. If you go the handcrafted, lightweight and fast route, you're sacrificing a lot of features, possibly without even being aware of what you lose until it's too late. I will happily shelve a few more bucks for RAM and wait a few more seconds to get an accessible, secure Messenger, instead of one that is going to steal my bank details the moment some stranger sends me a malicious GIF.
- mwcampbell 6y ago> If you go the handcrafted, lightweight and fast route, you're sacrificing a lot of features, possibly without even being aware of what you lose until it's too late. And, just to amplify the point about accessibility, you may be blocking some people from using your app. So it's not entirely about what you lose. That's not so bad if you're developing a game. But the projects on this site include a programmer's editor and a debugger, both of which are completely inaccessible with a screen reader because, of course, they use a handmade GUI.
- miki123211 6y agoHandmade GUIs, frameworks drawing on canvas instead of using DOM, and abominations like VNC over web instead of normal desktop apps seem to be the new accessibility plague. We're pretty much done with Flash and Java on the desktop, QT isn't that bad any more, accessibility-wise, but this kind of stuff is now becoming more and more popular. I've heard of systems that promise you better utilization of your licensing resources, but what they do is put your precious 10 computers with some expensive software on the internet, letting any employee with a web browser book some time and access them via Web VNC. That's a brilliant way to turn a perfectly-accessible Windows app into something you can literally do nothing with.
- srg0 6y agoIt reminds me of https://suckless.org/ https://suckless.org/ Also the set of projects is somewhat similar: window manager (dwm) -> game engine library (raylib) terminal emulator (st) -> IDE template (4coder) web browser (surf) -> video browser (motionbox) + tools and libs...
- mwcampbell 6y agoThe Handmade metaphor masks a key difference between software and physical goods. IIUC, mass-produced physical goods are inferior to their handmade counterparts because of the trade-offs that enable profitable mass production. So we have a strong emotional attachment to handmade things being better, and the Handmade movement plays on that emotional attachment. But the metaphor breaks down if you think about it. A carpenter making a single piece of furniture can tailor it to the person who will be sitting on it. A cook making a meal for one person can tailor it to their dietary requirements or tastes. But software of any non-trivial scale is rarely written for one person. Even when it's developed according to the ideals of the Handmade movement, it will be mass-distributed. I actually think that, contrary to our intuition about handmade things, Handmade software tends to have compromises compared to software that builds on well-established components. I won't repeat miki123211's top-level comment [1]. I'll just add here that it's precisely the economics of large-scale software distribution that allow concerns such as internationalization and accessibility to be addressed, while a solo Handmade project will probably not have these important things. So, while slinging JavaScript code with no regard for performance and packaging it with Electron is certainly not the ideal, I strongly believe that the Handmade approach isn't either. As is so often the case, we need a middle ground. [1]: https://news.ycombinator.com/item?id=24186711 https://news.ycombinator.com/item?id=24186711
- commandlinefan 6y agoI figured this point of view would come up in this discussion. What you're really implying here, though, is that it's impossible to produce quality "hand-crafted" (that is, zero-dependency) software, or that it's so time-consuming that it might as well be considered impossible. I'm not 100% sure I even agree that it takes longer to produce software that builds on top of a tower of dependencies than it does to just program the damned thing yourself, but it seems indisputable that the finished product will be higher quality than the one that defers as much functionality off to external dependencies as possible. Why? Because for an external dependency to be useful, it has to address many different use cases. To do that, it has to expose abstractions that only exist to allow reuse. The unused use cases cause memory bloat (that even tree shaking won't address all of) and the abstractions slow things down at runtime. But beyond that... why are you guys always in such an almighty goddamned hurry? You do realize that if you succeed in rushing out an inferior, shameful, mass-produced crud app, there's either another one waiting in the wings immediately after this one, or there's no reason to keep you around? Why not take pride in your work and insist on spending the time needed to produce the best quality, most efficient, smallest footprint, most user-friendly, snappy, responsive software possible? Users despise the software 99% of us churn out and I don't blame them - it feels like somebody was putting in the least work possible so they could leave work a half hour early in time to make it to the golf course.
- PaulDavisThe1st 6y agoI've been writing C code for more than 30 years, C++ for 27. I've written code at every level of "the stack", from kernels of several nix-related operating systems to application GUIs. I've worked on "plumbing", on libraries, and on applications. And here's the thing: I understand, at a very very deep level, precisely why my application is slow to start up. I understand it at every level from the semiconductor gates in silicon up to the color specification lists used by the GUI toolkit. But none of that helps me make it as fast as the handmade community thinks things should be. Why? Because I know that the slow startup is caused by substantial amounts of code that all add useful functionality for at least some of my users. Do I want to get rid of i18n? Shall I skip checking for new versions? How about forcing plugin scans to be initiated by users and never doing them automatically (don't even think of suggesting doing them in another thread, and don't ask me why)? Shall I skip the ability to handle RTL text? Should we drop human readable and editable configuration files in favor of some faster and less resource-eating format? How about a scalable GUI, is that really useful for most? How about a themeable GUI, given that it's not actually that themeable anyway? And so on and so forth. Each one of the above (and lots more) contributes just a little bit to the slow startup. For most users, all but one of them will likely seem not very important. So which ones do we drop to get back to the sort of startup times that the handmade community seems to expect? Because let's face it, xterm can put a window on the screen before my finger is off the return key. So why not a DAW (or an IDE or an editor or a vector graphics app or an image editor or a browser or a circuit emulator or whatever your thing is) ? Just which features do you want to cut to accomplish this?
- Olreich 6y agoLet’s call 1 second the threshold for a bare system with an SSD and 4 core CPU at 2Ghz. That gives you 8 billion cycles to start up, trading off with file access, so maybe only 4 billion of those have access to all the data you need in memory (modern ssd loads what, 400 MB/s?). So all the startup code and initial assets are larger than 200 megabytes and take more than 2 billion cycles to prep? Computers are fast, software is slow. Sure, things aren’t trivial to always fit in that package, but it’s disingenuous to say you need to take many seconds to start up. Look at a giant piece of software that was built for more limited times: Visual Studio. It used to start up in milliseconds back in 2000. Now it takes 30 seconds. Did it really improve things so much to justify that in the intervening years? I’d go with no. You know what else has an amazing set of features and capabilities including internationalization and accessibility and all those other complicated things? Web browsers. And there’s not a browser on the market that doesn’t start up in more than a couple of seconds, including loading a full webpage and rendering it from the internet.
- fulafel 6y agoInteresting what words the manifesto doesn't mention: correctness, security, safety, bugs.
- abnercoimbre 6y agoHey! I organized this community a few years ago; it's under great leadership. Trivia points: 1. The manifesto author was barely 18 when he wrote this; representative of a new, younger cohort interested in this stuff. 2. Handmade is into low-level understanding, but certainly a few people stick to high-level projects, and simply peek behind the curtain when they need to. Low-level thinking translating into high-level wins. 3. Someone mentioned my conference, Handmade Seattle [0]. This is part of an effort to expand into the mainstream, and to inspire the next generation of compiler writers, kernel developers, game engine programmers etc. We're not saying everyone has to be into this. We want to carve out our place, let those who care flourish, and not be caricatured for "reinventing the wheel." [0] https://www.handmade-seattle.com https://www.handmade-seattle.com