Getting started with software engineering as a freshman
Tags: beginners, firstpost, codenewbie
Published: 2021-03-21 07:53:07

Hey there! Happy to see that you’re interested in CSE. This is the one article that you need to get a kickstart into your software engineering journey. This is not something you would understand in one go. You would need to explore more about the topics mentioned here on your own - through a web search, talking to your seniors or even email software engineers or DM them on Twitter or LinkedIn.

Talking about me, I’m a freshman pursuing CSE in Kerala, India and I have been developing open-source Android apps for quite a while now. I’m trying to walk the same road as you and what I share here are the things that I learned from countless blogs, my seniors and software engineers. These tips helped me get started. Hope they will be as useful to you as they have been to me.

Before getting started, remember that you can achieve your dreams if you persevere and put in the necessary efforts. It’s a long game!

I have grouped this article into three sections:
 - Beginner
 - Once you’re no more a beginner
 - Intermediate

>"Perseverance is a great element of success. If you knock long enough and loud enough at the gate, you are sure to wake up somebody" – Henry Longfellow

#Beginner

There are a lot of fancy terms you would hear in tech - Full Stack, Machine Learning, Cloud, AI, etc which sound intimidating. A question that comes often is which field are you passionate about and how to get started with it.

One thing to keep in mind is the motivation to code. It is an intrinsic motivation that you should pursue. *Do you want to build the next best search engine? Do you wish to build cool consumer-facing apps? Do you wish to work on Mars rovers?* If you get started with something that you do not like, you may end up quitting the journey without going far or even before you get started! So, it’s important to get started with something you like to keep the motivation levels up & to keep going. This is a simple drill that I suggest to anyone asking *how to get started.*

>####*Explore the different domains in tech, see where your interest lies in and dive deep!*

Here are some domains: Web Development, Ethical Hacking / Network Security, iOS Development, Android Development, Desktop Applications, Game Development, Arduino/Microcontrollers/Robots (Embedded Programming), Cross-Platform App Development (Flutter, React Native etc), Systems Programming, Networks, Infra, Operating systems/Kernel development, UI/UX design

Here’s how to dive deep into your domains:
 - Google *"How to get started in <YOUR_DOMAIN>"*
 - Look for blogs, tutorials, videos, etc. Since there are tons of free and great resources available online, there’s a high chance that you won’t need to pay for resources.
 - Ask seniors/friends/mentors for suggestions on those domains
 - Get familiar with programming languages/tools used
 - Explore/think interesting ideas and build mini-programs

##What you SHOULD NOT do when you’re starting out:

 - Just doing online courses
 - Building projects from tutorials by copying code without properly understanding the things
 - Starting with Machine Learning/Data Science/AI [Andrew: if you’re reading this, I’m sorry :D] – those subjects require not only programming skills but also a good grasp of mathematics, statistics, data modelling etc. Go for them only if you’re really really interested.
 - Doing unpaid internships or in the worst case, doing internships where you pay the company – internships are something for which YOU GET PAID. They aren’t something like courses or training where they would *teach* you; here you do the work and get industry exposure & get paid!
 - Cursing/Punishing yourself for your mistakes – Somewhat relatable. Huh? Mistakes are okay, provided you learn from them, move on & do not repeat the same ones.
 - Trying to learn many things simultaneously - it’s better to learn the fundamentals, move on to projects and come back to learning often. 

#Once you’re no more a Beginner

At this point, I hope you’re comfortable with at least one programming language. You need not be a GURU! You just need to be comfortable with it. First and foremost, start using a Linux distribution as your primary programming environment if you’re not already. Then, if you are not pursuing a CS degree, go through [The Missing Semester of Your CS Education](https://missing.csail.mit.edu/) since, being good with the fundamentals like databases, operating systems, OOP, networking etc. helps. Next, go and learn Git!
 - Think for small good unique ideas or ideas which improve upon already existing products. If you don’t get any, feel free to rebuild existing projects and as always, pick something that really excites you.
 - Push these projects to GitHub. Write good readmes and blogs or videos too!
    - With this, you’ll learn to use git, which is a necessary skill to have. And you’re slowly building your portfolio too!
 - Contribute to open-source
    - You need not be an expert in a language/framework before starting to contribute to open source. You can get started even if you know the basics. 
    - You’ll get exposure to large codebases, an essence of how to work as a part of a community, learn best practices in coding and get helpful feedback from your mentors.
    - Plus, it’s awesome to see your code get merged into a codebase of a project that is used by many people!
    - [GitHub Explore](https://github.com/explore) is a good place to start!
 - Attend Hackathons
    - Here you’ll get to brainstorm ideas and build a project in a short period of time in a team

    - You’ll most probably work on solving real-world problems
    - Check out [MLH hackathons](https://mlh.io/seasons/2021/events)!

 - Getting your hands dirty with problem-solving will be awesome from this point
    - You need to be good at Data Structures and Algorithms, especially for coding interviews for internships and jobs. 

Here are some resources:

 - **Cracking The Coding Interview** by **Gayle Laakmann McDowell**
 - **[InterviewCake](https://www.interviewcake.com/)**
 - **[Intro to Algos](https://www.youtube.com/playlist?list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)** by **MIT**
 - **[A YouTube playlist](https://www.youtube.com/playlist?list=PLBZBJbE_rGRV8D7XZ08LK6z-4zPoWzu5H)** by **CSDojo**
 - **[LeetCode](https://leetcode.com/)**

#Intermediate

You might be knowing in the back of your head that what you should do by now. Still, here is something that you can look into!

 - Build better and more complex projects. Move on from beginner-level projects & build something bigger by forming a team or collaborating with friends and build real-world projects
 - If you still do not have a **LinkedIn Profile**, go create one & thank me later
    - LinkedIn is a professional platform & it can enhance or even replace your resume
 - Try out competitive programming on CodeForces
    - Competitive programming is like a sport where you tackle a specific problem within a specific time frame
    - [Here](https://www.youtube.com/watch?v=xAeiXy8-9Y8) is a good resource to get you started
 - Internships
    - [Here](https://pra8eek.wordpress.com/2020/08/12/a-beginners-guide-to-industrial-internships/) is a great resource that dives deep into this topic
 - Programming contests
   - [Kick Start](https://codingcompetitions.withgoogle.com/kickstart/about) 
   - [Code Jam](https://codingcompetitions.withgoogle.com/codejam/about)
   - [Hash Code](https://codingcompetitions.withgoogle.com/hashcode/about)
 - Open Source Programs
    - [Google Summer of Code](https://summerofcode.withgoogle.com/about/)
    - [MLH Fellowship](https://fellowship.mlh.io/)
    - [Google Season of Docs](https://developers.google.com/season-of-docs/)
    - [Outreachy](https://www.outreachy.org/)
    - [GirlScript Summer of Code](https://gssoc.girlscript.tech/)

Hey, happy to see you make it till the end of this article! In this article, I shared what helped me in getting started & the path I look forward to moving on from here. I hope they will be as useful to you as they have been to me. Do share it with someone who is enthusiastic about computer science and programming and trying to get started!

A huge shout to [Anand](https://www.linkedin.com/in/anandbaburajan/) for helping me with this post :D & a big thanks to [Breaking Pic](https://www.pexels.com/@breakingpic) for the awesome cover picture ;)

If you found this useful, I would be glad to know that ;) Drop me a message if you're just surfing around here too! I love talking to new people :)

Here's how you can find me on the internet :D
 - [LinkedIn](https://www.linkedin.com/in/vishnu-sanal-t/)