Do you still code un-handmade?

Not sure how involved all of you are with programming... As in if you do it at work as well as home but I was just wondering if any of you are working on any un-handmade projects. I started a web development project a while back with some friends and I want to keep it going because the idea/service is a good one, but unfortunately, it is not handmade as this was before I even knew what it was to be handmade/knew C well... And I've spent countless hours fighting with dependencies and "containers" for the typical OOP crap. C# is so based off of abstraction that I'm not even sure how to make anything handmade-style with it since most C# training/requirements just want you to know some framework. For example the project uses ASP.NET MVC, Entity Framework, React, and all the bloatware that comes with them.

Is anyone else still in this boat outside our awesome little community? Programming native now, I find it harder and harder to want to go back to abstractionland, but at the same time, although those projects may be bloated, they are still programming/software. I read a few bios on here and I know some of you (I think at least one staff member as well) come from web dev so Im sure you can relate here. If not, do you have to do other types of programming for work that you are not too fond of? Share stories. Preferably ways to cope as well :P

Edited by Todd on
I'm not a web guy, but I feel where you are coming from here. I think you're right to keep going with your web project.

I've been programming for quite some time on an audio plugin for use in DAW's. There are lots of different formats of audio plugins, so in order to keep my code cross platform there needs to wrappers around the different formats.

It turns out that there is a library that is very well tested and proven that provides all these wrappers. Unfortunately it's very heavily OOP c++ and I do not enjoy working with it. It's looking very likely that it is the best solution in order for me to ship the quality product that I am aiming for. I do not have the resources to test all the formats and platforms myself.

