The 2024 Wheel Reinvention Jam just concluded. See the results.

Recovering web dev's incomplete career story -- any advice?

Hey kind folks,

Long-time lurker here -- mostly because I found HMH just this year, and I can't follow the live streams, and I never seem to catch the other streams. But anyway, this seems like an amazing community, and I've been struggling enough with my career that I realized it was stupid not to ask if someone here has good advice.

So, around a year ago, I was already a big fan of Jon Blow from a game design perspective, and had watched all his talks I could find related to that, but then I found "Making Game Programming Less Terrible" from Reboot Develop 2017. Even though it was mostly about games and I've been in web dev for ~15 years, it got me thinking thoughts about my industry that I couldn't un-think.

To be honest, I probably would have ended up in game dev, but I had a false idea from a poorly taught high-school CS class that C++ & co. were too hard for me, probably because I struggled in math. But when I first taught myself web technologies in the late 90s, I experienced the joy of programming (believe it or not! :P), and that's what kept me hungry to learn more, and later turn it into a career.

However, the web was changing fast, from its original incarnation as just a bunch of documents; to a semi-interactive, awkwardly animated magazine (when I got on board); to its current incarnation as essentially just a vehicle for install-less programs that run in a sandbox -- except it had completely reinvented the wheel on how to write a program (and not very well).

For years, I had found the joy of programming more and more elusive in my field, and Jon's talk gave me the concepts to start understanding why. Extremely heavy abstraction layers have crept into everything under the guise of best practices.

At this point, I'm trying not to go off on a rant about where web dev has gone. If you're reading this, I'm sure you get it. Anyway, through related searching, I found HMH, started following along, and was shocked how approachable this type of programming actually was. Learning it got me more excited than anything computer-related had done in years.

My trouble is I'm still at a loss for professional direction. Despite how it's more approachable than I realized, it'll be a while before I'm good enough at systems programming to be paid for it.

I'm applying for this one role at a company that makes mapping software -- it's a web dev role but they also have many C++ programmers for GIS stuff I think. Maybe it would present opportunities to learn what I want to learn and move in a better direction. These kinds of things are hard to find though. I've also thought about going back to school for CS (which I never did), but the expense would be tough, and I keep hearing that most CS schools teach as many bad ideas as good ideas.

Anyway, I was hoping to hear from someone who was in a similar boat (background in web dev or a similarly abstract computer field) and successfully moved into more satisfying work. Or even if you were unsuccessful -- misery loves company!

I definitely listened with interest to all the Career Stories, and am really grateful to Casey and everyone who contributed. They were great to hear in general, but I didn't find something I could apply to myself specifically.

If you read this far, thanks for your time, and even if you have nothing else to say, a "hi" would be appreciated. :)


P.S. I thought I remember Abner saying the Handmade Network site and forums run on a custom backend? I can't help being curious about the technology. Does it have anything to do with Casey's C-based web system that I've heard of?

P.P.S. Happy holidays/new year!

Edited by winnythefoo on
Yeah, I hear you. I am in a very similar boat where I learned C# and PhP in college. I tried picking up C++, but I struggled with it for a close to a year. It wasn't until I started learning C and realized how easily it was relative to all the features of C++.

I am only starting to get to the point now where I am getting comfortable with C and C++, that I am feeling eager to start learning some graphics libraries. To be honest it has taken me close to 4 months, reading a book on C (doing all the example problems, 'C programming', Knking), and one on C++ ('Accelerated C++', Koenig, Moo). I still have to all these other books to read, win32 api, directx, some algorithms/data structures books.

I will tell you that once you start learning this stuff it becomes a lot easier. One thing that I found which has helped make my learning a lot easier was: focusing less on how I can get paid programming, and more on how I can enjoy the process.

If this means you keep doing web stuff while learning a little low level programming on the side, then maybe thats fine. It's usually the pressure of feeling like we have to succeed which sometimes causes fear of attempting new things.

