ManethKulatunge / SWE-starterpack

My brother just started university and I wanted to create and share a list of tips/resources for him and eventually other students

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SWE-starterpack

My brother just started university and I wanted to create and share a list of tips/resources for him! Hopefully others can benefit too!

Software Engineering, Data Science and Machine Learning are three fields that you can't avoid hearing once you start a program as a Computer Science student. I personally haven't explored Data Science and Machine Learning as much because I was very much interested in Product and Software Engineering from the start. The interesting part about software engineering is that it's a much more general technical role in comparison to something like Data Engineering and Data Science so it allows people who ventured into those fields, a clear path back to the role. Most of the larger companies assess how you think about problems rather than you knowing a million different technologies while smaller/medium sized companies look into specific technologies (for eg: A Web Developer role at a startup could interview you about very specific JavaScript concepts).

These resources and tips are generally relevant for most people who are in technical roles and definetely might help build a portfolio for a Big Tech company. But I also think it allows you to have the option of being more technically sound in Software Development in case you want to explore smaller/medium sized companies too.

Exploring in SWE

Once you get into Software Engineering and/or Development, you will hear terms like Mobile Development, Front End Development, Backend Development, and Full Stack Development. It's very overwhelming initially so I would recommend the following steps.

  1. Come up with an idea for a personal project involving programming
  2. Learn the techologies related to it
  3. Build the Project

Let me expound on these.

Coming up with an idea for a personal project

I'm sure the question pops up. Why are personal projects important?

I'm glad you asked. If you look at the resumes of every New Grad Software Engineer and/or Intern that came out of college you will see a big and loud Projects section and the reason is because it demonstrates interest outside classwork and that's what helps you differentiate yourself from the rest of the applicants that apply for SWE roles.

In your first year or so I would recommend spending less time on the idea phase especially if ideas come slower to you. It can be simpler, more digestable projects. My first project was on a very fundamental level just outputting hardcoded captions for pictures. I made it look fancy with the technical theatrics but that's essentially what it was on the angle of ideas. It's obviously important to have better ideas down the line to stand out even further but I have seen a lot of people get caught up in cycles of perfectionism so I think it's more important to get a project under your belt.

As Gayle McDowell (who I will introduce you to later) said

It doesn't matter too much what it is. The important thing is that you're coding. Not only will this develop your technical skills and practical experience, your initiative will impress companies.

The idea can even be related to few of your favourite ideas. For eg: If blockchain is your jam, you can think of building a decentralised application to solve a specific problem. Or honestly if that seems far out of reach for now you can even just start building your website. Important part is to GET STARTED.

Learning techologies

This is probably going to be one of the more interesting parts of the process as a budding developer because you start with a clean slate. You have no technologies under you belt and this is when everything changes. I would say the most ideal way to do a project is to think of an idea and then figure out the technologies and the domains you will be working on but sometimes when it gets hard to come up with ideas, I think think of a platform or the type of application might help narrow down the idea generation process.

The following table is a summary of the domains of Software Development that you could work with and the general technologies that are generally used for it.

Domain Technologies
Web Development HTML, CSS, And Javascript
Mobile Development Swift, React Native, Java (Android)
Game Development Unity, C#, C++, Unreal
Cloud Computing AWS, Azure, GCP
Embedded Systems C
Data Science/Analysis Python, SQL, R
Blockchain Solidity

Please note that this is only a starting point for these domains. The technologies are used in multiple discliplines and are put in the columns just to help you get started on the domain if you are indeed interested

More technologies to checkout down the line: Git, Typescript, Express.JS, Node.JS, React, Angular, Kotlin, GraphQL, Docker, Kubernetes, Spring

This next table has resources and my comments on them. These are purely personal notes so don't take them too seriously. As long as you learn the way you like to learn, that's all that matters. These are just a few options.

Resource Comments
FreeCodeCamp This is literally the best free resource out there. It has interactive coding exercises and it covers a large range of topics. I was refereshing myself on Node.JS and API Development recently and they do such a good job. Check it out!
Educative I generally like to go over theory on Educative because their text based content with embedded code editors are lovely. I learned asynchronous programming for Javascript which comes up on Software Developer Interviews and this site is great to solidify such concepts.
CodeAcademy This is what made me fall in love with software because the site presents a lot of learning paths and the UI for the exercises are great. Practice always makes perfect and CodeAcademy is GREAT for that.
GitHub Student Developer Pack This is digital GOLD!! There are a large amount of advantages that come with signing up here so please make sure you do! Alot of free goodies (Educative and Front End Masters are free for like 6 months
Udemy This is a cost effective way of consuming video content. I learned Angular, Node.JS, and a bit of React on this. Would have preferred CodeAcademy but this is where the money was at that time haha
FrontEnd Masters Lovely and Unique set of topics here. I really like going over some of them. It's a fancier and more organised version of Udemy in my opinion
DataCamp I learned python here. It's a lovely site if you feel like you want to dive into data science and machine learning
Learn Python A great and simple intro to Python in my opinion
Git Branching Git is essential for development. It's for version control which is a concept you should be comofortable with and I think this interactive version helps. Make sure you practice what you learn here by playing around with some repositories
General Resources Plural Sight, MIT CourseWare, Coursera , edX

These resources are bound to help you out when you are starting out. It might be overwhelming to see everything here but that's a good problem to have. Choose one that you enjoy and stick to it. Just make sure it addresses your learning goals and you should be fine.

There is alot more resources to come so stay tuned!

Build The Project

This is definetely the most important part. You can either do this alone or partner up with a friend. However, my favourite way of implementing projects initially was to go to Hackathons!!

Hackathons are essentially events where you build a product in a limited time frame. Hacking is known as figuring things out on the go and that's exactly the challenge that comes up with Hackathons.

The best website for Hackathons would be Major League Hacking. There will be more options when in person Hackathons come into the scene. One thing to note is that Hackathons are open and catered to people of all experience levels and there a lot of interesting people you can meet there. I was super inspired by the ideas I saw and it was the staple diet of my job hunts when they were in person. I am a relatively veteran hacker now with about 6-7 hackathons under my belt and I enjoyed every single one of them.

The other place to look for hackathons would be Devpost. You can also use this to build out your hacker portfolio too.

Make sure your projects are commited and posted to GitHub. This is how recruiters can know about your contributions.

(To - Do) Thing to note for your next job hunt

  • Once you get atleast two projects under your belt you are ready to show off to recruiters much more liberally. You have more things to talk about.
  • Open Source Contributions (ra, ctriag, document)
  • Networking (lin, career fairs, tech fairs, eventbrite, mtl new tech)
  • Software Design (cc)
  • Interview Prep (ctci, ele, leet)
  • Resume Review (sections : edu, skills, proj,extracurriculars, awards)
  • 2nd year internships (prac, exp, prop, uni)
  • Branding / Personal Website / Social Media
  • Extracurriculars (cp, hacks, clubs, gdscl, msfa, gitex)
  • Content (med, yt, lin)

Your job is to remind me to talk about all of these because it's important to tick these boxes, compete and win. I might not be able to write about it right away so it's important to keep good tabs on these and followup on these very regularly. I generally run out of energy these days and I tend to be forgetful so keep pushing.

All of this looks hectic but 3 years in, you will feel like the most powerful person on the planet. Software does that to you

About

My brother just started university and I wanted to create and share a list of tips/resources for him and eventually other students