I can still keep my haven with the audio and gui code though :) Sometimes you've just got to fight through the bullshit in order to actually ship your product.
You pretty much described my "tech-stack" at work Todd. The bulk of my programming time is spent programming in an unhandmade, definitely non-native way, which is why I always have some C-based project to work on outside of that to keep me sane. The problem you described with feeling the pain of your architectural choices/decisions a few months down the line though, is something I think *every* project runs into, and though its hard advice to follow you should keep going *especially* if you think the project is good (many projects don't even have that). Starting over will definitely feel good, and you'll be 10x more productive and yada-yada-yada..., but finishing things, actually learning about what the pitfalls and work arounds are for certain decisions, having the perserverance to finish something when there's only annoying dependency-hell-esque bugs, are really valuable skills/experiences to have and they only present themselves when once your fairly far into a project and you won't get another chance to seize them until you're waist into another project (which will inevitabley take a while). So basically, you're in a position to do something that, by nature, you won't encounter again for a while, and many people give up at this stage (I definitely have), so I encourage you to slog through it, at least just this once.

Excuse the run-on sentences.
It really depends on how you define 'handmade' when it comes to specific programming mechanics, really. I use a few C++ features and a bit of abstraction/OOP but I stay out of the majority of it, since it obviously becomes too abstracted. I think abstraction and OOP is fine in moderation, especially if it isn't hurting the performance of your software in any significant way. That being said, there are some higher level practices that I just don't agree with to any extent... Y'know, things like data hiding and all of the extra crap that has to be introduced to allow usable code while utilizing data hiding. That goes too far, in my opinion.

I'm not incredibly super hardcore handmade, I'd say, because I still use libraries and OOP to some extent, but I think the common ground I share with those who are incredibly super hardcore handmade is the fact that I care about software and the performance of software. I think it's immensely important to understand what your code is doing, especially when using OOP features; there should be an immense value put on how your code is interacting with the system and how it's working. I just think that a sort of "middle ground" where concepts are still easily understood yet where the code is still performing well isn't all that evil.

TL;DR, some people would say I code un-handmade, others would say I don't... in the end, all that matters is that I share the common ground of caring about software, its efficiency, how well it's designed and how well it works, and that it's my job to make it meet those requirements to be considered "good" software.
Some of you fellas make it sound like the *Handmade Way* is the second coming of Jesus - it isn't.

Creation of Javascript wasn't the Original Sin.
By the time web-development came about, we had already fallen from the grace.

There have been many great maladies in Software Development,
all of them eclipsed by the magnitude of tragedy brought on by THE ORIGINAL SIN - the creation of Unix and C
by Adam (Dennis Ritchie) and Eve (Ken Thompson) respectively.

The Software Industry hasn't recovered ever since.

All the great tragedies that followed - Church of Shitty Abstractions, OOP, C++, Java, Garbage-Collection, GDB, GNU Make, Javascript,
and everything else - are consequences - mere echoes.

If - the Messiah (Jonathan Blow) - will pull through - and die for our sins (by creating and releasing JAI proper for everyone to use)
- we will have our hope for redemption.

Until then it's always going to be a choice between Turd(C) and Shit Sandwitch(C++, C#, etc) - depending on your objectives
and the amount of bullshit you're willing to put up with.

Imagine a timeline without C and Unix, imagine all the great things computing could been, but isn't.

To quote the Messiah (Jonathan Blow) at Handmade Con 2016 Q&A:
Looking at it all, looking at the misery of programming in C++ every day, and being like - oh my god, I really do have a way out of it...
I see a light up there and I'm actually managing to get toward it... and there was this release of all this dread that i've had,
because otherwise I had already convinced myself that I was just gonna have to put up with that for the rest of my life
and get done what I was doing despite that... Games are hard enough, but I also gotta do them while holding this 50 pound weight on my shoulders
(Casey: that's just the C++ spec if you put it that way)... We will see if that comes true and I finish the thing.
Hope is amazing when you can have it.

HOPE IS AMAZING WHEN YOU CAN HAVE IT.

Edited by pragmatic_hero on
At work i am still dealing with all the of the modern C++ bullshit. We use _many_ C++ 14 & 17 features requiring me to keep up to spec with the most recent version of C++. Although, on my own projects i do go pretty much full handmade with no CRT or libraries in my current code base.
strangezak
At work i am still dealing with all the of the modern C++ bullshit. We use _many_ C++ 14 & 17 features requiring me to keep up to spec with the most recent version of C++. Although, on my own projects i do go pretty much full handmade with no CRT or libraries in my current code base.


Hey I know C++ sometimes gets a bad rap with all of the stuff being poured into it, but at least it's still true native.
As pragmatic_hero amusingly suggests :') it's best to take a pragmatic approach to all of this. There are many situations where an "un-handmade" method is the best approach (taking into account the cost of changing tools, changing languages, coworkers who are unfamiliar with tools, time constrains, etc). Perhaps knowing that the best option for the situation has been taken, will lessen the pain of the BS that will undoubtedly have to be fought through.

Edited by sam_windell on
I'm new here, but I'll give the question a stab.

My day-to-day work consists of writing a lot of PL/SQL and T-SQL. I inherited a database infrastructure where most of the company's business logic resides in stored procedures/packages on the database side, and based on the industry - this results in a lot of complex calculations on very very small and large numbers. I also do the database administration, manage and extend our data warehouse, write the APIs for any new applications coming on board that want to speak with any of our databases, complex report writing, and maintain two front-end web applications in C# + WebForms (one for ad-hoc reporting, and the other as a KPI/heat map console).

Todd
If not, do you have to do other types of programming for work that you are not too fond of? Share stories. Preferably ways to cope as well :P


The best advice I can give on this, is you need to be aware that there are things you're going to have to do in the workplace that you don't agree with, nor that appeases your fun side. There are many reasons why a company would choose a particular framework, programming language, etc. and unless you're one of the people that have the ability to make a decision on what you use - just don't fret/stress over it. Use what's required of you, and if you prefer the handmade way then use that for your personal projects.

I would absolutely love to change our entire database infrastructure to PostgreSQL, but it's not an option for me - so I don't stress over it.

Based on the style guide we're required to use at work - I have to use K&R bracket styling and camel case for naming, but I'd much rather use all-lowercase snake-case for variable naming and 1TBS bracket styling. Unfortunately, based on my workplace - this isn't an option for me so I don't stress over it.

I'm subjected to the abomination that is SCRUM at work. With burn-down rates, rating user stories, etc. I absolutely hate it, but what am I going to do?

There are a ton of things I don't like at my job, but I'm not there to have fun. Separate your work and play life. Do what's needed to be done to collect a paycheck at work, and show why you feel your way is better in your personal projects.

Edited by 0x2329 on
You know,

There's a good reason we promote personal software projects on this website. After all the meetings, and debates not unlike this one, we found it impractical, perhaps foolish, to suggest everyone follow the manifesto. However, if you are on your own (or with a small group), you are free to program at a low-level, and at liberty to choose your own constraints. We can only hope that, given enough time, a handmade project here and there will stand out enough to affect the industry. I wouldn't be here if I didn't have that expectation.

Starting next year, we need to engage more beginners in this community, as well as develop educational material to live alongside the software projects. TheHappieCat agreed to collaborate with Handmade Network, because I believe she knows how to engage with people and her suggestions are valuable. But we need more help. If anyone has ideas (e.g. monthly challenges, mentoring sessions, curated resources, programming tutorials), please voice them.

Excuse my butting in,
-Abner

Edited by Abner Coimbre on Reason: Formatting.
At University I was penalized for writing my own data structures in a Data Structures class. Call me crazy.
@Abner

I think a handmade competition similar to Ludum Dare would be fantastic; perhaps every few months? Users get a theme and they have to code something up from scratch in a few days. Just a thought, though... :)
Delix
@Abner

I think a handmade competition similar to Ludum Dare would be fantastic; perhaps every few months? Users get a theme and they have to code something up from scratch in a few days. Just a thought, though... :)


I'd be all for this. This is a lovely idea.
++ Bring back the old game jams
I use Clojure at work (A functional LISP that runs the JVM), and do mostly web stuff. It's pleasant enough to work with, no OO stuff, unless I'm trying to wrap Java libraries. We also use an immutable database called Datomic, which has an interesting design.

Overall I think I'm in one of the better situations for web dev. But I'm becoming increasingly unhappy being so far away from the machine. The JVM is like a magical black box, it's hard to know what's actually going on, and the GC can be a nightmare - there's a meme in the community that says if you are getting strange bugs, it's probably GC. I miss being able to lay out memory as I want it, and inspecting JVM byte code produced is pretty useless.

Dependencies also bother me a lot, even with a package management system that is probably better than most. It just makes it too easy for people to include crap.

I think the problem with the web community in general is that they are alway rushing to get things out quickly, particularly if you are working for a startup (like I am). Generally the absolute last concern is quality/performance. This is a complete afterthought, and generally only talked about when you run into scaling issues.

I think it's possible to apply the ideas from the Handmade community to web programming to up the quality significantly. We'll probably be stuck with HTML/CSS/JS for quite a while still, but there's no reason why we can't still produce good enough quality under those constraints.

Lately my interests are shifting towards Go for web dev. It's GC is pretty good, and at least you control of memory again, and you can view assembly output, or include asm instructions in your code. It also has pretty good performance profiling tools, and generally libraries are vendored in - there isn't a magical package manager.

I'm also currently re-learning C, and who knows, maybe I'll be able to do my web programming in that one day. ;)