Even if you only learn for an hour or two every day you will start moving in the general direction. Maybe it takes you a year or longer, like I said I spent 4 months just on the languages never mind the math, apis, art, sound, game design, network programming, etc. etc.

Another thing to note, is that I don't regret any of the web stuff I learned databases, front end, security or anything. They are just tools, and writing larger programs has taught me to be more comfortable with logical complexity. I think the hardest aspect of programming isn't the syntax or the language, its more of understanding the flow of code.

There are times when I go to meetups and I see people who have been programming much much longer then me. Yet, I find that since I managed to stay so aggressive about my learning and developed good habits, I often surpass many of these sorts of people. Being that you have so much experience programming, I don't think it should take you long to learn these tools. Just try not to put so much pressure on yourself and have fun with it.

Edited by delacrank on
Hi, welcome to the community. I've got nothing on the subject, but I believe the site use a Python framework. Hopefully someone from the staff will come over here.
Hey winnythefoo. Similar story here. I started out in native iOS app development, which is a little more removed from the web stack. But yeah, I can feel your frustration because it is also mine.

The mobile space has lately gone through one cross-platform craze after another, and they're all terrible. React Native has so many dependencies you can barely get it to compile your iOS app without breaking. People keep telling me it's a faster way to build mobile apps, but It's really hard to see that when you spend like half of your day fighting the thing and trying to get it to build.

Not to mention, it feels like we've forgotten that C/C++ is also cross-platform. It surprises me that we aren't using it for the core logic of our apps, then doing the platform stuff in Java/Kotlin/Objective-C/Swift

In any case, I am actively working on pushing my career far far away from this "framework of the month" mentality, and I have learned that you just have to be careful not to immediately throw the baby out with the bath water. There's no sense quitting your job over it or refusing to take work just because you don't like the tech stack it's written in (at least while you need the money).

I've become more frugal and am saving 50% of what I earn so I can quit mandatory work ASAP. I also have side projects and businesses that generate some revenue for me. In my spare time, I try to turn my own learning into products I can sell to others to accelerate financial independence.

It's a long road. I have no idea when I will be successful at it. But I do know it is inevitable. At some point (probably 8 years from now), I will either find the career I love or I will have invested enough money to focus 100% on my own creations.

Edited by Ted Bendixson on
winnythefoo
My trouble is I'm still at a loss for professional direction. Despite how it's more approachable than I realized, it'll be a while before I'm good enough at systems programming to be paid for it.


I don't think you need to go back to college. However, I also agree with delacrank and tedbendixon's earlier posts in general. Which is to say you should separate low-level programming from careers into the foreseeable future. I don't know you, but from what little I gathered it seems either 1 or 2 years of personal study would get you in good hiring shape somewhere as a start.

Keep your current job, then carve a space in your free time to learn the fundamentals of modern computer systems. Slowly. Enjoyably. A system you learn to define is a system you can control. Of course, you want to define x64 machines as a programmer, not a hardware designer.

Last year I recommended CSAPP, and I will continue to do so** Do all the practice problems, work on the homework problems that interest you, and most importantly take a look at the referenced literature at the end of chapters. Buy at least 2 or 3 books from the bibliography, and work on those too. In other words, get to know all the programmer's shoulders these authors are standing on. As you study them and their topics, you'll notice most of these heroes are busy in mailing lists discussing and improving the core infrastructure everyone relies on—web developers included. My boss and his company, Sean Barrett, Casey Muratori, Fabian Giesen, etc. are the exception when it comes to strong online presence.

In other words, there's a hidden realm of silent and well-paid low-level system programmers that have been granted a rare high-degree of autonomy over their own work. But they're not mainstream like web development is—a lot of the hiring happens behind-the-scenes. You'll start to find real opportunities once you start reading books and asking more questions both here and beyond (I'm glad you're no longer a lurker!)

