This advice pertains primarily to university students with the intention of beginning a career in software engineering after graduation. Your mileage may vary in other contexts.
For most of your life, you've probably been in a formal education system that prioritizes grades over everything else.
Great! Get good grades if you can! Pay attention in class and do your best to learn your class material; it will probably be much more important than it seems to you now.
With that said, once you're in industry and you've had one (1) single job; nobody will ever ask for your GPA again. I took my GPA off my resume, I've never heard anyone talk about a GPA in a qualifications context, and I don't even know which schools my colleagues went to.
When I was in university and attending the career fair, several organizations had cutoffs at the 3.0 GPA mark. Several more asked for your GPA explicitly if it wasn't on your resume, but didn't make the cutoff explicit, if they had one. Google made me send them a notarized copy of my transcript from the university in order to apply for an internship. I had a less than 3.0 GPA for a large chunk of university and I still managed to do 4 internships.
It's just because it's all they have to judge you by right now. You don't have a ton of work experience, people to vouch for you, connections in the industry to refer you, or a portfolio of successful and impressive multi-year professional projects (I mean, if you do have any of those things, you're way ahead of most students.)
Don't tank your grades just because you can, but just recognize that it's not particularly important, and if you're not crushing it academically, it's almost certainly not going to permanently affect your career. So just chill out a bit and focus more on learning the material and not acing the tests.
If could re-do my college experience and change only one thing, I would focus more on building and strengthening friendships.
They're a major factor for a huge number of extremely important aspects of life such as mental health, happiness, isolation, support networks, etc. But you're mostly here for career advice, not life advice.
Friends are absolutely one of the most important aspects of a successful career.
- They will give you referrals to their companies, guaranteeing you an interview
- They will give you inside information on company culture and upcoming problems and stressors, allowing you to more easily select good companies
- They will fan out across the industry and gain experience in various fields, and if you want to switch disciplines or brush up, they can point you in the right direction to skill up and reach your goals
- And of course, having people you genuinely love to communicate with during the workday makes every job way more bearable
You will make friends after college: at work, during hobbies, while traveling, whatever. But college is a great opportunity to meet lots of people with similar schedules in a similar age group and to find shared connections over hobbies, interests, etc, which typically becomes more difficult as adults in the work force.
Make friends. Maintain your relationships. Reconnect with people. Way more important than getting the right internship or a perfect GPA.
The tendency for many university students is to view school and work as a pipeline where you move gracefully through life stages.
- Your performance in K-12 education determines where you go to college/university.
- You go to college/university and your performance there determines your job.
- You work your first job out of university and it sets the tone for your career.
The above can be true, and if it all works out and you perform well at each stage, great!
But if you make mistakes and blow it, it's fine. Not everyone works at a top-tier company right out of university. Sometimes it takes a few years. Sometimes you switch careers slightly and end up becoming a project manager, an engineering manager, or a machine learning researcher. You have a lot of opportunity to redefine your career and course-correct even well after graduation. Getting a bad GPA or even kicked out of school doesn't somehow bar you from ever working from a top-tier company.
So do your best, but realize you don't have to be perfect, everyone's journey is different, and chill the fuck out.
If you want more specific advice about getting a job at a "top-tier" tech company, see my writeup here
It's very disappointing to me that for all the years we spend in school, we're not really ever taught how to study or how to learn. I'm not an authority on learning and I can't promise this information will be useful to everyone, but here's essentially what I believe as an adult that has helped me learn ~2 new languages and a huge amount of random-ass information about dozens of fields.
- "Learning styles" are a harmful myth. Not everyone learns exactly the same way, but to a reasonable approximation, the same techniques do work for most individuals. Public schools (and universities) just aren't using those techniques.
- Spaced repetition works frighteningly well.
- Sleep is extremely important for learning.
- It is far, far better to study 10 minutes a day for 2 weeks (140 min total) than to study for 3 hours in a single day (180 min total).
With these things in mind, let's go over my recommendations.
Load your course materials into a spaced repetition flashcard system like Anki or SuperMemo, or use flashcard decks other people have created. Do this even if the course isn't a particularly flashcard-able course. Configure the new cards and reviews such that you end up doing 15-30 minutes of studying per day. Study the flashcards in small gaps of time while you're on the bus, waiting in line, right before you go to sleep, or whenever is convenient, with the goal of finishing all the cards it gives you each day.
Using them won't feel like you're learning, but I promise that the 4th or 5th time a card comes up, you'll be like "oh, easy, who wouldn't know this?" and you'll forget what it was ever like to struggle with the content on that card.
If a course is particularly not flashcard friendly, try to review lectures/videos/whatever every few days; maybe as background noise while you walk around campus or play videogames or something. Being exposed to something 4 times in a low-focus setting is almost certainly better than being exposed to it once in a high-focus setting.
The implied corollary to this is that if you instead cram study twice before the test, you won't have seen the material enough times and slept enough times to solidify it in your mind, and no matter how much time you spend on those two cram sessions, it won't be enough.
Our brains throw away a ton of information. In order to convince our primitive lizard brains that information is important, it has to see it multiple times and be forced to recall it. After 4-5 times of doing that, the brain submits and goes "okay, this must be important for survival."
Got 'em. Stupid brain.
YouTube, Coursera, and public course materials from Harvard and Stanford are probably better than your professor's lectures. Learn from those, watch videos at 2-3x speed, and use them as podcasts when you're out and about. Learn when it's convenient for you, not when you're dead-tired and just dragged yourself to lecture at 8:30am.
It is extremely frustrating when a professor forgets to cover some material, or explains something incorrectly by accident. I had a Calculus professor whose handwritten y, x, d, 1, 2, 4, and 9 all looked exactly the same, even from the front row. That class was so, so difficult. I should have just watched some Salman Khan videos and skipped the lectures.
Use your course's syllabus and materials to figure out what you need to know, and study on your own. You'll have the luxury of picking from dozens of different explanations, some of which are extremely high quality and have interactive simulations that show you each step of an algorithm or whatever it is you're learning.
Here's some shit I found for learning Computer Science concepts with 10 seconds of Googling.
- https://github.com/learn-anything/courses
- https://github.com/prakhar1989/awesome-courses
- https://github.com/ossu/computer-science
Check Stanford and Harvard's public course materials. Search YouTube. Search Coursera and Udemy. This was doable when I was in school, and the amount of quality, clear, concise explanatory content out there grows every year.
Get ahead of your course material and use that to help with the next piece of advice.
Do projects and classwork early. If you start late and you underestimate the amount of time it'll take, you're screwed and you're stressed. If you start early, it's fine.
If you start late, it's really easy to get into a mode where you're constantly stressed out, and you decline to go do fun things because you should be working or studying, but then you're too stressed to do those so you end up scrolling on your phone and you go to sleep frustrated with yourself, having denied yourself both fun and productivity. If this has happened to you, trust me, finishing things early is the key to a stress-free college experience.
It's hard to get into this habit, especially with the chaotic schedule of a university student, but it is totally worth it. You can spend the same amount of time on your homework, projects, studying, etc, but the difference is that if you start early, you finish and have completely stress-free free time to do all kinds of stuff, and if you start late, you're constantly overworked, overstressed, and exhausted.
- See the rest of my advice here