Hello Everyone, This is Adarsh
I’ve been working as a Software Engineer for more than couple of years primarily designing and developing scalable data processing platforms . Would like to share my journey and some tips for aspiring developers, or for those who want to improve their skills in this specific domain.
I joined an engineering college back in 2017 and enrolled in a CS course. The main problem with the curriculum in current universities is that it’s mainly catered towards research oriented folks rather than Engineers. Also, most colleges in India having outdated courses and low spec lab computers.
Completely wasted my time procrastinating on different stuff till 2019. I kept picking up and dropping different tech domain, getting stuck in tutorial hell and not even building anything in the end.
So, how does one get out of this situation?
Well, before even starting, find like minded folks who are motivated towards the same goal of becoming a developer. Ideally try to find someone from your college. If not, reach out to folks on social media, just 2 or 3 would suffice if they stick with you together till you graduate.
You could brainstorm any ideas, designs or approach that you might have and could further enhance them with your friends.
So, in 2020, COVID hit and we all were stuck inside our homes, with enough time in my hand. That’s when I properly started my developer journey.
The most important thing that people skip are the Computer Science fundamentals. It would be really difficult to understand a complex software in depth. So, learn about Operating Systems, Compilers, Database Systems, Data Structure, Web Fundamentals, Communication, Discrete Maths, Computer Architecture etc.
Start learning any one programming language. My personal recommendation would be C, but you can start with anything. Here are some general guildelines:
- Don’t go through each and every topic there, just take a crash course, remember to code along
- Start with coding challenges to get a hang of it - I’d highly recommend Advent of Code for that.
- Once done, start building an application with that language. I Suggest a chat app w/ database connection. You’ll learn how to use networking, UI and connecting to database with that.
Note: you might not be able to understand these on your first try. Just keep googling and making notes
Don’t go too deep into these if you dont have much time. Do a research on industrial applications and implementations of various technologies. Most of your time should be spent on this:
- Firstly, start with the high level architecture of whatever you’d want to learn. It helps breaking down complex systems into simpler components.
- want to learn about computer architecture? Go and view the spec sheet of simple computers such as Raspberry PI
- For networking stuff, read RFCs (Request for comments), Implementation of tech like WebRTC, gRPC etc.
- For Databases, OS or Compilers, there are a lot of wikis available with their architecture. Also, a lot of them has their source code on Github (linux, Postgres, OpenJDK) etc. Just go through them and now try to deep dive into specific concepts. e.g. : How does networking work in linux?
One tip for beginners who don’t have a consistent source of income yet. Do some research on the tech stack utilized across organisations through Job postings, cold emails. DMs, etc. Pick the ones that have the highest demand and start learning.
Remember this, the single most important goal of a software developer is to build products to cater user requirements. So, rather than getting stuck in language or framework wars, treat them as tools and learn their trade-offs. Also, do not learn things just for the sake of it. Google/Chatgpt their use cases and think of a project that can utilize it. Learning by building projects is the best IMO.
Learn high level system design to better organize your projects and break them into smaller components. This video from freecodecamp is a great start: https://www.youtube.com/watch?v=m8Icp_Cid5o
Learn some devops concepts like: git and github, docker, diagnostics, logging, monitoring. Once setup, they really help in making your job easier as a developer.
Now, you’re ready to start working on real world projects:
- Reach out to startups through twitter, linkedin, etc. Try to get anything to work on, even for free. It’s really important to have real world exporsure and highly increases your chances of getting a job. Note: Do some research about them beforehand.
- Open Source projects: Contribute through code, documentation, debugging or discussions. To find issues, github advanced search can help a lot (Just select whatever language you might like and you’ll get the repos)
- Through initiatives like GSOC, MLH Fellowship. Have some experience in the above two before trying here.
Once you have enough exposure and projects under your bel, you can start looking for jobs. Don’t get too overwhelmed by the requirements. If atleast 60% of the core requirements match, you can apply. The market’s tough right now, but don’t loose hope. Stay persistent, keep applying and improving yourself.
Don’t stop here, keep urself updated through freecodecamp, papers, podcasts atleast once a week. Helps a lot in keeping up with the latest trends. As a developer, you need to keep improving.
Hope this could be help to someone. Do reach out to me through twitter (@ce_adarsh) if you’d like any guidance. I’m happy to help out.