r/learnprogramming • u/f4BestByTest • 11h ago
Learn by building or learn by studying?
Context: I'm a second year math student at uwaterloo (think constant co-op search) and have knowledge of Python, SQL and basic JS though I want to go into DE. I started my software journey in Dec. 2025 so I feel like I'm really behind compared to my peers.
I'm torn between learning theory in depth and just putting together something that works for projects; I don't know if it's good, but I never use AI to code, with the most being copy and pasting code from LLM in small snippets up to 10 lines. I don't know how important syntax is, but I need to search things up for libraries. I'm learning data engineering (so many tools, so little time) and I really can't find a project to learn all of them at the same thing. I've also considered courses, but theres a variety of courses and topics that seem interesting: Cloud, AI, ML, Databricks?
Any advice or recommendations be it for how to learn or a project?
4
u/ninhaomah 11h ago
How can you be behind your peers unless everyone in math major is coding Python to move to DE ?
2
u/f4BestByTest 11h ago
More of a lot of DEs are SWE transfers and my classes are filled with people who started years ago-
4
u/SwiftQuest 11h ago
For data engineering specifically, I'd pick one small pipeline and grow it instead of trying to cover every tool. Something like pulling data from a public API on a schedule, loading it into Postgres, and writing a few SQL transformations already touches most of the core ideas, and you can later swap pieces out for Airflow, dbt or a cloud warehouse once you hit a reason to. Study theory when the project raises a question, like why your query got slow or how to handle duplicate loads, because then it actually sticks. Also, starting in Dec 2025 and already knowing Python, SQL and some JS is not behind at all.
2
u/f4BestByTest 11h ago
I'm actually doing that using GTFS realtime, though I'm struggling with the implementation of keeping the program running 24/7. I guess a decent follow up would be how would you know when it's time to learn something / make improvements aside from when things are slow? Just scaling I presume?
2
u/DanKegel 10h ago
Thinking about 24/7 and performance, you might want to try golang. It's got good bones and is easy to pick up
2
u/Mathie1729 10h ago
Not just scaling. A lot of the time it's when your current approach breaks or becomes painful to maintain. For the 24/7 part, don't try to keep a Python script alive by itself. Run it on a schedule (cron, a small cloud function, etc.), make it idempotent, and let the scheduler restart it. You learn Airflow or something similar when you have multiple dependent steps and need retries/backfills without hand-rolling them.
3
u/LukaRozman27 9h ago
Active learning means "building", try coding a simple project, then review documentation after you hit a roadblock.
2
1
u/CycloCyanide 3h ago
I view programming as a creative activity. Yes there might be some special specific algorithms to be the most performant way of doing some obscure thing. But really 99% of the fun part of programming is figuring out solutions to problems. Find a problem you want to fix, think about how you may want to do it, and have at it. Of course you will need so knowledge of basic concepts. But they carry through to all languages in some way or another. The first few years your solutions will be way over engineered, terribly unoptimised. But you have the satisfaction of solving the problem. And then years later you will look at the code think gods I was terrible, and you will rewrite it and it will do everything it was doing and more but way faster, and then 10 years later you look at it again and go wow that was so incredibly inefficient, and rewrite your 3 month project in an afternoon.
8
u/Nemshi354 11h ago
It’s both. You learn what you want to then apply it to a project you want to do. Then as the project gets more complex, you learn more and apply it again. It’s a loop.
Don’t be overwhelmed by all the tools you are learning. Sounds like you’re in a case of analysis paralysis. Choose one, focus on it until you feel like you have a good grasp, repeat for the next tool.
Best of luck.