I'm trying to learn programming, but I've struggled to stay motivated with introductory computer science courses because the material feels difficult and disconnected from the things I want to build. Tutorials also tend to leave me stuck when I run into errors I don't understand.
I'd like to use a small robot project as a long-term goal: a machine that detects my face, controls servo motors, and launches or dispenses cigarettes toward me. The idea is intentionally silly, but it would give me a reason to learn computer vision, programming, motor control, and basic hardware. For safety, I'm open to starting with a harmless alternative, such as dispensing or moving an object instead of firing a projectile.
What fundamentals and resources should I focus on first? My biggest weakness is troubleshooting, since I don't yet understand enough programming or electronics to diagnose problems effectively.
3 Answers
A project goal is useful motivation, but this one combines several advanced topics: programming fundamentals, electronics, motor control, computer vision, and mechanical design. Trying to build the complete version immediately will probably be overwhelming. Work upward in small stages: learn basic programming, write simple programs, control one LED, read a sensor, move one servo, and only then combine those pieces. Also consider making it dispense or point at an object rather than launch anything, since projectiles can cause injuries.
A practical learning path could be: basic Python, then simple command-line projects; basic circuits and electrical safety; a beginner microcontroller such as an Arduino for sensors and servos; and finally a small computer such as a Raspberry Pi for camera input and face detection. Keep each stage independent and document the wiring, code changes, and errors. For the mechanical part, start with a safe target, a light foam object, or a non-launching dispenser rather than anything that could hit someone’s eyes or face.
Finishing an introductory course would probably help, especially with debugging and problem-solving. You don’t need to love every exercise, but the fundamentals are what let you understand error messages, test assumptions, and find out which part of a program is failing. When stuck, reduce the problem to the smallest possible example, read the exact error, test one change at a time, and write down what you expected versus what actually happened. Don’t rely only on brute force or copying fixes from searches.
Getting stuck on a difficult assignment for weeks can be a sign to ask for help or temporarily switch topics, not necessarily to abandon all the fundamentals. Returning with a smaller practice problem may make the original material easier.

That makes sense. I’ve been treating the final idea like a first project instead of breaking it into smaller milestones. I’ll try to build the simpler pieces one at a time.