| Loving programming and loving professional software engineering are two very different things. SWE does have a certain amount of room for up and down--any objective-based thought work job does. But if you're going to be part of an organization, at some point you need to learn how to be constantly valuable. But that is not necessarily the same thing as being constantly productive. There are other ways to contribute value to a team and, for that matter, other ways to structure your work so that you do harder stuff while feeling more up to it. Macros, metaprogramming, other tooling, all that stuff can be very useful for packing work into your useful moments and benefitting from it later (but can be an excessive timesink too, so watch out). Sometimes you're not up to coding but you can put together an architectural plan for the next task in line. And to be honest, if you get very good at coding you may find that your hour of high-quality work in a day is enough to keep you employed because it has as much/more impact than someone else's four hours of mediocre work. I'm not even talking 10x programmer here, just that most good code is written in jumps and spurts, maybe capped off with a "holy crap the groove" all day session or three. But the thing is, at some point you'll have a crunch deadline that won't accommodate the fact that you're not very useful that day. And early on, you're definitely going to be leaning more on the consistency of your beginner/intermediate work than anything. And no matter what, you always have to keep relationships going with your coworkers. The social/political aspect of software engineering is a pretty big deal in most companies. It's not something you necessarily notice when things go well, but you'll sure as hell notice when it doesn't. Depression hits that hard. Overall, I think you've gotten some good advice here, though I will say as someone who has dealt with similar issues in the past, freelancing will require an extra level of self-discipline to pull yourself back onto the rails after an episode. But I also think it should be on the table to do something other than software engineering for a living. It's entirely possible this is something that, for you, would be a great thing to do on the side, not so great for a paycheck. |