At some point, deep into your studies, you'll start to understand how the Python language could be made to work. You'll write your own half-baked Python interpreter and never release it because it's not robust enough and people don't care. You'll slowly start scrutinizing GNU/Linux to the point where you say (with a serious face): "Gee, it'd be useful to write my own LKM to embrace-and-extend this device driver."

If you're at that stage of thinking, our conversation is moot because you're already a full-time low-level programmer :)

** Get the hardcover 3rd edition as shown in the CSAPP website. The softcover international edition is infamous for having mediocre exercises. From the authors themselves:

Unfortunately, the publisher arranged for the generation of a different set of practice and homework problems in the global edition. The person doing this didn't do a very good job, and so these problems and their solutions have many errors.


The hardcover version is quite pricey, but I can vouch for its enormous value.

mrmixer
I've got nothing on the subject, but I believe the site use a Python framework. Hopefully someone from the staff will come over here.


I'm not leading the network anymore, but before I left, the development team did indeed use a Python framework (Django). However, they ignored best practices like using classes for requests. Instead, it was a blob of custom functions to handle network requests, and for the database they leveraged the relational model afforded by the framework.

winnythefoo
P.S. I thought I remember Abner saying the Handmade Network site and forums run on a custom backend? I can't help being curious about the technology.


The forums and project system are custom in that we didn't use 3rd-party forum software, but instead Jeroen and Chronaldragon built them on top of the framework as straightforward as possible. In the early days there was momentum building to start a community for low-level programmers, new and old, inspired by Handmade Hero. Unfortunately, there was no place to gather and share our projects properly, and we didn't want that momentum to fade away. Thus the old team and I decided to leverage something available and ignore the parts that seemed a bit silly (i.e. OOP).

Looking back on it I don't regret that decision.

Edited by Abner Coimbre on Reason: Typos, what else!
It was almost shocking how much your post resonated with me. I immediately registered just to write this.

I've been working on the web for ~5 years. I was getting more and more dissatisfied with my work environment. I did go back to university to study CS and it helped a lot (I'm still earning my Bsc). Not everything they teach is directly useful but the useful parts make it worthwhile and going to uni is very different when you know just why you go there, I can only recommend it.

Just this year I managed to make the switch and moved towards systems programming and then to cloud infrastructure. Honestly I still don't feel like I found my path but I'm definitely closer.

I'm in the process of writing a blog post about my thoughts on exactly the topics you mentioned, I'll let you know when its done, maybe you'll find something useful in it.

EDIT: here it is:
https://whage.github.io/update/2018/12/29/which-way-forward.html

Btw, you write very well.

Edited by a.sallai on
I'm glad I posted here. All your replies have really given me some hope for my career.

--

@delacrank: Thank you. That's some solid advice. It has some parallels with Abner's advice, i.e. focus on enjoying the learning, not stressing over ramping up too quickly.

--

@mrmixer, thanks for the welcome!

--

@tedbendixson: Thanks for your reply. I really identify with your experience with new tech that supposedly makes a task easier once you get it to work. But very little thought tends to be given to the effort required to make it work. There is a sort of pathological optimism in some corners of the tech world. Anyway, I admire your determination to accomplish your goals and thanks for the good advice!

--

@abnercoimbre: Thanks for your advice. CSAPP looks really good! For anyone reading this who is discouraged by the price, I notice that you can also rent a digital copy for USD $33.99 for 6 months (edit: not recommended*), or (if you're in the US) rent a hard copy from Amazon for USD $29.69 (either for 5 months, or maybe it's just whatever they think a semester is?). The nice thing about the Amazon rental is you can just pay the difference if you decide to keep it. I'm in Canada though. :P

I'm curious what this "hidden realm" of low-level programmers tends to work on for a living. As I understand it, the well-known people you mentioned are basically either working for RAD or making their own games/projects (i.e. they earned autonomy through the success of their previous work).

Also, thanks for answering re: the site software. Many times in my day job, I wished I was allowed to use similar techniques. :) Also, thanks for your work organizing this community and your streams and interviews. I got a lot out of them.

