-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy path09-hacking.Rmd
194 lines (119 loc) · 15.8 KB
/
09-hacking.Rmd
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
<!--# (APPENDIX) Appendix {-}-->
# Hacking Your Future {#hacking}
It's very easy to overlook mistakes in your own writing because its difficult to be both an *author* and an *editor* of the same text. That's true of any written communication such as a covering letter, personal statement, email, essay or any message that you write. Mistakes are particularly common in CVs (or résumés) because they are so personal. You can spend *hours* carefully polishing the words and the formatting but not see a fatal error at the top of page one. Hacking^[The term hacking is a horribly overloaded word with many different meanings, but I'm using it here to mean an “ingenious temporary solution to a problem”, see [en.wikipedia.org/wiki/Hacker_(disambiguation)](https://en.wikipedia.org/wiki/Hacker_(disambiguation))] other people's CV's will help you debug and improve your own. You may need to use ingenious hacks like the temporary fix to the bridge in figure \@ref(fig:kludge-fig). Fixing other peoples bridges will help you improve your own bridge, see section \@ref(parti). You'll build better bridges to more interesting and ambitious destinations.
```{r kludge-fig, echo = FALSE, fig.align = "center", out.width = "100%", fig.cap = "(ref:captionkludge)"}
knitr::include_graphics("images/bridge-kludge-hack.png")
```
(ref:captionkludge) Your CV is a bridge which enables you to cross from where you are now to where you'd like to be in the future. Like the bridge in this picture, the CV's in this chapter are all faulty in some way, can you fix them? You may need to use ingenious hacks and [kludges](https://en.wikipedia.org/wiki/Kludge) like the one shown here on the [Million Dollar Bridge](https://en.wikipedia.org/wiki/Miles_Glacier_Bridge) in Alaska . Public domain image of kludgy repairs adapted from an original by [Jet Lowe](https://en.wikipedia.org/wiki/Jet_Lowe) on Wikimedia Commons [w.wiki/3Uvn](https://w.wiki/3Uvn)
Your future is bright, your future needs hacking, so let's start hacking your future.
## Hacking their futures {#cvs}
Hacking other people's code is a good way to learn how to code. Hacking other people's CV's is a good way to learn how to write better CVs too. The dogfooding technique described in section \@ref(dogfooding) is a useful hack which you can use by:
1. Eating your *own* dogfood by reading your own written work ALOUD <!--self assess using the rubric-->
1. Eating *somebody elses* dogfood by:
- Hacking a friends or peers CV by swapping with them and giving them constructive feedback, see section \@ref(cvswap)
- Hacking the fictitious CVs below by ranking them against a job advert in section \@ref(cooltech). Who would you want to interview and why?
1. Eating your own dogfood again, re-reading and re-editing repeatedly
1. Persuade someone else to eat your dogfood - get feedback from as many people (and bots see section \@ref(robotproof)) as you can
So, here are some fictitious CVs for you to hack, from students of Computer Science. They are based on CVs I've seen, warts and all, with personal information removed and anonymised. Can you spot their triumphs and tragedies? Can fix their CVs and work out which candidate is best for the sample job description at CoolTech in section \@ref(cooltech)? Can you hack their future?
Special thanks to [Toby Howard](https://en.wikipedia.org/wiki/Toby_Howard) and [Sean Bechhofer](https://personalpages.manchester.ac.uk/staff/sean.bechhofer/) for coming up with some of these silly fictional names for the late arrivals at the Computer Science ball. [@isihac] Please direct any complaints about the terribly geeky puns and in-jokes to Toby and Sean! Can you spot all the bad jokes? Thanks also Ben Carter and Penny Gordon Lanes in the [Careers Service at the University of Manchester](https://www.careers.manchester.ac.uk/), some of these CVs are based on examples they have collected and anonymised. 🙏
## Breakpoints
(ref:breakpoint)
```md
* PAUSE ⏸️
```
When you read these CVs make a note of:
1. **What Went Well?** (`WWW`) What do you like about any given CV, what have they done well?
1. **Even Better If?** (`EBI`) What could be fixed or improved, can you hack it?
1. **Their Rank order** (`1,2,3...`) Who is top of your list to interview? Who is going in the bin and why?
```md
* RESUME ▶️
```
<!-- also use the CV rubric and CV checklist-->
Imagine the person is real, what would you tell them about their CV if they'd given it to you for advice without hurting their feelings? How could you be a critical friend by giving them actionable feedback?
## Sample CVs
Hacking other people's CVs will help you improve your own because you're putting yourself in the shoes of your reader. Here are some samples:
### Penelope Tester {#pen-tester}
Penelope Tester, or Pen as her friends call her, loves cybersecurity and [reverse engineering](https://en.wikipedia.org/wiki/Reverse_engineering). She has a real passion for finding vulnerabilities in software and hardware. Just don't call her a hacker she dislikes that word, see figure \@ref(fig:pentester-fig).
```{r pentester-fig, echo = FALSE, fig.align = "center", out.width = "100%", fig.cap = "(ref:captionpentester)"}
knitr::include_graphics("images/pen_tester.png")
```
(ref:captionpentester) Penelope Tester's full CV can be viewed at [cdyf.me/Penelope_Tester.pdf](https://www.cdyf.me/Penelope_Tester.pdf)
### Rick Urshion {#rick-urshion}
Rick is a big fan of [functional programming](https://en.wikipedia.org/wiki/Functional_programming) and loves solving problems with languages like [Lisp](https://en.wikipedia.org/wiki/Lisp_(programming_language)), [Haskell](https://en.wikipedia.org/wiki/Haskell), [Clojure](https://en.wikipedia.org/wiki/Clojure), [Erlang](https://en.wikipedia.org/wiki/Erlang_(programming_language)) and [Scala](https://en.wikipedia.org/wiki/Scala_(programming_language)). He really doesn't like side-effects but tries to avoid getting into a state about it. Critics say he can be inefficient but Rick insists he's just lazy, see figure \@ref(fig:rickurshion-fig). Rick's father and grandfather were also called Rick, and his great-grandfather was too. You'll never guess what Rick and his partner are going to call their son...
```{r rickurshion-fig, echo = FALSE, fig.align = "center", out.width = "100%", fig.cap = "(ref:captionrick)"}
knitr::include_graphics("images/rick_urshion.png")
```
(ref:captionrick) Rick Urshion's full CV can be viewed at [cdyf.me/Rick_Urshion.pdf](https://www.cdyf.me/Rick_Urshion.pdf)
### Marge Conflict {#marge-conflict}
Marjorie loves version control because Marge is the [master of the merge](https://en.wikipedia.org/wiki/Merge_(version_control)). She also has very high [emotional intelligence](https://en.wikipedia.org/wiki/Emotional_intelligence) (EQ), a superpower that enables her to recognise emotions in herself and others so that she can quickly resolve people's inevitable differences, see figure \@ref(fig:margeconflict-fig).
```{r margeconflict-fig, echo = FALSE, fig.align = "center", out.width = "100%", fig.cap = "(ref:captionmarge)"}
knitr::include_graphics("images/marge_conflict.png")
```
(ref:captionmarge) Marge Conflict's full CV can be viewed at [cdyf.me/Marge_Conflict.pdf](https://www.cdyf.me/Marge_Conflict.pdf)
Resolving people's differences is an important skill, not just for `git merge` shown in figure \@ref(fig:git-merge-fig), but any kind of team collaboration where some kind of conflict is inevitable.
```{r git-merge-fig, echo = FALSE, fig.align = "center", out.width = "100%", fig.cap = "(ref:captiongitmerge)"}
knitr::include_graphics("images/git-merge-giphy.gif")
```
(ref:captiongitmerge) Sometimes [git merge](https://git-scm.com/docs/git-merge) can get messy, but Marge Conflict can handle it. Meme from [giphy.com](https://giphy.com/)
### Michael Rokernel {#mike-rokernel}
Mike lives in Los Angeles and loves operating systems, but not if they get too bloated, see figure \@ref(fig:mikrokernel-fig).
```{r mikrokernel-fig, echo = FALSE, fig.align = "center", out.width = "100%", fig.cap = "(ref:captionmike)"}
knitr::include_graphics("images/mike_rokernel_usa.png")
```
(ref:captionmike) Mike Rokernel's full CV can be viewed at [cdyf.me/Mike_Rokernel.pdf](https://www.cdyf.me/Mike_Rokernel.pdf)
### Florence Ting-Point {#flo-ting-point}
Flo loves maths and is a particularly big fan of [floating-point arithmetic](https://en.wikipedia.org/wiki/Floating-point_arithmetic), see figure \@ref(fig:floatingpoint-fig).
```{r floatingpoint-fig, echo = FALSE, fig.align = "center", out.width = "100%", fig.cap = "(ref:captionflo)"}
knitr::include_graphics("images/flo_ting_point.png")
```
(ref:captionflo) Flo Ting-Point's full CV can be viewed at [cdyf.me/Flo_Ting-Point.pdf](https://www.cdyf.me/Flo_Ting-Point.pdf)
### Peter Byte {#peter-byte}
Peter Byte and his [twin sister Peta Byte](https://en.wikipedia.org/wiki/Peta_(given_name)), both *love* big data, machine learning, statistics, data science and Artificial Intelligence (AI). They come from a big family with eleven other siblings including [Deca Byte](https://en.wikipedia.org/wiki/Deca-), [Hector Byte](https://en.wikipedia.org/wiki/Hecto-), [Kilo Byte](https://en.wiktionary.org/wiki/kilobyte), [Megan Byte](https://en.wiktionary.org/wiki/Megabyte), [Giga Byte](https://en.wiktionary.org/wiki/Gigabyte), [Terry Byte](https://en.wiktionary.org/wiki/terabyte), [Exa Byte](https://en.wiktionary.org/wiki/exabyte), [Zita Byte](https://en.wiktionary.org/wiki/Zettabyte), [Yotta Byte](https://en.wiktionary.org/wiki/yottabyte), [Rona Byte](https://en.wiktionary.org/wiki/ronnabyte) and [Quetta Byte](https://en.wikipedia.org/wiki/Quetta-). The Bytes are highly trained^[Using supervised and unsupervised methods] and wildly ambitious. [@stateofai] Critics say the Byte family have been terribly over-hyped, [don't explain themselves properly](https://en.wikipedia.org/wiki/Explainable_artificial_intelligence) and can't distinguish between truth and falsehood. [@hallucinai] Critics also point out that the Bytes are unsustainable, both environmentally and socially. [@sustainai;@slaveai] You'll have to judge for yourself in figure \@ref(fig:peterbyte-fig).
```{r peterbyte-fig, echo = FALSE, fig.align = "center", out.width = "100%", fig.cap = "(ref:captionpeter)"}
knitr::include_graphics("images/peter_byte.png")
```
(ref:captionpeter) Peter Byte's full CV can be viewed at [cdyf.me/Peter_Byte.pdf](https://www.cdyf.me/Peter_Byte.pdf)
### Polina Morphism {#polly-morphism}
Polly *loves* object-oriented programming. She has lots of siblings, and [a cousin called Isa](https://en.wikipedia.org/wiki/Isomorphism). Instead of a CV or résumé, Polly has put some basic details on her LinkedIn profile which she primarily uses for professional social networking, see figure \@ref(fig:polly-fig).
```{r polly-fig, echo = FALSE, fig.align = "center", out.width = "100%", fig.cap = "(ref:captionpolly)"}
knitr::include_graphics("images/polly-morphism.png")
```
(ref:captionpolly) A pdf of Polina Morphism's LinkedIn profile can be found at [cdyf.me/Polly_Morphism.pdf](https://www.cdyf.me/Polly_Morphism.pdf), the original can be found at [linkedin.com/in/pollymorphism](https://www.linkedin.com/in/pollymorphism/) (you may be asked to login to see her profile)
### Neil Pointer {#neil-pointer}
Neil is a mature student who loves the [C programming language](https://en.wikipedia.org/wiki/C_(programming_language)), see figure \@ref(fig:neilpointer-fig). He's a member of the sometimes misunderstood Pointer family, which Neil compensates for with his excellent memory management skills and efficiency. As well as twin sister Noelle, he also has [three famous sisters](https://en.wikipedia.org/wiki/The_Pointer_Sisters), [@imsoexcited] and a younger half-brother, Neil Pointer-Exception (who prefers `Java`), from his fathers second marriage. Noelle and Neil Pointer have seen many programming languages come and go, but their favourite will always be `C`. Like `C`, Neil and Noelle are children of the 1970s, easily “old enough to be your father” or (in Noelle's case) your mother. Respect your elders! [@ritchie]
```{r neilpointer-fig, echo = FALSE, fig.align = "center", out.width = "100%", fig.cap = "(ref:captionneil)"}
knitr::include_graphics("images/neil_pointer.png")
```
(ref:captionneil) Neil Pointer's full CV can be viewed at [cdyf.me/Neil_Pointer.pdf](https://www.cdyf.me/Neil_Pointer.pdf)
### Bryn Hanby-Roberts {#bryn}
The last CV is a real one. Bryn kindly gave his permission to share it with you, see figure \@ref(fig:bryn-fig). Bryn graduated in 2016, his CV is longer as he has five years of experience under his belt but it provides a useful counterpoint to the examples above. Thanks Bryn. 🙏
```{r bryn-fig, echo = FALSE, fig.align = "center", out.width = "100%", fig.cap = "(ref:captionbryn)"}
knitr::include_graphics("images/bryn.png")
```
(ref:captionbryn) Bryn Hanby-Roberts full CV can be viewed at [cdyf.me/bryn.pdf](https://www.cdyf.me/bryn.pdf) a snapshot taken in 2021 from [bryn.co.uk](http://bryn.co.uk)
## Sample CoolTech Job advert {#cooltech}
We’re looking for bright and geeky graduates to join our software engineering team. No experience is required, and many of our successful applicants have never programmed before. If you think logically and enjoy problem solving, then you have the potential to become a great developer.
A career at CoolTech will challenge you every day. In your first few weeks you will be solving real-world problems as you help to develop software used by professionals across the world.
You’ll be part of an agile development team, working on one of the largest real-time databases in the world. You’ll work on a wide variety of projects, ranging from Artificial Intelligence assisting clinicians with early diagnosis of cancer to an iOS app helping patients manage their diabetes.
Developers at CoolTech are involved in the full software cycle, and work closely with all teams across the company to scope out new projects as they design, develop and deploy our products.
## Summarising Your Future {#tldr15}
(ref:tldr)
Your future is bright, your future needs hacking. Hacking your future will help you to test your future by debugging your own CV. Testing your future will help you to start coding your future, see figure \@ref(fig:quickndirty-fig)
```{r quickndirty-fig, echo = FALSE, fig.align = "center", out.width = "99%", fig.cap = "(ref:captionquickndirty)"}
knitr::include_graphics("images/quick-and-dirty.jpg")
```
(ref:captionquickndirty) Once bugs have been identified on your CV, you'll need some workarounds. They might be [kludges](https://en.wikipedia.org/wiki/Kludge): quick-and-dirty workarounds that are clumsy, inelegant, inefficient, difficult to extend and hard to maintain. Or they might be more elegant and ingenious hacks. Either way, fixing bugs on your own CV, and other people's CVs, will improve your chances of being invited to interviews. Public domain image of kludgy repairs to the [Million Dollar Bridge](https://en.wikipedia.org/wiki/Miles_Glacier_Bridge) in Alaska adapted from an original by [Jet Lowe](https://en.wikipedia.org/wiki/Jet_Lowe) on Wikimedia Commons [w.wiki/3Uvn](https://w.wiki/3Uvn) adapted using the [Wikipedia app](https://apps.apple.com/gb/app/wikipedia/id324715238)
So:
* Reading other people's code will help you write better code yourself
* Reading other people's CVs helps you write a better CV yourself
* The more you read, the better you get at writing
So, after you've compared the CVs above to your own, find a critical friend and do a CV swap, see section \@ref(cvswap). You will both benefit by putting yourself in the shoes of your reader.
In the next part, chapter \@ref(verbalising): *Verbalising your Future* we'll look one more debugging technique, paying attention to the *verbs* on your CV and what they say about you.
<!-- suggestions from toby
Alex Hacker
Bobby Tables
Justine Time
Gemma Over (friends call her Gem Over)
Dick Claration
Ian Tejer
Ceaser Craplanguage-->