Ask HN: I’m New to Computer Science and Engineering. Any Advice?

50 points by priesthood ↗ HN
Hello wonderful people here, I'm taking a computer science and engineering course at the university level. Any advice for me before I proceed?

61 comments

[ 3.8 ms ] story [ 115 ms ] thread
Don't expect to learn everything during the course (that applies to any degree to be honest), but I see so many young people settling on the knowledge they gain from courses and don't look further. Yeah, classes are great but they are not everything.
Care to expand what more you learned after classes ? I recognize schools are incomplete, but I'm curious why.
This.

Uni will give you a degree, which basically will be a "proof of work" and allow you to get a chance to be hired in a decent first job.

Uni will also guarantee that you have an overview of many topics. But often those overviews won't be enough when you will start working because the level of knowledge required will be much more deeper (or practical) than what was required in Uni.

My recommendation.

Analyze the the things you like that are related to CS and find something that intrigues you. Something that you really want to learn about. It could be games, microcontrollers, artificial intelligence, operating systems, mobile apps, websites, ...

Pick something and start reading about it, watch explainer videos, try to build one yourself. The more you will learn and play the more you will discover how many other things you have to learn and experiment with as well. Hopefully all of this learning will be easy, because you decided to learn it in first place!

This way your knowledge will grow much more than what Uni will give you. Some courses will be easy because you are already ahead. You will be confident when working on group projects or applying for work because you already played with the technology and you are up to date with the latest trends.

Expect to learn on the side use as much time you can to get to learn your tools, dont only use schooltime make it a passion, and you will never Work a day in your life.
Hello there. Some random bits that I found helpful: 1) start assignments as soon as they're given (or at least fully understand what is expected so you can plan time), then you won't be rushed and your work will be high quality. 2) learn how to write academically - sure, you know how to write but unless you've done it before you probably don't have the experience of condensing multiple pieces of referenced material into a paragraph. There will be books on this in the library. This goes hand-in-hand with achieving high grades, if you understand what a lecturer expects to see, you can do well. If you find yourself working hard and then getting a mediocre grade, its because you haven’t understood what’s expected. 2.1) visit the library and see what workshops they have on writing, referencing, research and any other university skill – take those! 3) learn how you learn, or at least actively use multiple methods if you’re unsure. Watch videos of topics covered in your lectures, read books and write notes from the books (actually use those little quizzes at the end of chapters to test your knowledge and work on areas of weakness), write flashcards and use them. 4) Read ahead on areas you think you might struggle with or areas you’ve not been exposed to before (you don’t know if you’ll find it hard and ‘waste time’ grasping the basics be under pressure and miss the opportunity to take advantage of lecture time. Or just read ahead because you’re interested. 5) Understand lecture time is a tiny amount of your time overall in university, it truly is down to you to learn. Its an active process – you have to be interested, engaged, plan and do additional work to understand and do well. 5.1) ask questions in lectures. Write questions to ask when you're doing assignments or reading around the subject. 6) Build a structure and keep to it – this is definitely a personal preference, it may not be your thing – whether its waking up at the same time everyday and going to bed at the same time, blocking periods for work, exercise, playing games, and doing it no matter what. When you’re so busy its important to ensure you control your time. It doesn’t have to be rigid, the goal is to provide structure so you can succeed, you can always choose to not follow parts of your plan. 8) Absolutely take advantage of the social life and various activities, clubs, societies etc, you can’t work all of the time!
You won't be doing much if any any electrical engineering if you end up doing software engineering, but it can be useful if you're hacking on side projects, e.g. Arduino. And as other mentioned, the best way to learn computer science is to build stuffs on the side, that will give you a huge edge when entering the job market too.
Focus on whatever process/challenge you have currently at hand. Be it your homework, exam preparation, course project etc.

Because the main and only ever relevant skill you should learn is the skill of learning, ability to be focused and present being an essential part of it.

You'll have plenty of time wandering on forums like this later in life, trust me, I've been there :)

I would say try to build portfolio of your projects as you work on them. Make it publicly available (git hub perhaps?). Try to find collogues with similar interests, work on projects with them. Make something that you can show along site of you diploma once you finish the university.
Go for it! You can have a really wonderful career in our trade. I sure did.

Consider the long term. Your uni work will take you roughly half a decade to get through, maybe a little less if you hustle. Your career will last roughly half a century, maybe more if human life spans continue to increase. Take advantage of your uni time to explore as many parts of the world of thought as you possibly can. Take risks. After you leave uni, noboby will care that you got somewhat low marks in that strange particle-physics (or whatever) class you signed up for.

