My current advice for making the machine write code/solve problems for you successfully, condensed:
First, use Claude Code if you can. It's the best at this and has been for some time. It leverages the terminal, terminal tools, and the fancy markov chains to work in a way that feels familiar to people who are terminal users.
Second, you must always remember it is a machine. It does not think. It is closer to the "do what I mean machine" than it used to be, but it is still a markov-chain-shaped intern that does what we tell it to do mindlessly. Garbage in, garbage out. Interrupt it ruthlessly without sentiment if you figure out it's heading down the wrong path.
Third, context is everything. The context window is how many word-tokens about the problem space the model can consider. Roughly, token counts map to context size. Hard problems benefit from models or providers who give you lots of context to work inside. BUT! You can also use different models for different parts of a task! And here's the crucial i