I don't have a CS degree but I am working as a junior engineer. I am currently in the process of learning software engineering concepts and building foundational knowledge of systems (haven't really gotten into it but that's my next plan).
With the whole AI frenzy going on, my attention keeps diverting from one area of focus to another. It's hard to prioritize the things that I want to learn, and I am getting quite overwhelmed. Why? Because I've 1 year of experience and as a result of this constant flip flopping, I don't think I have really gained foundational knowledge of a certain topic which is appalling.
I failed out of my computer science program at university for this exact reason - did way too many hackathons at the cost of gaining a foundational understanding of topics. I want to do things right this time and not fall for the same trap where I sacrifice becoming good foundationally.
Has anyone faced this issue before? Looking for some advice on how to manage expectations and learning to grow as a developer.
I feel you, my fellow software engineer.
You have to accept this: the field of software engineering is vast, and growing at a pace faster than ever. The number of technologies, frameworks, AI findings, frontend technologies, vector databases, and what not. It's impossible to go deep into everything. If I look at myself -- I know a handful of Google's proprietary technologies deeply and for the rest I have a surface level understanding.
So what do you do? There's two paths here. One, you go deep into an area: like AI, frontend, databases etc. You can have a fulfilling career without needing to know everything else in much detail. The other option is a generalist route: successful generalists, imo, have gone deep into various areas in their careers over time, but their overall breadth of knowledge and foundation runs wide.
From what I can tell, you're more aligned towards a generalist role. You have to recognize that it takes patience and time. Generalist keeps switching areas/domains every few years to gain wide experience. They deliver impact no matter what area they're in. I'm a generalist myself. I've learnt few technologies, but also skillset of how to leads experts and combine with my generalist software engineering experience to land large impact, irrespective of the domain.
More tactically, I'd recommend this: do well what you're doing in your current role. Deliver impact, get promoted. At the same time, do some foundational courses to cover what you missed out from your college degree: distributed systems, databases, AI, operating systems. Remember that the foundation is all you'll remember from these courses over your career -- not the specific syntax, algorithms, programming languages, frameworks, etc. When the time arises to switch domain, you can use your foundation to go deeper.
Good luck!
Being a true generalist is a privilege that is earned with time and accomplishment. The "algorithm" I give earlier-in-career engineers like yourself is:
This algorithm generally takes the first 3-5 years of someone's career. What you'll find is that you can actually have your cake and eat it too! By going super deep in 1 tech stack, that foundational knowledge will transfer fluidly to other tech stacks if you choose to branch out. However, you have to do that initial step first of becoming a respected specialist in 1 tech stack.
I talk about this in-depth in my code quality course here: https://www.jointaro.com/course/level-up-your-code-quality-as-a-software-engineer/focus-focus-focus/
One very practical tactic to consider: find a senior+ engineer at work who you respect and who you think you can maintain a 1+ year relationship with. Make it your goal to learn as much as possible about their expertise. Your goal is to be able to answer tech questions just as well as they can. If you do this, you'll become an expert.
This approach of following people instead of technology works especially well because there are an infinite number of technologies, but we only work closely with a handful of people at a time.
Also, unrelated, but I strongly recommend limiting your use of tech/social media while working: Using Technology/Social Media Productively and Healthfully