This sounds trite, but it isn't: learn to learn. If you work in our trade (or any knowledge-based trade) you'll be learning for your entire life. You'll choose your jobs and assignments based on how much you can learn from them. Build your skills at extracting value from books and deciding which parts of them deserve a lot of your time and which don't.

One of the best ways to learn is to teach. Think of every assignment and problem set as an opportunity to teach somebody something. Every bit of work you do is an opportunity to teach. By "work" I mean creating things like documents, drawings, code, and so forth. Get in the habit of making things that are, at least potentially, useful to other people and to your future self. And when you gain enough knowledge in particular things, seek out opportunities to explain them to other people. Surround yourself with people who have the same attitude.

Get in the habit of prioritizing your work. You'll always have more to do than you can finish, so learn what to blow off. At the beginning of every uni term, take time to go through the schedules and syllabi for your classes and projects. Start by extracting the due dates for projects and putting them into a to-do list that works for you. Use a calendar app, or an electronic to-do list, or even a sheet of paper you can stick to a wall. That will get you started on planning and prioritizing. And, it will help you avoid nasty surprises like "oh no, I have a final exam in differential equations on the same day my project is due. And that day is tomorrow!!!"

Friendships and romances? Of course. Sex, drugs, rock-n-roll? Of course. Clubs, adventures, sports? Of course. Have fun. I joined a cycling club where we learned together how to work on bikes and took epic trips. But don't waste your uni years by overdoing those sorts of things.

All the best to you!

Lots of good advice.

> Surround yourself with people who have the same attitude.

This one is important in general. During the first two years at university I mostly spent evenings and weekends with old friends who were more into partying and playing video games. Of course it’s good to stay in touch with friends in general but I wish I had started hanging out with classmates who had better study discipline than me sooner.

Approach every technology you encounter like a box. Look at the box, weigh the box, play with the box, figure out how it behaves when you interact with it.

And then, the most important step, open the box and look inside to understand how it works. Often you'll find a number of new boxes to explore.

In my experience, the people that do well in this industry are the people who aren't afraid to look inside the box.

Also remember that every box was crafted by fellow humans like you and me.

- Focus on your fundamentals; learn how to do basic stuff like manipulating data structures, flow control and how to write clean understandable code really well. Forget about the 100s of frameworks and which language is better, that stuff doesn't matter.

- Build real stuff, but realise you're still learning. You won't build a whole application or website with bells and whistles just yet. Instead use that to figure out what you need to learn either now or later and where you want to take it.

- Don't feel stupid. Impostor syndrome is a real thing and even the most experienced developers experience it in some form. If you can't figure something out, take a break, take a few steps back, get help (even if its explaining to someone who has no clue), or try to cut up a problem into smaller pieces.

I'll say what I say to all perspective university students: for me study groups were what literally got me through the first year or two. Your classmates are not adversaries. Work together and have fun.
Learning the material well and getting good grades are not necessarily correlated. If an assignment has grading rubrics, satisfy them literally and you'll get a good grade. As for really learning the material, it's often challenging to do within the timeline allowed for a course, especially with other courses competing for your attention. Just try to do well and get through the semester/quarter, then afterward when you have more free time, pick the subjects that speak to you and go through the material again, this time with the objective of internalizing the knowledge. Feel free to supplement your school material with material from other sources. Remember that what you're learning in school will only scratch the surface of CS; the real learning, if you choose to pursue it, will happen afterward.

Best of luck!

Remove the words "of CS" from this paragraph and give this paragraph to every college (and high school) freshman. Well said.
A good way to do this is to become a teaching assistant in the classes you want to go more in-depth on
If you haven't already, get a head start on learning the programming language for the course (C++, Java, Python).

One of my regrets about my time at university, was that I focused only on the course and the exams, and didn't build and tinker with my own stuff much. I think it's good to try to build some small websites or apps on your own.

Have fun!

totally agree,

using the stuff is extremely useful to passing and getting a feeling on what is possible, even more useful in getting a job

