├── classdep.jpg ├── .gitignore ├── glossaryhackathonscmu.pdf ├── Davis_CS_Club_Major_Handbook.pdf ├── README.md └── main.tex /classdep.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavisCSClub/Handbook/HEAD/classdep.jpg -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.aux 2 | *.fdb_latexmk 3 | *.fls 4 | *.log 5 | *.out 6 | *.synctex.gz 7 | *.toc 8 | auto 9 | -------------------------------------------------------------------------------- /glossaryhackathonscmu.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavisCSClub/Handbook/HEAD/glossaryhackathonscmu.pdf -------------------------------------------------------------------------------- /Davis_CS_Club_Major_Handbook.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavisCSClub/Handbook/HEAD/Davis_CS_Club_Major_Handbook.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # About 2 | An unofficial handbook for tech people and more specifically, UC Davis computer science students, made by the [UC Davis Computer Science Club](https://www.facebook.com/daviscsclub/). Feel free to submit a pull request or contact the UC Davis Computer Science Club to ask questions or suggest changes. 3 | 4 | # How to Use 5 | 1. Download the PDF -- the preview on Github will not allow you to click on links and it might be a little hard to navigate without that function 6 | 2. Read the PDF 7 | 3. Yay! 8 | 9 | # Pushing 10 | This is for the UC Davis Computer Science Club members who are pushing to the handbook -- please make sure to version bump and cite your name for any changes you made. For example, if Secretary Jill Doe made a change to the FAQ subsection of Classes and Waitlisting, she would put in Version History, if the previous version was 0.1: 11 | 12 | >**Version 0.2:** 13 | 14 | >Edited and updated FAQ subsection of Classes and Waitlisting -- Jill Doe, Secretary 15 | 16 | Please follow this general format to keep everything consistent and information attributed and accredited to the right people. 17 | 18 | # Notes 19 | ![alt text](https://licensebuttons.net/l/by-nc/3.0/88x31.png "CC BY-NC 4.0") 20 | 21 | Source file is in the main.tex page. This handbook is under a [Creative Commons Attribution-NonCommercial International 4.0 license](https://creativecommons.org/licenses/by-nc/4.0/). 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /main.tex: -------------------------------------------------------------------------------- 1 | \documentclass{article} 2 | \usepackage{fullpage} 3 | \usepackage{booktabs} 4 | \usepackage{csquotes} 5 | \usepackage{enumitem} 6 | \usepackage[symbol]{footmisc} % changes footnote style 7 | \usepackage{setspace} 8 | \usepackage{sectsty} 9 | \usepackage{soul,xcolor} 10 | \usepackage{fancyhdr} 11 | \usepackage{color} 12 | \usepackage{hyperref} 13 | \usepackage[tocindentauto]{tocstyle} 14 | \usepackage[final]{pdfpages} 15 | \usepackage[parfill]{parskip} % changes paragraph style 16 | 17 | \hypersetup{ 18 | colorlinks=true, 19 | linkcolor=blue, 20 | filecolor=magenta, 21 | urlcolor=cyan, 22 | } 23 | 24 | \newcommand{\book}[1]{\textit{#1}} 25 | 26 | \title{The Unofficial, Semi-Comprehensive, Quintessential UC Davis Computer 27 | Science Major Handbook and FAQ} 28 | \author{The Davis Computer Science Club} 29 | \date{Version 0.1\\\today} 30 | 31 | \begin{document} 32 | 33 | \begin{titlepage} 34 | \maketitle 35 | \end{titlepage} 36 | 37 | \tableofcontents 38 | 39 | \pagebreak 40 | 41 | \singlespacing 42 | \sectionfont{\Large} 43 | \subsectionfont{\large} 44 | 45 | \section {Version History of this Handbook} 46 | \subsection*{Version 0.0} 47 | September 14, 2016. First version of the handbook written. 48 | 49 | March 18, 2017. Style changes. Made language section less opinionated. Brought 50 | version history up to date. 51 | \newpage 52 | \section{Introduction and Disclaimer} 53 | I started writing this handbook with a few others because I saw a sore lack of 54 | resources for not just the UC Davis Computer Science community, but the tech 55 | community in general. More importantly, I knew that a lot of my peers, 56 | especially peers who weren't considered the stereotypical Computer Science 57 | student, had questions but were too scared to ask them due to fear of backlash 58 | and critique. 59 | 60 | Like most CS students, I started CS without any Computer Science background and 61 | learned everything in this handbook the hard way. Hence, this handbook was 62 | written in mind with the audience being a complete newbie (aka a first year with 63 | no Computer Science knowledge at all) as a brief overview. 64 | 65 | I don't know how helpful this handbook will be or if anyone's attempted anything 66 | like this before, but I thought I'd try my hand at sharing my knowledge with 67 | anyone who'd be interested. I don't claim to know everything and I'm sure those 68 | with more experience could add more nuance and details onto whatever modest 69 | amount I have here. If you're interested in adding more to this handbook, please 70 | submit a pull request to the GitHub repository where this is hosted. Please feel 71 | free to contact The Davis Computer Science Club with any questions! 72 | 73 | \subsection{How to Best Use This Handbook} 74 | There's a lot in this handbook! You don't have to read this handbook cover to 75 | cover, word by word (though I'd love it if you did!), but just read whatever 76 | sections you're interested in by going to the Contents page and clicking on any 77 | section you'd like to read. Any URL to another site is highlighted in 78 | \textcolor{cyan}{cyan blue}, and any links/hooks within the document are 79 | highlighted in \textcolor{blue}{plain blue}. 80 | 81 | \subsection{Disclaimer} 82 | This handbook only offers advice and resources given by few members of the UC 83 | Davis Computer Science Club -- it is by no means a strict guideline for one to 84 | follow or a guarantor of success and is not meant to serve as a replacement or 85 | substitute for advising by a counselor or adviser. If you have questions, this 86 | handbook is a place meant to start your research, not to complete it. While we 87 | do our best to make sure our information is accurate and updated, mistakes can 88 | be made either from human error or the handbook simply not being updated to 89 | match current changes-- please make sure to confirm all information with an 90 | adviser or through other resources. 91 | 92 | If you have questions or comments, or would like to provide suggestions, please 93 | feel free to email one of the current officers here: 94 | \nameref{sec:DCSC}. If you would like to add more to the handbook or fix a 95 | mistake, please feel free to submit a pull request to the repository where this 96 | handbook is hosted. Thank you! \\\\ 97 | \textbf{Written with love in \LaTeX by:} \\ 98 | Stephanie Chang '17 \\ \\ 99 | \textbf{With contributions by:} \\ 100 | Alex Fu '17\\ 101 | David Lin '17\\ 102 | Christina Zhu '17\\ 103 | The Davis Computer Science Club\\ 104 | 105 | \newpage 106 | \section {The Davis Computer Science Club} 107 | \label{sec:DCSC} 108 | The Davis Computer Science club runs during the school-year and provides 109 | resources, workshops, and a community for the UC Davis Computer Science 110 | community. Here's a breakdown of the Davis Computer Science Club: 111 | 112 | Besides the main board, we have three committees -- Tutoring, Pragmatic 113 | Programming, and Professional Development. Each committee is headed by a chair 114 | and their possible, respective co-chair. Our website and various pages can be 115 | found below: 116 | \begin{center} 117 | \begin{tabular}{p{3cm} p{8cm}} 118 | \toprule 119 | \textbf{Link} & \textbf{Description} \\ 120 | \midrule 121 | \href{http://daviscsclub.org}{Website} & Our main page -- information about the Davis CS Club, its officers, committees, and various events are located here. \\ 122 | \href{https://www.facebook.com/groups/daviscsclub/}{Facebook Group} & Chat with other CS majors at UCD and find out about our events \\ 123 | \href{https://www.facebook.com/daviscsclub}{Facebook Page} & A little different from the Facebok group -- you can find photos and event information here.\\ 124 | \href{https://github.com/DavisCSClub}{GitHub} & Our study guides for upper division classes, class notes, meeting minutes, officer board, bylaws, and whatnot are all hosted here.\\ 125 | \bottomrule 126 | \end{tabular} 127 | \end{center} 128 | One of our old committees, the Game Development Committee, has branched off from 129 | the Davis Computer Science Club and has created their own club -- if interested, 130 | please check \href{https://www.facebook.com/groups/davisgamedev/}{here}. 131 | 132 | \subsection {General Events} 133 | Here are the general events, workshops, and programs the Davis Computer Science 134 | Club holds either quarterly or yearly. Some events may or may not be included at 135 | the discretion of the current board whereas some events may be added. To keep 136 | updated, join our Facebook group or follow us on our Facebook page! 137 | \begin{itemize} 138 | \item Bit/Byte Mentorship Program 139 | \item Gender Diversity in Tech 140 | \item Courses Preview 141 | \item Socials 142 | \item DCSC End-Of-Year Banquet 143 | \item Elections 144 | \item T-shirt contest 145 | \end{itemize} 146 | 147 | \subsection{Tutoring Committee} 148 | The Tutoring Committee serves the Davis Computer Science community by training 149 | and providing volunteer tutors for Computer Science (ECS) courses at UC 150 | Davis. 151 | 152 | Tutors are typically located in Kemper Basement during their signed up hours, 153 | but are possibly available upon request. The Tutoring Committee also holds 154 | review sessions for lower division ECS courses and a select few upper division 155 | courses depending on the availability of the tutors who are able to lead the 156 | review sessions. 157 | 158 | Tutors are able to receive undergraduate ECS credit with a certain amount of 159 | hours. To become a tutor, contact the current Tutoring Committee chair(s) or the 160 | Davis Computer Science club. 161 | 162 | To find a tutor, please check 163 | \href{https://daviscsclub.org/tutoring/athena}{athena} for available tutors 164 | during the week, or Kemper 75 or Kemper 77 during CSIF hours on weekdays. 165 | 166 | \subsection{Pragmatic Programming Committee} 167 | Pragmatic Programming tends to lead workshops on various skills, tools, 168 | languages, frameworks, and so on forth in tech and Computer Science. They may be 169 | spread out in a series of weeks. Past workshops include, but are not limited to: 170 | \begin{itemize} 171 | \item iOS and Android Development I, II, III, IV 172 | \item Web Development 173 | \item Javascript 174 | \item Git 175 | \item Building Your Own Application 176 | \item Optimization 177 | \end{itemize} 178 | 179 | And so on forth. If interested in participating in events, please check out the 180 | Facebook group or page to see if any events are running! If you're interested in 181 | helping out, please get in contact with our current Pragmatic Programming 182 | chair(s). 183 | \subsection{Professional Development Committee} 184 | The Professional Development provides a series of workshops and events to help 185 | students with advancing their careers. Past events have included, but are not 186 | limited to: 187 | \begin{itemize} 188 | \item Mock Interviews 189 | \item Resume Workshops 190 | \item Negotiating Offers 191 | \item Alumni Talks 192 | \item Professor Chats with Professor Rogaway, Professor Gysel, Professor 193 | Filikov, and so on forth 194 | \end{itemize} 195 | And so on forth. If interested in participating in events, please check out the 196 | Facebook group or page to see if any events are running! If you're interested in 197 | helping out, please get in contact with our current Professional Development 198 | chair(s). 199 | 200 | \subsection{Web Development Committee} 201 | Web Development is in charge of our website, daviscsclub.org. They design, host, 202 | and code up the website and keep it updated. There are no particular events that 203 | the Web Development committee hosts, but people are welcome to attend and help 204 | out the committee and website and get acquainted with the code that is involved 205 | with our website! If you're intersted, please contact our Web Development 206 | chair(s). 207 | 208 | \subsection {How to Get Involved} 209 | Attend workshops, events, and officer meetings, join our Facebook group and 210 | follow our Facebook page! Become a mentor a mentee for the Bit/Byte mentorship 211 | program, and volunteer at our events! We need volunteers to help out with any 212 | large event we plan, such as Gender Diversity in Tech and our DCSC End-Of-Year 213 | Banquet. If interested in helping out or attending, message us on our Facebook 214 | page. :) 215 | 216 | \subsection{Officer Board 2016-2017} 217 | \label{sec:officers} 218 | You can find a description of the officer board in our Bylaws 219 | \href{https://github.com/DavisCSClub/Bylaws/blob/master/bylaws.pdf}{here}. Our 220 | weekly officer meetings are open to the public -- if interested in attending, 221 | please message the Davis Computer Science Club on our Facebook page as they are 222 | subject to change weekly depending on the availability of the board. 223 | 224 | \subsubsection{Core Body} 225 | \begin{center} 226 | \begin{tabular}{lll} 227 | \toprule 228 | \textbf{Title} & \textbf{Officer} & \textbf{Contact} \\ 229 | \midrule 230 | President & Pooja Rajikumar & prajkumar@ucdavis.edu \\ 231 | Internal Vice President & Stephanie Chang & ischang@ucdavis.edu \\ 232 | External Vice President & Ariel Shin & arishin@ucdavis.edu \\ 233 | Treasurer & Sam Tsoi & sgtsoi@ucdavis.edu\\ 234 | Secretary & Trevor Glynn & tfglynn@ucdavis.edu \\ 235 | Events Coordinator & Sravya Divakarla & sdivakarla@ucdavis.edu\\ 236 | Marketing Director & Prajakta Surve & prsurve@ucdavis.edu\\ 237 | \bottomrule 238 | \end{tabular} 239 | \end{center} 240 | 241 | \subsubsection{Committees} 242 | \begin{center} 243 | \begin{tabular}{lll} 244 | \toprule 245 | \textbf{Committee} & \textbf{Chair} & \textbf{Contact} \\ 246 | \midrule 247 | Tutoring & Alex Fu & aafu@ucdavis.edu \\ 248 | Pragmatic Programming & Pranav Gupta & phgupta@ucdavis.edu \\ 249 | Professional Development & Zain Budhwani & zbud@ucdavis.edu\\ 250 | Web Development & Teresa Liu & stiliu@ucdavis.edu \\ 251 | \bottomrule 252 | \end{tabular} 253 | \end{center} 254 | 255 | \subsection{FAQ} 256 | \begin{description}[style=nextline] 257 | \item[Are there any requirements to becoming a member of the Davis Computer 258 | Science Club?] 259 | Nope! Regardless of major or age, anyone is free to participate in our events 260 | and workshops. We only ask that you be polite and respectful to everyone else. 261 | \item[Do you charge to become a member?] 262 | As of version 0.0 (check the date, please) of this handbook, we do not 263 | currently charge to become a member or have any dues. That may change in the 264 | future, however, depending on the discretion of the officer board. 265 | \item[Can I post a job posting/advertisement of my product on your Facebook 266 | group or page?] 267 | For the most part, no. Any job postings should be directed to our Computer 268 | Science adviser, Natasha Coulter, who sends out Listserv emails to all the 269 | Computer Science undergraduates. Her email is 270 | \href{mailto:nbcoulter@ucdavis.edu}{nbcoulter@ucdavis.edu}. 271 | 272 | If you would really like to post on our page still, message us with your 273 | content and we'll take a look! Without approval, any advertisements and job 274 | postings will be promptly removed and after multiple times, the user will be 275 | banned. 276 | \item[How do I become an officer of the Davis Computer Science Club?] 277 | There are yearly elections at the end of the year that decide next year's 278 | officer board. To be eligible, you need to attend a certain amount of meetings 279 | and/or a certain amount of events. The requirements change depending on the 280 | current officer board, so either message the current board on our Facebook 281 | page or keep a lookout for the event on our Facebook group or page. 282 | 283 | However, students are welcome to shadow officers or attend our officer 284 | meetings, which are typically open to the public. Please contact an officer to 285 | get more information! 286 | \item[Do you sell t-shirts? Where can I get them?] 287 | We do sell t-shirts! Message the current officer board and see when/where they 288 | are sold. 289 | \item[Do you sell graduation stoles? Where can I get them?] 290 | Graduation stoles are dependent on interest -- some years we have them, some 291 | years we don't. If enough people are interested, we may order them 292 | again. Please contact the current officer board to express interest. 293 | \item[Do you sell Computer Science major sweaters? Where can I get them?] 294 | We are not allowed to sell Computer Science major sweaters with the UC Davis 295 | logo. However, while we do not have one without a logo, if you are interested 296 | in a Computer Science sweater without the UC Davis logo, please contact our 297 | current officer board to express your interest. Otherwise, please contact the 298 | Computer Science department. 299 | \item[Who can I talk to if I feel uncomfortable at an event or workshop held by DCSC?] 300 | Please contact the Internal Vice President -- they handle all the internal 301 | affairs of the club. DCSC has a zero tolerance policy against harassment and 302 | discrimination. Please let us know if you feel uncomfortable or harassed at an 303 | event and we will do our best to to stop or prevent the harassment. 304 | \item[Where can I find the meeting minutes?] 305 | Our meeting minutes are on our GitHub page, under Archives. They are typically 306 | updated by our Secretary on a semi-weekly basis. 307 | \item[How can I contact the Davis Computer Science club?] 308 | We prefer being contacted through Facebook via our Facebook page. However, you 309 | are welcome to contact the current board, especially our president, for any 310 | questions, comments, or concerns. The Davis Computer Science Club welcomes any 311 | sponsors and if interested, please email or message us! 312 | \end{description} 313 | \newpage 314 | \section {Classes and Waitlisting} 315 | \subsection{Helpful Links} 316 | \subsubsection{Advising} 317 | \begin{center} 318 | \begin{tabular}{p{6cm} p{8cm}} 319 | \toprule 320 | \textbf{Link} & \textbf{Description} \\ 321 | \midrule 322 | \href{https://www.cs.ucdavis.edu/undergraduate/cs-major/}{CS/CSE Major Requirements} & Various major requirements and catalogs live here. \\ 323 | \href{https://registrar.ucdavis.edu/calendar/quarter.cfm}{Quarter Deadlines} & Deadlines for the quarter and drop deadlines. \\ 324 | \href{https://students.ucdavis.edu/}{OASIS} & Calculate your major GPA, GE requirements, change and add majors, schedule advising, or add a minor here.\\ 325 | \href{https://ls.ucdavis.edu/advising/academic-advising/degree-check-request.php}{College of Letters and Science Degree Check} & Get a degree check if you're in the College of Letters and Science! Submit a form and you'll get a degree check by an adviser returned to you in a week or so.\\ 326 | \href{https://engineering.ucdavis.edu/undergraduate/advising-q-a/#a13}{College of Engineering, Degree Check} & Get a degree check if you're in the College of Engineering! Submit a form and you'll get a degree check by an adviser returned to you in a week or so.\\ 327 | \bottomrule 328 | \end{tabular} 329 | \end{center} 330 | 331 | \subsubsection{CSIF, UNIX, tutorials} 332 | \begin{center} 333 | \begin{tabular}{p{6cm} p{8cm}} 334 | \toprule 335 | \textbf{Link} & \textbf{Description} \\ 336 | \midrule 337 | \href{http://csifdocs.cs.ucdavis.edu/}{Computer Science Instructional Facility, or CSIF} 338 | & Information about our basement labs and our computers and hours 339 | are here. \\ 340 | \href{http://csiflabs.cs.ucdavis.edu/~ssdavis/30/UnixWorkshop.pdf}{UNIX and CSIF set up} 341 | & Need help setting up or learning UNIX? Lecturer Sean Davis has 342 | an excellent tutorial here, along with a PDF of useful bash 343 | commands. \\ 344 | \bottomrule 345 | \end{tabular} 346 | \end{center} 347 | 348 | \subsection{Class Dependency Tree} 349 | Figure~\ref{fig:deps} shows the prerequisites needed for CS classes at UC Davis. 350 | \begin{figure}[htbp] 351 | \includegraphics[width=\linewidth]{classdep.jpg} 352 | \caption{Class Dependency Tree made by David Lin, '17.\label{fig:deps}} 353 | \end{figure} 354 | \newpage 355 | \subsection {FAQ} 356 | \begin{description}[style=nextline] 357 | \item[What are my chances for getting into x class if I'm position y on the waitlist?] 358 | There's no definitive answer for this question. Since CS and CSE are now 359 | considered impacted majors, it's probably going to be difficult to get into 360 | classes, especially if you're not a declared CS/CSE major. 361 | 362 | There are some known classes that are more difficult to get into even if 363 | you're high on the waitlist, such as core upper division classes and 364 | especially ECS 188. If you're a CS major and in need for upper division 365 | electives, math upper divs (besides 111) are now an option to replace an upper 366 | div elective since catalog 2014. 367 | 368 | Most lower div classes, such as ECS 30, ECS40, and ECS 60, are easy to get 369 | into regardless of your position on the waitlist given its high drop 370 | percentage and turnover, but there's still no total guarantee. Make sure you 371 | have backup CRNs stored up and research other alternative before your pass 372 | time! 373 | \item[Can I follow a graduation requirement catalog that's not my own?] 374 | You can only graduate from catalogs that have been changed since you started 375 | UC Davis -- for example, if Jill started UC Davis in 2013, Jill can follow any 376 | catalog changes to graduate after she came in, such as 2014, 2015, 2016, 377 | etc. However, Jill is not able to follow any catalog changes from before she 378 | came in -- so 2012, 2011, etc are out. 379 | \item[Is my w x y z class load manageable?] 380 | That's hard to say. Common classes to take together have been ECS 40 and ECS 381 | 20, along with ECS 50 and ECS 60. Depending on professors, some class loads 382 | may be more manageable than others. 383 | \item[Where can I find tutors for ECS? classes] 384 | Please check out \href{https://daviscsclub.org/tutoring/athena}{athena}, our 385 | tutor office hours page. 386 | \item[How do I get credit for my ECS internship/tutoring/research?] 387 | If you're doing research or an internship with a professor or company, click 388 | \href{http://www.cs.ucdavis.edu/undergraduate/192-199/}{here} for more 389 | information to possibly get credit. If you'd like to tutor with the Davis 390 | Computer Science Club and get credits, please either contact the current 391 | Tutoring Club Chair at \nameref{sec:officers} or click 392 | \href{https://daviscsclub.org/committee/tutoring}{here}. 393 | \item[How can I prepare for x class?] 394 | The best way to prepare for a class is look up the class and find the 395 | syllabus. If it's an intro class, try looking up the projects that were done 396 | and code up the solutions on your own. ECS 10 uses Python, ECS30 uses C, and 397 | C++ is used throughout most of the classes after, such as ECS 40 and ECS 60, 398 | and other upper division classes. 399 | 400 | If you're just starting to take ECS classes, a good way to start is to 401 | familiarize yourself with the language and learn the basics: if/else 402 | statements, loops, arrays, pointers, and possibly structs or 403 | classes. KhanAcademy, Coursera, CodeAcademy, and StackOverflow are good 404 | resources for beginners and professionals alike. 405 | 406 | The various data structures taught in ECS 60 are usually: linked lists (single 407 | and doubly linked), stacks, quadratic probing and linear probing hash tables, 408 | queues, arrays, and the like. 409 | \item[What are some easy GE's?] 410 | Popular GE classes mentioned have been NUT 10, ASA 1/2/3/4, ENL 5F/5P, CLA30, 411 | ECM1, COM1/3, ECN1, etc. Alternatively, localWiki has a list of classes 412 | \href{https://localwiki.org/davis/Best_Classes_To_Take_Your_Last_Quarter...or_so_I've_heard}{here}. 413 | \item[What are some easy or popular math/stat classes to take for that one upper 414 | division math elective?] 415 | MAT 145 (Combinatorics) and MAT 108 (Discrete Math) are popular options. 416 | \item[What's a good GPA to have for a CS/CSE major?] 417 | There's no good answer for this question -- it all depends on what you plan on 418 | doing after school. 419 | 420 | If you plan on going into industry, certain companies may care more about your 421 | GPA than others and you may be guaranteed interviews if your GPA is high 422 | enough and above a certain cutoff. However, most companies stress personal 423 | projects and experience, whether from hackathons, work, or in your own free 424 | time, and your GPA isn't much of a deciding factor, if at all. It doesn't hurt 425 | to have a high GPA, but in general, it matters more to have projects and 426 | experience. From the unconfirmed grapevine, it's been said that anything above 427 | a 3.0 is considered decent or competitive, and the few, rare companies that 428 | have a GPA cutoff require a 3.0 or above. 429 | 430 | Graduate school has different requirements and standards and may stress GPA 431 | more heavily than industry, but that depends on who you are, which school, and 432 | the research you've done. 433 | 434 | The average GPA for a CS major seems to be around a 2.9, so take with that 435 | what you will. 436 | \item[What's the best OS/computer/device/etc to own to code with?] 437 | Any operating system will do, and any computer will do. None are the best. 438 | The CSIF lab computers run \href{https://getfedora.org/}{Fedora} (one of many 439 | Linux distributions), so you may want to try that. 440 | 441 | Note that you can run whatever operating system you want inside a virtual 442 | machine using software including, but not limited to, QEMU and VirtualBox. 443 | \end{description} 444 | \newpage 445 | \section {Hackathons} 446 | \label{sec:hackathons} 447 | ``Hackathon'' is a conjunction of two words: hack and marathon. Participants can 448 | either go solo or form teams and create projects for a certain amount of time, 449 | anywhere from 12 to 72 hours. At the end of the hackathon, there's usually a 450 | demo session where projects are judged and the best projects take home great 451 | prizes. 452 | 453 | Hackthons are usually hosted by universities or organizations with various 454 | company sponsors. Most hackathons are free and provide wi-fi, sleeping areas, 455 | food, mentors if you get stuck, and plenty of swag\footnote{free goods 456 | (branded or otherwise) from companies or universities, like tote bags, blankets, 457 | water bottles, t-shirts, stickers, toothbrushes, etc.} 458 | for everyone to take home. Sometimes hacakthons will provide a certain amount of 459 | travel reimbursement for the participant to attend the hackathon. 460 | 461 | Hackathons are a good way to buff up your resume with projects and expose 462 | yourself to more technologies, APIS, and companies. It's also a way to network 463 | with other professionals, students, and recruiters in the field. Some companies 464 | will recruit and even interview at a hackathon, so if you're looking for job 465 | opportunities, keep your resume updated and bring a few hardcopies! 466 | 467 | Contrary to popular belief, anyone can attend a hackathon, even if you're not a 468 | computer science major or student. A successful team may need designers, product 469 | management leads, and business majors to keep the project going and even if you 470 | don't plan to hack on/make anything at the hackathon, attending one and 471 | immersing yourself in tech culture is a great learning experience for anyone, so 472 | don't count yourself out! 473 | 474 | \subsection{A Few Major hackathons} 475 | \begin{center} 476 | \begin{tabular}{llll} 477 | \toprule 478 | Location & Name & Theme (if any) \\ 479 | \midrule 480 | UC Davis & \href{https://hackdavis.io}{HackDavis} & social good \\ 481 | San Francisco & \href{https://stupidhackathon.github.io}{Stupid Sh*t} & useless hacks \\ 482 | & \href{https://noisebridge.net/wiki/HackTheLeft}{HackTheLeft} & leftist hacks \\ 483 | & \href{https://hackerearth.com/slash-hack}{Slash Hack} & \\ 484 | UC San Diego & \href{https://www.sdhacks.io}{SDHacks} & \\ 485 | UC Berkeley & \href{http://calhacks.io}{CalHacks} & \\ 486 | UC Santa Barbara & \href{http://www.sbhacks.com}{SBHacks} & \\ 487 | Stanford & \href{https://www.treehacks.com}{TreeHacks} & \\ 488 | Los Altos & \href{http://www.losaltoshacks.com}{LosAltoHacks} & high school students \\ 489 | San Mateo & \href{http://hackingedu.co}{HackingEDU} & education \\ 490 | NorCal & \href{http://sospectra.com}{Spectra} & women only \\ 491 | Palo Alto & \href{https://gunnhacks.com}{GunnHacks} & high school students \\ 492 | MIT & \href{https://hackmit.org}{HackMIT} & \\ 493 | Duke & \href{https://www.hackduke.org}{HackDuke} & social good \\ 494 | University of Waterloo & \href{https://hackthenorth.com}{HackTheNorth} & \\ 495 | LinkedIn & Hackday & bay area interns only \\ 496 | \bottomrule 497 | \end{tabular} 498 | \end{center} 499 | 500 | \subsection{Other} 501 | Other places to discover hackathons in your area are: 502 | \href{https://mlh.io}{Major League Hacking} 503 | \href{http://eventbrite.com}{EventBrite} 504 | 505 | \subsection{Tips} 506 | \begin{description} 507 | \item[Sleep] A lot of hackathons stress not sleeping, but four cans of 508 | Redbull and working for 9 hours straight can really put a toll on your health 509 | and productivity. Find a place to sleep, set breakpoints throughout the 510 | hackathon, and just take a shut eye. You'll thank yourself later. 511 | \item[Hardcode] No one comes out of a hackathon with a perfect project. Most of 512 | the prototyping comes from hardcoding a bunch of the logic -- a successful 513 | hack doesn't come from a perfect implementation, but a good pitch, idea, and 514 | appearance. No one, not even the judges, is expecting a perfect product. 515 | \item[Winning isn't everything] You don't have to win a prize in order to call a 516 | hackathon succesful for you. If you made something or even learned something, 517 | it was a successful hackathon. 518 | \item[Network] Communicate with your team, and other teams, and help each other 519 | out! The best part of the hackathon is checking out the demos and seeing what 520 | other people have made and talking to other developers about their interests 521 | and hacks. It's the best way to learn and expose yourself to other areas in 522 | tech. 523 | \item[Attend workshops and make use of the mentors] Most, if not all, hackathons 524 | will have a few workshops and mentors. Make use of them -- they're here to 525 | help you get through your bugs and guide you through your learning process. 526 | \item[Hackathons Demystified] Page~\pageref{glossary} has a list of terms that 527 | you can look over to get familiar with jargon, and has a few other tips to get 528 | you prepped! 529 | \end{description} 530 | 531 | \subsection{FAQ} 532 | \begin{description}[style=nextline] 533 | \item[I'm not 18+, can I still attend a hackathon?] 534 | Yes, you can! There are plenty of hackathons that allow attendees other 535 | 18. There are high school hackathons and hackathons that allow minors, such as 536 | /hack. Keep a lookout for them! 537 | \item[How much does it cost to attend a hackathon?] 538 | Hackathons are usually free, unless otherwise specified. Professional 539 | hackathons can cost money, so contact the hackthon's organizers for more 540 | details. 541 | \item[What should I bring to a hackathon?] 542 | Your laptop, charger, ID, a creative spirit, and anything else you need to 543 | hack with! If it's an overnight hack, blankets, sleeping bag, 544 | toothbrush/toothpaste and any hygienic products would also be recommended. 545 | \item[I've never coded before/I'm a beginner/I'm scared to drag my team down -- 546 | can I still go to a hackathon?] 547 | Yes, yes, yes! Hackathons are for everyone regardless of experience. In fact, 548 | beginners are highly encouraged to attend. If you\'re worried about not 549 | knowing anything, find likeminded beginners and form a team with 550 | them. Hackathons are all about learning, so don't be afraid if you don't know 551 | anything! 552 | \end{description} 553 | 554 | \newpage 555 | 556 | \section {Applying For Jobs and Internships} 557 | \subsection{How and Where to Apply} 558 | There's a few way to apply and score \nameref{sec:interviews}. 559 | \begin{enumerate} 560 | \item Cold Applying 561 | \item \nameref{sec:referrals} 562 | \item \nameref{sec:careerfair} 563 | \end{enumerate} 564 | Cold applying is going to each company's website or portal and applying. The top 565 | ones to hit up every year are always the major companies: Google, Facebook, 566 | Amazon, Apple, and Microsoft. Always apply, even if you don't think you have a 567 | chance -- they'll keep your resume and profile in their archive for a while and, 568 | in the future, they might look you up and reach out to you! If you think of a 569 | company you might want to work for, look them up and apply to them! 570 | 571 | \textbf{Tip}: Keep a spreadsheet of the ones you've applied to, the positions 572 | you've applied to, the date you applied, and the status of your application. If 573 | it's been a few days since you've heard from your recruiter, make sure to follow 574 | up! 575 | 576 | Before you apply, however, you're probably going to need at least a resume, and 577 | maybe a cover letter. 578 | \subsection{Resume} 579 | \label{sec:resume} 580 | The sections of a tech resume can be broken down like so: 581 | \begin{enumerate} 582 | \item Name and Contact Information (email, phone, GitHub, LinkedIn, website) 583 | \item Skills (languages, libraries, frameworks) 584 | \item Projects (school, hackathons, personal) 585 | \item Experience (mostly tech, if possible, and/or leadership/volunteering) 586 | \item Education (major(s) and minor(s), graduation year, GPA optional) 587 | \item Relevant Coursework (optional) 588 | \end{enumerate} 589 | You should definitely include your Education and GPA, the latter being optional 590 | and only if your GPA is decent, but neither are particularly interesting unless 591 | either are truly exceptional, so put your skills, projects, and experience at 592 | the top as much as you can. 593 | 594 | Relevant Coursework is also good section to also add, especially if you're 595 | looking for an internship or full-time position and don't have much experience 596 | under your belt. Any CS classes you've taken or are projected to take in the 597 | next quarter, especially Data Structures and Algorithms, are always good classes 598 | to add. 599 | \subsubsection {Building Your Resume} 600 | If you haven't taken many classes or have skills or relevant experience (which 601 | most people don't when they try and find internships or jobs, so don't worry), 602 | you're going to have to start by building projects. 603 | 604 | You can build projects by going to \nameref{sec:hackathons}, making your own 605 | website or app, contributing to open source projects, etc. It doesn't have to be 606 | big. You can make a Unitrans app, a Tic Tac Toe app, a Google Chrome extension, 607 | your own website, or anything simple (or complicated) to learn and show 608 | initiative and incentive. See below at \nameref{sec:projects} for more 609 | ideas. 610 | 611 | You can also build your resume by taking more classes. Your UC Davis classes 612 | aren't the only ones you can add to your resume -- in your free time, taking an 613 | online Coursera class or two and finishing the course is also something you can 614 | add to your resume. Keep in mind that some Coursera classes are free, and some 615 | are not. 616 | 617 | Please also check \nameref{sec:onlinepresence} to build your resume and online 618 | presence. 619 | 620 | Even if you don't have many projects, classes, experience, or skills, it doesn't 621 | mean you shouldn't still try your luck at applying! It's always good to gain 622 | experience in applying for jobs and networking. 623 | \subsubsection{Resume Tips} 624 | \begin{itemize} 625 | \item If you have a lot of experience, choose a few and tailor your resume 626 | for the job you're applying for. 627 | \item The general rule of thumb is one page for every ten years of relevant 628 | experience and if you're applying for a new grad or internship position, keep 629 | it to one page. If a recruiter can't skim your resume and read everything 630 | quickly, then it's most likely going to be tossed or archived. 631 | \item Black type on white paper. Size 10 font, minimum. Half inch margins, 632 | minimum. Equal borders and spacing for all items. Your wording should be 633 | concise, legible, but have brevity. Your resume can be pretty, but it doesn't 634 | have to be a work of art. Keep it straightforward and neat -- all your 635 | information should be easily found. 636 | \item Stretch your content across the page -- white space should only be used to 637 | separate your content for legibility -- you don't need splotches of white 638 | space on your page for no reason. It makes it look like you don't have enough. 639 | 640 | You can always fill up your resume with something, whether skills or projects 641 | or coursework or experience. If you don't have any of those, learn them, build 642 | them, take them, get them. 643 | \item Other items you can include in your resume: awards, honors, scholarships, 644 | fellowships, publications, research, interests, etc. 645 | \item You don't need to put communication, leadership skills, or anything 646 | similar as your skills -- that's either evident through any large scale team 647 | projects you've listed or it'll be evident enough enough during a phone and 648 | onsite interviews. 649 | 650 | There's also no need to put Microsoft Word, Powerpoint or anything similar as 651 | your skills unless the position specifically asks: most people know Microsoft 652 | Word and if not, they can quickly learn. 653 | 654 | There's also no need to put Objective as a section either -- it's 655 | outdated. References is also not a needed section if you're going to write 656 | ``Available upon request'' -- recruiters will ask for a reference or a 657 | background check if they need one from you. 658 | \item Microsoft Word with tables is the most commonly used software to make 659 | resumes, and some people also choose to use \LaTeX 660 | \item Formats can change with every file extension and version, so try to keep 661 | an edited version (in Word or \LaTeX) and send recruiters the PDF version of 662 | your resume. 663 | \item Don't put your address. No one contacts anyone for job opportunities via 664 | address anymore and if recruiters need your address, they'll ask. Leaking your 665 | address is a dangerous potential for identity theft -- your phone number, 666 | email, and any social networking sites (LinkedIn, GitHub, your website, etc) 667 | should suffice as contact information. 668 | \item Keep descriptions of each position you've held short -- two to three 669 | bullet points at most, with a line each. A good description should be like 670 | what Churchill said about speeches and skirts: ``long enough to cover 671 | everything, but short enough to be interesting''. 672 | \item If possible and space permits, it's also nice to include one position 673 | you've held that is not tech related -- it shows that you have interests 674 | outside of tech. For example, if you volunteer at a children's center for 675 | reading, or held a leadership position in a running club. 676 | \item Check for typos! Don't lie! These are the big ones that can be easily 677 | fixed! 678 | \item Keep your name large, nice, and bold -- it makes you memorable. 679 | \end{itemize} 680 | \subsection{Cover Letter} 681 | A general template for a cover letter looks something like this: 682 | \begin{enumerate} 683 | \item Dear XYZ, 684 | \item Your name, introduction, the position you're applying for, how you heard 685 | about the company (especially if it's through referral), and anything you know 686 | about the company. 687 | \item A short discussion about your relevant skills, projects, and skills and 688 | what you can bring to the company technical skills wise. What challenges you 689 | think the company faces and what interests you about them, and how passionate 690 | you are about their product. Do some research here. 691 | \item An optional paragraph on your leadership skills, collaborative skills, 692 | various interests, and what you can bring as a leader or team member to the 693 | company. 694 | \item Ending note, conclusion, and state that you believe your attached resume 695 | (or website, or whatever you choose) will highlight any of your other 696 | qualities. Thank them for their time. 697 | \item Sincerely, Your Name 698 | \end{enumerate} 699 | You shouldn't have to write a brand new cover letter for every company you apply 700 | to. Your cover letter should be a malleable template and only changed a little 701 | for every company -- keep the main details the same, such as your skills, but do 702 | some research and add or change details about the company you're applying to as 703 | you see fit. 704 | 705 | Your cover letter should also be one page, and should contain the same header as 706 | your \nameref{sec:resume} (Name and Contact Information). 707 | 708 | \subsubsection{Cover Letter Tips} 709 | \begin{itemize} 710 | \item If they ask for an optional cover letter, include your cover 711 | letter. You're going the extra mile to show them you want the job -- do it. 712 | \item Check for typos! Don't lie! Be consistent with your resume! 713 | \item Don't rote list your resume out -- your cover letter is supposed to add to 714 | your resume, not be a summary. Add details that can't be seen on your resume, 715 | such as what you enjoyed most about a project or class or what kind of 716 | technology stack you've worked with and are learning. 717 | \end{itemize} 718 | \subsection {Referrals} 719 | \label{sec:referrals} 720 | This is the best way to get an interview. Your application is sent to the top of 721 | the stack and recruiters will review referred applicants first opposed to those 722 | that cold apply. It's sad, but true. Network, network, network -- make friends 723 | in your classes, make friends at hackathons, make friends at work. These people 724 | will get jobs and these are the people who can push your career forward 725 | someday. 726 | 727 | It's also, well, just nice to have friends in tech. :) And don't forget to 728 | return the favor and refer them when you get a job as well! 729 | 730 | \subsection{Career Fairs} 731 | \label{sec:careerfair} 732 | UC Davis has several career fairs in a year, and one specialized just for 733 | engineering, with a list of them here: 734 | \href{https://icc.ucdavis.edu/employer/fairs.htm}{Career Fairs}. 735 | 736 | If you're actively looking for a job or internship, go to career fairs! Dress 737 | business formal/casual, print 15-20 resumes, research the companies you want to 738 | talk to, get there early if you can, and start hitting up each recruiter and 739 | talking to them. Even if you're not looking for a job at the moment, you can 740 | just go and pick up all the swag the companies are handing out. 741 | 742 | One thing to do before a career fair is to practice your elevator pitch. It's a 743 | 1--2 minute spiel about yourself that goes something like this: 744 | 745 | \begin{displayquote} 746 | Hi, my name is Jill, I'm a 2nd year and I study Computer Science and Engineering 747 | at UC Davis. I'm really interested in your Test Automation Internship 748 | position. I've known about X company for a long time and I'm very passionate 749 | about your product. Can you tell me more about yourself and the various 750 | positions and X company? 751 | \end{displayquote} 752 | 753 | \subsection {Online Presence} 754 | \label{sec:onlinepresence} 755 | The first thing a recruiter does is look at your resume. Then they either see if 756 | you have any more information (website, LinkedIn, GitHub, Devpost, etc) on your 757 | resume that they can check online for and if not, they Google you. You're going 758 | to seem less appealing than a candidate who has a fleshed out online presence 759 | that the recruiter can get to know, so building your presence as soon as you 760 | start applying for jobs is key. 761 | 762 | You should make a: 763 | \begin{enumerate} 764 | \item LinkedIn 765 | \item GitHub 766 | \end{enumerate} 767 | 768 | and optionally, a website or portfolio. 769 | 770 | Your LinkedIn should not only reflect your resume, but anything else you didn't 771 | have a chance to add on your resume, such as classes, more details on any 772 | projects you've done, other work or volunteering experience, etc. It should be 773 | detailed and thorough, with any images or links to projects you have, along with 774 | any coursework you have. Recruiters will often look at your LinkedIn and may 775 | contact you from there. 776 | 777 | Your GitHub should have all your personal projects and code samples. If you 778 | don't know what to add, try solving some interview problems on sites such as 779 | HackerRank or Project Euler and putting it in a repository. 780 | 781 | Your website, if you decide to make one, doesn't have to be fancy -- it can be 782 | merely a static page with your name, your email, your LinkedIn and GitHub and 783 | any relevant websites. You can talk about your interests, volunteering, work 784 | history, hackathons you've attended, projects you've made, etc. It's your 785 | website, but also your portfolio and a chance to show off your technical 786 | skills. See more at \nameref{sec:website}. 787 | 788 | Other ways you can build your online presence is being active in various other 789 | communities, such as StackOverflow or StackExchange, or contributing to various 790 | open source communities. 791 | 792 | \textbf{Note:} The Davis Computer Science Club does not advise putting projects 793 | done from classes on GitHub -- it is unfortunately common for students to 794 | cheat and plagiarise from code past students have made available online. 795 | \subsection {Website/Personal Portfolio} 796 | \label{sec:website} 797 | If you've never built a website before, here's the place for you! The easiest 798 | place to host your website is at: \href{https://pages.github.com/}{GitHub Pages} 799 | and they have a convenient and simple tutorial. 800 | 801 | A few suggestions to drum up your website are to use 802 | \href{http://getbootstrap.com/2.3.2/}{Twitter Bootstrap} for the 803 | styling. Bootstrap is merely a set of CSS stylesheets you can use from, and you 804 | can download it from the link given or use any of the CDNs provided (more on the 805 | link). 806 | 807 | \subsection {Negotiating Offers} 808 | You should always try and negotiate your base pay, stock options, or 809 | benefits. In fact, most companies expect you to. 810 | 811 | If you have another offer that's paying you more, you should definitely ask if 812 | the offer you're looking at if they can possibly match or exceed the offer of 813 | the other company. 814 | 815 | You'll get more leverage if you have another offer, but by itself, you can 816 | leverage your skills and ask for more. Just simply ask your recruiter (nicely!) 817 | if they can possibly raise your base salary/benefits/etc since it seems a bit 818 | low. Most people seem afraid they're going to seem like an ungrateful 819 | money-grubber -- you're not. It doesn't matter if you like the company or the 820 | product, there's nothing wrong with having more money and there's no harm in 821 | asking: you already got the offer! 822 | 823 | If there's a certain salary/benefit/stocks combination you should definitely not 824 | go below, a number that you should determine by yourself based on research, try 825 | and keep to it. If you know the recruiter is offering you too low of a sum and 826 | they refuse to raise your offer, decline and interview elsewhere. Don't 827 | shortchange your worth just for the experience. You'll get other offers. 828 | 829 | \subsection {Rejection} 830 | It happens to everyone. They say that the first rejection is the hardest, but I 831 | find that all the subsequent rejections hurt as much, if not more. But it 832 | literally happens to everyone -- the best engineers get rejected, and often. No 833 | one gets to where they are without it. 834 | 835 | Some companies won't send a rejection letter. Some will. Both of them 836 | suck. Sometimes you won't even know why they don't want to hire you, and they 837 | could be for completely arbitrary, stupid reasons, like the recruiter just had a 838 | bad day or they misplaced your paperwork. It could be that another candidate was 839 | just too good -- maybe they were a student from MIT with 22 papers under their 840 | belt and they've been coding since they could walk how could you possibly 841 | compete with that? And yes, they can be for technical reasons: your solution 842 | wasn't optimized enough, you couldn't find the edge cases, your skills aren't 843 | developed enough. Most companies won't tell you. 844 | 845 | Take it as a learning experience to grow more. It's okay to cry. It's okay to 846 | feel like crap for a few days. But in the end, it's just another experience. It 847 | doesn't mean you're not going to get a job or that you can't apply again. It's 848 | not personal. You're smart, you're funny, you're likeable, and you're going to 849 | make it in the end. 850 | 851 | \subsection {Resources} 852 | \href{https://github.com/j-delaney/easy-application}{List of Easy Applications} 853 | \subsection{Tips} 854 | \begin{itemize} 855 | \item Recruiters are people, too. Be nice to them. Thank them, and often. Thank 856 | your interviewers, too. Err on the side of being too polite, always. 857 | \item Follow up with your recruiter -- if they haven't responded in a few days 858 | to a week about your interview or the next steps, email them again. And 859 | again. Call them, email other people from the company, and leave messages if 860 | you have to. 861 | \item A few good questions to ask your interviewer (pick and choose), technical 862 | or otherwise, at the end of the interview are: 863 | \begin{itemize} 864 | \item What do you like about X company? 865 | \item How is X company different from other companies? 866 | \item What team do you work on at X company? What do you do? 867 | \item What's the culture like at X company? 868 | \item What's the technology stack at X company/your team like? 869 | \item How flexible is X company with changing teams or learning new things? 870 | \item What are some skills or values every intern/employee should have at X 871 | company? 872 | \item What are the next steps of the process? 873 | \end{itemize} 874 | \item Attend conferences or hackathons not just for the learning experience, but 875 | to network! 876 | \item 877 | \href{http://engineering.ucdavis.edu/corporate-relations/student-recruitment/company-tours/}{UC Davis College of Engineering} 878 | offers a few industry tours a year (such as Square, Google, Apple, etc), so if 879 | you're interested in taking a look inside at some pretty great companies, 880 | follow their Listserv or contact COE! This is open to UC Davis students based 881 | on a first come first serve basis. 882 | \end{itemize} 883 | 884 | \subsection{FAQ} 885 | \begin{description}[style=nextline] 886 | \item[Should I put code I've written for class projects on my GitHub?] 887 | That's up to you. DCSC does not advise or endorse this, however -- while it's 888 | a quick way to show your code snippets and many students do so, but at full 889 | disclosure, other students may look up your code and copy, so you might be at 890 | risk with the SJA. Posting your professor's code that you built upon and 891 | calling it your own may be considered plagiarism, so if you are going to do 892 | so, you might want to put a disclaimer. 893 | \item[When should I start applying for jobs and internships?] 894 | There's no 'should' or supposed timeline -- just whenever you're comfortable! 895 | However, you can apply for internships starting your freshman year if you'd 896 | like. It's recommended to only start applying after you've taken ECS 60 Data 897 | Structures or already have a foundation in Data Structures, as most of your 898 | interview questions will be based on that. 899 | \end{description} 900 | \newpage 901 | \section {Interviews} 902 | \label{sec:interviews} 903 | Most interviews for software engineering or related positions are split between 904 | two kinds of questions: behavioral and technical. 905 | 906 | \subsection {Interview Formats} 907 | \begin{description} 908 | \item[Coding Challenge] 909 | You'll be given the challenge in the form of a link, such as HackerRank, where 910 | you have to complete a certain number of problems in a given amount of time 911 | (30 minutes to a few hours, usually) by a certain deadline. 912 | 913 | Make sure your laptop or computer is charged and you find an ideal and quiet 914 | place with internet to work and turn off any distractions for the amount of 915 | time you're interviewing. Once you start, you can't pause, so make sure you're 916 | ready. 917 | \item[Remote/Phone Interview] 918 | This can either be a behavioral or technical interview and it's usually done 919 | via phone or video chat. There might be multiple rounds, sometimes back to 920 | back or spread out through several weeks or months. Always be prepared for 921 | both types of questions as you never know what they're going to throw at you. 922 | 923 | If it's a technical phone interview, interviewers may ask you questions 924 | straight up, or ask you to code up a more complicated problem on a shared 925 | document such as GoogleDocs or CodePad. You may have to run the code after 926 | you're done, so code carefully if you don't want to spend most of your 927 | interview debugging. 928 | \item[Onsite] 929 | If you were invited to an onsite, you're probably close to the end! Be 930 | prepared to spend a few hours/the whole day at the onsite location, and get 931 | there early if you can. An onsite usually has whiteboard coding and debugging 932 | the code with the interviewer in the room. 933 | 934 | Depending on the company, you might interview with other candidates, have back 935 | to back rounds, have multiple onsites, or just have one interview. Either way, 936 | be prepared for the worst and practice, practice, practice. 937 | \end{description} 938 | 939 | \subsection{Common Interview Questions} 940 | \begin{itemize} 941 | \item \href{http://www.forbes.com/sites/jacquelynsmith/2013/01/11/how-to-ace-the-50-most-common-interview-questions/#f57f0c348737}{Behavioral} 942 | \item \href{https://www.reddit.com/r/cscareerquestions/comments/20ahfq/heres_a_pretty_big_list_of_programming_interview/}{Technical} 943 | \end{itemize} 944 | 945 | \subsection{Resources and Practice} 946 | \begin{center} 947 | \begin{tabular}{lp{10cm}} 948 | \toprule 949 | \textbf{Title} & \textbf{Description} \\ 950 | \midrule 951 | \href{https://hackerrank.com}{HackerRank} 952 | & various interview questions from trees to data structures to 953 | database questions in any language you choose \\ 954 | \addlinespace[0.5em] 955 | \href{https://www.geeksforgeeks.org/}{GeeksForGeeks} 956 | & lots of interview questions and their solutions in different 957 | languages \\ 958 | \addlinespace[0.5em] 959 | \href{https://projecteuler.net/}{ProjectEuler} 960 | & programming and math challenge questions. Google's advised 961 | website to check out for programming questions. \\ 962 | \addlinespace[0.5em] 963 | \href{https://leetcode.com/}{LeetCode} 964 | & various problems and their solutions (with some digging) \\ 965 | \addlinespace[0.5em] 966 | \href{https://www.careercup.com/}{CareerCup} 967 | & programming problems and solutions in a Stack Overflow-like 968 | format \\ 969 | \addlinespace[0.5em] 970 | \href{https://reddit.com/r/dailyprogrammer}{Reddit Programming Questions} 971 | & problems on Reddit and people answering solutions, ranked 972 | \hbox{easy--hard} \\ 973 | \addlinespace[0.5em] 974 | \href{https://glassdoor.com}{Glassdoor} 975 | & look up the company you're interviewing for and various 976 | questions they may have \\ 977 | \addlinespace[0.5em] 978 | \book{Cracking the Coding Interview} 979 | & a book with programming questions, hints, and solutions \\ 980 | \bottomrule 981 | \end{tabular} 982 | \end{center} 983 | 984 | \begin{itemize} 985 | \item \href{http://bigocheatsheet.com/}{Big-Oh} 986 | \item \href{https://gist.github.com/TSiege/cbb0507082bb18ff7e4b}{Interview Cheat Sheets} 987 | \end{itemize} 988 | 989 | \subsection {Tips} 990 | \begin{description} 991 | \item[Think aloud] If you're given a problem, think aloud and explain your 992 | thought process before starting. Don't be afraid to ask your interviewer 993 | questions if you're stuck or don't understand the problem -- they don't want 994 | to see just your speed/efficiency in coding, but whether you're able to 995 | collaborate with other people to figure out the problem. 996 | \item[Optimize] You're probably going to be asked what are the edge cases and 997 | Big-Oh of your solution and whether you're able to optimize your code 998 | further. When you're practicing for interviews, make sure you ask yourself 999 | these questions and try and optimize your code as much as you can. When in 1000 | doubt, see if you can use a hash map or hash table. 1001 | \item[Bruteforce, then optimize] If you're truly stuck on a problem and how to 1002 | get it to a nice optimization in regards of speed and memory, think of the 1003 | worst solution you can then start from there and ask yourself: what's the 1004 | bottleneck (slowest part/congestion) of this solution? How can I 1005 | optimize this further? 1006 | \item[Sleep] This goes without saying, but get plenty of sleep before your 1007 | interview. It's hard to code when you're nervous already; there's no need to 1008 | add sleep deprivation to the mix. 1009 | \item[Practice with friends] Or go to Mock Interview sessions! Simulate an 1010 | interview environment as much as you can and take turns asking each other 1011 | questions, both behavioral and technical. It'll help you get into the rhythm 1012 | and the types of questions asked. 1013 | \item[Choose a language you're comfortable with] If you're not sure which to 1014 | choose, the most common language I've seen people interview with have been 1015 | Python and Javascript. They're both clean scripting languages with simple and 1016 | easy-to-remember syntax and implementing data structures is pretty cake with 1017 | both. However, you may not always get a choice in what language you can 1018 | interview in and some interview questions may be better written in 1019 | other languages. Play to your strengths. 1020 | \item[Don't neglect the behavioral] A lot of companies stress culture fit and 1021 | people want to hire who they want to work with. Learn how to pitch yourself 1022 | and practice not just your marketing your skills and projects, but who you are 1023 | as a person. Don't be afraid to talk someone's ear off about your hobbies and 1024 | anecdotes -- chat with your interviewers. They're 1025 | people too. 1026 | \item[Don't stop practicing] If you plan on entering the tech industry in the 1027 | future and continuing with it, you're going to be interviewing quite 1028 | often. Always refresh yourself on your data structures and problem solving 1029 | skills, and keep with it. 1030 | \end{description} 1031 | 1032 | \subsection{FAQ} 1033 | \begin{description}[style=nextline] 1034 | \item[There's so much material to cover, where should I even begin?] 1035 | Start with reviewing any material you have from ECS 60 (Data Structures). Most 1036 | websites or books about interviewing begin with easier questions so progress 1037 | from there -- when you've gotten the hang of solving simple questions, try out 1038 | a few moderate-hard questions, think of your own solution and optimization, 1039 | test your solution, then look at other people's answers. 1040 | 1041 | Some times the best way to learn is to look at some of the ways other people 1042 | use to solve their problems. After looking at their solution, code it up in a 1043 | different language and test it. Then another. Keep going. Rinse and repeat. 1044 | \item[What should I know for an interview?] 1045 | General knowledge everyone should know: data structures -- arrays, hashes, 1046 | heaps, lists, queues, stacks, trees; strings; graphs; bit manipulation, 1047 | Huffman encoding, and the like. It also depends on what position you're 1048 | interviewing for. 1049 | 1050 | For example, an interview for a front-end position may ask you primarily 1051 | HTML/CSS questions. In fact, any skill you put on your resume as something you 1052 | know or proficient in is fair game. 1053 | \item[How should I dress/look for an interview?] 1054 | Business formal at best, business casual at worst, unless otherwise 1055 | specified. If it's a video interview, dress up as well, at least from the 1056 | waist up. 1057 | \end{description} 1058 | \newpage 1059 | 1060 | \section {Technical Skills} 1061 | Some technical skills, languages, and frameworks that are out there and trending 1062 | right now! These are only a subset of technologies that exist, so if you're 1063 | interested, feel free to do some research on your own. :) 1064 | 1065 | \subsection{Languages} 1066 | Depending on what part of software you'd like to get into, some may be more 1067 | relevant or useful than others. You do not need to know ALL of these languages 1068 | to be considered competitive! These are also just a small list of popular 1069 | languages used today. Please Google them for more information. 1070 | \begin{center} 1071 | \begin{tabular} {l p{10cm}} 1072 | \toprule 1073 | \textbf{Language} 1074 | & \textbf{Description}\\ 1075 | \midrule 1076 | C 1077 | & Low-level language. You'll usually touch C if you're writing firmware or 1078 | directly interacting with hardware.\\ 1079 | \addlinespace[0.5em] 1080 | C++ 1081 | & Originally based on C and Simula. A very featureful language used for a wide 1082 | variety of applications, especially performance-critical ones.\\ 1083 | \addlinespace[0.5em] 1084 | Java 1085 | & Popular cross-platform programming language. Code once, run using a virtual 1086 | machine in all major platforms. Has a large overhead due to this fact.\\ 1087 | \addlinespace[0.5em] 1088 | JavaScript 1089 | & The scripting language in your browser. Can be emulated on your 1090 | desktop. Worth learing if you want to do web development.\\ 1091 | \addlinespace[0.5em] 1092 | HTML and CSS 1093 | & The staples of web development. HTML is for creating structures, CSS is for 1094 | applying styles to those structures.\\ 1095 | \addlinespace[0.5em] 1096 | Python 1097 | & Quick and easy programming language. Easy to prototype functions, perfect 1098 | for job interview questions. Become a Python 3 master and you won't regret 1099 | it!\\ 1100 | \addlinespace[0.5em] 1101 | SQL 1102 | & Database manipulation language. Used to insert, update, change, and retrieve 1103 | data inside a database. A staple of backend developers.\\ 1104 | \addlinespace[0.5em] 1105 | Ruby 1106 | & Similar in purpose to Python. Draws inspiration from Smalltalk and 1107 | Perl. Became popular through the Ruby on Rails web framework.\\ 1108 | \addlinespace[0.5em] 1109 | PHP 1110 | & Designed for web applications. Excessive use of the dollar sign for 1111 | variable names will make you feel filthy rich.\\ 1112 | \addlinespace[0.5em] 1113 | Perl 1114 | & Command line scripting language. Can be used in conjunction with command 1115 | line tools to manipulate data or files.\\ 1116 | \addlinespace[0.5em] 1117 | R 1118 | & If you're into math, stats, or physics, (or your name is Matloff) R is your 1119 | best friend! It's the perfect language for your graphing or calculation 1120 | needs.\\ 1121 | \addlinespace[0.5em] 1122 | Swift 1123 | & A safer, more modern alternative to Objective-C. Used to create apps that 1124 | work on Apple products.\\ 1125 | \addlinespace[0.5em] 1126 | Objective-C 1127 | & Based on C and Smalltalk. The main language used for programming on Apple 1128 | operating systems until the invention of Swift.\\ 1129 | \bottomrule 1130 | \end{tabular} 1131 | \end{center} 1132 | If you'd like to know more, other people have written better lists and 1133 | descriptions 1134 | \href{https://www.quora.com/What-are-the-pros-and-cons-and-uses-of-the-major-programming-languages}{here}. 1135 | 1136 | \subsubsection{Caveat} 1137 | Languages are not merely tools. Many languages are worth learning not because 1138 | they are popular or useful, but because they will teach you new ways of 1139 | thinking. Curious programmers might like Forth, Prolog, Erlang, Curry, Lisp, 1140 | Mercury, Smalltalk, Haskell, Coq, and others. 1141 | 1142 | \subsection{Text Editors} 1143 | There's a lot of argument on what's the best text editor to use, but here are 1144 | some popular ones. Optionally, you can choose to use an IDE. Here are a few! 1145 | \begin{itemize} 1146 | \item Sublime 1147 | \item Emacs 1148 | \item Vim, vi 1149 | \item Gedit 1150 | \item Atom 1151 | \end{itemize} 1152 | \subsection{Frameworks} 1153 | \begin{center} 1154 | \begin{tabular}{ll} 1155 | \toprule 1156 | \textbf{Language} & \textbf{Frameworks} \\ 1157 | \midrule 1158 | Java & Javaspring \\ 1159 | & Spark \\ 1160 | \midrule 1161 | Ruby & Ruby on Rails \\ 1162 | & Sinatra \\ 1163 | \midrule 1164 | Python & Django \\ 1165 | & Flask \\ 1166 | \midrule 1167 | Javascript & Node.js \\ 1168 | & React \\ 1169 | & Angular.js \\ 1170 | \midrule 1171 | HTML/CSS & Bootstrap \\ 1172 | & Semantic UI \\ 1173 | \bottomrule 1174 | \end{tabular} 1175 | \end{center} 1176 | 1177 | \subsection{FAQ} 1178 | \begin{description}[style=nextline] 1179 | \item[What language should I learn first?] 1180 | It honestly depends on what you'd like to get into! Most people start off 1181 | either learning C or Python, as they're good beginning languages to learn 1182 | from, but honestly any language is a good start. 1183 | \end{description} 1184 | \newpage 1185 | \section{Building Projects} 1186 | \subsection {Project Ideas and APIs} 1187 | \label{sec:projects} 1188 | Keep in mind these are meant to be simple ideas to get you started with creating 1189 | a project on your own. Most, if not all of these, can be either developed into a 1190 | phone application or a web application, or whatever you prefer. Get creative! 1191 | They can be quirky, fun, or interesting. :) 1192 | 1193 | Any ideas from other people are meant for inspiration only -- do not take their 1194 | code and claim it as your own. That's lying and famously called plagiarism, 1195 | people. 1196 | \subsubsection{Project ideas or inspiration} 1197 | \textbf{ideas} 1198 | \begin{itemize} 1199 | \item a tic tac toe application 1200 | \item a unitrains/bus application 1201 | \item a spellcheck application 1202 | \item a Pokemon weakness/strengths application 1203 | \item a basic social networking site 1204 | \item bill splitting for roommates 1205 | \item a calculator 1206 | \item an exam grade calculator 1207 | \item an app that tells you if you should wear shorts or pants in the morning 1208 | \item a weather app based on location 1209 | \item \href{https://github.com/karan/Projects}{project ideas, with examples} 1210 | \end{itemize} 1211 | \textbf{inspiration:} 1212 | \begin{itemize} 1213 | \item \href{https://jenniferdewalt.com/}{180 websites in 180 days} 1214 | \item \href{http://drakeweather.com/}{checking weather with Drake} 1215 | \item \href{https://github.com/cathydeng/are-men-talking-too-much}{website that tracks the time each gender speaks} 1216 | \item \href{https://github.com/panicsteve/cloud-to-butt}{chrome extention that changes all instances of cloud on the page to butt} 1217 | \end{itemize} 1218 | \subsubsection{Useful APIs} 1219 | \href{https://github.com/toddmotto/public-apis}{Public and Free APIs} 1220 | \newpage 1221 | \section {For Marginalized Folks in Computer Science} 1222 | A few resources and clubs exist for those not commonly represented in the tech 1223 | industry. 1224 | 1225 | \subsection{A Few Clubs On Campus at UC Davis} 1226 | \begin{tabular}{p{5cm}lp{7cm}} 1227 | \toprule 1228 | \textbf{Name} & \textbf{Identities} & \textbf{URL} \\ 1229 | \midrule 1230 | Society of Women Engineers (SWE) & women, engineering, CS included & swe.engineering.ucdavis.edu/ \\ 1231 | \addlinespace[0.5em] 1232 | WiSTEM & women, stem & facebook.com/wistemucdavis/ \\ 1233 | \addlinespace[0.5em] 1234 | Pilipinx Advancing Science Engineering (PASE) & pilipinx, STEM & joinpase.weebly.com/ \\ 1235 | \addlinespace[0.5em] 1236 | Black Engineers Association & black, engineering & http://beaucdnsbe.weebly.com/ \\ 1237 | \addlinespace[0.5em] 1238 | The American Indian Science and Engineering Society (AISES) & native american, STEM & http://aises.engineering.ucdavis.edu/ \\ 1239 | \addlinespace[0.5em] 1240 | Chicano and Latino Engineers and Scientists Society (CALESS) & chicanx/latinx, STEM & caless.engineering.ucdavis.edu/ \\ 1241 | \addlinespace[0.5em] 1242 | Queers in Science Club & queers in STEM & N/A, check with LGBTQIARC\\ 1243 | \addlinespace[0.5em] 1244 | BlackOut & black, queer & N/A, check with LGBTQIARC \\ 1245 | \addlinespace[0.5em] 1246 | La Familia de UC Davis & latinx/chicanx, queer & facebook.com/groups/2234329547/ \\ 1247 | \addlinespace[0.5em] 1248 | Asian Pacific Islander Queers & AAPI, queer & facebook.com/groups/APIQatUCD/ \\ 1249 | \addlinespace[0.5em] 1250 | Queer Student Union (QSU) & queer & N/A, check with LGBTQIARC \\ 1251 | \bottomrule 1252 | \end{tabular} 1253 | 1254 | \subsection{Centers and Counseling} 1255 | Alternatively, the centers on campus are also helpful for general needs. There 1256 | are CAN advisers at every center that can aid y'all with counseling and 1257 | advising. The CCC, LGBTQIARC< and SRRC are located in the Student Community 1258 | Center at UC Davis. The WRRC is located in North Hall. 1259 | \begin{center} 1260 | \begin{tabular} {p{8cm}c} 1261 | \toprule 1262 | \textbf{Name} & \textbf{URL} \\ 1263 | \midrule 1264 | Cross Cultural Center (CCC) & ccc.ucdavis.edu \\ 1265 | Women's Resources and Research Center (WRRC) & wrrc.ucdavis.edu\\ 1266 | Lesbian, Gay Bisexual, Transgender, Questioning, Intersex, and Asexual Resources Center (LGBTQIARC) & lgbtqia.ucdavis.edu \\ 1267 | Student Resources and Retention Center & srrc.ucdavis.edu \\ 1268 | Student Counseling & shcs.ucdavis.edu/counseling-services \\ 1269 | \bottomrule 1270 | \end{tabular} 1271 | \end{center} 1272 | 1273 | \subsection {Other Resources} 1274 | A few other resources and organizations on campus can be found at the following links: 1275 | \begin{itemize} 1276 | \item \href{https://www.ucdavis.edu/admissions/undergraduate/community/african-american-student-resources/}{UC Davis African American and African Student Resources} 1277 | \item \href{https://www.ucdavis.edu/admissions/undergraduate/community/latino-chicano-organizations/}{UC Davis Chicanx/Latinx Student Resources} 1278 | \item \href{https://www.ucdavis.edu/admissions/undergraduate/community/}{UC Davis Multicultural Student Resources} 1279 | \item \href{http://lgbtqia.ucdavis.edu/connected/student-org.html}{UC Davis Queer Student Resources} 1280 | \item \href{https://github.com/cristianoliveira/awesome4girls}{Resources for Women in Tech} 1281 | \item \href{http://peopleofcolorintech.com/}{People of Color in Tech} 1282 | \item \href{http://ghc.anitaborg.org/}{Grace Hopper: Celebration of Women in Computing Conference} 1283 | \item \href{https://github.com/freialobo/GHC-Scholarships}{Grace Hopper Conference Scholarships List} 1284 | \end{itemize} 1285 | \newpage 1286 | \phantomsection\addcontentsline{toc}{section}{\protect\numberline{\thesection}Hackathons Cheatsheet} 1287 | \label{glossary} 1288 | \includepdf[pages=-]{glossaryhackathonscmu.pdf} 1289 | \end {document} 1290 | --------------------------------------------------------------------------------