Hello!
I'm a recent college graduate with a B.S. in Computer Science, and I've been working as a software engineer for the last 6 months. I work for a small company that makes a windows desktop application loosely related to payment processing. The code base is 10+ years old. It's all built around the .NET ecosystem so the majority of the code is C#, but there's also SQL server backend. The "vision" for this product has changed as the company has grown, and there has never been a fresh rebuild. So, the code is a little haunted and it comes with all the aches and pains of "legacy code" (I know it could be worse).
To clarify, I like my job. Genuinely! I like software development. I like the company. I like my coworkers. I like the pay.
But, I'm stressed! I'm stressed about losing my job. I'm stressed about not completing my assignments on time. I'm worried that I'm not getting any better at my job. I'm worried about getting fired for underperformance.
In a nutshell, I'm always worried about not being skilled enough. My recent performance review came back positive! But, my anxiety doesn't sleep. I'm safe today, but what about tomorrow?
My therapist and I will work through the anxiety, that's not why I'm here. I'm here because I'm looking for professional advice. Software development is a meritocracy, I've made peace with that. If I want to stay a software engineer, I need to keep improving.
Speaking honestly, I'm not sure I want to spend my free time on this Earth getting better at my job... However, I'm going ignore that feeling because I need money and this is the best job I've ever had. So, I want to get better at my job, but I'm overwhelmed by the how.
The easy answer I've seen online is "get good". Translation, grind it out. Read every book. Write a million programs. Learn every language. Start your own tech blog. That's hyperbole, but still, this "grind set" ain't working for me.
I've been told to focus on practice on daily problems(LeetCode / Interview Prep). These problems can be interesting puzzles, but they don't really provide insight in my daily work. Also, I don't live in a "Tech Hub" where it's advantageous to switch jobs every 1-2 years.
I have a reading list a mile long, but I haven't put a dent in it. I've made many attempts, but my eyes glaze over after an hour of reading something like, Design Patterns: Elements of Reusable Object-Oriented Software (1994) I can do better here, it just feels so slow and tedious...
My manager has directed me toward the various trainings from https://learn.microsoft.com/. I'm not sure if these are helpful, or just appealing to management because they quantify professional development. Oh! You completed your task, and you got a badge to show for it? Checkbox. Maybe I'm wrong?
What about learning through personal projects? I know that I should have a personal website, and a GitHub full of projects and open source contributions, but I don't. I don't have much free time during the week. When the weekend comes around I'd rather not be programming at a desk like I have been all week.
Admittedly, I can be better. It's hard to help someone who says "I don't wanna", or "Ugh... this is so boring and I can't focus" Something has to give, so I'll go first. Laziness aside, I can commit to 2-4 hours a week of study. Let's start there.
I'm not asking for a silver bullet. No one is going to have a perfect zero-2-hero programming course that will turn me in to a 10x developer. I don't want that.
I want to know how you handle it.
If software development is your 9-5, and not your passion. How do you keep improving?
Where does your confidence come from? When layoffs come around, how do you know that you are safe? Or, how do you know that your skill set is relevant and desirable?
Thank you for reading.
You don't really. If you are not able to find 3h a week to make at least one tutorial a week, then do it once a month, but if you are not open to learn outside the job, no matter if it is software development or anything else, I don't see how you can improve.
And yes, the best advice is to build things, you don't have to build complicated things. Build things you enjoy. It will help you find time for it. Check https://github.com/codecrafters-io/build-your-own-x - or search on youtube for any tutorial of things you like.
Do things you enjoy, and try to finish what you start - but don't overthink if you don't. Just keep building. If it's hard to finish, try to build something smaller, or easier.
My advice is just write more code until you make enough mistakes that have consequences that make you understand why it's better to "write less code".
If you consider how people get better at other skills, let's say 3d printing or carpentry; they make a ton of useless stuff for reasons that might only make sense to them - they 3d print figurines of stuff from games or movies they like, they craft things just to test out a new machine or to give them a reason to buy some gear.
Maybe don't look at your self as a "programmer", look at yourself as a "person who knows programming". If you like video games you might develop a tool that helps you generate strategies for that game or if it's an online game you can make a tool that queries some of the APIs of the game so you can run analysis or alerts on what happens in the game.
All in all we are people who write code that serves other people in the end, so being "good enough" is just about finding people that need the level of code you are able to write.
I think 6 months of experience is a very short time to reach conclusions about what does or doesn't work for you, maybe 6 years might be enough.
Try not to develop an emotional attachment to your job, you will end up earning more and learning more if you switch companies every 1-2 years and that's hard if you let your current position define who you are.
Also check out this list[0] and read about some of the biases if you're not aware of them, it helped me to deal with the way I feel about myself and others.
[0] https://en.wikipedia.org/wiki/List_of_cognitive_biases
PS: also when dealing with online learning content try to consciously consider if it actually teaches you something or just makes you feel like you're learning something. The latter is a waste of time in my honest opinion.
Good news is that you're here asking for advice on how to drive your career instead of letting them do it. Bad news is I don't know how to help you if you don't actually want to write code outside of work.
In general I've experienced a lot more valuable growth out of personal projects than LeetCode bullshit. I like to MAKE things, not solve pointless CS puzzles. My eyes also glaze over when I try to read a book or watch a video on some silly CS trivia. So if I had to rank effective strategies for me from least to most effective it's books -> videos -> stupid puzzles -> making things (using videos or other materials to get over sticky points)
You'll notice some things here if you look closely. I have explained what works for me, and why. You'll have to do some experimentation to figure out what works for you, then lean in to that.
Lastly for anyone that has trouble consistently doing a thing I always suggest the "just one hour" method. You promise yourself one hour of your best effort per day of working on that thing. If you're feeling good and get sucked in and work on it for multiple hours that's fine, if you struggling to give any fucks that day you complete the hour and move on to whatever other things you wanted to do.
I'd flip the question and ask: why do you think the 40+ hours of work you do for your employer every week isn't also helping to improve your skills?
> Where does your confidence come from?
Your employer hired you because they think you'll be able to do the job well; after 6 months your manager is telling you that you're doing the job well. Where is your lack of confidence coming from? Literally the only people who matter are saying that they're confident in you.
> When layoffs come around, how do you know that you are safe?
Ah, this one's easy: you're not. No one is. Stick with the industry long enough and you will: (a) get laid off, and (b) watch better engineers get laid off while you don't. Decisions for layoffs are made at a high level by people who don't know your name and don't care about you.
> how do you know that your skill set is relevant and desirable?
That one's tough. I've always chosen to focus on fundamentals rather than learning the latest language/framework/whatever, and so far it has worked out quite well for me. Beyond that, I'd recommend worrying more about building a network of people who respect you and your work -- they're the ones who will get you a new job when you need it. Meritocracy is a half-truth at best, and having someone who will help you get your foot in the door at a company is a huge benefit.