DEV Community

Nicole Archambault
Nicole Archambault

Posted on

What advice would you give a CS student starting their freshman year?

The school year is starting, and freshmen everywhere are taking CS101 (or some equivalent) in their respective universities!

It's an exciting time, but it's also the beginning of a 4-year struggle for some. Like 17 y/o Wellesley freshman me, who dropped out after DS&A, later referred to as a "weed-out" course. :(

What advice would you give to a freshman CS student on their first day of classes?

Top comments (29)

Collapse
 
hisdewdnesss profile image
Various

Read a lot of code. One of the things I really struggled with starting out is believing that everyone was better than me at development/coding. This turned out to be hilariously untrue once I started reading code on github and source code from various established major enterprise projects.

Collapse
 
darnold76 profile image
Derek Arnold

Take courses that have seemingly nothing to do with CS especially in the liberal arts. By working that part of your brain, you see how technology is implemented (or misimplemented) in the present and past.

No matter how deep down the tech rabbit hole we go, we should never forget that real people are always impacted. The liberal arts can remind us of this...especially history and ethics (two I greatly enjoyed).

Collapse
 
ben profile image
Ben Halpern

You don't have to be top in your class to stick around and set yourself up for a great career in software. And if things seem painfully abstract at times, it's because they are. Computer science is a theoretical discipline and you'll appreciate the lessons years later.

If it isn't coming to you quickly it's not a big deal. I wound up dropping out of CS and got back into code later. I'd probably have stuck it out if I knew then what I know now. πŸ˜„

Collapse
 
lavie_encode profile image
Nicole Archambault

I didn't know you were a fellow CS dropout! There's SO MANY of us! πŸ˜‚

Collapse
 
darnold76 profile image
Derek Arnold

I am also. I was physics first.

I ultimately got my bachelor's but it wasn't in CS. It was a mix of math and CS because I had a lot of credits in both.

It's a good thing I learned my sysadmin stuff on the side.

Collapse
 
l04db4l4nc3r profile image
Angad Sharma • Edited

Hey. So a fresher should plan and try to break down their period into 4 parts-

1st year

First year can be devoted to finding your call, your passion, and in the case of computer science, your domain of choice. Whether it be web development, data structures, machine learning etc.

2nd year

Second year should be devoted to working on real life projects related to the chosen domain. Whether it be helping a nearby business set up or freelancing. Nothing fancy.

Third year

Third year should be devoted to finding decent internships and also brushing up on your coding for placements. If you score an internship in the third year, there is a high probability that it'll be convert to a pre-placement offer.

4th year

A great man once said-

Finding a job is a full time job

So in your fourth year, focus on applying to loads and loads of jobs in all your dream companies. As well as brushing up on what you learnt in your 4 year curriculum.

I hope this helps :)

Collapse
 
chelsey_r profile image
Chelsey Randolph πŸ‘©πŸΌβ€πŸ’»

I wish I was told this freshman year lol

Collapse
 
chelsey_r profile image
Chelsey Randolph πŸ‘©πŸΌβ€πŸ’»

Everyone learns at different paces.
I started learning to code my first CS class and it was a huge learning curve. I also got my first C of my life in that class but I felt accomplished because I passed it. Don’t get down over a B, C, or even D. Not everyone is 4.0 material.

Collapse
 
chelsey_r profile image
Chelsey Randolph πŸ‘©πŸΌβ€πŸ’»

Also college comes at a point in our lives where so many things are happening. Not everyone will be able to graduate in 4 years and that okay. As long as you push through and get there one day it’ll be worth it :)

Collapse
 
chelsey_r profile image
Chelsey Randolph πŸ‘©πŸΌβ€πŸ’»

Try to get involved in student orgs but don’t feel bad if you don’t. I’ve worked 30-40 hours a week since my second semester of college to be able to afford my cost of living. I don’t have a ton of extra time to spare but I make do with what I have :)

Collapse
 
chelsey_r profile image
Chelsey Randolph πŸ‘©πŸΌβ€πŸ’»

Talk to your TAs about anything you have questions about. I had a TA meet with me once a week when I was first learning C because I wanted to make sure I was keeping up with the material. It definitely helped me get an A in that course.

Collapse
 
buphmin profile image
buphmin • Edited

Make sure they want to do it, and that they don't feel 100% locked into their major. CS and any type of engineering has a very rigorous workload, so if they don't truly want to do it then it can be very stressful. At my school at least engineering majors required around 180-190 minimum required units. Which means basically that you cannot graduate in 4 years without luck, hard work, maximum load each term, and very likely summer classes. Most non STEM majors required around 80-100 if memory serves. This advice can really apply to any very demanding major to be honest.

Also use the internet to help learn! There are so many amazing resources now for coding. Honestly one of the more important skills being a developer is knowing how to find information.

Edit: My experiences are past tense, as I am no longer in school. Just some wisdom from my personal experiences :)

Collapse
 
chelsey_r profile image
Chelsey Randolph πŸ‘©πŸΌβ€πŸ’»

Yes!! Sadly at my university there are minimal CS classes in the summer except the beginner courses. It’s a large course load and most of the credits can’t transfer to other majors. After my freshman year I contemplated switching majors because I didn’t feel smart enough but almost none of my course would transfer so I would have to basically start over. (Except for my basic english class and general courses I took).

I used Codecademy to try to get ahead in some courses where we were learning the basics of a language.

Collapse
 
ahferroin7 profile image
Austin S. Hemmelgarn • Edited

