I'm great at backend, frontend, and design, though design is harder for me. I'm also great at marketing and am often called a liar because of it (my vision of the future seems so far-fetched that people have problems believing that I'm very close to making it happen and that with a little help (for now I'm working on becoming even more self-reliant) it'll all happen).<p>My training in the CS fundamentals are solid, but I have a Computer Engineering degree, so there are some gaps (weakness when it comes to graph theory), but those are made up for by a wide range of experiences in Electrical Engineering whose applications overlap Software Engineering in a very real way (if you can see it). For example, I use the Kalman Filter in my head ALL the time, and it seems like thinking about things as being in a black box that you feed input and get output is very useful for debugging and getting started quickly. I naturally like drawing connections between disparate things, and learning a wide variety of things which can then in turn be applied to a wide variety of things, so a Computer Engineering degree was the correct one. I can easily brush up on the gaps, which is what I'm doing now, and then all that exists is a Computer Scientist with all this extra knowledge that he's waiting to apply in clever or unique ways.<p>I not only know backend and frontend, but I'm good at both. Though I'm good, I'm often unconventional, so those that are sticklers for convention and the specs won't be able to appreciate the work that I do. I spit in the face of minutiae like code formatting and spending a lot of time breaking things down in favor of getting something working, then when it's working to my satisfaction I can dive into all the details. I would previously get overwhelmed, because when starting a new project I would see the entire system and how it all came together and would get stuck on all the details, but after learning how to wait and how to let things marinate for a while, I see this as a good thing. I see everything connected together, and design a system that's holistically sound. And the better I get across the board, the better wired together the system is.<p>If you are a backend engineer, then learn javascript and that will get you a long way toward being a full-stack developer. It seems as though picking up language is not that difficult for many engineers, so you can just think of javascript as another language. Then learn HTML and CSS. Even if you don't become full-stack, it's good to know the other side of the fence, so you have an idea what's going on. All you have to avoid is to try forcing baby-understood conventions, as though you know what you're doing, on those front-end people trying to do something different, or that all of a sudden seem to not know that much. Things are rarely as simple as these management-fueled blanket rules (which are often sh*t).