Getting into tech —first-hand advice
Exactly three years ago, I started college as a CS major with a clean slate. I had absolutely no background in programming or computer science, in general.
Two weeks into college and I realised things weren’t going to be as easy I had thought. Everything everyone talked about seemed jargon to me. I saw ‘kids’ way younger than I build cool stuff, give talks and contribute to major open source projects. I was 18. 😒
Well, I am about to enter the final year of college and things have finally started to settle down now. I am working as a Software Engineering Intern at AdPushup right now, which is a really cool place to work at. [UPDATE] I will be joining Postman as a Product Engineer next year and am super excited about the leap.
There is a lot of stuff that I wish someone would have told me a little earlier. So I’ll try and cover a few things for anyone who is just starting.
Try not to get overwhelmed.
As generic as this might sound but this is my #1 advice to anyone who is starting just now. There are a lot of amazing people out there who have built a lot of great stuff. There are tens and hundreds of languages, frameworks, design patterns, programming paradigms and what not out there.
A lot of us get overwhelmed seeing how vast the field is thinking we have to conquer everything as fast as we can. That is not how things work.
The first thing you need to tell yourself is that it takes time and you will definitely get there if you work systematically and consistently.
Most of us work in a specific field and initially, you will too, so there’s no point sweating about how vast CS in general is. Explore different subfields, pick an area of interest, channel all your resources and attention towards getting better at that.
The first time I tried to contribute to an open source project, I thought it was impossible to make a small change in such a large code base without breaking anything but trust me, it gets easier.
Know your basics.
While trying to get up to speed with the rest of the people who had a head start, most of us forget the most important thing. Getting a solid grasp of the basics and solidifying your understanding of the concepts required to understand advanced courses.
Ignoring this can lead to a lot of frustration in the future when you struggle to make sense out of the more complex topics.
People tend to take their CS 101 or basic programming courses way too casually. If you’re just starting, then pay as much attention to this course as you can.
Do not let yourself be distracted by the fact that nobody else is paying attention to what is being taught. If you’re doing an online entry level course, try and read as much as you can about the subject matter.
Remember everyone was a beginner once so no matter how cool others might act now, all of them started as noobs.
Don’t ignore maths. A lot of us who get into application development tend to ignore maths thinking it is required only in theoretical scenarios but as you get to writing production level software, you realise that it is used in a variety of optimisation and visualisation scenarios.
Also, please try and understand that what is being taught in classrooms or courses only get you started. They can only cover so much in a limited amount of time. Explore concepts around stuff that is being taught, if a term is mentioned and you were not satisfied by the explanation of what it meant, research about it until you get a clear understanding of it.
I also don’t agree with the notion that ‘GPA doesn’t matter at all’. I believe having a decent GPA at least shows that you worked hard for the basic introductory courses which can really open up better opportunities in the future.
Perseverance is key.
There will be times when you don’t understand stuff, when you can’t find the correct answer no matter how hard you try, when you just can’t think logically like they say a programmer has to.
Whenever you feel like this, please try and recapitulate that perseverance is the key to all of the problems you are facing. Try and remember the things that troubled you when you just started something new and how easy they felt after a certain time.
For a long time, you might not be able to treat problems as analytically as your peers can but as you go on solving more and more problems, you’ll develop this intuition automatically.
And do not alienate this intuition as something that will magically help you solve all your problems. It is just a sense of clarity that you develop over time that helps you break complex problems into simpler ones to come up with efficient solutions.
Set Realistic Goals.
A lot of us look at the peak of the mountain but ignore the climb. Setting small term realistic goals is extremely important since a small boost of accomplishment at strategic intervals lead to long term motivation whereas unrealistic goals lead to frustration and most people quit mid way because of this.
I’ll give you an example. When I started learning web development, the extreme basics, I told myself that by the end of one week, I should know basic HTML and CSS so that I can put together a decent skeleton for a web page. I made a very ugly looking web page at the end of that week but I felt really happy and motivated to learn more since I achieved the short term goal I had set for myself.
Also, while being result oriented might help you stay on track better but one should realise that there are not set milestones which quantify your growth as an individual.
So even if you can’t see the fruits of your labour immediately, don’t get disheartened, keep doing what you are doing.
And trust me, there will be those eureka moments when you realise that your efforts are paying off, look for these.
For me, it was when I recently started using functional programming concepts more often in my first iteration of writing code. I wrote a reduce function implementation in production level code and promisified a call back based module that I wrote. Stepped back from my system and sat there in awe for five minutes straight. 😎
Know what works for you.
A lot of people ask me at different events that what should they do to become a better developer. While I definitely try and share a few good articles that helped me on my way, my basic answer is I don’t know.
I don’t know you well enough to answer that and even if I did you know you better. Find out what works for you.
Do you think online courses are really helpful to you or do you find them distracting?
Do you like open source contributions or do you find building your own projects more meaningful?
Do you like to read from books or absolutely hate them?
Do you like sport programming or application development?
Do you like to work with end user experience or working on scalability at the back end?
And I understand that it is really hard to answer these questions when you’re just getting started.
Well here’s what I did. I tried a lot of different things before I settled for what I do now. I tried competitive coding, UI/UX designing, back end development, even a tad bit of android.
After carefully analysing how I felt while I was trying all these things, I narrowed down the possibilities of what worked for me. Again, this might be a stupid approach for you to try but it worked for me.
Build products, not projects.
Remember how you make a generic project after learning a new language to get a grasp of the concepts? Yeah, don’t do that.
Now, this might be the most important advice out of all and it took me a very long time to get a hold of this. It is one of those things I wish someone would have explained to me earlier.
Most of us build the same old projects that are available on the internet after learning a new skill set.
Calculator after learning java, portfolio website after learning web development, micro blog after learning Flask, login system after learning PHP and so on.
While these projects might help you feel a little accomplished, they generally don’t help. Here’s why.
There are tonnes of tutorials explaining how to build these things step by step and generally, that is what you follow. You skip a lot of things you can’t understand for the sake of completing the tutorial and making your first new project. The end result, not much learning.
Second, you can’t really put them on your resume because of the sole fact that they’re too generic. Imagine putting a Java calculator project on your resume. The point is if you’re building something to implement your newly acquired skills why not build it good enough to be showcased?
Moreover, if you build products that are actually used by users, that not only teaches you a lot about the entire SDLC helping you master the newly found skill but also gives you something to talk about in front of recruiters.
Those of you who know me know that I absolutely love the hackathon culture. I have been to 15+ hackathons, have organised quite a few, have mentored at some and even judged one.
Well, the reason I recommend so many people to attend these is because of the vast learning and exposure that I have personally got at them. They not only teach you how to work well with teams but also explain the entire cycle of ideation to shipping a product in a very concise time format.
The networking opportunities are awesome and who doesn’t love free food and SWAG. On a side note, I haven’t really bought any T-shirts in the last two years because of these events. 😛
I even wrote a medium post about why organising hackathons are really cool, you can check it out here.
While most people prefer to enjoy their vacations by getting hooked on a TV series, you could really invest in yourself by going for an internship.
This advice is not for you if you’re an entrepreneurial guy who would like to start something himself, more power to you sir. For the rest of you folks, keep reading.
Internships are a great way to upgrade your skills while working on some real life projects. You would learn twice as fast as you would have done compared to doing an online course or something because procrastination gets all of us in vacations when we sit at home.
Now getting the first one is obviously a challenge so be patient. Send in your resume to every company out there. Look for roles that do not demand a lot of experience. Do not care about the stipend or travelling expenses, consider this as an investment in yourself, not promoting unpaid internships though, they kinda suck.
It gets easier from the first one onward, maintain a portfolio, update your linkedin regularly, stay in touch with recruiters and help people. It all comes back.
Getting into tech can be hard if you don’t know where to start. I tried sharing a few things that I believe would have helped me a lot when I was starting.
One thing that I didn’t really talk about(because it is kinda obvious and have been discussed way too much in the past) is finding good peers to work with. Work with people that help you become a better version of yourself, who motivate you to strive harder and inspire you to grow together.
And most importantly, do not let the pressure of keeping up with everyone get in your way of enjoying life. Have a good one.
Please share and recommend this if you think it can help someone. Thanks.