3 ms·
1. Sweat the fundamentals. CS isn't a coding school. Algorithms, complexity theory, databases, operating systems, graph theory, compilers, math, etc. will get y
by aloukissas 6y ago
1. Sweat the fundamentals. CS isn't a coding school. Algorithms, complexity theory, databases, operating systems, graph theory, compilers, math, etc. will get you further than any coding.
2. Go for depth, not breadth. I know most US colleges make students do all sort of breadth stuff, which I don't get (I come from European undergrad, all our classes were CS/EE - coming to US for grad school, I was more prepared than others coming from top US undergrads). You have time to dive into other stuff after school. Do adjacent things like Biology or EE.
3. Find grad students and see what they're working on. This is where you'll see the value of the fundamentals. Then work backwards and fill the gaps. Try to get a tiny part in a research project (ideally one that can lead to publication).
4. Read timeless papers one each topic.
5. Hack, hack, hack - the gap between theory and practice is small in theory but large in practice.
- ajross 6y agoI don't exactly disagree, but the tension between points 1 and 5 is notable. I'd say the "get you further" remark is true in the narrow sense of a career: you'll be more likely to beat the interview if you can write a recursive solution to a problem than if you can talk fluidly about python generators. But being a productive engineer really requires both, they aren't separable skills, yet paradoxically they're actually poorly correlated! The world is filled with productive hackers who can get the wrong solution to "work" quickly, and insightful theoreticians who just can't produce working code.
- enchiridion 6y ago#5 big time. A lot of CS grads struggle their first year or so working. Try to code something everyday. Learn to use tools. Doesn't matter what you code or what tools you use really. The idea is to get comfortable with not knowing all the answers and then get fast at figuring things out. Most importantly, get enough sleep, exercise, and sun. Your mind needs to be sharp and that starts with maintaining your body. Good luck!
- MaxBarraclough 6y ago> Try to code something everyday. Learn to use tools. fish45 made it clear they're already an experienced programmer, so I don't see that it makes sense to emphasise this. They're more likely to struggle with theory than with their programming tools.
- jjjensen90 6y agoDisagree here, myself and many many peers considered ourselves "experienced" programmers before college (starting at 7 years old etc), and we were barely intern material in reality. Push yourself every day and learn tools (there are always new tools to learn) to be relevant--this goes for students, new grads, seniors, etc.
- MaxBarraclough 6y agoSure, I think we agree really. My point was that for the programming material, they're more prepared than many of their peers. For theoretical material, they're on the starting block with everyone else. It's good to work on your developer skills beyond what your degree gives you, but no-one should expect that their undergraduate studies will be easy simply because they're already a programmer. That's like assuming your degree in pure math will be easy because you studied algebra in high school. If you have a choice between doing well in your degree course, and learning additional developer skills, you should go with the former.
- nv-vn 6y agoI disagree on breadth vs. depth. Breadth will give you the tools to succeed in a wide variety of areas and prepare you to delve deeper on your own. If you go deep into ML for example that doesn't prepare you to work on operating systems, but if you have a broad understanding of both then you'll have the tools you need to find new resources and read research papers in both areas. (For the record, my school has a huge emphasis on depth over breadth and I feel like I'm sacrificing parts of my education by not being able to study more areas of CS).
- aloukissas 6y agoOh I meant depth as in take only CS-related courses, not European History, Greek Philosophy, Sociology, etc (which seems to be common in US universities). By all means go broad _within_ the field, from graph theory to transistors to DSP to anything really. I would venture out to STEM fields that seem interesting.
- buttersbrian 6y ago#5 is invaluable. "Hacker" or "tinkerer" mindset is very helpful. When hiring, especially at the entry level(s), those who hacker/tinker outside of their job usually standout and have a better understanding of how all the "things" we work with as Engineers connect because they are out there trying/failing outside of their 9-5. The challenge with "hackers" is learning how to unplug, so make sure to develop skills/interests that are completely unrelated to "work".