Don't miss lectures; do the assignments, even if most of the course grade is from exams; every percentage counts. Start on programming assignments early; there can be unpredictable debugging difficulties, which can turn into consecutive all nighters if you start a day or two before. Use reliable reference materials for languages and libraries. If you're a complete newbie, learn to use a programmer's editor. Try getting some simple programs working in the language you wil be using. Like, today; don't wait until three days before an assignment is due. Keep your work secure; if someone copies you and gets caught, you might both go down even though you're innocent. Keep track of what is on the midterm and final exam. If the textbook is expensive, borrow it from someone and take pictures; going without the text is risky: if your notes are poor, you may have nothing to cram from before the exam. Double check important dates and times; don't show up for an exam on a Wednesday only to find it already took place Tuesday. Find out what support there is for difficulties: availability of the professor or teaching assistants for asking questions and such.
Enjoy the social side too! (corona permitting).

Try to keep in mind subjects that seem utterly theoretical and possibly useless are usually in there for good reasons, and you might encounter them in your career more than you'd expect.

Take time to absorb the math-related concepts too, chances are it will come in handy if you become a programmer.

Purely biased based on my experience: do your internship(s) somewhere that pays you, like an investment bank or something.

As non-technological or academic advice.. maintain a healthy "study/life" balance. Keep enough time to socialize and make connections. Do fun things.

Having good social skills and some nerve can put you head & shoulders above other people in an interview. Once in a team, being able to communicate effectively makes projects much easier. Many times when engineers complain about lack of clarity, what they really mean is they were not able to communicate with the other person.

Yes!. Having good soft skills is really important, notably being able to do a confident presentation. I was painfully nervous of such things while at Uni and usually managed to avoid them, but eventually had to bite the bullet in industry. Because I started work in a research group that evaluated new software / concepts for the rest of the company, it was literally my job to communicate technical findings to non-technical people. To my surprise, I found that I could in fact stand up in a room and present, and eventually I came to enjoy it. I realised that I would have got better in academia had I started this earlier, and used the relatively benign Uni environment as a practice arena, as it were.
Udemy or taking online courses should speed up learning than reading docs and blog tutorials. Keeps you more engaged. This is just from personal experience.
Follow these tips and you will (probably) never have to work that hard (except on projects) or pull an all nighter:

- go over the lecture material yourself a few days after for every lecture

- start studying for the exam 2 months before but only for an hour or two a day. By the time the exam rolls around you will be so well versed you can take a few days off before the exam

It's hard to do but will make your college experience way less stressful.

spend a few minutes doing the assigned reading before the lecture
- Read the weekly syllabus BEFORE lectures, don't expect the lecturer to teach everything you need to know in those lectures. Meet up to your lectures religiously, by the time you're halfway into the semester, most of the class will not show up.

- Go the extra mile, don't just do that bare minimum. This means doing all the problems in your problem sets, including the "bonus" problems.

- Find someone to work/study with. It's incredible how much of learning comes through discussions with peers, and trying to figure out stuff together.

- Start on projects and take-home exams as early as possible. Something will come up, and some things will go wrong.

- Work consistently, make a schedule you can stick to. Cramming and pulling all-nighters is a terrible way to learning things.

- If you find some topic that really interests you, discuss it with the professor. Maybe they need some help, or know someone else - excellent time to get some light student research experience.

- Try to get experience as soon as possible. Start applying for internships and similar.

But most importantly: Enjoy your University years! Have fun, meet people, try new things. Join clubs. Also, be active...you'll join the workforce soon enough, and it's good to enter that stage of life with healthy routines.

Your phrasing makes me think you are not in the US so I can’t speak directly to how your university might do things. But CS is more about pen and paper and ideas than it is about writing code. Don’t presume that you are learning how to build software the way it is done in industry. That being said, the material is a solid foundation for learning how to think about logic and tradeoffs.
Read the chapter in the book before the lesson. This is essential before the first day in class.

Sit in the front row, ideally the center.

The first test is the most important. But is dependent on class size, the bigger the class the less it matters. e.g. class of 5, if on the first test you score an A, then the teacher will know it. If you come up short later, the teacher will wonder what they did wrong, as you were clearly understood the earlier material. In a class of 100 the teacher probably does not know you or your test result.

Discuss the projects with others. You might think you understand it, but talking with others will often help you clarify ambiguous items. Seems like all projects / assignments have a large degree of ambiguity.

For each / any programming class, make sure you learn how to use the debugger. Learning how to debug effectively will save you huge amounts of time.

>> Sit in the front row, ideally the center.

+1 to this. The difference may sound sutble but is strong in reality. Sitting right there in the front of the instructor makes it feel like a 1:1 conversation, which is much more useful.

Do all your classwork. Every single bit. There is a real thing when you are in the habit of writing code a lot. It makes it easier to write more. So keep your rhythm up by doing all classwork all the time and don't keep long pauses if you wanna stay hot.