Other than the somewhat obvious point of making sure to get an internship if at all possible, three things in particular come to mind:

  • Once you've got a basic understanding of something, it's usually worth taking the time to learn why it is the way it is. This will help you long-term to be a better developer (I can't count the number of bugs I've seen because people didn't understand how the underlying system or library they were using worked).
  • Find out if your university offers courses on set theory and graph theory, and make a point to take them if they do but they aren't required for your major. Those are the two most important areas of mathematics after Boolean algebra for understanding a very large number of things in computer science, and they're often only optional courses in CS programs (they're also significantly easier for many people than things like calculus or statistics (though both of those are also really useful courses to have, just less so than set theory and graph theory)).
  • Make a point to get a solid understanding of how version control software works at a high-level before you graduate. Lack of this knowledge is a recurring pain point for many companies when hiring new graduates. Even if you have to study it on your own time, this will make you look much better to prospective employers, because you won't need to go through as much training when you start out. The aforementioned graph theory course will probably help here too (many of the more complex VCS operations are most easily explained in terms of graph theory because they really are operating on a graph structure under the hood).
Collapse
 
algorithmxi9 profile image
Dante White

******* extremely useful information ******
Book reading list

  1. Code - this book is your foundation
  2. Deepwork - this book will teach you how to block out distractions
  3. Head first C
  4. Head first java
  5. Data structures and algorithms by wiely
  6. The Algorithm Design Manuel
  7. Design Patterns by
  8. Headfirst design patterns (best book)

Practice your craft.

  1. codingbats.com
  2. HackerRanker
  3. Leetcode
Collapse
 
danondso profile image
Dublin Anondson

I just got done reading Deep Work recently, fantastic book!

Collapse
 
agentd00nut profile image
agentd00nut

Put every single piece of code you write on git. Every little project, every little investigation into how to do X Y or Z in language A B or C. Make sure that anyone can follow your readme step by step and make it run the exact same way you have it running.
This shows that you know more than a few core languages, this shows that your interested in things that "don't matter" because you like computers and code and not just making $$$. It's good practice learning how to organize your projects to other people can run them, it's good practice in writing documentation, it's good practice in commenting code in places that might be confusing.

Get the proper IDE for the code you're writing.
I write * a lot * of php... I'm not saying phpStorm is the best ide but i'm saying that without something that could auto complete and give argument hints to methods i'd spend a lot more time googling how to pass things in / scrolling through code to find references / where things are declared in my code base.

Sublime text and notepad++ work for quick, dirty, fast, prototypes, after that spend the 30seconds it takes to launch an IDE!

Read.
Other.
People's.
Code.
You will learn so much from other people's code. How NOT to do things, how to do things you didn't know where possible, how NOT to comment, how to comment, how NOT to organize projects, how to organize projects... you get the idea. Most importantly this will both humble you from thinking you are good at anything and shed light on how you are good at some things.

Answer stack overflow questions
Once you have some familiarity with get a stack overflow account and make a bookmark for a feed of the newest questions related to the that you feel familiar enough with and start answering questions.

This is a good reminder that there are smart people struggling with basics.  Or *anyone* struggling with basics. 
More importantly someone will explain why your answer is *WRONG* and may give you some hints as to why.  Some people are assholes and will want to demean you for your answer, ignore that and absorb the knowledge in their chastizing!
This is the easiest way to get people to point you to free advice!

Remember that the internet tends to distill down to showing you the best produced by the best people.
We aren't all "rockstar" programmers, we aren't all 10x programmers, we aren't all redefining what it means to ________. Projects, languages, packages, libraries, programs, repositories, and technologies that make waves that get noticed in "main stream" are the best of the best... the cream of the crop.
don't get discouraged thinking "i'll never write something like that".

It's so easy to get discouraged, ESPECIALLY if you compare yourself to your peers in your class.  If you feel like there are some people in your courses that are finishes assignments as they are being handed out or are openly bragging about how easy something was, *go talk to them*... Don't just hold a grudge or develop feelings of inadequacy.

Obviously someone might just be on a power trip and not be recpetive to someone admitting that they are struggling but i bet you'd be surprised how many people would be willing to show off their work or could explain a topic in a way that makes it *far* more understandable than a book or lecture ever could.

This applies even online!  Reach out through a private channel to someone and ask poignant questions about something that you can't understand and i'm more times than not you'll receive a comprehensive answer.  People like to help and share knowledge!!

Contribute to projects, look up how others have contributed to projects as well!

This is basically the same as advice as answering stack overflow questions.

Go on git, find a project you have *some* experience in the language being used, find a low hanging fruit, read the proper protocol for making a pull request, fork, make the changes, make the pull request.

Either someone will explain why you're request isn't proper and you learn.
Or someone suggests some modifications before you can pull and you learn.
Or you make a solid contribution to a project that is project!

You can't lose!

Most importantly don't lose sight of why you got into comp sci. If you're here just for money then you might be in for a bad time down the road.
Don't forget that everyone struggles, everyone. There are days where i envy anyone who gets to be outside during their work day. There are days when looking at a monitor or touching my keyboard make me phsyically ill.
But by keeping side projects that you enjoy really true love to work on, you'll keep the spark of imagination and creativity alive in your work and that will encourage you to trudge through the 19th assignment of the semester!!!

On the opposite side of the token it's OKAY to have other hobbies and desires outside of the computer world and will make you a more rounded person for that! Definitely learn to unplug completely and just go do ANYTHING that doesn't involve a screen. literally anything that isn't infront of a screen that you do regularly will make sure you don't get burnt out!

Collapse
 
ryands17 profile image
Ryan Dsouza

The main thing that I would say is focus more on concepts and just don't rush to learn a lot of languages at once.
Learn concepts like closures, higher order functions, inheritance, composition and the basic data structures. Then apply those concepts in the languages that you learn. Because languages may change but the concepts will stay.

Some comments may only be visible to logged-in visitors. Sign in to view all comments.