Merge branch 'main' of https://git.csclub.uwaterloo.ca/www/www-new into feat/meet-the-team-page
commit
238ec01ffa
@ -0,0 +1,5 @@ |
||||
.blockquote { |
||||
margin: 0; |
||||
padding-left: calc(10rem / 16); |
||||
border-left: calc(3rem / 16) solid var(--primary-accent-light); |
||||
} |
@ -0,0 +1,13 @@ |
||||
import React, { ReactNode } from "react"; |
||||
|
||||
import styles from "./Blockquote.module.css"; |
||||
|
||||
export interface Props { |
||||
children: ReactNode; |
||||
} |
||||
|
||||
export function Blockquote(props: Props) { |
||||
return ( |
||||
<blockquote className={styles.blockquote}>{props.children}</blockquote> |
||||
); |
||||
} |
@ -1,9 +1,18 @@ |
||||
.container { |
||||
display: flex; |
||||
flex-wrap: wrap; |
||||
} |
||||
|
||||
.separator { |
||||
padding: 0 calc(8rem / 16); |
||||
} |
||||
|
||||
@media only screen and (max-width: calc(768rem / 16)) { |
||||
.separator { |
||||
display: none; |
||||
.container { |
||||
flex-direction: column; |
||||
} |
||||
|
||||
.setting { |
||||
display: block; |
||||
.separator { |
||||
display: none; |
||||
} |
||||
} |
||||
|
@ -0,0 +1,36 @@ |
||||
.table { |
||||
display: block; |
||||
overflow-x: auto; |
||||
border-collapse: collapse; |
||||
|
||||
--border: calc(2rem / 16) solid var(--primary-accent-light); |
||||
} |
||||
|
||||
.table thead tr { |
||||
background: var(--secondary-accent-light); |
||||
} |
||||
|
||||
.table tbody tr { |
||||
text-align: center; |
||||
vertical-align: top; |
||||
} |
||||
|
||||
.table tbody tr:nth-child(odd) { |
||||
background: var(--primary-accent-lightest); |
||||
} |
||||
|
||||
.table th { |
||||
color: var(--primary-heading); |
||||
text-align: left; |
||||
border-bottom: var(--border); |
||||
} |
||||
|
||||
.table th:not(:last-child), |
||||
.table td:not(:last-child) { |
||||
border-right: var(--border); |
||||
} |
||||
|
||||
.table th, |
||||
.table td { |
||||
padding: calc(12rem / 16); |
||||
} |
@ -0,0 +1,9 @@ |
||||
import React, { TableHTMLAttributes } from "react"; |
||||
|
||||
import styles from "./Table.module.css"; |
||||
|
||||
export function Table(props: TableHTMLAttributes<HTMLTableElement>) { |
||||
const className = [styles.table, props.className ?? ""].join(" "); |
||||
|
||||
return <table {...props} className={className} />; |
||||
} |
@ -1,104 +0,0 @@ |
||||
.newsDemo { |
||||
padding: calc(50rem / 16); |
||||
background-color: var(--secondary-background); |
||||
display: inline-block; |
||||
} |
||||
|
||||
.newsTitle { |
||||
font-style: normal; |
||||
font-weight: bold; |
||||
color: var(--primary-heading); |
||||
font-size: calc(24rem / 16); |
||||
line-height: calc(36 / 24); |
||||
margin-bottom: calc(14rem / 16); |
||||
} |
||||
|
||||
.newsDesc { |
||||
font-style: normal; |
||||
font-weight: normal; |
||||
font-size: calc(14rem / 16); |
||||
line-height: calc(21 / 14); |
||||
white-space: pre-line; |
||||
color: var(--primary-heading); |
||||
vertical-align: baseline; |
||||
} |
||||
|
||||
.news > hr { |
||||
border: none; |
||||
height: calc(1rem / 16); |
||||
background-color: var(--primary-heading); |
||||
margin: 0 0 calc(13rem / 16) 0; |
||||
} |
||||
|
||||
.eventDescriptionCardDemo { |
||||
padding: calc(50rem / 16) 0; |
||||
background-color: var(--secondary-background); |
||||
display: inline-block; |
||||
} |
||||
|
||||
.eventDescriptionCardDemo > * { |
||||
margin: calc(12rem / 16) calc(50rem / 16); |
||||
} |
||||
|
||||
.eventDescriptionCardDemo > *:first-child { |
||||
margin-top: 0; |
||||
} |
||||
|
||||
.eventDescriptionCardDemo > *:last-child { |
||||
margin-bottom: 0; |
||||
} |
||||
|
||||
.teamMemberDemo { |
||||
max-width: calc(847rem / 16); |
||||
} |
||||
|
||||
.committee { |
||||
margin: 0; |
||||
color: var(--primary-heading); |
||||
font-weight: 600; |
||||
font-size: calc(24rem / 16); |
||||
line-height: calc(36 / 24); |
||||
} |
||||
|
||||
.teamMemberDemo > hr { |
||||
border: none; |
||||
height: calc(1rem / 16); |
||||
background-color: var(--primary-accent); |
||||
width: 100%; |
||||
margin-top: calc(24rem / 16); |
||||
margin-bottom: calc(46rem / 16); |
||||
} |
||||
|
||||
.teamMembers { |
||||
display: grid; |
||||
grid-template-columns: repeat(auto-fill, minmax(calc(100rem / 16), 1fr)); |
||||
row-gap: calc(43rem / 16); |
||||
column-gap: calc(53rem / 16); |
||||
} |
||||
|
||||
.linkDemo { |
||||
padding: calc(50rem / 16); |
||||
background-color: var(--secondary-background); |
||||
} |
||||
|
||||
.linkTitle { |
||||
font-weight: bold; |
||||
color: var(--primary-heading); |
||||
font-size: calc(24rem / 16); |
||||
} |
||||
|
||||
.miniTechTalkDemo > *:nth-child(odd) { |
||||
background: var(--secondary-accent-light); |
||||
} |
||||
|
||||
@media only screen and (max-width: calc(768rem / 16)) { |
||||
.newsDemo, |
||||
.eventDescriptionCardDemo { |
||||
padding: calc(20rem / 16); |
||||
background-color: var(--secondary-background); |
||||
} |
||||
|
||||
.eventDescriptionCardDemo > * { |
||||
margin: 0; |
||||
} |
||||
} |
@ -1,296 +0,0 @@ |
||||
import React, { useState } from "react"; |
||||
|
||||
import AfterHoursContent, { |
||||
metadata as afterHoursMetadata, |
||||
} from "../content/playground/after-hours.event.mdx"; |
||||
import AltTab, { |
||||
metadata as altTabEventMetadata, |
||||
} from "../content/playground/alt-tab.event.mdx"; |
||||
import CodeyInfo, { |
||||
metadata as codeyMetadata, |
||||
} from "../content/playground/codey.team-member.mdx"; |
||||
import Duties, { |
||||
metadata as dutiesOrganizedContentMetadata, |
||||
} from "../content/playground/constitution/duties-of-officers.section.mdx"; |
||||
import ExecutiveCouncil, { |
||||
metadata as executiveCouncilOrganizedContentMetadata, |
||||
} from "../content/playground/constitution/executive-council.section.mdx"; |
||||
import Membership, { |
||||
metadata as membershipOrganizedContentMetadata, |
||||
} from "../content/playground/constitution/membership.section.mdx"; |
||||
import Name, { |
||||
metadata as nameOrganizedContentMetadata, |
||||
} from "../content/playground/constitution/name.section.mdx"; |
||||
import Officers, { |
||||
metadata as officersOrganizedContentMetadata, |
||||
} from "../content/playground/constitution/officers.section.mdx"; |
||||
import Purpose, { |
||||
metadata as purposeOrganizedContentMetadata, |
||||
} from "../content/playground/constitution/purpose.section.mdx"; |
||||
import { metadata as dogeMetadata } from "../content/playground/doge.team-member.mdx"; |
||||
import OOTBReact, { |
||||
metadata as OOTBReactEventMetadata, |
||||
} from "../content/playground/ootb-react.event.mdx"; |
||||
import TempTechTalk, { |
||||
metadata as tempTechTalkMetadata, |
||||
} from "../content/playground/temp.talk.mdx"; |
||||
import UnavailableContent, { |
||||
metadata as unavailableMetadata, |
||||
} from "../content/playground/unavailable.news.mdx"; |
||||
|
||||
import { Button } from "./Button"; |
||||
import { EventCard } from "./EventCard"; |
||||
import { EventDescriptionCard } from "./EventDescriptionCard"; |
||||
import { Link } from "./Link"; |
||||
import { MiniEventCard } from "./MiniEventCard"; |
||||
import { MiniTechTalkCard } from "./MiniTechTalkCard"; |
||||
import { NewsCard } from "./NewsCard"; |
||||
import { |
||||
OrganizedContent, |
||||
LinkProps, |
||||
createReadAllSection, |
||||
} from "./OrganizedContent"; |
||||
import { TeamMember } from "./TeamMember"; |
||||
import { TeamMemberCard } from "./TeamMemberCard"; |
||||
import { TechTalkCard } from "./TechTalkCard"; |
||||
|
||||
import styles from "./playground.module.css"; |
||||
|
||||
const events = [ |
||||
{ Content: OOTBReact, metadata: OOTBReactEventMetadata }, |
||||
{ Content: AfterHoursContent, metadata: afterHoursMetadata }, |
||||
{ Content: AltTab, metadata: altTabEventMetadata }, |
||||
]; |
||||
|
||||
const constitution = [ |
||||
{ Content: Name, ...nameOrganizedContentMetadata }, |
||||
{ Content: Purpose, ...purposeOrganizedContentMetadata }, |
||||
{ Content: Membership, ...membershipOrganizedContentMetadata }, |
||||
{ Content: Officers, ...officersOrganizedContentMetadata }, |
||||
{ Content: Duties, ...dutiesOrganizedContentMetadata }, |
||||
{ |
||||
Content: ExecutiveCouncil, |
||||
...executiveCouncilOrganizedContentMetadata, |
||||
}, |
||||
]; |
||||
|
||||
export function MiniEventCardDemo() { |
||||
return ( |
||||
<div className={styles.miniEventCardDemo}> |
||||
{events.map(({ Content, metadata }) => ( |
||||
<MiniEventCard |
||||
{...metadata} |
||||
description={<Content />} |
||||
key={metadata.name + metadata.date.toString()} |
||||
/> |
||||
))} |
||||
</div> |
||||
); |
||||
} |
||||
|
||||
export function NewsCardDemo() { |
||||
return ( |
||||
<div className={styles.newsDemo}> |
||||
<div className={styles.newsTitle}>News</div> |
||||
<div className={styles.newsDesc}> |
||||
Updates from our execs |
||||
<br /> |
||||
<br /> |
||||
</div> |
||||
<hr className={styles.newsHr} /> |
||||
<NewsCard {...unavailableMetadata}> |
||||
<UnavailableContent /> |
||||
</NewsCard> |
||||
</div> |
||||
); |
||||
} |
||||
|
||||
export function ButtonDemo() { |
||||
return ( |
||||
<> |
||||
<h3>Standard buttons</h3> |
||||
<p> |
||||
<Button isLink={true} href="/"> |
||||
Link |
||||
</Button> |
||||
</p> |
||||
<p> |
||||
<Button>Button</Button> |
||||
</p> |
||||
<h3>Small buttons</h3> |
||||
<p> |
||||
<Button isLink={true} href="/" size="small"> |
||||
Small Link |
||||
</Button> |
||||
</p> |
||||
<p> |
||||
<Button size="small">Small Button</Button> |
||||
</p> |
||||
</> |
||||
); |
||||
} |
||||
|
||||
export function EventDescriptionCardDemo() { |
||||
return ( |
||||
<div className={styles.eventDescriptionCardDemo}> |
||||
{events.map(({ metadata }) => ( |
||||
<EventDescriptionCard |
||||
{...metadata} |
||||
key={metadata.name + metadata.date.toString()} |
||||
/> |
||||
))} |
||||
</div> |
||||
); |
||||
} |
||||
|
||||
export function EventCardDemo() { |
||||
return ( |
||||
<> |
||||
{events.map(({ Content, metadata }) => ( |
||||
<> |
||||
<EventCard |
||||
{...metadata} |
||||
key={metadata.name + metadata.date.toDateString() + "1"} |
||||
showDescription |
||||
> |
||||
<Content /> |
||||
</EventCard> |
||||
<EventCard |
||||
{...metadata} |
||||
key={metadata.name + metadata.date.toDateString() + "2"} |
||||
link="#" |
||||
> |
||||
<Content /> |
||||
</EventCard> |
||||
</> |
||||
))} |
||||
</> |
||||
); |
||||
} |
||||
|
||||
export function TeamMemberDemo() { |
||||
return ( |
||||
<div className={styles.teamMemberDemo}> |
||||
<div className={styles.teamMemberHeader}> |
||||
<h1 className={styles.committee}>Programme Committee</h1> |
||||
</div> |
||||
<hr /> |
||||
<div className={styles.teamMembers}> |
||||
<TeamMember {...dogeMetadata} image="/images/playground/doge.jpg" /> |
||||
<TeamMember {...dogeMetadata} image="/images/playground/doge.jpg" /> |
||||
<TeamMember {...dogeMetadata} image="/images/playground/doge.jpg" /> |
||||
<TeamMember {...dogeMetadata} image="/images/playground/doge.jpg" /> |
||||
<TeamMember {...dogeMetadata} image="/images/playground/doge.jpg" /> |
||||
<TeamMember {...dogeMetadata} image="/images/playground/doge.jpg" /> |
||||
<TeamMember {...dogeMetadata} image="/images/playground/doge.jpg" /> |
||||
<TeamMember {...dogeMetadata} image="/images/playground/doge.jpg" /> |
||||
<TeamMember {...dogeMetadata} image="/images/playground/doge.jpg" /> |
||||
<TeamMember {...dogeMetadata} image="/images/playground/doge.jpg" /> |
||||
</div> |
||||
</div> |
||||
); |
||||
} |
||||
|
||||
export function TeamMemberCardDemo() { |
||||
return ( |
||||
<div className={styles.teamMemberCardDemo}> |
||||
<TeamMemberCard {...codeyMetadata} image="/images/playground/doge.jpg"> |
||||
<CodeyInfo /> |
||||
</TeamMemberCard> |
||||
</div> |
||||
); |
||||
} |
||||
|
||||
export function LinkDemo() { |
||||
return ( |
||||
<div className={styles.linkDemo}> |
||||
<div className={styles.linkTitle}>Elections</div> |
||||
<p> |
||||
To find out when and where the next elections will be held, keep an eye |
||||
on the <Link href="https://csclub.uwaterloo.ca/news/">News</Link>. For |
||||
details on the elections, read our{" "} |
||||
<Link href="https://csclub.uwaterloo.ca/about/constitution"> |
||||
Constitution |
||||
</Link> |
||||
. |
||||
</p> |
||||
</div> |
||||
); |
||||
} |
||||
|
||||
export function OrganizedContentDemo() { |
||||
const sections = [...constitution]; |
||||
const numberedSections = false; |
||||
const readAllSection = createReadAllSection( |
||||
constitution.map(({ id, title, Content }) => ({ |
||||
Content, |
||||
section: { id, title }, |
||||
})), |
||||
true, |
||||
numberedSections |
||||
); |
||||
sections.unshift({ |
||||
...readAllSection.section, |
||||
Content: readAllSection.Content, |
||||
}); |
||||
|
||||
const [id, setId] = useState(sections[0].id); |
||||
|
||||
function FakeLink({ className, id, children }: LinkProps) { |
||||
return ( |
||||
<div className={className} onClick={() => setId(id)}> |
||||
{children} |
||||
</div> |
||||
); |
||||
} |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||
const Content = sections.find( |
||||
({ id: sectionId }) => sectionId === id |
||||
)!.Content; |
||||
|
||||
return ( |
||||
<OrganizedContent |
||||
sections={sections} |
||||
id={id} |
||||
link={FakeLink} |
||||
pageTitle="Playground" |
||||
numberedSections={numberedSections} |
||||
> |
||||
<Content /> |
||||
</OrganizedContent> |
||||
); |
||||
} |
||||
|
||||
export function TechTalkDemo() { |
||||
const poster = |
||||
tempTechTalkMetadata.thumbnails.large ?? |
||||
tempTechTalkMetadata.thumbnails.small; |
||||
|
||||
return ( |
||||
<div> |
||||
<TechTalkCard {...tempTechTalkMetadata} poster={poster}> |
||||
<TempTechTalk /> |
||||
</TechTalkCard> |
||||
</div> |
||||
); |
||||
} |
||||
|
||||
export function MiniTechTalkDemo() { |
||||
return ( |
||||
<div className={styles.miniTechTalkDemo}> |
||||
<MiniTechTalkCard |
||||
{...tempTechTalkMetadata} |
||||
poster={tempTechTalkMetadata.thumbnails.small} |
||||
/> |
||||
<MiniTechTalkCard |
||||
{...tempTechTalkMetadata} |
||||
poster={tempTechTalkMetadata.thumbnails.small} |
||||
/> |
||||
<MiniTechTalkCard |
||||
{...tempTechTalkMetadata} |
||||
poster={tempTechTalkMetadata.thumbnails.small} |
||||
/> |
||||
</div> |
||||
); |
||||
} |
@ -1,16 +0,0 @@ |
||||
## Academic Advice |
||||
|
||||
Find a nice group of people that you study well with and meet every once in a while to work on things together, |
||||
you can do that generally by asking around via messaging platforms/office hours. To avoid plagiarism, avoid discussing |
||||
intricate details of the solution but rather bounce ideas off one another, and leave yourself 30 minutes after the meeting |
||||
before you write up a solution |
||||
|
||||
Try to complete your assignments without consulting your notes. It will be very challenging to do if you are not very confident |
||||
in the content and is a good indicator that you need to understand the content better! Try to review it again and do the |
||||
assignment without referring back to it. |
||||
|
||||
Try to manage your pace when it comes to work. Itโs really easy to burn out and lose motivation in the middle to end of the term, |
||||
when you need it the most. Give yourself a breather and take breaks! |
||||
|
||||
Assignments can be pretty endless, so make sure you celebrate your small wins. Modularize your tasks and reflect on all the |
||||
work youโve done over a period of time. Itโs often much more than you think. |
@ -1,98 +0,0 @@ |
||||
## Co-op Advice |
||||
|
||||
Although WaterlooWorks is quite reliable, there are many more opportunities outside of the job board. |
||||
Being able to apply for jobs externally not only prepares you to look for jobs full time but it also |
||||
provides a way to start your study term without having to worry about looking for a co-op. |
||||
|
||||
|
||||
Create rituals for starting your day and ending your day. Studies have shown that not having a post work activity |
||||
makes it harder to not think about work which leads to burn out and reduced productivity. Start your day by thinking |
||||
about what you want to achieve and how you want to feel. End your day by doing an activity i.e exercising, listing |
||||
todos for tomorrow, or even reflecting about the work day! This may help you have a more balanced lifestyle. |
||||
|
||||
|
||||
To make the best use of your time, set a time limit on how long you spend on the problem (e.g. 1 hour before |
||||
you ask for help). Asking for help on an issue youโve been stuck on for some time can be beneficial. Itโs much |
||||
better to take an hour of your mentor/bossโ time than to be stuck for days without any results. The solution |
||||
may be team/organization specific and asking can save a lot of time. Be sure to try your best to solve the |
||||
problem on your own first to maximize your ability to learn. |
||||
|
||||
|
||||
If you have spent time diving into the codebase but you still are confused, schedule time with your mentor/coworkers |
||||
to have a code base walk through. Write up questions to ask during the meeting and take notes of unclear parts of the code. |
||||
|
||||
|
||||
Check over your code at least twice before submitting your code review. Reviewing the code a second time may |
||||
help you catch minor issues and/or problematic code that your reviewers may or may not comment on. If you are |
||||
unable to figure out a solution to an issue, then reach out to someone for help rather than implementing a |
||||
hacky solution. You will be more aware of your coding quality, less prone to ignoring issues, and overall |
||||
be a more responsible developer. |
||||
|
||||
|
||||
Asking for feedback from your manager/mentor throughout the term can go a long way. You can ask about your |
||||
performance in certain areas and ways you can improve. These feedbacks can help determine what you should continue |
||||
and/or change. For example, you can ask about their expectations and how you can achieve a specific rating on |
||||
the employer co-op rating to set up specific goals. |
||||
|
||||
|
||||
Around the middle of the term, ask to go over your co-op evaluation form with your manager. In doing so, you will |
||||
be able to modify your current goals to match/exceed your managerโs expectations. This is especially helpful for |
||||
you to determine how you can achieve the co-op rating you want. |
||||
|
||||
|
||||
Meeting and networking with people in and outside your team is an amazing way to learn and meet new people. |
||||
Coffee chats are a great way to learn about interesting roles and tasks others around the company perform. |
||||
Try to set up coffee chats with others at your company as you might meet an amazing connection or learn about |
||||
a really neat topic. This may lead to an idea of what you want to do in your future co-ops. A format you can |
||||
use is: โHey, I'm the new intern of \<manager\> and I was wondering if I could put something on your calendar |
||||
so I can get to know you and your work a little better.โ |
||||
|
||||
|
||||
Aim to make most/all of your code testable. This will ensure the code is functioning properly and will save |
||||
time debugging in the future. This is a useful skill to have as a developer. |
||||
|
||||
|
||||
Each push request (PR) should focus on a very specific change/feature. Modularizing the changes will make |
||||
reviewing the PR easier and quicker. |
||||
|
||||
|
||||
Set up a system to stay on top of your work. This can be as simple as setting up a to-do list ready for the day. |
||||
The important thing is to be clear and intentional with your goals each day so you can optimize your focus on getting things done. |
||||
|
||||
|
||||
Document any blockers you faced during onboarding, and how you overcame them because chances are others will face them too. |
||||
These can be tips/advice you would give new hires. Feel free to share these findings with your team, because they want to make |
||||
the onboarding process more efficient and up to date for future hires. Some examples of things to take note of are |
||||
outdated/incorrect/missing documentation and the way the team does a specific task. |
||||
|
||||
|
||||
Negotiating compensation for an offer when you already have competing offers can be very beneficial for you and itโs normal |
||||
to do. For a general guide, you can use the format: |
||||
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------------- |
||||
Hello [Name of recruiter], |
||||
|
||||
I am very interested in working \[company name\]. I have been given an opportunity at \[another company name\] that is offering \[compensation\]. |
||||
Would it be possible for [the company name] to match/increase the compensation. |
||||
|
||||
Thank you, |
||||
|
||||
[Name] |
||||
|
||||
------------------------------------------------------------------------------------------------------------------------------- |
||||
|
||||
If you do not have competing offers you can still try to negotiate using the format: |
||||
|
||||
------------------------------------------------------------------------------------------------------------------------------- |
||||
Hello \[Name of recruiter\], |
||||
|
||||
Given my experiences, would it be possible to increase the compensation to [compensation]? |
||||
|
||||
Thank you, |
||||
|
||||
[Name] |
||||
|
||||
------------------------------------------------------------------------------------------------------------------------------- |
||||
|
||||
Either way, it does not hurt to try as the worst they can say is no. |
@ -1,42 +0,0 @@ |
||||
## Social Advice |
||||
|
||||
If youโre looking to watch movies with friends then you can either buy cheaper (Tuesday prices) |
||||
at the Student Life Center or Waterloo has a list of streaming sites where you can watch free movies. |
||||
|
||||
Join different clubs or societies! Theyโre a great way to make friends and manage your time better. |
||||
Plus, it makes going through a school term much more fun. |
||||
|
||||
Take up the opportunities for meeting people. You never know who you might meet. If you donโt put |
||||
yourself out there and take chances, itโs much harder to find a relationship, friendships, or even study buddies. |
||||
|
||||
Be kind. Celebrate your friendsโ successes when they get a co-op job and support them when theyโre struggling |
||||
too. Waterloo is so competitive and sometimes it can be hard to navigate through, so make sure youโre giving |
||||
and getting a good support network. |
||||
Additional Resources |
||||
|
||||
Along with your tuition fees, part of your library fees grant you access to a database of [free movies](https://media3-criterionpic-com.proxy.lib.uwaterloo.ca/htbin/wwform/006/wwk770?&kw=zkcode%7C000005%7C) |
||||
|
||||
SE servers: |
||||
|
||||
[discord.gg/ZtmRPc59](https://discord.gg/ZtmRPc59) |
||||
|
||||
[discord.gg/XyQtsfe5](https://discord.gg/XyQtsfe5) |
||||
|
||||
Group Leetcode server: |
||||
[discord.gg/kwCsCNb3](https://discord.gg/kwCsCNb3) |
||||
|
||||
There are many online resources for interview preparation including https://evykassirer.github.io/playing-the-internship-game/ and https://github.com/viraptor/reverse-interview |
||||
|
||||
If you have issues regarding courses, there are MathSoc class representatives who can help voice your concerns to involved faculty members. |
||||
|
||||
Access to eBooks: https://subjectguides.uwaterloo.ca/compsci/books |
||||
|
||||
More specifically O'Reilly Higher education: https://learning-oreilly-com.proxy.lib.uwaterloo.ca/home |
||||
There are a lot of helpful books/videos that can teach you a variety of things from finance to leadership to a variety of cs topics! (With recommendations, case studies and playlist to help you get started) |
||||
|
||||
We have GPUs: https://uwaterloo.ca/math-faculty-computing-facility/services/service-catalogue-teaching-linux/access-teaching-gpu-cluster |
||||
|
||||
List of math faculty services: https://uwaterloo.ca/math-faculty-computing-facility/services |
||||
|
||||
Internship/Interview advice |
||||
https://www.techintern.io/ |