I'm starting my first year of computer science at university and have a strong mathematics background, but almost no programming experience beyond basic self-taught Python. Many of my classmates learned computer science in high school and already know several languages, while I feel lost when they mention concepts like DNS, servers, tools, and development workflows. Even though we're covering basic Python, I often feel embarrassed because they seem to know what resources to use and how to approach problems.
I'm also spending time trying to learn Org mode for note-taking, but that has been confusing and hasn't helped me make much progress with programming. I understand theoretical ideas fairly well, but I want to develop practical programming knowledge and become comfortable figuring things out on my own. What would be a sensible way to start building those fundamentals without constantly comparing myself to people who had an earlier start?
4 Answers
Don't worry about learning DNS, servers, version control, editors, and every other tool immediately. Those are separate areas that become easier once you have some basic programming experience. Focus first on variables, control flow, functions, data structures, debugging, and writing readable Python.
Use your university courses for theory, then reinforce each topic with small exercises and projects. When you get stuck, search for the exact error or concept you're dealing with rather than trying to absorb all of computer science at once. Programming knowledge grows through repeated practice, not through memorizing a giant list of technologies.
Try not to let configuring Org mode or other productivity tools become a substitute for actually writing code. Note-taking can help, but it isn't a prerequisite for learning programming. Keep your setup simple and spend most of your time making programs, reading code, debugging, and explaining your solutions in your own words.
You aren't behind—you've simply started later than some of your classmates. Knowing several languages often means they've made a few small projects in each, not that they understand professional software development deeply. Pick one beginner-friendly resource, such as your course material or a well-regarded Python tutorial, and follow it consistently instead of jumping between lots of guides.
The fastest way to improve is to build small things. Automate a repetitive task, make a simple game, process a file, or create a tiny tool for one of your own interests. It will be awkward at first, but each project teaches you how to turn a problem into smaller steps and how to look up the specific information you need.
Choose a direction that interests you and make a small project without relying on frameworks at first. For example, build a command-line game, a file-organizing script, or a simple web page with basic code. Once you have a goal, the unfamiliar terms become easier to understand because you encounter them in context.
A portfolio of modest finished projects is more useful for learning than collecting tutorials. Treat each project as an experiment: finish a rough version, notice what was difficult, then improve it. Your classmates' early exposure gives them a temporary advantage, but consistent practice closes that gap surprisingly quickly.

It helps to think in terms of steady skill-building rather than trying to catch up all at once. Start with one language, get comfortable making small programs, and add related skills gradually. Over time, the combination of skills you develop can become more valuable than being exceptional at just one thing.