* Re: the digital copy of CSAPP: the formatting and the reader software are terrible, and the code examples even have typos. I got a refund and bought the hard copy. But it's an okay way to do an instantly-available trial, just be sure to refund before 14 days. :P

--

@a.sallai: I'm so glad my story resonated with you and inspired you to register too!

Your blog post was interesting. You mention cloud-based infrastructure as something that compounds the issue of too many abstraction layers. I've thought about this too and when I've watched some of the Handmade Dev Show interviews, I wonder what the interviewees would have to say about that. If I can opine for a moment, I wish we'd stop using the "cloud" buzzword and just call it what it is: mass computing. Viewed that way, the phenomenon is basically an inevitable thing that humans would try out, once we had computers. In fact, in some ways it's just going back in time to the mainframe days. But what does it mean for your ability to reason about a software problem when your program will run on a virtual "slice" of a computer, and maybe you don't even know what hardware underpins it, or how the virtualization software is treating it?

Edited by winnythefoo on Reason: recommend against digital rental of CSAPP
Not to derail this thread but feeling obliged to reply: your argument about cloud being a renaissance of the mainframe is interesting, I'll think about it. About your question on reasoning about cloud based software: I guess it does make it harder because you get a "hidden layer" into the picture, it being the provider's infrastructure and virtualization technologies.

Back to the thread: CS:APP was a game changer for me. I first heard about it in Abner's "NASA’s Coding Philosophy" article. When I first looked through the table of contents I felt like someone analyzed my weaknesses and wrote a book just for me. It is a very long and dense book, often with dry sections and time consuming exercises but it was worth every cent and much more. I can't recommend it enough. I even got a softcover version with lots of typos and mistakes but I still don't give a s*** it's that good.

Edited by a.sallai on
winnythefoo
I'm curious what this "hidden realm" of low-level programmers tends to work on for a living.


They're everywhere. Today's foundational systems -- a commercial 3D engine, some operating system kernel, Virtual Reality SDK, general-purpose programming language, and so on -- are no longer grokkable by one person. It only seems that one person is in charge due to rock stars and the fact that hiring low-level programmers usually happens very quietly, very quickly, and without fanfare.

Jonathan Blow has a studio behind him (~14 people at the time of writing.) They're not all low-level programmers, of course, but certainly a handful of us are and AFAICT most are happy working autonomously and behind-the-scenes.

My previous employer (Kennedy) has an army of senior low-level programmers who you will never hear about, but have given me the helpful insights into the workings of modern systems.

Finally for every big name you hear around these parts -- Mike Acton, Tim Sweeny, Chandler Carruth, John Carmack, etc. -- they all have "armies" of their own, however big or small, that do low-level work.

You'll know more from genuinely reading books (like CSAPP, to beat a dead horse) and chasing references and bibliographies. Join the mailing lists of one or more high-profile open-source projects. Seek to understand, and never underestimate the power of a book's practice problem. During this process, you'll eventually know what to do and where to look for opportunities; it just happens.

Productive low-level programmers are an unimaginably crucial component of modern society.

a.sallai
I even got a softcover version with lots of typos and mistakes but I still don't give a s*** it's that good.


I mean, that's a good strat to save money. Buy the cheaper softcover and then rely on the author's errata

EDIT: Regarding "you'll eventually know what to do" it would seem hosting a software project on the network can pay dividends :P. There's also other helpful stuff like reporting bugs, fixing bugs, writing tests / docs for projects that need it, or general volunteer work somewhere. The reason I said one should enjoy this process slowly is that this stuff takes a while to perform reliably (from what I've seen in this community, it's on the order of 1-2 years, but obviously it varies).

Edited by Abner Coimbre on Reason: Typo
Thanks Abner, that was quite illuminating. And yeah, hope to host a project here some day. :)
a.sallai: Cool, I'm part way into CSAPP and have exactly the same opinion so far. :)