Not sure what you mean by "great." I suggest shooting for 1x effectiveness -- 10x comes with experience.<p>CS knowledge? Very little. It certainly helps to understand basic data structures and algorithms, algorithmic complexity and "big-O" costs, how compilers and interpreters work, etc. You probably don't <i>need</i> a comp sci degree or background but that knowledge will help because it gives you a set of categories and conceptual framework to understand programming.<p>Basic skills:<p>- relational databases and SQL<p>- HTTP protocol, the request/response model, what REST means and how APIs work<p>- enough about DNS, security, networking, cloud infrastructure to not get confused or misled<p>Typical back-end languages:<p>- Javascript with Node.js and any of the hundreds of frameworks (prepare for dependency and deployment problems)<p>- PHP (very often with the Laravel framework), commonly-used, easy to deploy<p>- Go + HTMX, one of the cool new things and fairly widely used<p>- Python + Django<p>- Ruby on Rails<p>- Java, C#, more in enterprise/large business environments but valuable to understand<p>- Elixir + Phoenix (niche but well-liked by people who use it)<p>- etc.<p>If your definition of "great" includes "can fairly easy stay employed for the next decade or two" stick with the mainstream languages and tools. You can always find work on legacy codebases written in whatever was the big thing a few years before -- PHP all by itself provides a bottomless pit of maintenance work.<p>If you only want to work with the latest cool tools on green-fields projects you will have both fewer opportunities and more competition.<p>You get "great" or "10x" when you can reliably add business value and solve problems that stump (or repel) most other programmers. That mainly comes from practice and experience, and a willingness to adapt and extend your skills.