10 Non-Traditional Hacks for Incoming Computer Science Students
Curated advice from a college student who’s made all the mistakes before
As we approach late August, the time is coming for college classes to kick off again. Whether your school is online or in-person, I believe there’s a handful of things you can do to make this year a success. This article is a collection of tips for computer science majors to help them have a successful year. This information has been curated from my four years of learning at university, along with various pieces of advice from other students, graduates, and professors.
1. You Don’t Need to Know How to Program Yet
And here’s proof!
Trust me, you don’t need to know how to program going into a CS degree. Hell, the degree wouldn’t exist if everyone was expected to come in knowing what they are doing already. Want proof of that? Here’s Exhibit A:
This is my first personal project, that I made halfway through my freshman year. It’s a super simple sorting program — like 100 lines of code simple. But at the time I was super proud of it and thought I’d discovered some amazing new algorithm. The reason I’m sharing this is that the fact that I was proud enough of this tiny project to put it on Github should show how little I knew going into my CS degree!
Now, just over three years later, I have a mobile app launched on the app store and have done various other medium-sized projects over the past two years. The path from bubble sort to app store can be a hard one, but trust me it’s attainable. School will do a good job of teaching you the basics, so don’t worry about how much you know going into the major. After you learn the fundamentals, it’s up to you to gain more knowledge before you graduate. The rest of these tips aim to help you do that.
2. Ride the Wave to Mastery
If you’re like me, you constantly feel like you’re in one of these two camps as you embark on your journey. Although it’s pretty awesome to feel like a god all the time, it’s not practical and you’re bound to get stuck over and over again.
I like to think of this paradigm as just riding the wave to mastery. You have to ride the ups and downs, but what you’ll find is the general long-term trend will be an upward slope to mastery as you learn more things.
My advice here would be to not get discouraged during the hard parts of the learning process. It takes a long time to learn these skills, so just relax and ride the wave.
3. Learn in Public
This is a concept I’m trying to do more and more. It’s the idea that whenever you’re learning something new you should do it in a public context. So, if you’re developing an app, build it in a way where others can follow your journey. You can do this by posting a weekly blog on medium or dev.to, posting a daily update on Twitter, or even making a YouTube channel and sharing your learnings there.
This has two benefits:
- Employers love this. Companies know that no intern is going to be a master of their craft and that’s not what they’re looking for. Companies are looking for someone who’s good at learning, good at communicating, and passionate about what they do. There’s no better way to demonstrate these qualities than having a repository of your thoughts and saying “Look — this is everything I’ve learned this past year.”
- This will make you a better learner. Having a set time each week where you sit down and reflect on what you learned, and then sharing that with the world, helps you solidify that knowledge. It’s also very motivating to see other people engaged in the problems you’re working — it can give you the drive to keep going.
4. You Need a Personal Website
This is key. If you’re going to learn in public it’s a good idea to make a personal website that can give people one central place to view all the cool things you’re up to. This is also a great programming project, because it’s something that you can make as simple or as complicated as you want and once you finish it you can easily share it with the world.
Bonus Tip: Don’t be a perfectionist when building your website. I’ve redone my website three times in three years and plan to redo it again in the near future. It’s more important to have a website than to have a perfect one.
I have some classmates who built theirs with plain HTML and it works great! I have professors whose websites are made in plain HTML. If you don’t have an interest in design, making it minimal and purely functional is a great path to take.
5. Make Use of Student Perks!
Take advantage of all your student discounts! You can ride these discounts far and probably never have to pay for any cloud-hosting before you graduate. You can find these deals everywhere, but my favorite place to view student perks is Github Student Developer Pack. Some of my favorite deals from this:
- $100 of AWS Credits for Cloud Services
- Free GitHub Pro While a Student
- Free Year of a NameCheap .me Domain Name
- $50 of Free DigitalOcean Cloud Hosting
- $200 of Free MongoDB Atlas Credits
6. Learn the Difference Between the Three Types of Computer Science Classes
The computer science major has three different types of classes. It’s important to know the difference between these because some of these areas may not be as interesting to you and that’s OK.
Algorithm courses (for example: discrete math, finite automata, data structures)
These classes are what people are talking about when they say computer science has a lot of math in it. These classes are similar to math classes and teach you more about the theoretical side of computer science. They’ll teach you how to develop algorithms, how to write proofs, data structures, and more. If you love these classes they can be a path towards grad school, a PHD, teaching, or research fields.
Hardware/low-level courses (for example: operating systems, computer networks, computer architecture)
These classes teach you what’s going on internally in a computer. You’ll learn things like CPU scheduling, networking, assembly programming, operating systems, and permissions. If you like these classes, this can lead you into a career doing computer engineering, robotics, or OS design.
Programming courses (for example: software analysis and design, software engineering)
These courses will teach you how to write software. In these classes, you’ll learn object-oriented design, design patterns, databases, front end design, Git, project management, and more. If you like these classes, they can lead to a career in web design, game development, back end engineering, software engineering, and more. There are too many options to list.
All of these classes are important. You’ll find that the concepts of one will tie into another, so pay attention to everything. You might first be introduced to a hypothetical concept in your algorithms class (like big-O notation), then later see it cropping up in a programming class (For determining the best way to structure your SQL query). That’s typical and it’s the reason all these classes exist.
Bonus Tip: Don’t load up your schedule with too many of onetype of class in the same semester or you might get overwhelmed with too much of the same type of workload. This depends on the specific class, but it’s generally a good rule to follow.
7. Complete Projects and Labs Early
Some courses can be very project-based. Each of my programming-focused courses had about eight labs and five or six projects of varying difficulty. This can be super stressful if you leave them to the last couple of days, especially considering you probably don’t know what you’re doing.
It helps to develop a pattern. I eventually got a pattern down of trying to complete projects the weekend before they were due — this helped a lot. This gives you the ability to step away and refresh your brain, then come back and tackle a problem later. I still do this today!
8. Learn the Command-Line
Mastering the Unix command-line is one of the most practical skills you can learn in college. You should learn how to create, edit and delete files, navigate directories, move files around, edit documents with vim, and shell into other computers. This might not seem like the most important thing to learn at the time, especially if you’re thinking “No but I don’t need a command-line for X”, but the fact is that everyone will need the command line to use Git repositories, ssh into your production environment, etc. It’s unavoidable.
9. Build a “Capstone Project” Each Semester
This has been my favorite way to work on my programming skills. After each semester when I’m on Christmas or summer break I’ll build a “Capstone Project” that solidifies everything I learned. This is a great way to stay in the habit of programming, build your resume, and build something that you actually want to use!
One of my favorites of these projects is my Spotify web app that lets me view my most listened-to tracks and artists:
Doing projects you’re interested in will mean you want to finish it. So my recommendation is to build something that you want to use. Even if it already exists, that doesn’t matter — just build what you would use.
10. Internships are Attainable
The job environment might be changing due to COVID, but trust me there will still be internships available. The key is to know where to find them and how to have the skills they’re looking for in candidates. If you do the other items on this list, such as learning in public, having a personal website, and building capstone projects, you’ll be an attractive intern no matter what year you are.
Here are some other tips I have for getting internships:
- Get out of the mindset that you’re not prepared for an internship. Everyone is still learning through college so let the companies be the judge of if you’re prepared or not — don’t make that decision for them.
- There are always internship opportunities popping up. I started applications around October last year and got an internship in November. Some students started even earlier. The summer before that I got my internship during finals week right before summer. New opportunities are popping up all the time, so constantly be on the lookout throughout the school year.
- Use state-funded internship boards if available. If you live in Minnesota, https://scitechmn.org/ is a great resource that I recommend. Local internship boards have a smaller competition pool and give you a more personal application process than something like Indeed.
Thanks for Reading!
I hope you found this valuable. If you have any more tips please share them in the comments!