├── ACADEMICS.md ├── GENERAL_PRINCIPLES.md ├── INTERVIEWING.md ├── JOBS.md └── README.md /ACADEMICS.md: -------------------------------------------------------------------------------- 1 | # Academics 2 | 3 | 4 | ## Invest heavily in CS 111 (Intro) and CS 112 (Data Structures) 5 | These are super important courses full of foundational knowledge. Your goal at the end of these should be to be able to confidently explain how to reverse a linked list or how to implement a hash table. Afterwards, advanced concepts will be much, much easier to grasp if you thoroughly understand the simpler concepts, and the simpler concepts more or less comprises the lion’s share of what’s asked in technical interviews anyway. There’s a ton of resources to fall back on if you’re struggling in these, too, especially [Code Red](https://resources.cs.rutgers.edu/docs/rooms-equipment/cave/). In general, good grades will come naturally if you invest time and energy into truly understanding and engaging with the course material. CS 111 and CS 112 give you a ton of time to do assignments and the community is literally designed to support you academically. 6 | 7 | 8 | ## Plan for and focus on growth 9 | You also have to be intentional about your growth. Freshmen should plan out their four years at Rutgers, degrees and all. This is my [four-year schedule](https://pastebin.com/zzkgPp7f) that I templated out in freshman year and adjusted throughout the years - it took weeks to make, and only worked out because I came in with a lot of AP credits, but it acted as a pretty helpful lodestone for me when I picked out my classes. 10 | 11 | If you’re thinking about the 5-year BS-MS degree, or if you want to complete the degree in 2 or 3 years, you need to start planning for credit-intensive semesters starting freshman or sophomore year. 12 | 13 | 14 | ## Be annoying and ask questions habitually 15 | I have countless memories of a teacher asking the class a question and the entire room being silent. From a teacher’s perspective, it’s even more awkward: you didn’t really ask it so that the same few people would answer (you already know they probably know it). You just wanted the people who are struggling to speak up and ask you to clarify something that they--and the rest of the class--don’t understand. It sounds dumb, but try to sit in the front of the class and ask questions whenever you don’t understand something - chances are, most other people didn’t either. I followed this myself and even though I felt dumb when I asked my questions, tons of people would later say to me, “hey Sakib, thanks for asking that in class, I had no idea what was going on”. 16 | 17 | 18 | ## Compartmentalize, and focus 19 | Life quickly gets overwhelming if you think about everything you have to do at once. Instead, focus on one thing at a time. Keep a comprehensive and categorized list of literally everything you have to do, and at the beginning of every day, pull things from this list into a “Today” section, and make sure you get them done today. [I used Pastebin for this](https://pastebin.com/JkCJZrVK), but many people I know use spreadsheets. Whatever you like. Trust your list, and trust your calendar to tell you when and where you have to be and what you have to do. Once it’s on your list, it’s out of your mind and you can stop thinking about it. 20 | 21 | Sometimes you have to context-switch really quickly: you could have a CS lecture followed by a phone interview, then have to go to office hours for a math course, then have a work shift, somehow figure out how and when to eat a meal, reimburse some people for a club expense, all the while worrying about your paper due tomorrow, and this could be one of your light days. At the same time, this prepares you really well for your working life. The only things that will help here are a tight calendar and a strong support network. 22 | 23 | 24 | ## How to handle deadlines and get into your zone 25 | Say you go to your CS 214 lecture and they assign you a project that’s due in a month. This deadline is both dangerous and misleading - you should get this done as soon as humanly possible :) 26 | 27 | I would pull late-nighters the day after large projects were assigned so that I could get into the zone, a place where I could be on my own and focus, spend uninterrupted hours solving a specific problem. I don’t recommend this specifically - I’ve struggled a lot with enforcing self-care and structure in my life - but being proactive with my work was crucial to my own growth and sanity. I could spend the next month not worrying about the project, focusing on other things, and helping out my peers when I had the chance. This has the added benefit of making you look smart, which helps out your reputation. 28 | 29 | One drawback of this approach is that your peers who do the project later get the benefit of extra help or insight from the professor; I’ve had classmates say “oh I finished in 4 hours” and make me feel bad for spending 4 days on something. But this isn’t that big of a drawback; you solved the problem on your own, and that’s a huge thing for your own growth in general. 30 | 31 | 32 | ## Build your support network 33 | You should find tight groups of friends that are smarter than you early on. You can utilize these resources as support networks and study groups; I would have gone insane without my support networks, and I would have bombed many classes without my study groups. You’ll naturally build more of these depending on how much time you spend in community spaces, how warm your presence is, how you present yourself, and what classes you choose to take. 34 | 35 | 36 | ## Actively seek out mentors 37 | Introduce yourself to upperclassmen - most of them are cool people who love to teach younger people and talk about themselves. I would often go into the CAVE, find an upperclassman and shake their hands, ask them what classes they’re taking, and if they could teach me something that they learned recently. I would also force my mentees to do this. I learned about a ton of cool stuff this way pretty early on: how the Linux OS handles clock ticks, what virtualization is, how distributed systems work, what are HTTP REST APIs, how the Internet works, etc. This has the added benefit of building your network and netting you friends to go to parties with. 38 | 39 | 40 | ## Actively seek to help others 41 | I shouldn’t need to explain this much. This is how you leave a legacy, make things better for the next generation, grow as a person and communicator yourself, and build your reputation. It also evolves into something you can use to motivate yourself and build up your support network. I started taking mentees in sophomore year by asking freshmen if they wanted to learn about the [OSI model](https://en.wikipedia.org/wiki/OSI_model), and to this day they’re my best friends. 42 | 43 | One of the main draws of the iLab Assistant position at the CAVE is that it helps you become a natural communicator which makes it easier to do well in interviews. As an interviewer, it’s pretty clear when someone can communicate their ideas effectively and when they can’t. 44 | 45 | 46 | ## Take graduate courses 47 | The earlier you figure out what you would like to specialize in, the more time you have to explore deeper concepts at Rutgers. As a freshman, my mentors recommended that I check out the Rutgers graduate course portfolio and picked out a few tracks that I knew I wanted to do by my end: Algorithms, Networking, and Machine Learning - and I took all the relevant electives and ended up taking 9 grad courses by the time I graduated. I found grad courses much more enjoyable than undergrad courses, since there’s a lot more freedom to explore what you want, less focus on exams, and more leniency. 48 | 49 | Also, most undergraduate electives have a graduate equivalent, and the graduate equivalent counts for the undergraduate course. For example, many students opt to take [Graduate Algorithms I](https://www.cs.rutgers.edu/courses/design-and-analysis-of-data-structures-and-algorithms) instead of [Algorithms](https://www.cs.rutgers.edu/courses/design-and-analysis-of-computer-algorithms). I opted to take both of them and found that Undergrad Algo covered a great breadth of topics and Grad Algo covered topics in more depth. 50 | 51 | 52 | ## Consider taking alternative courses 53 | The math department taught Probability Theory (Math 477), which counts for taking Discrete Structures II (CS 206). Since I had the requirements done for 477, I took it at the same time as Discrete Structures I (CS 205), even though 205 is a prerequisite for 206. This opened up my future schedule to have more flexibility, and also made my life easier in the long run since it was easier to ace Math 477 than CS 206. There are other alternative courses that count for CS courses, like Math 300 counts for CS 205 - it’s worth it to find these out on the department websites and plan accordingly. 54 | 55 | 56 | ## Plan out your prerequisites 57 | Map your [progression](https://www.cs.rutgers.edu/undergraduate/computer-science-course-structure) ahead of time, and make sure you get the courses you want with this four-point approach: 58 | * [Request an SPN](https://www.cs.rutgers.edu/courses/registration) the semester before if you need one. 59 | * Register for the course as soon as you’re able to, you’ll be able to find schedules for this based on your amount of credits. 60 | * [Course Snipe](http://sniper.rutgers.io/) the sections that work for your schedule (thanks V and Abe Stanway for this). Use the [Course Watcher](https://play.google.com/store/apps/details?id=com.tevinjeffrey.rutgersct&hl=en_US) chrome extension in addition to Course Sniper. 61 | * Hunt down the professor for the course you want, email them, go to their office hours, go to the first lecture of the course, and generally annoy them until they promise to let you in the course. This is much easier if you have a history of good grades. 62 | 63 | 64 | ## Balance breadth and depth for extracurriculars 65 | I’m not going to tell you to do one club or another, but you should already know that it’s a great way to grow personally and grow your portfolio to be involved in student orgs. It’s best to initially explore everything that you have an interest in and diversify your extracurriculars. Later on in your college career, it’s best to pick a handful of clubs and communities you vibe with (or start your own) and make an impact in the way you want to be remembered. 66 | 67 | 68 | ## Not all professors are created equal 69 | Some professors are better than others, and that’s a [rock fact](https://www.youtube.com/watch?v=wHP8GC6PGTU)! This is a subjective matter and I’m not going to tell you which ones are good or bad, you can ask your mentors about that. If you liked a certain professor, consider taking more of their courses, especially if it’s graduate work. If a certain professor is about as helpful as a sack of bricks, complain to the CS department chair. Also, use [Rate My Professor](https://www.ratemyprofessors.com/campusRatings.jsp?sid=825) before you join a class after sophomore year. 70 | 71 | 72 | ## Textbooks 73 | College textbooks are expensive. I never bought a textbook in any of my years. Most professors I had said “Make sure you get this textbook” but never actually used the textbook more than once or twice. On the rare occasion I actually needed them, I always was able to either find the relevant pages online or go off of my friends’ textbooks in our study groups. That said, if you want to actually read textbooks or collect them or save them for future reading, go ahead and buy used textbooks. 74 | 75 | 76 | ## Consider doing research 77 | I haven’t done research myself, but it’s pretty straightforward to get involved in undergraduate research. Some orgs hold Research Fairs where you can talk to professors about what they study, or you can browse professors’ [portfolios](https://www.cs.rutgers.edu/people/faculty/professors) yourself, see what’s interesting, reach out to them in-person or via email, get As in their classes and talk to them, and ask to help out. They’ll give you stuff to do if they think you can handle it. It’s a good way to diversify your activities, especially if you’re considering graduate school. Also, you don’t have to just consider CS research, since tech proficiency lends itself to help in so many interdisciplinary research efforts. Rutgers is a research institution, so I’m sure you can Google around. 78 | -------------------------------------------------------------------------------- /GENERAL_PRINCIPLES.md: -------------------------------------------------------------------------------- 1 | # General Principles 2 | 3 | ## Mental health, Impostor Syndrome, and Confidence 4 | First and foremost, take care of yourself and prioritize your personal mental and physical health above classes. Be the first or second person to give yourself a break. Mental health issues are rampant in college, and all of the following advice, and school in general, pale in comparison to what many people go through. Commuters have an entirely different set of struggles than on-campus residents. Check out Rutgers [health services](http://health.rutgers.edu/), get a therapist at CAPS, build a relationship with your professors/deans, adopt a skincare routine, shower every day, be physically active. 5 | 6 | You should not feel bad that you have less experience than others when you start college; in general, you shouldn’t feel bad about this when starting anything new. All the older, more experienced people who seem to know what they’re doing were in your shoes at some point. 7 | 8 | Most everyone in college has [impostor syndrome](https://www.urbandictionary.com/define.php?term=imposter+syndrome), and this will persist throughout life. It’s good to acknowledge it but not give that voice in your head much credence. This takes time and effort, more so for some than others. It’s up to you, mainly, to build a solid mental and physical foundation for yourself. 9 | 10 | 11 | ## Adjust your definition of “intelligence” 12 | There are many different [types of intelligence](https://www.cleverism.com/types-of-intelligence/). If you’re the kind of person whose parents always compared them to others, you in particular might be used to thinking that success or intelligence looks a certain way. And that’s okay, and it’s generally good to have role models, but please recognize your own biases about what intelligence means - that means don’t toxically gas people up and put them on pedestals no matter how “successful” they seem, and do look to celebrate the diverse sets of ways that your peers show their intelligence. Also, this should go without saying, but don’t make fun of other majors because they don’t match your biased view of what subjects are worthy to explore. 13 | 14 | 15 | ## Adjust your definition of what is “hard” and what is “easy” 16 | It’s usually pretty clear to see the differences between people who think “hard” means “something that you put a lot of time into but still don’t understand effectively” and people who think “hard” means “anything that takes effort”. The latter kind of person is pretty prevalent at Rutgers and in the world, but try to be the former kind of person. In an extremist opinion, my older brother would say that “nothing is hard, some things are just easier than others.” 17 | 18 | 19 | ## Stretch yourself 20 | When I was a freshman, I asked my older brother: how should I fill up my time when there’s so much to do? When will I know I’ve reached my limit? He said “you’ll never know how big your plate is until there’s so much on it that things start to fall off.” When I started following this, I found that I could handle a lot more than I previously thought myself capable of. Every day I felt myself stretching my capabilities, like muscles growing after undergoing intensive cycles of strain and stretch and rest. And messing up is okay - it’s college, it’s the safest time in your life to mess up. But take this advice with a grain of salt, since he comes from an “age of heroes” where the ideal CS student stayed up all night every night coding up fancy new thingamajigs and playing Smash Bros. You should find your balance between discomfort and comfort. If you feel you can do more or want more from yourself, [lean towards discomfort](https://i.pinimg.com/originals/f0/3a/cc/f03acc9fdba523e46841d9d6e362a6bd.jpg). 21 | 22 | My older brother would liken self-growth to Pokemon contests -- you know the pentagon that says how Cool or Smart or Cute your pokemon is? Make one for yourself on axes and metrics that you want to measure yourself with and track your progress over time. 23 | 24 | ![Mood](https://i.imgur.com/fxhDDil.jpg) 25 | 26 | 27 | ## Figure out what you want to do and what you don’t want to do 28 | College is supposed to help you figure yourself out; for many, it’s when you figure out you have an actual personality with your own unique interests. Try to take as many classes as possible in subjects you’d never take normally to extend out of your comfort zone. I took Basic Acting in the Theater department, which was harder for me than any CS course I’ve taken, but I learned a great deal about my emotions and I grew a great respect for actors. I took up to Graduate Algorithms II until I realized that I never want to derive the time complexity of operations on a van Emde Boas tree again. 29 | 30 | Why are you at college? Do you want to change the world? How? Do you just want stability and security? Are you in it for just yourself, or also for others? What do you hope post-college you is like? Ask yourself these questions often, like once a week or month. I figured out over time that I personally want to help decide the future of the Internet and social media, and also grow into a prolific engineer so that I can make a big impact in edtech or civic hacking efforts. 31 | 32 | 33 | ## Success is a function of time management and determination 34 | Succeeding in Rutgers CS is less a question of aptitude, and more a question of time management and determination. In other words, it’s not about how talented you are, it’s about what you choose to spend your time on, and how efficiently you spend it. If you think you’re not smart, surprise, everyone thinks that, except incels, which I hope you’re not. There are only a handful of classes that require more talent than hard work. If you’re asking, “does this schedule look doable? I don’t know if I’m smart enough”, you should instead ask yourself, “do I want to commit significant amounts of my headspace this semester to learning and exploring this topic? It’ll take time, but I can do it.” 35 | 36 | 37 | ## Be intentional 38 | College is about getting out of your comfort zone and growing as a professional and a human being. It’s also about figuring out what you want to do with your life. It helps no one in the long run if you take easy-A courses where you know you’ll learn nothing (unless it’s required). Take the tougher professor if you believe that you’ll learn more from it. 39 | 40 | It’s great to have [lazy days](https://www.youtube.com/watch?v=fLexgOxsZu0) from time to time, but at least on the weekdays, make sure you’re always doing something intentionally. Personally, I tried to be out and about until 10pm everyday. It could be hanging out with friends, studying in a group, working on club stuff, going to a party, arguing with people on Facebook, being proactive about your assignments, hanging around a community space, relaxing to focus on improving your mental health - my point is, [use your time efficiently and intentionally](https://www.reddit.com/r/getdisciplined/comments/1q96b5/i_just_dont_care_about_myself/cdah4af/). You’ll feel more control over your life when you don’t accidentally lie in bed from dawn to dusk and suddenly it’s 10pm and the day is gone. These decisions about how you choose to spend your time should be reflected in your Google Calendar, which should basically govern your life through mobile alerts you’ve set for yourself. Seriously, I can’t stress this enough, keep a tight calendar. 41 | 42 | It’s important to manage your time well on a macroscale and microscale. Thinking about and planning out what you’re going to do each couple of hours primes you to become more committed and more resolute, a decision maker. 43 | 44 | 45 | ## We spend our adulthoods learning how to cope with our childhoods 46 | This one is just good to keep in mind. You should analyze and acknowledge who you are as a result of how your parents raised you and how that relates to your strengths and weaknesses. For example, I was fortunate enough to have supportive parents who gave me a lot of freedom, but they also did everything for me and didn’t enforce many rules, and so I had trouble prioritizing self-care and structure for myself. Surrounding myself with complementary people whose strengths include implementing structure for themselves helped me address this weakness a lot. You should keep this in mind when you consider your behavior toward yourself and other people. 47 | -------------------------------------------------------------------------------- /INTERVIEWING.md: -------------------------------------------------------------------------------- 1 | # Systematic Interview Process 2 | 3 | I like lists so I made this and whenever I did a mock interview with someone, I used this as a reference until it became ingrained in the way I do interviews. It helps a lot. 4 | 5 | 1. Ask intelligent clarifying questions: for *this* input, do I get *this* output? Your goal should be to really understand the problem. 6 | 7 | 2. Build your set of 2-3 *comprehensive* test cases. Consider edge cases out loud and how to handle them. Write the cases out so you don't forget. 8 | 9 | 3. Now that you know your program's desired behavior, sketch out 2-4 algorithms to solve the problem. Always start with the dumbest brute-force algorithm and gradually improve on it by recognizing places you're wasting computation. Brainstorm things you know like dynamic programming, visualizing the problem as a graph/tree, etc. In the worst case, you have 1 dumb, brute-force algorithm that you can technically implement. 10 | 11 | 4. For each of your 2-4 algorithms, list next to them their expected time and space complexities. Optionally, note their simplicity/readability as well. Make sure to list out all relevant parameters before you say anything like "this is O(N)!" 12 | 13 | | Algo | Time | Space | Simple? | 14 | | ---- | -------- | ------ | ------- | 15 | | 1 | O(n^2) | O(1) | yes | 16 | | 2 | O(n) | O(n) | maybe | 17 | | 3 | O(log n) | O(n^2) | eh? | 18 | 19 | 5. Compare and contrast the algorithms out loud, taking into consideration all of the parameters you've laid out. Consider: code length, time limitations, system capabilities (what's the I/O bandwidth?), and your own ability/confidence in writing out the solutions in full. If you expect you won't have enough time to finish one solution, ask if it's okay to modularize some functionality out and finish later if you have time once you finish the main algorithm. Only commit to one approach after consulting your interviewer for their preference (if they have any). 20 | 21 | 6. Important: sketch out exactly how exactly you're going to implement your chosen solution. Anticipate what methods you're going to need, their signatures, runtimes and input/outputs. This is better than getting deep into your solution and realizing that one code segment is better off being modularized for cleanliness/usability, or realizing that another solution is better entirely. Example: Given a binary tree, print out all paths that sum to a given target value. 22 | You might think to use BFS here, but DFS is better because then you can just print out the values of the nodes when your recursion propagates back ui rather than keeping auxiliary data structures to track your paths. 23 | 24 | 7. Start implementing your solution in code. Don't make them ask you to do this. This should be ~5 minutes into the interview now. If one segment of code is going to take a significant chunk of time and isn't part of your main algorithm, offload it to another method, assume it'll work and tell interviewer you'll implement it later if you have time, then continue. Your main algorithm is the main priority. 25 | 26 | 8. If you get to this point, immediately run your algorithm on 1-2 of your test cases. There's no need to run line-by-line, just make sure it works - it's great if you catch your own mistakes here, so that the interviewer sees that you're self-righting. 27 | 28 | 9. Ideally by this point, your code is clean, modularized and ready-to-run. But if it's not, scan it now for readability, runtime, etc. and speak your thoughts. 29 | 30 | 10. The interviewer should be satisfied now and will probably take a picture of your work. 31 | -------------------------------------------------------------------------------- /JOBS.md: -------------------------------------------------------------------------------- 1 | # Jobs 2 | 3 | ## Build up your tech skills: resource dump 4 | * [Developer Roadmaps](https://roadmap.sh/) - I used this to figure out what technologies my mentees and I should learn and what paths we should take. 5 | * [Sakib’s Internship Guide](https://pastebin.com/wq2kc0a2) - I wrote this a while ago for my mentees when they were freshmen/sophomores. Covers a four-point plan to build you up: CTCI, Linux, AppDev, Website. 6 | * [Ubuntu, Git, Python, Flask](https://pastebin.com/xwXsdwHW) - Some links I compiled because people kept asking me where to learn this stuff and how to dual-boot [Ubuntu](https://ubuntu.com). 7 | * [Leetcode](https://leetcode.com) and [CTCI](http://www.crackingthecodinginterview.com) are what I used to get decent at coding interviews. Leetcode has specific problem sets that highlight which questions are common for companies like FB, Google, Amazon, etc. Share an account with your friends. 8 | * [CLRS](https://ms.sapientia.ro/~kasa/Algorithms_3rd.pdf) is the book to study or reference algorithms more advanced than those you learn in basic data structures. It’s often the textbook for Undergraduate Algorithms classes. Interviews won’t typically ask you questions of this kind until you’re a senior. 9 | * Resume/LinkedIn - When you’re a freshman, you won’t have nearly as much 10 | as experience as upperclassmen or privileged folk who were hand-held in tech earlier in life, and that’s okay. There’s internship programs that specifically [cater to newbies](https://www.wellesley.edu/careereducation/resources/technology-internships-first-years-and-sophomores). But you should still start making your resume and set up your LinkedIn! Your mentors can answer your specific questions on bolding, spacing, active wording, highlighting numbers, etc. Here’s some templates to inspire you: [Popular LaTeX Resume](https://github.com/deedy/Deedy-Resume), [My Google Docs Resume in senior year](https://drive.google.com/file/d/0B2ciTY-dBJClS0loQ2dYRUQzQWc/view), or just Google free resume builders, they just ask you to input your information and they export PDFs for you. 11 | 12 | 13 | ## Companies optimize against false positives, not against false negatives 14 | Hiring you is a big risk. Not because it’s you, but objectively, hiring full-time employees and even interns is extremely expensive. From a company’s perspective, it’s much better to accidentally not-hire a good candidate than it is to hire a bad candidate. That’s why the Tech Interview process is the way it is: asking random data structures and algorithms questions seems unfair and [RNG-based](https://www.urbandictionary.com/define.php?term=RNG) from a candidate’s perspective, but from a company’s perspective, it works pretty well at separating A-players from B- and C-players. The best you can do as a candidate is again, use all the time you have to prepare for all the types of questions they can throw at you. Work with your mentors, and keep a tight calendar to figure out how to balance this with acing all your classes. 15 | 16 | 17 | ## Consider yourself as a portfolio 18 | As a freshman or sophomore, companies don’t really have anything to judge you by besides your GPA. Also, freshman year GPA has the biggest impact on your GPA throughout your years of college, so prioritize academics early on, and consider applying to on-campus jobs or research, like [Open System Solutions](http://oss.rutgers.edu/), [LCSR](https://www.cs.rutgers.edu/lcsr/), [iLab Assistant](https://resources.cs.rutgers.edu/docs/instructional-lab/), ARESTY Research Program (https://aresty.rutgers.edu), etc. 19 | 20 | 21 | ## Hiring pipelines 22 | Say you’re lead hiring manager for Google and you receive millions of applications per year. How would you approach this problem? First, [read this](https://www.wayup.com/guide/community/keep-your-recruiters-straight/). Here’s an overview of what modern intern hiring pipelines usually look like: 23 | * Sourcing: [Read this](https://medium.com/@bkielinski/the-ultimate-guide-to-finding-your-next-technical-hire-for-free-a20a1ba77f03#.k9ds88jb3). Technical sourcers search for talent. It’s easier to discover you if you have a strong Internet presence, which includes having solid, up-to-date resume, Github, LinkedIn, personal site, and Google search presence. 24 | * Screening: [Read this](https://ideal.com/resume-screening/). A recruiter’s life is hard! Sometimes, this involves the recruiter calling you to ask you basic questions about Linux or Java, or sending you a quiz. Depending on the company, a majority of candidates are filtered out here. 25 | * Phone Interviews: The recruiter will ask you to schedule time for 2-3 interviews, which are usually coding-style interviews that are designed to extract signal regarding how strong your problem-solving skills are and how you respond to scenarios/questions you’ve never seen before. They’ll schedule one at a time and more if they need stronger signal from you. Depending on the company, over half of candidates are filtered out here. 26 | * Offer: If most of your interviewers returned with a strong signal for “hire”, you’re likely to receive an offer! Depending on the company, over half of candidates accept their offer. Exceptions include Google, because you can get an offer but still need to be host-matched to a team, and most positions on different teams may already be filled up depending on how late you apply. 27 | * Hire: You’ve been hired! Don’t renege on offers you’ve signed: this is how you burn bridges or get blacklisted, and word travels fast in recruiting communities (which are cross-company). 28 | 29 | 30 | ## Getting tech internships 31 | Look to use every summer you have to get as much work experience as possible and figure out what you like and don’t like. Don’t take unpaid internships. Start applying to companies in August, since that’s when companies start their hiring processes for next summer’s interns. It’s still okay to start applying as late as January. Your connections with upperclassmen and alumni will net you referrals, which usually skips you past the “screening” phase of hiring pipelines and straight into the “interview” phase. Be responsive and keep good communications with your recruiters. If you have to schedule interviews with 3 companies, try to schedule them on the same 1-2 weeks so you’ll be in “interview mode” the whole time, which is when your interview skills are super sharp since you’ve hopefully been studying and mock interviewing with your peers for weeks. If you have an outstanding offer from company X and still need to interview at company Y, ask X for an extension and ask Y to expedite their process, citing offer X (WARNING: this does not apply to [Google EngRes](https://www.google.com/about/careers/students/engres.html) - if they hear of offer X, they will stop interviewing you). 32 | 33 | Job Application Season™ is stressful. It’s like a part-time job while you’re juggling your academics and extracurriculars, so plan your schedules and involvements accordingly prior to Fall semester. But, like other things, you can and will succeed when you pour time and energy into it, leverage your support network, and get help from the right people. If you’re a freshman or sophomore, don’t worry too much - you’ll get there, and junior year internships are the most important ones anyway. 34 | 35 | 36 | ## Resources to ace your interviews 37 | First, read this [introductory guide](https://triplebyte.com/blog/how-to-pass-a-programming-interview) from TripleByte. 38 | 39 | Next, read through my [systematic interviewing process](INTERVIEWING.md). Good candidates can run through 2-3 questions per 45-minute interview session following some version of the above process. I would ask peers and alumni to mock interview me and practice this step-by-step until it was totally ingrained into the way I did interviews. 40 | 41 | I recommend doing interviews in Python, since you can do more stuff faster and be less caught up in the syntax. But pick whatever language you like and stick to it. You should be grinding Leetcode easy/medium questions for the whole month before your interviews to maximize how many patterns you’ll recognize during the real thing. 42 | 43 | Here’s a [comprehensive list](https://docs.google.com/document/d/1qedA6n91sEzQ6QhVunt-0y2DgrhOUpgetGmgnGO8v1o/edit?usp=sharing) of my study resources and favorite questions for coding and systems. Also included is a giant list of the most relevant Leetcode questions. Go crazy. 44 | 45 | 46 | ## Managing internships and getting return offers 47 | So you signed an offer! Congrats! Now what? First off, you’re not off the hook, you should continue learning things, but take time to celebrate, you king/queen. The company will walk you through things like residency, onboarding, etc. Once you start your internship, you’ll likely do an intern project and connect with other interns. Figure out what work-life balance you’re comfortable with. To maximize your chance at a return offer, finish your project earlier than the deadline, be proactive about work beyond the initial scope of your project, and push your diffs/PRs/CLs/contributions regularly and consistently. Actively seek feedback from other people on your team, not just your direct manager. If you feel like you’re not being challenged and have the capacity to do more, ask for more tasks to chew on. Above all, mesh with the company culture - one of the biggest things they’ll ask your manager is “Would you be happy to work with this intern on a different team in the future?” 48 | 49 | That said, if you’re having a bad experience, make it known. If your intern manager is making you feel uncomfortable or overly stressed in any way, escalate it to his/her manager and HR - good companies will have zero-tolerance policies. 50 | 51 | 52 | ## Get exposure to stuff outside of class 53 | Top tier companies hire people who shine in and out of academics, and your courses by themselves won’t teach you most things relevant in industry today. Although they’ll give you a great foundation, undergraduate studies are a pipeline for future graduate researchers. If you just want a job, then focus on things outside of class. As V said, your professors haven’t coded in decades, since academia rewards very different skills and traits than industry. 54 | 55 | Go to career fairs and shoot your shot with companies. If you’re a woman in CS, look for scholarships and go to conferences like Grace Hopper that are designed to empower minorities in tech. Go to as [many hackathons](https://mlh.io/seasons/na-2020/events) as you’re comfortable with, since hackathons are basically a special kind of career fair. Go to USACS’ Hacker Hours or similar workshop-like events, stay after and learn more from regulars and upperclassmen. This sounds like a lot, because it is, so I will re-emphasize a previous point: find a mentor to help guide you through this! It’s as easy as joining a mentorship program, or better yet do what I did: go up to someone who seems smart and nice, and say “hey would you be willing to be my mentor and teach me stuff?” - it works. 56 | 57 | 58 | ## Explore positions besides Software Engineer 59 | I’m a [Production Engineer](https://engineering.fb.com/category/production-engineering/) at FB and the work is much more interesting to me than standard SWE work since it involves fixing things that break in production, debugging complex systems, and improving security and reliability. A few months into my job and I’ve broken and fixed FB a few times already. Tech is very interdisciplinary; I’m sure if you’re passionate about X, you can find something that pays well and is a cross between X and tech. Talk to your mentors about this, and follow relevant newsletters: 60 | * [USACS](http://usacs.rutgers.edu/) 61 | * [Princeton e-club](https://www.princetoneclub.com/#About-Section) 62 | * [tech:NYC](https://www.technyc.org/newsletter) 63 | * [Startup Digests](https://www.startupdigest.com/digests) 64 | * [YCombinator](https://www.ycombinator.com/subscribe/) 65 | * [VC Newsletters](https://medium.com/@etiennebr/my-top-9-newsletters-if-you-want-to-be-up-to-date-on-the-vc-technology-industry-e195c74a72a2) 66 | 67 | 68 | ## Engage yourself in communities outside of Rutgers 69 | I shouldn’t have to explain why this is important to your own personal growth. Here are some ideas: 70 | * Make a [Github](https://github.com/join) and build your own website as a first step. You can do this at a hackathon. It’s like creating your own place on the Internet, and you decide what it is, a blog, a resume/marketing thing, etc. It’s a good way to start putting yourself out there. 71 | * Get engaged with [civic hacking](https://opengovdata.io/2014/civic-hacking/) since tech can be used for a ton of social good! For example, in my hackNY summer, we worked with the Human Trafficking Response Unit of NYC to build systems to help their analysts track down traffickers. 72 | * Apply to fellowships like [hackNY](https://apply.hackny.org) and work on building your network of like-minded friends. I love this community and everyone in it. 73 | 74 | 75 | ## Follow Sam Altman’s Startup Class and other university lecture series 76 | Watch the lectures at https://startupclass.samaltman.com/. I did this in freshman year and even though I didn’t end up making a startup, I learned a ton of lessons about the industry from the prolific speakers who deliver these lectures, all of them successful startup founders themselves in YC’s [portfolio](https://www.ycombinator.com/topcompanies/). Here’s all the [notes](https://docs.google.com/document/d/1ljUeGxoKgTyP4-4vfWgNiFNMyyE8W8q9Ky139NVuSpQ/edit) I took (warning: old). 77 | 78 | Also, follow other university lecture series, like [MIT’s OpenCourseWare](https://ocw.mit.edu/index.htm) or [Harvard’s CS50](https://online-learning.harvard.edu/course/cs50-introduction-computer-science). 79 | 80 | 81 | ## Build projects as a supplement 82 | Turn your ability to compartmentalize and keep a tight schedule into habits. Having these habits will help you find time to explore your own curiosities by building projects. Some of my favorite college memories involve making crazy stuff with strangers at hackathons halfway down the coast, and student orgs will organize buses or carpools to and from these kinds of events. But keep in mind this isn’t a replacement for good grades; you should already have a good academic record as a foundation before you think about extra stuff like this. 83 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Succeeding in Rutgers CS 2 | 3 | Summer 2019 4 | 5 | 6 | ## Suggested Reading 7 | 8 | - (Verma, 2015) [Succeeding in Rutgers Computer Science](https://vverma.net/succeeding-in-rutgers-cs.html) by [Vaibhav Verma](https://github.com/v): V wrote the original guide. He also helped start USACS and HackRU. 9 | 10 | - [Advice for Computer Science College Students](https://www.joelonsoftware.com/2005/01/02/advice-for-computer-science-college-students/): Joel is the CEO of Stack Overflow and generally a big-person-in-tech. 11 | 12 | 13 | ## Background 14 | 15 | If you ask 100 different Computer Science graduates how to succeed in the CS department, you’re likely to get 100 different answers. But I’m sitting here in my apartment thinking about what I would have told myself when I started at Rutgers. This guide will reflect those thoughts. 16 | 17 | I spent 4 years in the CS program and took a whole lot of undergraduate and graduate courses. I was a Learning Assistant for CS111 for one year, a Teaching Assistant for CS112 next year, and a Part-Time Lecturer for CS344 next year. I also taught a First-Year Interest Group Seminar my final year. I was President of Rutgers USACS for 2 years, a HackRU director for 2 years, and a mentor for the hackNY summer fellowship for 2 years. 18 | 19 | ## Disclaimer 20 | 21 | Most of this doesn’t apply until halfway through your freshman year - initially, just focus on finding your rhythm and getting somewhat comfortable with college life. There's a lot to being successful and it can get overwhelming, but remember that you have years to consider all these points, and they’ll be pretty busy and transformational years of your life. 22 | 23 | I mention often the way I did things; by no means is this the only road to success. Everyone has their own timeline, do what’s best for you, hopefully this makes you think. I’m writing this more for underclassmen, but the points are still valid for upperclassmen. If you’re older and don’t care, just skip to the jobs section or message me on Facebook for referrals. 24 | 25 | 26 | # Guide 27 | 28 | ## [General Principles](GENERAL_PRINCIPLES.md) 29 | 30 | ## [Academics](ACADEMICS.md) 31 | 32 | ## [Jobs](JOBS.md) 33 | 34 | 35 | # Appendix 36 | 37 | Other awesome and successful people will share their own experiences and lessons below. 38 | 39 | ## [Tanya Balaraju](https://tanya.github.io/) 40 | 41 | ### Realize that there’s no one way to succeed. 42 | * This doc is already huge, so it can be overwhelming. But all of it is advice made in an attempt to help you be your best. 43 | * This is a roadmap that worked for one person. Everyone’s path is different. Make the most of your own. 44 | * Figure out what fulfills you. For me, it was organizing and improving the CS community at Rutgers. I sometimes felt like an impostor because my biggest extracurricular involvement was about a community within tech, instead of tech itself. But that was what made me feel like I had an impact. Remember that humans are multidimensional--you can be successful and interesting even if your whole life isn’t about writing code. 45 | 46 | ### Don’t let fear be the reason behind your choices. 47 | * I avoided applying to jobs and internships for a very long time because I thought I would be exposed as a total failure. Turns out this thought process was a waste of my own time that never did anything useful for me, but the only thing I could see at the time was my fear of failure. It’s okay to be afraid--everyone is. Just don’t let that stop you, because it’s not worth it. 48 | * Work on replacing your fear of the unknown with curiosity about it. Even if you don’t know how your job search will work out, you’ll be better off if you have experience with interviews and job applications. If you’re afraid that a certain class will be too hard, remember that others have taken it before you, and there’s no inherent reason you can’t do it too. 49 | * Embrace uncertainty. Stand up for your notions, but get comfortable with being wrong and admitting it, because the best solution can only be found if you’re willing to find it. This is not only important in CS interviews, jobs, and classes, but also in general. 50 | * Surround yourself with people who encourage you and push you to do more and be better, even if you’re afraid. You won’t grow if you live in your bubble of fear. 51 | 52 | ### Try to gain an understanding of how people work. 53 | * People who loudly brag about their careers/interviews/skills/classes (or look down on those of others) are doing it out of their own insecurities. Don’t let that become an insecurity of yours. 54 | * Just because someone is loud and outspoken does not mean they are right. 55 | * Tech has a long way to go when it comes to being inclusive. Educate yourself on this, and do not shy away from the different experiences it creates for different people. Understand how it influences your own experience. Listen to others’ experiences so that you can understand, not just so that you can figure out the best way to disagree. 56 | * Aim to grow. You can’t be your high school self forever. 57 | * Check in on your own thoughts and behaviors often. Don’t be a jerk. No one likes a jerk. 58 | 59 | 60 | ## [Jamie Liao](http://jamieliao.com/) 61 | 62 | ### Do what you enjoy. 63 | * You’re in charge of your own life. Keep an open mind and do anything that piques your interest or curiosity, but don’t feel obligated to owe anyone by fitting into their needs or vision of yourself. 64 | * One story in particular: I personally struggled with this a ton while I was applying for full time roles. Because as a CS grad, it felt like there was an engineering-esque mold I was expected to fill. Whilst I was applying to full-time software engineering roles, I realized I was only doing it because “it’s the right thing to do” because I never programmed outside of projects and assignments. In the end, I tested my luck at a community oriented role at Major League Hacking and I learned I really, really love seeing people grow (and I don’t count down the minutes until I get to leave the office!). 65 | 66 | ### You are worth someone else’s time and energy. 67 | * Your mental health directly impacts your school and social life. The best thing you can do for yourself is know you aren’t alone and that you have a support system around you to help you. 68 | * Over time and experience, I learned that after speaking to someone about my thoughts and emotions, I immediately bounce back from the dark, unwanted pits of my brain. But, my need to find that “someone” was blocked by my insecurities of not feeling good enough to deserve one. During sophomore year, I came across my “someone” who showed me that they cared about my life and it did wonders for my mental health, self-confidence, and, ultimately, academics. 69 | 70 | ### Reflect and recognize your personal growth every semester. 71 | * As you go through the motions of school, you’re constantly fighting an upward battle as classes get harder and more responsibilities are piled on. The constant need to get better, compare yourself to others, and learn more can take a toll on your confidence as a person, but remember where you started from! 72 | * During my sophomore year, I was constantly comparing myself to my friends who were in higher level classes or more leadership positions. As a result, I would question my own abilities because I wasn’t where they were, even though they were the same age or younger than me. However, I also remembered that I was the high schooler who played games all day long and did the absolute minimum to pass classes. In just 1 year, I realized I grew so much that I barely believed all I accomplished and it pushed me to continue growing. 73 | 74 | 75 | ## [Ben Yang](http://benyang.me) 76 | 77 | ### My dad told me to not go home until it’s 10 PM everyday. 78 | * Helpful guideline to check if you’re not being productive. 79 | --------------------------------------------------------------------------------