-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathmain.tex
1289 lines (1183 loc) · 62.8 KB
/
main.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
\documentclass{article}
\usepackage{fullpage}
\usepackage{booktabs}
\usepackage{csquotes}
\usepackage{enumitem}
\usepackage[symbol]{footmisc} % changes footnote style
\usepackage{setspace}
\usepackage{sectsty}
\usepackage{soul,xcolor}
\usepackage{fancyhdr}
\usepackage{color}
\usepackage{hyperref}
\usepackage[tocindentauto]{tocstyle}
\usepackage[final]{pdfpages}
\usepackage[parfill]{parskip} % changes paragraph style
\hypersetup{
colorlinks=true,
linkcolor=blue,
filecolor=magenta,
urlcolor=cyan,
}
\newcommand{\book}[1]{\textit{#1}}
\title{The Unofficial, Semi-Comprehensive, Quintessential UC Davis Computer
Science Major Handbook and FAQ}
\author{The Davis Computer Science Club}
\date{Version 0.1\\\today}
\begin{document}
\begin{titlepage}
\maketitle
\end{titlepage}
\tableofcontents
\pagebreak
\singlespacing
\sectionfont{\Large}
\subsectionfont{\large}
\section {Version History of this Handbook}
\subsection*{Version 0.0}
September 14, 2016. First version of the handbook written.
March 18, 2017. Style changes. Made language section less opinionated. Brought
version history up to date.
\newpage
\section{Introduction and Disclaimer}
I started writing this handbook with a few others because I saw a sore lack of
resources for not just the UC Davis Computer Science community, but the tech
community in general. More importantly, I knew that a lot of my peers,
especially peers who weren't considered the stereotypical Computer Science
student, had questions but were too scared to ask them due to fear of backlash
and critique.
Like most CS students, I started CS without any Computer Science background and
learned everything in this handbook the hard way. Hence, this handbook was
written in mind with the audience being a complete newbie (aka a first year with
no Computer Science knowledge at all) as a brief overview.
I don't know how helpful this handbook will be or if anyone's attempted anything
like this before, but I thought I'd try my hand at sharing my knowledge with
anyone who'd be interested. I don't claim to know everything and I'm sure those
with more experience could add more nuance and details onto whatever modest
amount I have here. If you're interested in adding more to this handbook, please
submit a pull request to the GitHub repository where this is hosted. Please feel
free to contact The Davis Computer Science Club with any questions!
\subsection{How to Best Use This Handbook}
There's a lot in this handbook! You don't have to read this handbook cover to
cover, word by word (though I'd love it if you did!), but just read whatever
sections you're interested in by going to the Contents page and clicking on any
section you'd like to read. Any URL to another site is highlighted in
\textcolor{cyan}{cyan blue}, and any links/hooks within the document are
highlighted in \textcolor{blue}{plain blue}.
\subsection{Disclaimer}
This handbook only offers advice and resources given by few members of the UC
Davis Computer Science Club -- it is by no means a strict guideline for one to
follow or a guarantor of success and is not meant to serve as a replacement or
substitute for advising by a counselor or adviser. If you have questions, this
handbook is a place meant to start your research, not to complete it. While we
do our best to make sure our information is accurate and updated, mistakes can
be made either from human error or the handbook simply not being updated to
match current changes-- please make sure to confirm all information with an
adviser or through other resources.
If you have questions or comments, or would like to provide suggestions, please
feel free to email one of the current officers here:
\nameref{sec:DCSC}. If you would like to add more to the handbook or fix a
mistake, please feel free to submit a pull request to the repository where this
handbook is hosted. Thank you! \\\\
\textbf{Written with love in \LaTeX by:} \\
Stephanie Chang '17 \\ \\
\textbf{With contributions by:} \\
Alex Fu '17\\
David Lin '17\\
Christina Zhu '17\\
The Davis Computer Science Club\\
\newpage
\section {The Davis Computer Science Club}
\label{sec:DCSC}
The Davis Computer Science club runs during the school-year and provides
resources, workshops, and a community for the UC Davis Computer Science
community. Here's a breakdown of the Davis Computer Science Club:
Besides the main board, we have three committees -- Tutoring, Pragmatic
Programming, and Professional Development. Each committee is headed by a chair
and their possible, respective co-chair. Our website and various pages can be
found below:
\begin{center}
\begin{tabular}{p{3cm} p{8cm}}
\toprule
\textbf{Link} & \textbf{Description} \\
\midrule
\href{http://daviscsclub.org}{Website} & Our main page -- information about the Davis CS Club, its officers, committees, and various events are located here. \\
\href{https://www.facebook.com/groups/daviscsclub/}{Facebook Group} & Chat with other CS majors at UCD and find out about our events \\
\href{https://www.facebook.com/daviscsclub}{Facebook Page} & A little different from the Facebok group -- you can find photos and event information here.\\
\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.\\
\bottomrule
\end{tabular}
\end{center}
One of our old committees, the Game Development Committee, has branched off from
the Davis Computer Science Club and has created their own club -- if interested,
please check \href{https://www.facebook.com/groups/davisgamedev/}{here}.
\subsection {General Events}
Here are the general events, workshops, and programs the Davis Computer Science
Club holds either quarterly or yearly. Some events may or may not be included at
the discretion of the current board whereas some events may be added. To keep
updated, join our Facebook group or follow us on our Facebook page!
\begin{itemize}
\item Bit/Byte Mentorship Program
\item Gender Diversity in Tech
\item Courses Preview
\item Socials
\item DCSC End-Of-Year Banquet
\item Elections
\item T-shirt contest
\end{itemize}
\subsection{Tutoring Committee}
The Tutoring Committee serves the Davis Computer Science community by training
and providing volunteer tutors for Computer Science (ECS) courses at UC
Davis.
Tutors are typically located in Kemper Basement during their signed up hours,
but are possibly available upon request. The Tutoring Committee also holds
review sessions for lower division ECS courses and a select few upper division
courses depending on the availability of the tutors who are able to lead the
review sessions.
Tutors are able to receive undergraduate ECS credit with a certain amount of
hours. To become a tutor, contact the current Tutoring Committee chair(s) or the
Davis Computer Science club.
To find a tutor, please check
\href{https://daviscsclub.org/tutoring/athena}{athena} for available tutors
during the week, or Kemper 75 or Kemper 77 during CSIF hours on weekdays.
\subsection{Pragmatic Programming Committee}
Pragmatic Programming tends to lead workshops on various skills, tools,
languages, frameworks, and so on forth in tech and Computer Science. They may be
spread out in a series of weeks. Past workshops include, but are not limited to:
\begin{itemize}
\item iOS and Android Development I, II, III, IV
\item Web Development
\item Javascript
\item Git
\item Building Your Own Application
\item Optimization
\end{itemize}
And so on forth. If interested in participating in events, please check out the
Facebook group or page to see if any events are running! If you're interested in
helping out, please get in contact with our current Pragmatic Programming
chair(s).
\subsection{Professional Development Committee}
The Professional Development provides a series of workshops and events to help
students with advancing their careers. Past events have included, but are not
limited to:
\begin{itemize}
\item Mock Interviews
\item Resume Workshops
\item Negotiating Offers
\item Alumni Talks
\item Professor Chats with Professor Rogaway, Professor Gysel, Professor
Filikov, and so on forth
\end{itemize}
And so on forth. If interested in participating in events, please check out the
Facebook group or page to see if any events are running! If you're interested in
helping out, please get in contact with our current Professional Development
chair(s).
\subsection{Web Development Committee}
Web Development is in charge of our website, daviscsclub.org. They design, host,
and code up the website and keep it updated. There are no particular events that
the Web Development committee hosts, but people are welcome to attend and help
out the committee and website and get acquainted with the code that is involved
with our website! If you're intersted, please contact our Web Development
chair(s).
\subsection {How to Get Involved}
Attend workshops, events, and officer meetings, join our Facebook group and
follow our Facebook page! Become a mentor a mentee for the Bit/Byte mentorship
program, and volunteer at our events! We need volunteers to help out with any
large event we plan, such as Gender Diversity in Tech and our DCSC End-Of-Year
Banquet. If interested in helping out or attending, message us on our Facebook
page. :)
\subsection{Officer Board 2016-2017}
\label{sec:officers}
You can find a description of the officer board in our Bylaws
\href{https://github.com/DavisCSClub/Bylaws/blob/master/bylaws.pdf}{here}. Our
weekly officer meetings are open to the public -- if interested in attending,
please message the Davis Computer Science Club on our Facebook page as they are
subject to change weekly depending on the availability of the board.
\subsubsection{Core Body}
\begin{center}
\begin{tabular}{lll}
\toprule
\textbf{Title} & \textbf{Officer} & \textbf{Contact} \\
\midrule
President & Pooja Rajikumar & prajkumar@ucdavis.edu \\
Internal Vice President & Stephanie Chang & ischang@ucdavis.edu \\
External Vice President & Ariel Shin & arishin@ucdavis.edu \\
Treasurer & Sam Tsoi & sgtsoi@ucdavis.edu\\
Secretary & Trevor Glynn & tfglynn@ucdavis.edu \\
Events Coordinator & Sravya Divakarla & sdivakarla@ucdavis.edu\\
Marketing Director & Prajakta Surve & prsurve@ucdavis.edu\\
\bottomrule
\end{tabular}
\end{center}
\subsubsection{Committees}
\begin{center}
\begin{tabular}{lll}
\toprule
\textbf{Committee} & \textbf{Chair} & \textbf{Contact} \\
\midrule
Tutoring & Alex Fu & aafu@ucdavis.edu \\
Pragmatic Programming & Pranav Gupta & phgupta@ucdavis.edu \\
Professional Development & Zain Budhwani & zbud@ucdavis.edu\\
Web Development & Teresa Liu & stiliu@ucdavis.edu \\
\bottomrule
\end{tabular}
\end{center}
\subsection{FAQ}
\begin{description}[style=nextline]
\item[Are there any requirements to becoming a member of the Davis Computer
Science Club?]
Nope! Regardless of major or age, anyone is free to participate in our events
and workshops. We only ask that you be polite and respectful to everyone else.
\item[Do you charge to become a member?]
As of version 0.0 (check the date, please) of this handbook, we do not
currently charge to become a member or have any dues. That may change in the
future, however, depending on the discretion of the officer board.
\item[Can I post a job posting/advertisement of my product on your Facebook
group or page?]
For the most part, no. Any job postings should be directed to our Computer
Science adviser, Natasha Coulter, who sends out Listserv emails to all the
Computer Science undergraduates. Her email is
\href{mailto:nbcoulter@ucdavis.edu}{nbcoulter@ucdavis.edu}.
If you would really like to post on our page still, message us with your
content and we'll take a look! Without approval, any advertisements and job
postings will be promptly removed and after multiple times, the user will be
banned.
\item[How do I become an officer of the Davis Computer Science Club?]
There are yearly elections at the end of the year that decide next year's
officer board. To be eligible, you need to attend a certain amount of meetings
and/or a certain amount of events. The requirements change depending on the
current officer board, so either message the current board on our Facebook
page or keep a lookout for the event on our Facebook group or page.
However, students are welcome to shadow officers or attend our officer
meetings, which are typically open to the public. Please contact an officer to
get more information!
\item[Do you sell t-shirts? Where can I get them?]
We do sell t-shirts! Message the current officer board and see when/where they
are sold.
\item[Do you sell graduation stoles? Where can I get them?]
Graduation stoles are dependent on interest -- some years we have them, some
years we don't. If enough people are interested, we may order them
again. Please contact the current officer board to express interest.
\item[Do you sell Computer Science major sweaters? Where can I get them?]
We are not allowed to sell Computer Science major sweaters with the UC Davis
logo. However, while we do not have one without a logo, if you are interested
in a Computer Science sweater without the UC Davis logo, please contact our
current officer board to express your interest. Otherwise, please contact the
Computer Science department.
\item[Who can I talk to if I feel uncomfortable at an event or workshop held by DCSC?]
Please contact the Internal Vice President -- they handle all the internal
affairs of the club. DCSC has a zero tolerance policy against harassment and
discrimination. Please let us know if you feel uncomfortable or harassed at an
event and we will do our best to to stop or prevent the harassment.
\item[Where can I find the meeting minutes?]
Our meeting minutes are on our GitHub page, under Archives. They are typically
updated by our Secretary on a semi-weekly basis.
\item[How can I contact the Davis Computer Science club?]
We prefer being contacted through Facebook via our Facebook page. However, you
are welcome to contact the current board, especially our president, for any
questions, comments, or concerns. The Davis Computer Science Club welcomes any
sponsors and if interested, please email or message us!
\end{description}
\newpage
\section {Classes and Waitlisting}
\subsection{Helpful Links}
\subsubsection{Advising}
\begin{center}
\begin{tabular}{p{6cm} p{8cm}}
\toprule
\textbf{Link} & \textbf{Description} \\
\midrule
\href{https://www.cs.ucdavis.edu/undergraduate/cs-major/}{CS/CSE Major Requirements} & Various major requirements and catalogs live here. \\
\href{https://registrar.ucdavis.edu/calendar/quarter.cfm}{Quarter Deadlines} & Deadlines for the quarter and drop deadlines. \\
\href{https://students.ucdavis.edu/}{OASIS} & Calculate your major GPA, GE requirements, change and add majors, schedule advising, or add a minor here.\\
\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.\\
\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.\\
\bottomrule
\end{tabular}
\end{center}
\subsubsection{CSIF, UNIX, tutorials}
\begin{center}
\begin{tabular}{p{6cm} p{8cm}}
\toprule
\textbf{Link} & \textbf{Description} \\
\midrule
\href{http://csifdocs.cs.ucdavis.edu/}{Computer Science Instructional Facility, or CSIF}
& Information about our basement labs and our computers and hours
are here. \\
\href{http://csiflabs.cs.ucdavis.edu/~ssdavis/30/UnixWorkshop.pdf}{UNIX and CSIF set up}
& Need help setting up or learning UNIX? Lecturer Sean Davis has
an excellent tutorial here, along with a PDF of useful bash
commands. \\
\bottomrule
\end{tabular}
\end{center}
\subsection{Class Dependency Tree}
Figure~\ref{fig:deps} shows the prerequisites needed for CS classes at UC Davis.
\begin{figure}[htbp]
\includegraphics[width=\linewidth]{classdep.jpg}
\caption{Class Dependency Tree made by David Lin, '17.\label{fig:deps}}
\end{figure}
\newpage
\subsection {FAQ}
\begin{description}[style=nextline]
\item[What are my chances for getting into x class if I'm position y on the waitlist?]
There's no definitive answer for this question. Since CS and CSE are now
considered impacted majors, it's probably going to be difficult to get into
classes, especially if you're not a declared CS/CSE major.
There are some known classes that are more difficult to get into even if
you're high on the waitlist, such as core upper division classes and
especially ECS 188. If you're a CS major and in need for upper division
electives, math upper divs (besides 111) are now an option to replace an upper
div elective since catalog 2014.
Most lower div classes, such as ECS 30, ECS40, and ECS 60, are easy to get
into regardless of your position on the waitlist given its high drop
percentage and turnover, but there's still no total guarantee. Make sure you
have backup CRNs stored up and research other alternative before your pass
time!
\item[Can I follow a graduation requirement catalog that's not my own?]
You can only graduate from catalogs that have been changed since you started
UC Davis -- for example, if Jill started UC Davis in 2013, Jill can follow any
catalog changes to graduate after she came in, such as 2014, 2015, 2016,
etc. However, Jill is not able to follow any catalog changes from before she
came in -- so 2012, 2011, etc are out.
\item[Is my w x y z class load manageable?]
That's hard to say. Common classes to take together have been ECS 40 and ECS
20, along with ECS 50 and ECS 60. Depending on professors, some class loads
may be more manageable than others.
\item[Where can I find tutors for ECS? classes]
Please check out \href{https://daviscsclub.org/tutoring/athena}{athena}, our
tutor office hours page.
\item[How do I get credit for my ECS internship/tutoring/research?]
If you're doing research or an internship with a professor or company, click
\href{http://www.cs.ucdavis.edu/undergraduate/192-199/}{here} for more
information to possibly get credit. If you'd like to tutor with the Davis
Computer Science Club and get credits, please either contact the current
Tutoring Club Chair at \nameref{sec:officers} or click
\href{https://daviscsclub.org/committee/tutoring}{here}.
\item[How can I prepare for x class?]
The best way to prepare for a class is look up the class and find the
syllabus. If it's an intro class, try looking up the projects that were done
and code up the solutions on your own. ECS 10 uses Python, ECS30 uses C, and
C++ is used throughout most of the classes after, such as ECS 40 and ECS 60,
and other upper division classes.
If you're just starting to take ECS classes, a good way to start is to
familiarize yourself with the language and learn the basics: if/else
statements, loops, arrays, pointers, and possibly structs or
classes. KhanAcademy, Coursera, CodeAcademy, and StackOverflow are good
resources for beginners and professionals alike.
The various data structures taught in ECS 60 are usually: linked lists (single
and doubly linked), stacks, quadratic probing and linear probing hash tables,
queues, arrays, and the like.
\item[What are some easy GE's?]
Popular GE classes mentioned have been NUT 10, ASA 1/2/3/4, ENL 5F/5P, CLA30,
ECM1, COM1/3, ECN1, etc. Alternatively, localWiki has a list of classes
\href{https://localwiki.org/davis/Best_Classes_To_Take_Your_Last_Quarter...or_so_I've_heard}{here}.
\item[What are some easy or popular math/stat classes to take for that one upper
division math elective?]
MAT 145 (Combinatorics) and MAT 108 (Discrete Math) are popular options.
\item[What's a good GPA to have for a CS/CSE major?]
There's no good answer for this question -- it all depends on what you plan on
doing after school.
If you plan on going into industry, certain companies may care more about your
GPA than others and you may be guaranteed interviews if your GPA is high
enough and above a certain cutoff. However, most companies stress personal
projects and experience, whether from hackathons, work, or in your own free
time, and your GPA isn't much of a deciding factor, if at all. It doesn't hurt
to have a high GPA, but in general, it matters more to have projects and
experience. From the unconfirmed grapevine, it's been said that anything above
a 3.0 is considered decent or competitive, and the few, rare companies that
have a GPA cutoff require a 3.0 or above.
Graduate school has different requirements and standards and may stress GPA
more heavily than industry, but that depends on who you are, which school, and
the research you've done.
The average GPA for a CS major seems to be around a 2.9, so take with that
what you will.
\item[What's the best OS/computer/device/etc to own to code with?]
Any operating system will do, and any computer will do. None are the best.
The CSIF lab computers run \href{https://getfedora.org/}{Fedora} (one of many
Linux distributions), so you may want to try that.
Note that you can run whatever operating system you want inside a virtual
machine using software including, but not limited to, QEMU and VirtualBox.
\end{description}
\newpage
\section {Hackathons}
\label{sec:hackathons}
``Hackathon'' is a conjunction of two words: hack and marathon. Participants can
either go solo or form teams and create projects for a certain amount of time,
anywhere from 12 to 72 hours. At the end of the hackathon, there's usually a
demo session where projects are judged and the best projects take home great
prizes.
Hackthons are usually hosted by universities or organizations with various
company sponsors. Most hackathons are free and provide wi-fi, sleeping areas,
food, mentors if you get stuck, and plenty of swag\footnote{free goods
(branded or otherwise) from companies or universities, like tote bags, blankets,
water bottles, t-shirts, stickers, toothbrushes, etc.}
for everyone to take home. Sometimes hacakthons will provide a certain amount of
travel reimbursement for the participant to attend the hackathon.
Hackathons are a good way to buff up your resume with projects and expose
yourself to more technologies, APIS, and companies. It's also a way to network
with other professionals, students, and recruiters in the field. Some companies
will recruit and even interview at a hackathon, so if you're looking for job
opportunities, keep your resume updated and bring a few hardcopies!
Contrary to popular belief, anyone can attend a hackathon, even if you're not a
computer science major or student. A successful team may need designers, product
management leads, and business majors to keep the project going and even if you
don't plan to hack on/make anything at the hackathon, attending one and
immersing yourself in tech culture is a great learning experience for anyone, so
don't count yourself out!
\subsection{A Few Major hackathons}
\begin{center}
\begin{tabular}{llll}
\toprule
Location & Name & Theme (if any) \\
\midrule
UC Davis & \href{https://hackdavis.io}{HackDavis} & social good \\
San Francisco & \href{https://stupidhackathon.github.io}{Stupid Sh*t} & useless hacks \\
& \href{https://noisebridge.net/wiki/HackTheLeft}{HackTheLeft} & leftist hacks \\
& \href{https://hackerearth.com/slash-hack}{Slash Hack} & \\
UC San Diego & \href{https://www.sdhacks.io}{SDHacks} & \\
UC Berkeley & \href{http://calhacks.io}{CalHacks} & \\
UC Santa Barbara & \href{http://www.sbhacks.com}{SBHacks} & \\
Stanford & \href{https://www.treehacks.com}{TreeHacks} & \\
Los Altos & \href{http://www.losaltoshacks.com}{LosAltoHacks} & high school students \\
San Mateo & \href{http://hackingedu.co}{HackingEDU} & education \\
NorCal & \href{http://sospectra.com}{Spectra} & women only \\
Palo Alto & \href{https://gunnhacks.com}{GunnHacks} & high school students \\
MIT & \href{https://hackmit.org}{HackMIT} & \\
Duke & \href{https://www.hackduke.org}{HackDuke} & social good \\
University of Waterloo & \href{https://hackthenorth.com}{HackTheNorth} & \\
LinkedIn & Hackday & bay area interns only \\
\bottomrule
\end{tabular}
\end{center}
\subsection{Other}
Other places to discover hackathons in your area are:
\href{https://mlh.io}{Major League Hacking}
\href{http://eventbrite.com}{EventBrite}
\subsection{Tips}
\begin{description}
\item[Sleep] A lot of hackathons stress not sleeping, but four cans of
Redbull and working for 9 hours straight can really put a toll on your health
and productivity. Find a place to sleep, set breakpoints throughout the
hackathon, and just take a shut eye. You'll thank yourself later.
\item[Hardcode] No one comes out of a hackathon with a perfect project. Most of
the prototyping comes from hardcoding a bunch of the logic -- a successful
hack doesn't come from a perfect implementation, but a good pitch, idea, and
appearance. No one, not even the judges, is expecting a perfect product.
\item[Winning isn't everything] You don't have to win a prize in order to call a
hackathon succesful for you. If you made something or even learned something,
it was a successful hackathon.
\item[Network] Communicate with your team, and other teams, and help each other
out! The best part of the hackathon is checking out the demos and seeing what
other people have made and talking to other developers about their interests
and hacks. It's the best way to learn and expose yourself to other areas in
tech.
\item[Attend workshops and make use of the mentors] Most, if not all, hackathons
will have a few workshops and mentors. Make use of them -- they're here to
help you get through your bugs and guide you through your learning process.
\item[Hackathons Demystified] Page~\pageref{glossary} has a list of terms that
you can look over to get familiar with jargon, and has a few other tips to get
you prepped!
\end{description}
\subsection{FAQ}
\begin{description}[style=nextline]
\item[I'm not 18+, can I still attend a hackathon?]
Yes, you can! There are plenty of hackathons that allow attendees other
18. There are high school hackathons and hackathons that allow minors, such as
/hack. Keep a lookout for them!
\item[How much does it cost to attend a hackathon?]
Hackathons are usually free, unless otherwise specified. Professional
hackathons can cost money, so contact the hackthon's organizers for more
details.
\item[What should I bring to a hackathon?]
Your laptop, charger, ID, a creative spirit, and anything else you need to
hack with! If it's an overnight hack, blankets, sleeping bag,
toothbrush/toothpaste and any hygienic products would also be recommended.
\item[I've never coded before/I'm a beginner/I'm scared to drag my team down --
can I still go to a hackathon?]
Yes, yes, yes! Hackathons are for everyone regardless of experience. In fact,
beginners are highly encouraged to attend. If you\'re worried about not
knowing anything, find likeminded beginners and form a team with
them. Hackathons are all about learning, so don't be afraid if you don't know
anything!
\end{description}
\newpage
\section {Applying For Jobs and Internships}
\subsection{How and Where to Apply}
There's a few way to apply and score \nameref{sec:interviews}.
\begin{enumerate}
\item Cold Applying
\item \nameref{sec:referrals}
\item \nameref{sec:careerfair}
\end{enumerate}
Cold applying is going to each company's website or portal and applying. The top
ones to hit up every year are always the major companies: Google, Facebook,
Amazon, Apple, and Microsoft. Always apply, even if you don't think you have a
chance -- they'll keep your resume and profile in their archive for a while and,
in the future, they might look you up and reach out to you! If you think of a
company you might want to work for, look them up and apply to them!
\textbf{Tip}: Keep a spreadsheet of the ones you've applied to, the positions
you've applied to, the date you applied, and the status of your application. If
it's been a few days since you've heard from your recruiter, make sure to follow
up!
Before you apply, however, you're probably going to need at least a resume, and
maybe a cover letter.
\subsection{Resume}
\label{sec:resume}
The sections of a tech resume can be broken down like so:
\begin{enumerate}
\item Name and Contact Information (email, phone, GitHub, LinkedIn, website)
\item Skills (languages, libraries, frameworks)
\item Projects (school, hackathons, personal)
\item Experience (mostly tech, if possible, and/or leadership/volunteering)
\item Education (major(s) and minor(s), graduation year, GPA optional)
\item Relevant Coursework (optional)
\end{enumerate}
You should definitely include your Education and GPA, the latter being optional
and only if your GPA is decent, but neither are particularly interesting unless
either are truly exceptional, so put your skills, projects, and experience at
the top as much as you can.
Relevant Coursework is also good section to also add, especially if you're
looking for an internship or full-time position and don't have much experience
under your belt. Any CS classes you've taken or are projected to take in the
next quarter, especially Data Structures and Algorithms, are always good classes
to add.
\subsubsection {Building Your Resume}
If you haven't taken many classes or have skills or relevant experience (which
most people don't when they try and find internships or jobs, so don't worry),
you're going to have to start by building projects.
You can build projects by going to \nameref{sec:hackathons}, making your own
website or app, contributing to open source projects, etc. It doesn't have to be
big. You can make a Unitrans app, a Tic Tac Toe app, a Google Chrome extension,
your own website, or anything simple (or complicated) to learn and show
initiative and incentive. See below at \nameref{sec:projects} for more
ideas.
You can also build your resume by taking more classes. Your UC Davis classes
aren't the only ones you can add to your resume -- in your free time, taking an
online Coursera class or two and finishing the course is also something you can
add to your resume. Keep in mind that some Coursera classes are free, and some
are not.
Please also check \nameref{sec:onlinepresence} to build your resume and online
presence.
Even if you don't have many projects, classes, experience, or skills, it doesn't
mean you shouldn't still try your luck at applying! It's always good to gain
experience in applying for jobs and networking.
\subsubsection{Resume Tips}
\begin{itemize}
\item If you have a lot of experience, choose a few and tailor your resume
for the job you're applying for.
\item The general rule of thumb is one page for every ten years of relevant
experience and if you're applying for a new grad or internship position, keep
it to one page. If a recruiter can't skim your resume and read everything
quickly, then it's most likely going to be tossed or archived.
\item Black type on white paper. Size 10 font, minimum. Half inch margins,
minimum. Equal borders and spacing for all items. Your wording should be
concise, legible, but have brevity. Your resume can be pretty, but it doesn't
have to be a work of art. Keep it straightforward and neat -- all your
information should be easily found.
\item Stretch your content across the page -- white space should only be used to
separate your content for legibility -- you don't need splotches of white
space on your page for no reason. It makes it look like you don't have enough.
You can always fill up your resume with something, whether skills or projects
or coursework or experience. If you don't have any of those, learn them, build
them, take them, get them.
\item Other items you can include in your resume: awards, honors, scholarships,
fellowships, publications, research, interests, etc.
\item You don't need to put communication, leadership skills, or anything
similar as your skills -- that's either evident through any large scale team
projects you've listed or it'll be evident enough enough during a phone and
onsite interviews.
There's also no need to put Microsoft Word, Powerpoint or anything similar as
your skills unless the position specifically asks: most people know Microsoft
Word and if not, they can quickly learn.
There's also no need to put Objective as a section either -- it's
outdated. References is also not a needed section if you're going to write
``Available upon request'' -- recruiters will ask for a reference or a
background check if they need one from you.
\item Microsoft Word with tables is the most commonly used software to make
resumes, and some people also choose to use \LaTeX
\item Formats can change with every file extension and version, so try to keep
an edited version (in Word or \LaTeX) and send recruiters the PDF version of
your resume.
\item Don't put your address. No one contacts anyone for job opportunities via
address anymore and if recruiters need your address, they'll ask. Leaking your
address is a dangerous potential for identity theft -- your phone number,
email, and any social networking sites (LinkedIn, GitHub, your website, etc)
should suffice as contact information.
\item Keep descriptions of each position you've held short -- two to three
bullet points at most, with a line each. A good description should be like
what Churchill said about speeches and skirts: ``long enough to cover
everything, but short enough to be interesting''.
\item If possible and space permits, it's also nice to include one position
you've held that is not tech related -- it shows that you have interests
outside of tech. For example, if you volunteer at a children's center for
reading, or held a leadership position in a running club.
\item Check for typos! Don't lie! These are the big ones that can be easily
fixed!
\item Keep your name large, nice, and bold -- it makes you memorable.
\end{itemize}
\subsection{Cover Letter}
A general template for a cover letter looks something like this:
\begin{enumerate}
\item Dear XYZ,
\item Your name, introduction, the position you're applying for, how you heard
about the company (especially if it's through referral), and anything you know
about the company.
\item A short discussion about your relevant skills, projects, and skills and
what you can bring to the company technical skills wise. What challenges you
think the company faces and what interests you about them, and how passionate
you are about their product. Do some research here.
\item An optional paragraph on your leadership skills, collaborative skills,
various interests, and what you can bring as a leader or team member to the
company.
\item Ending note, conclusion, and state that you believe your attached resume
(or website, or whatever you choose) will highlight any of your other
qualities. Thank them for their time.
\item Sincerely, Your Name
\end{enumerate}
You shouldn't have to write a brand new cover letter for every company you apply
to. Your cover letter should be a malleable template and only changed a little
for every company -- keep the main details the same, such as your skills, but do
some research and add or change details about the company you're applying to as
you see fit.
Your cover letter should also be one page, and should contain the same header as
your \nameref{sec:resume} (Name and Contact Information).
\subsubsection{Cover Letter Tips}
\begin{itemize}
\item If they ask for an optional cover letter, include your cover
letter. You're going the extra mile to show them you want the job -- do it.
\item Check for typos! Don't lie! Be consistent with your resume!
\item Don't rote list your resume out -- your cover letter is supposed to add to
your resume, not be a summary. Add details that can't be seen on your resume,
such as what you enjoyed most about a project or class or what kind of
technology stack you've worked with and are learning.
\end{itemize}
\subsection {Referrals}
\label{sec:referrals}
This is the best way to get an interview. Your application is sent to the top of
the stack and recruiters will review referred applicants first opposed to those
that cold apply. It's sad, but true. Network, network, network -- make friends
in your classes, make friends at hackathons, make friends at work. These people
will get jobs and these are the people who can push your career forward
someday.
It's also, well, just nice to have friends in tech. :) And don't forget to
return the favor and refer them when you get a job as well!
\subsection{Career Fairs}
\label{sec:careerfair}
UC Davis has several career fairs in a year, and one specialized just for
engineering, with a list of them here:
\href{https://icc.ucdavis.edu/employer/fairs.htm}{Career Fairs}.
If you're actively looking for a job or internship, go to career fairs! Dress
business formal/casual, print 15-20 resumes, research the companies you want to
talk to, get there early if you can, and start hitting up each recruiter and
talking to them. Even if you're not looking for a job at the moment, you can
just go and pick up all the swag the companies are handing out.
One thing to do before a career fair is to practice your elevator pitch. It's a
1--2 minute spiel about yourself that goes something like this:
\begin{displayquote}
Hi, my name is Jill, I'm a 2nd year and I study Computer Science and Engineering
at UC Davis. I'm really interested in your Test Automation Internship
position. I've known about X company for a long time and I'm very passionate
about your product. Can you tell me more about yourself and the various
positions and X company?
\end{displayquote}
\subsection {Online Presence}
\label{sec:onlinepresence}
The first thing a recruiter does is look at your resume. Then they either see if
you have any more information (website, LinkedIn, GitHub, Devpost, etc) on your
resume that they can check online for and if not, they Google you. You're going
to seem less appealing than a candidate who has a fleshed out online presence
that the recruiter can get to know, so building your presence as soon as you
start applying for jobs is key.
You should make a:
\begin{enumerate}
\item LinkedIn
\item GitHub
\end{enumerate}
and optionally, a website or portfolio.
Your LinkedIn should not only reflect your resume, but anything else you didn't
have a chance to add on your resume, such as classes, more details on any
projects you've done, other work or volunteering experience, etc. It should be
detailed and thorough, with any images or links to projects you have, along with
any coursework you have. Recruiters will often look at your LinkedIn and may
contact you from there.
Your GitHub should have all your personal projects and code samples. If you
don't know what to add, try solving some interview problems on sites such as
HackerRank or Project Euler and putting it in a repository.
Your website, if you decide to make one, doesn't have to be fancy -- it can be
merely a static page with your name, your email, your LinkedIn and GitHub and
any relevant websites. You can talk about your interests, volunteering, work
history, hackathons you've attended, projects you've made, etc. It's your
website, but also your portfolio and a chance to show off your technical
skills. See more at \nameref{sec:website}.
Other ways you can build your online presence is being active in various other
communities, such as StackOverflow or StackExchange, or contributing to various
open source communities.
\textbf{Note:} The Davis Computer Science Club does not advise putting projects
done from classes on GitHub -- it is unfortunately common for students to
cheat and plagiarise from code past students have made available online.
\subsection {Website/Personal Portfolio}
\label{sec:website}
If you've never built a website before, here's the place for you! The easiest
place to host your website is at: \href{https://pages.github.com/}{GitHub Pages}
and they have a convenient and simple tutorial.
A few suggestions to drum up your website are to use
\href{http://getbootstrap.com/2.3.2/}{Twitter Bootstrap} for the
styling. Bootstrap is merely a set of CSS stylesheets you can use from, and you
can download it from the link given or use any of the CDNs provided (more on the
link).
\subsection {Negotiating Offers}
You should always try and negotiate your base pay, stock options, or
benefits. In fact, most companies expect you to.
If you have another offer that's paying you more, you should definitely ask if
the offer you're looking at if they can possibly match or exceed the offer of
the other company.
You'll get more leverage if you have another offer, but by itself, you can
leverage your skills and ask for more. Just simply ask your recruiter (nicely!)
if they can possibly raise your base salary/benefits/etc since it seems a bit
low. Most people seem afraid they're going to seem like an ungrateful
money-grubber -- you're not. It doesn't matter if you like the company or the
product, there's nothing wrong with having more money and there's no harm in
asking: you already got the offer!
If there's a certain salary/benefit/stocks combination you should definitely not
go below, a number that you should determine by yourself based on research, try
and keep to it. If you know the recruiter is offering you too low of a sum and
they refuse to raise your offer, decline and interview elsewhere. Don't
shortchange your worth just for the experience. You'll get other offers.
\subsection {Rejection}
It happens to everyone. They say that the first rejection is the hardest, but I
find that all the subsequent rejections hurt as much, if not more. But it
literally happens to everyone -- the best engineers get rejected, and often. No
one gets to where they are without it.
Some companies won't send a rejection letter. Some will. Both of them
suck. Sometimes you won't even know why they don't want to hire you, and they
could be for completely arbitrary, stupid reasons, like the recruiter just had a
bad day or they misplaced your paperwork. It could be that another candidate was
just too good -- maybe they were a student from MIT with 22 papers under their
belt and they've been coding since they could walk how could you possibly
compete with that? And yes, they can be for technical reasons: your solution
wasn't optimized enough, you couldn't find the edge cases, your skills aren't
developed enough. Most companies won't tell you.
Take it as a learning experience to grow more. It's okay to cry. It's okay to
feel like crap for a few days. But in the end, it's just another experience. It
doesn't mean you're not going to get a job or that you can't apply again. It's
not personal. You're smart, you're funny, you're likeable, and you're going to
make it in the end.
\subsection {Resources}
\href{https://github.com/j-delaney/easy-application}{List of Easy Applications}
\subsection{Tips}
\begin{itemize}
\item Recruiters are people, too. Be nice to them. Thank them, and often. Thank
your interviewers, too. Err on the side of being too polite, always.
\item Follow up with your recruiter -- if they haven't responded in a few days
to a week about your interview or the next steps, email them again. And
again. Call them, email other people from the company, and leave messages if
you have to.
\item A few good questions to ask your interviewer (pick and choose), technical
or otherwise, at the end of the interview are:
\begin{itemize}
\item What do you like about X company?
\item How is X company different from other companies?
\item What team do you work on at X company? What do you do?
\item What's the culture like at X company?
\item What's the technology stack at X company/your team like?
\item How flexible is X company with changing teams or learning new things?
\item What are some skills or values every intern/employee should have at X
company?
\item What are the next steps of the process?
\end{itemize}
\item Attend conferences or hackathons not just for the learning experience, but
to network!
\item
\href{http://engineering.ucdavis.edu/corporate-relations/student-recruitment/company-tours/}{UC Davis College of Engineering}
offers a few industry tours a year (such as Square, Google, Apple, etc), so if
you're interested in taking a look inside at some pretty great companies,
follow their Listserv or contact COE! This is open to UC Davis students based
on a first come first serve basis.
\end{itemize}
\subsection{FAQ}
\begin{description}[style=nextline]
\item[Should I put code I've written for class projects on my GitHub?]
That's up to you. DCSC does not advise or endorse this, however -- while it's
a quick way to show your code snippets and many students do so, but at full
disclosure, other students may look up your code and copy, so you might be at
risk with the SJA. Posting your professor's code that you built upon and
calling it your own may be considered plagiarism, so if you are going to do
so, you might want to put a disclaimer.
\item[When should I start applying for jobs and internships?]
There's no 'should' or supposed timeline -- just whenever you're comfortable!
However, you can apply for internships starting your freshman year if you'd
like. It's recommended to only start applying after you've taken ECS 60 Data
Structures or already have a foundation in Data Structures, as most of your
interview questions will be based on that.
\end{description}
\newpage
\section {Interviews}
\label{sec:interviews}
Most interviews for software engineering or related positions are split between
two kinds of questions: behavioral and technical.
\subsection {Interview Formats}
\begin{description}
\item[Coding Challenge]
You'll be given the challenge in the form of a link, such as HackerRank, where
you have to complete a certain number of problems in a given amount of time
(30 minutes to a few hours, usually) by a certain deadline.
Make sure your laptop or computer is charged and you find an ideal and quiet
place with internet to work and turn off any distractions for the amount of
time you're interviewing. Once you start, you can't pause, so make sure you're
ready.
\item[Remote/Phone Interview]
This can either be a behavioral or technical interview and it's usually done
via phone or video chat. There might be multiple rounds, sometimes back to
back or spread out through several weeks or months. Always be prepared for
both types of questions as you never know what they're going to throw at you.
If it's a technical phone interview, interviewers may ask you questions
straight up, or ask you to code up a more complicated problem on a shared
document such as GoogleDocs or CodePad. You may have to run the code after
you're done, so code carefully if you don't want to spend most of your
interview debugging.
\item[Onsite]
If you were invited to an onsite, you're probably close to the end! Be
prepared to spend a few hours/the whole day at the onsite location, and get
there early if you can. An onsite usually has whiteboard coding and debugging
the code with the interviewer in the room.
Depending on the company, you might interview with other candidates, have back
to back rounds, have multiple onsites, or just have one interview. Either way,
be prepared for the worst and practice, practice, practice.
\end{description}
\subsection{Common Interview Questions}
\begin{itemize}
\item \href{http://www.forbes.com/sites/jacquelynsmith/2013/01/11/how-to-ace-the-50-most-common-interview-questions/#f57f0c348737}{Behavioral}
\item \href{https://www.reddit.com/r/cscareerquestions/comments/20ahfq/heres_a_pretty_big_list_of_programming_interview/}{Technical}
\end{itemize}
\subsection{Resources and Practice}
\begin{center}
\begin{tabular}{lp{10cm}}
\toprule
\textbf{Title} & \textbf{Description} \\
\midrule
\href{https://hackerrank.com}{HackerRank}
& various interview questions from trees to data structures to
database questions in any language you choose \\
\addlinespace[0.5em]
\href{https://www.geeksforgeeks.org/}{GeeksForGeeks}
& lots of interview questions and their solutions in different
languages \\
\addlinespace[0.5em]
\href{https://projecteuler.net/}{ProjectEuler}
& programming and math challenge questions. Google's advised
website to check out for programming questions. \\
\addlinespace[0.5em]
\href{https://leetcode.com/}{LeetCode}
& various problems and their solutions (with some digging) \\
\addlinespace[0.5em]
\href{https://www.careercup.com/}{CareerCup}
& programming problems and solutions in a Stack Overflow-like
format \\
\addlinespace[0.5em]
\href{https://reddit.com/r/dailyprogrammer}{Reddit Programming Questions}
& problems on Reddit and people answering solutions, ranked
\hbox{easy--hard} \\
\addlinespace[0.5em]
\href{https://glassdoor.com}{Glassdoor}
& look up the company you're interviewing for and various
questions they may have \\
\addlinespace[0.5em]
\book{Cracking the Coding Interview}
& a book with programming questions, hints, and solutions \\
\bottomrule
\end{tabular}
\end{center}
\begin{itemize}
\item \href{http://bigocheatsheet.com/}{Big-Oh}
\item \href{https://gist.github.com/TSiege/cbb0507082bb18ff7e4b}{Interview Cheat Sheets}
\end{itemize}
\subsection {Tips}
\begin{description}
\item[Think aloud] If you're given a problem, think aloud and explain your
thought process before starting. Don't be afraid to ask your interviewer
questions if you're stuck or don't understand the problem -- they don't want
to see just your speed/efficiency in coding, but whether you're able to
collaborate with other people to figure out the problem.
\item[Optimize] You're probably going to be asked what are the edge cases and
Big-Oh of your solution and whether you're able to optimize your code
further. When you're practicing for interviews, make sure you ask yourself
these questions and try and optimize your code as much as you can. When in
doubt, see if you can use a hash map or hash table.