I used to like programming, but nowadays my work has boiled down to writing unit/integration tests or just fixing bugs. The last major feature that I implemented was 5 months ago. I don't want to work here anymore.
Should I work on solving LeetCode questions, and aim to get into FAANG companies. Or maybe try to go to Canada/USA/Ireland for a Masters in Comp Sci, because I don't have good grades in my undergrad. I've never faced any difficulty because of my low grades in undergrad yet, but will it be a problem when I go on to become a software architect in the future?
I have stopped learning new things, and working on personal projects because of Dota2. I'm trying to leave it behind, but its hard.
I feel very lost as to what to do right now.
Uninstall Dota 2. It's hard but you can do it. Channel that creative energy into a side project, an instrument or whatever else you find fulfilling. Furthering your studies is also a good idea but be prepared for the marathon that comes with it.
Maybe I won't this time.
I used to game all the time, I now block games for 2-3 months, have a good weekend blow out and repeat.
This has been working pretty well for over a year now, highly reccomend.
- Exercise if you're not already doing it. Bicycling or swimming can be a meditative activity and get you outside some more
- Join another company, possibly even a startup thats doing something you find interesting or meaningful. The job itself probably won't be that different but it will be a change of pace, and maybe if you believe in what the company is doing then you might get more meaning from your day job. If they have in-office culture and you're OK with that, it could also be a good way to get out of the house and get some form of social interaction even if its work.
- Dota2 is clearly the escape, your brain has to choose between something hard and (in the short term) unrewarding vs something thats easy and immediately rewarding. Of course you're going to gravitate towards it. Definitely take a break from it for awhile, but you'll need to replace it with something else.
- If you really want to play a game, maybe try something like Factorio or Dyson Sphere Program, you'll be exercising a different part of your brain than Dota2 and you'll have something to show for your efforts even if its virtual.
- You could try making a game, its a very different style of programming than web stack and you have to do a lot of problem solving from scratch. Plenty of resources on youtube if you're not sure what to make. I've found it very refreshing.
That's like recommending cocaine to stop smoking marihuana.
To OP, if you enjoy DotA then I highly recommend trying to make a DotA clone yourself and coming up with your own unique abilities. If you use UE4, there's a HUGE amount of free assets (especially Paragon assets, Epic's old third-person MOBA).
Write down your side project ideas and work on projects that improve your skills.
The idea of journalling is to get yourself to be reflective and adaptive to your situation.
Edit: write goals that are achievable and that you think you think aren't. Why both? Over time some of your goals shall look different. You can bank on gradual progress. Everyone has the same 24 hours a day, try use them on things you enjoy and that work toward your goals.
You can create a private GitHub repository and simply create a README.md and have a # 24/08/2022 (markdown heading) for each hour, part of day, day or week or month depending how often you journal.
Then add to the top or the end of the journal. Journalling should be something you go to enjoy and unwind and get your thoughts out. It's similar to pulling a piece of string and letting go, it feels cathartic.
You can also interrogate your thoughts and ask WHO WHAT WHEN WHERE WHY recursively for each thought and get to the bottom of things and undergo introspection.
Finding another job that offers you the opportunity to learn new things is what I'd recommend in the short term.
Longer term, it helps to have some kind of goal. What do you think would be an awesome job, even if you couldn't get it right now?
Maybe working on some VR/AR tech, or at some Antivirus company.
I did some OverTheWire exercises, and was learning about creating viruses. But, I ultimately ended up playing a lot of Dota.
I eventually did a Master's degree in infosec. Spent a while developing security products, then moved over fully into security architecture. That's been ten years now and I'm getting itchy feet again!
But don't beat yourself up over playing games, if that's what you do to relax. You can't be on all the time. I go though phases of just going my job, then I get enthused by something. I'd honestly just find another job in the short term that gives you the opportunity to grow in some way.
And my uncle was like, "I wish I had done my masters degree when I was young".
It feels stupid to say this out loud, but this incident did impact my thinking.
Edit: My uncle works at an automobile parts manufacturing company, I'm not sure how his experience applies to software industry.
If an applicant included their undergrad report cards or GPA with their resume, I would take this as a sign of naivete and would most likely slot this person as a junior engineer.
Conversely, if an employer ever asked to see my grades from undergrad as a condition of employment or promotion, this would be a major red flag for me.
Edit: Masters degree is less valuable for a typical web dev or SWE than years of experience in the industry. Specialties like ML/AI are an exception.
Lol.
Maybe pern, but I think e might be replaced with buns http server for a lot of full stack or people will use remix which itself is pretty nice.... Or use go or rust or laravel etc....
Personally I won't touch a mongodb project, you can generally do much more and get better performance using postgres with JSON when you need schemaless tables.
No. Work experience building software that’s used matters.
If you're interested in learning more about business, maybe join an early stage startup (Series B at most) and focus on customers.
If you want to get into devrel or technical marketing, start writing more. Write blog posts for your company blog (since you can presumably do this on company time) if you have trouble finding time to write for yourself. Use company time to attend conferences or meetups and/or give talks.
You can also pivot into product management if you are interested in dealing more with customers.
Some possible career goals https://jvns.ca/blog/2018/09/30/some-possible-career-goals/
Also: Consider saving up some money and then go travelling for a while.
Best of luck!
(tiny self promo, I built spacedleets.com which is a site that uses spaced repetition when you are doing leetcode prep, its free and hopefully will make the leetcode grind a lil less stressful :)
Thanks for the website, I'll check it out. I can use all the free help I can get.
I got my bachelor's degree almost 15 years ago, and never once have I wanted to get a master's degree. Only do it if you have an extremely good reason to, as it doesn't have much market value over a bachelor's.
Becoming a software architect comes with experience, and credentials usually come in the form of industry or platform certifications, not degrees.
Don't worry about learning potential work related things or tech projects outside of work. That's your time, not your employer's time. Go outside, touch grass, and feel sunshine.
I need to prepare to ace interviews for better companies.
Might be worth looking at. In my own life, I have had severe issues with video games, in the past. I use a Mac, though (the worst video game platform on Earth), so that limits my ability to get too compulsive.
It can get bad, for me, but I know that I'm a bit of an outlier.
When I stopped compulsing on video games, my "nights and weekends" projects took off, in a big way.
The rest is history.
Good luck.
I think once I stop compulsing on video games too, then maybe I can start working on my personal projects too.
The reality is that some people at some times are capable of spending a significant portion of their personal time pursuing new skills and technologies, but not everyone can and that's fine. I think that either way, relying on your own personal time and projects as the only forum for developing new skills is not a great way forward. Sure, you might have interests and want to learn things that exceed what you're doing at your job, but you absolutely should feel that the job you are spending much of your day at is challenging and helping you progress as a software engineer. As soon as you feel that it isn't because either you have learned all you can in your current role or because you're interested in other things that aren't really on offer in your job, that's the right time to explore other opportunities.
> Should I work on solving LeetCode questions, and aim to get into FAANG companies.
For better or worse, sharpening up the LeetCode-type skills does seem to be helpful when you start the interview circuit, but not necessarily and it's a secondary concern IMO. From what you've said, it sounds like you need to get a better of sense of a) where you see yourself going medium-to-long-term (senior software engineer, tech lead...more?) and b) what technologies are you interested in?
To me, it sounds like you are just not really working on features and your job has become very prescriptive and limiting. From that standpoint, the fix seems a lot simpler and may not require a huge self/existential review — instead, simply finding a company that wants to hire a proper software engineer who works on real features. Up to you what kind of product you're interested in working on and with what tech.
So I would start there: is your near-term goal to become the best software engineer you can be? Then find a company with people smarter than you that is looking for a software engineer to work on core features with tech that interests you.
I have been in exactly the position you are in many times in my career and it's a completely normal progression. You start somewhere and level up and eventually you have learned all you can or you're interested in a greater challenge. As soon as you start to feel comfortable, that's the time to pursue other opportunities (of which there are many). The people who stick around forever in spite of feeling completely unchallenged tend to do so because it's comfortable and familiar — and there's nothing wrong with that — but it is not the way to grow and progress. All of this is to say that you may not be as lost as you think you are. You're simply experiencing a normal phase of "time to look for other things."
I do want to become a better engineer, so I'll just do that for now. I'll look for a better company, as one other comment suggested. To find a company that makes developer tools, like IDEs, compilers etc.
> I don't have good grades in my undergrad
Don't furnish that information. If the company asks you, bow out - it's an absurd question when you have 5 years of experience.
A masters won't help you much and I wouldn't recommend it in your situation. It's the kind of thing a person thinks about when they feel stuck - I've had the same impulse at every career junction.
> Should I work on solving LeetCode questions, and aim to get into FAANG companies
I'd certainly recommend LeetCode, but not just for interviews. There are benefits to it that nobody mentions: your initial code correctness, your debugging skills, your communication skills, and your familiarity with your programming language all go up.
I just went through this process and the time investment has paid off quite well. I used to hate LC and thought I wasn't capable of landing any job, let alone a top tier job.
FAANG is good for compensation, but not necessarily the most exciting work, so keep that in mind. There are many non-FAANG companies that are good catches.
teamblind.com is a great resource for interview tips, if used carefully.
Expect months-long practice and to do a lot of interviews. Rejection is just part of the process. Interview with companies you haven't heard of/don't care much about first. Respond to random recruiters who reach out.
Don't forget to study for behavioral questions (STAR method) and system design (https://github.com/donnemartin/system-design-primer).
For practical LeetCode tips - expect to complete a few hundred of them if you want to get into a top-tier shop. Speak out loud and explain as if you're in an actual interview. Timegate yourself: 7.5 minutes for easy, 12.5 minutes for medium, 20 minutes for hard. These are very aggressive times. If you haven't finished in that time, look at the solution, take notes, and understand it.
Here's a Python script I wrote to help myself with this process. `pip install rich` should take care of the only external dependency. This script randomly selects LeetCode question numbers and creates a markdown file for note-taking. When I failed a question, I would stick it in `attempted` and it would come back up eventually.
#!/usr/bin/env python
import random
import sys
from pathlib import Path
from rich.console import Console
LC_COUNT = 2218
TIME_LIMITS = {
"Hard": "20:00",
"Medium": "12:30",
"Easy": "7:30",
}
crushed = {}
mediocre = {}
attempted = {}
short_list = {
# Blind 75
76,
102,
105,
124,
128,
143,
152,
153,
198,
207,
208,
211,
212,
213,
230,
238,
252,
269,
271,
295,
300,
322,
323,
371,
417,
422,
424,
435,
449,
1143,
}
all_lc = {num for num in range(1, LC_COUNT + 1)}
untried = all_lc.difference(crushed)
lc_options = short_list or attempted or untried or mediocre
lc_options = lc_options.difference(crushed)
if len(sys.argv) > 1:
num = sys.argv[1]
else:
num = random.choice(list(lc_options))
console = Console()
def user_input() -> str:
return console.input(prompt="[bold blue]>>>[/bold blue] ")
console.print("LC:", num)
base_path = Path.home() / "LC/"
for existing_path in base_path.glob(f"*/{num}-*.md"):
console.print("File already exists:", existing_path)
exit()
difficulty = ""
while difficulty not in TIME_LIMITS:
console.print(f"Difficulty {list(TIME_LIMITS.keys())}:")
difficulty = user_input().strip().capitalize()
name = ""
while not name:
console.print("Name:")
name = user_input().strip().replace(" ", " ")
url_name = name.lower().replace(" ", "-")
path = base_path / f"{difficulty}/{num}-{url_name}.md"
template = f"""# Problem: {name.title()}
https://leetcode.com/problems/{url_name}/
*Difficulty:* {difficulty}
*Status:* Untried
*Time:* ? left out of {TIME_LIMITS[difficulty]} minutes
# Notes:
# Attempts:
##
Time: O(?)
Space: O(?)
```
```
# Solutions:
##
Time: O(?)
Space: O(?)
"""
if path.exists():
console.print("File already exists:", path)
else:
console.print("Creating file:", path)
with open(path, "w") as outfile:
outfile.write(template)
console.print("Done", style="bold green")I think it'll be better for me money-wise once I land a top-tier job. It'll also make my resume much better.
I'll just uninstall my video games, and start practicing. Thanks.
In most professions, people learn on the job and don't have personal projects. It's OK to work 40 hours (or less!) a week and not think about your job on nights or weekends.
I have personal projects that I enjoy. I usually only work on them a few days a year. They are strictly for my own personal enjoyment and I could not imagine a prospective employer caring or being impressed.
I learn new things by taking time out of my regular 9-5 workday, even if the things I learn aren't directly related to my work. And my employer sends me to conferences for continuing education.
If dota2 is problem in your life, uninstall it. But it's normal and healthy to pursue hobbies and interests that you enjoy after work. Literally none of the non-programmers in your company (e.g. sales, hr, finance) have personal projects. They go home and play dota2, or bake, or binge re-watch Downton Abbey.
I would suggest starting to look for developer jobs at smaller companies or startups. You're much more likely to be working on all kinds of things instead of being stuck in small areas of the code. Working at FAANG is likely to be the exact opposite where you'll be a bit more of a cog in the machine that works on some small feature.
Something being difficult is a reason to do it, not a reason to avoid it. Easy things get boring fast.
In that case, stay far away from any Fortune 500 (FANG or otherwise). It takes a LOT of work to move a boulder, and smaller companies are much more agile.
In my personal experience, I find 20-100 person companies to be ideal for giving you freedom to work on the cool things.
first of all I recommend uninstall as a priority. the beginnings are hard, you definitely need to find a way to break the cycle work->going home->playing dota by finding appropriate hobby, preferably something physical
as a developer with sedentary/stationary job you _MUST_ be physically active in hours outside of your job, especially if you plan this to be a career spanning multiple years. Balancing out mentally difficult job with physical activity will improve your mood, concentration and performance at work as well. I have seen a lot of my colleagues going to their mid 30's with back problems, chronic migraines, eye problems (redshift the damn monitors guys...), diabetes, general unfitness, etc...
I recommend walks, cycling, running, combat sports, hiking, anything you can do daily and be as active as possible...
...oddly enough I found the most success by maining techies (pre-rework), planting mines, blast off -> write code while respawning. rinse and repeat, enjoy mine kills and stop worrying about rank/outcome.