Compare commits
4 Commits
91ce115b2c
...
fca0189254
Author | SHA1 | Date |
---|---|---|
R Tyler Croy | fca0189254 | |
R Tyler Croy | 0d66101d1b | |
R Tyler Croy | 6ea81fdc34 | |
R Tyler Croy | 20fbba6313 |
53
Gemfile.lock
53
Gemfile.lock
|
@ -1,39 +1,41 @@
|
||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
addressable (2.8.0)
|
addressable (2.8.1)
|
||||||
public_suffix (>= 2.0.2, < 5.0)
|
public_suffix (>= 2.0.2, < 6.0)
|
||||||
colorator (1.1.0)
|
colorator (1.1.0)
|
||||||
concurrent-ruby (1.1.10)
|
concurrent-ruby (1.2.0)
|
||||||
em-websocket (0.5.3)
|
em-websocket (0.5.3)
|
||||||
eventmachine (>= 0.12.9)
|
eventmachine (>= 0.12.9)
|
||||||
http_parser.rb (~> 0)
|
http_parser.rb (~> 0)
|
||||||
eventmachine (1.2.7)
|
eventmachine (1.2.7)
|
||||||
ffi (1.15.5)
|
ffi (1.15.5)
|
||||||
forwardable-extended (2.6.0)
|
forwardable-extended (2.6.0)
|
||||||
|
google-protobuf (3.21.12-x86_64-linux)
|
||||||
http_parser.rb (0.8.0)
|
http_parser.rb (0.8.0)
|
||||||
i18n (1.10.0)
|
i18n (1.12.0)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
jekyll (4.2.2)
|
jekyll (4.3.2)
|
||||||
addressable (~> 2.4)
|
addressable (~> 2.4)
|
||||||
colorator (~> 1.0)
|
colorator (~> 1.0)
|
||||||
em-websocket (~> 0.5)
|
em-websocket (~> 0.5)
|
||||||
i18n (~> 1.0)
|
i18n (~> 1.0)
|
||||||
jekyll-sass-converter (~> 2.0)
|
jekyll-sass-converter (>= 2.0, < 4.0)
|
||||||
jekyll-watch (~> 2.0)
|
jekyll-watch (~> 2.0)
|
||||||
kramdown (~> 2.3)
|
kramdown (~> 2.3, >= 2.3.1)
|
||||||
kramdown-parser-gfm (~> 1.0)
|
kramdown-parser-gfm (~> 1.0)
|
||||||
liquid (~> 4.0)
|
liquid (~> 4.0)
|
||||||
mercenary (~> 0.4.0)
|
mercenary (>= 0.3.6, < 0.5)
|
||||||
pathutil (~> 0.9)
|
pathutil (~> 0.9)
|
||||||
rouge (~> 3.0)
|
rouge (>= 3.0, < 5.0)
|
||||||
safe_yaml (~> 1.0)
|
safe_yaml (~> 1.0)
|
||||||
terminal-table (~> 2.0)
|
terminal-table (>= 1.8, < 4.0)
|
||||||
|
webrick (~> 1.7)
|
||||||
jekyll-include-cache (0.2.1)
|
jekyll-include-cache (0.2.1)
|
||||||
jekyll (>= 3.7, < 5.0)
|
jekyll (>= 3.7, < 5.0)
|
||||||
jekyll-paginate (1.1.0)
|
jekyll-paginate (1.1.0)
|
||||||
jekyll-sass-converter (2.2.0)
|
jekyll-sass-converter (3.0.0)
|
||||||
sassc (> 2.0.1, < 3.0)
|
sass-embedded (~> 1.54)
|
||||||
jekyll-seo-tag (2.8.0)
|
jekyll-seo-tag (2.8.0)
|
||||||
jekyll (>= 3.8, < 5.0)
|
jekyll (>= 3.8, < 5.0)
|
||||||
jekyll-tagging (1.1.0)
|
jekyll-tagging (1.1.0)
|
||||||
|
@ -44,30 +46,31 @@ GEM
|
||||||
rexml
|
rexml
|
||||||
kramdown-parser-gfm (1.1.0)
|
kramdown-parser-gfm (1.1.0)
|
||||||
kramdown (~> 2.0)
|
kramdown (~> 2.0)
|
||||||
liquid (4.0.3)
|
liquid (4.0.4)
|
||||||
listen (3.7.1)
|
listen (3.8.0)
|
||||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||||
rb-inotify (~> 0.9, >= 0.9.10)
|
rb-inotify (~> 0.9, >= 0.9.10)
|
||||||
mercenary (0.4.0)
|
mercenary (0.4.0)
|
||||||
nuggets (1.6.1)
|
nuggets (1.6.1)
|
||||||
pathutil (0.16.2)
|
pathutil (0.16.2)
|
||||||
forwardable-extended (~> 2.6)
|
forwardable-extended (~> 2.6)
|
||||||
public_suffix (4.0.7)
|
public_suffix (5.0.1)
|
||||||
pygments.rb (2.3.0)
|
pygments.rb (2.3.1)
|
||||||
rake (13.0.6)
|
rake (13.0.6)
|
||||||
rb-fsevent (0.11.1)
|
rb-fsevent (0.11.2)
|
||||||
rb-inotify (0.10.1)
|
rb-inotify (0.10.1)
|
||||||
ffi (~> 1.0)
|
ffi (~> 1.0)
|
||||||
rdiscount (2.2.0.2)
|
rdiscount (2.2.7)
|
||||||
rexml (3.2.5)
|
rexml (3.2.5)
|
||||||
rouge (3.29.0)
|
rouge (4.0.1)
|
||||||
safe_yaml (1.0.5)
|
safe_yaml (1.0.5)
|
||||||
sassc (2.4.0)
|
sass-embedded (1.57.1)
|
||||||
ffi (~> 1.9)
|
google-protobuf (~> 3.21)
|
||||||
terminal-table (2.0.0)
|
rake (>= 10.0.0)
|
||||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
terminal-table (3.0.2)
|
||||||
unicode-display_width (1.8.0)
|
unicode-display_width (>= 1.1.1, < 3)
|
||||||
webrick (1.7.0)
|
unicode-display_width (2.4.2)
|
||||||
|
webrick (1.8.1)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
x86_64-linux
|
x86_64-linux
|
||||||
|
|
|
@ -1,101 +0,0 @@
|
||||||
---
|
|
||||||
layout: default
|
|
||||||
title: Home
|
|
||||||
---
|
|
||||||
|
|
||||||
<div class="apache-nav">
|
|
||||||
<table style="width: 100%;">
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<img src="/images/icons/text.png"/>
|
|
||||||
<a href="/about">about.txt</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<img src="/images/icons/folder.png"/>
|
|
||||||
blog/
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% if paginator.previous_page %}
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<img src="/images/icons/blank.png"/>
|
|
||||||
<img src="/images/icons/continued.png"/>
|
|
||||||
<a class = "newer paginate-button" href="{{ paginator.previous_page_path | relative_url }}">Newer Posts</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endif %}
|
|
||||||
{% for post in paginator.posts %}
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<img src="/images/icons/blank.png"/>
|
|
||||||
<img src="/images/icons/layout.png"/>
|
|
||||||
<a href="{{ post.url | relative_url }}">{{ post.title }}</a>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<span style="float:right;">
|
|
||||||
{{ post.date | date_to_string }}
|
|
||||||
</span>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
{% if paginator.next_page %}
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<img src="/images/icons/blank.png"/>
|
|
||||||
<img src="/images/icons/continued.png"/>
|
|
||||||
<a class = "older paginate-button" href="{{ paginator.next_page_path | relative_url }}">Older Posts</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endif %}
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<img src="/images/icons/folder.png"/>
|
|
||||||
feeds/
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<img src="/images/icons/blank.png"/>
|
|
||||||
<img src="/images/icons/xml.png"/>
|
|
||||||
<a href="/atom.xml">atom.xml</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<img src="/images/icons/blank.png"/>
|
|
||||||
<img src="/images/icons/xml.png"/>
|
|
||||||
<a href="/microblog.xml">microblog.xml</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<img src="/images/icons/blank.png"/>
|
|
||||||
<img src="/images/icons/xml.png"/>
|
|
||||||
<a href="/podcast-picks.xml">podcast-picks.xml</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<img src="/images/icons/blank.png"/>
|
|
||||||
<img src="/images/icons/xml.png"/>
|
|
||||||
<a rel="me" href="https://hacky.town/@rtyler">Mastodon</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<img src="/images/icons/comp.gray.png"/>
|
|
||||||
<a href="gopher://gopher.brokenco.de/">gopher site</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<img src="/images/icons/folder.png"/>
|
|
||||||
<a href="/categories">tags/</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<hr/>
|
|
||||||
</div>
|
|
|
@ -15,7 +15,7 @@ and leadership positions, I have noticed a number of successful patterns, and
|
||||||
unsuccessful patterns. In this post I want to focus on one of the more
|
unsuccessful patterns. In this post I want to focus on one of the more
|
||||||
successful patterns: good information management.
|
successful patterns: good information management.
|
||||||
|
|
||||||
Engineering managers are expected to have loads of information ready
|
Engineering managers are expected to have loads of information ready
|
||||||
at all times. The architecture of the systems their team is responsible for,
|
at all times. The architecture of the systems their team is responsible for,
|
||||||
current project priorities, cross-team points of dependence or collaboration,
|
current project priorities, cross-team points of dependence or collaboration,
|
||||||
and a myriad of other snippets of information. It's a _lot_, but I don't think
|
and a myriad of other snippets of information. It's a _lot_, but I don't think
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
---
|
||||||
|
layout: post
|
||||||
|
title: "I think coding interviews categorically suck"
|
||||||
|
tags:
|
||||||
|
- software
|
||||||
|
- leadership
|
||||||
|
- management
|
||||||
|
- opinion
|
||||||
|
---
|
||||||
|
|
||||||
|
I recently had a good discussion with another engineering leader about the
|
||||||
|
merits of coding interviews. They have long been a trusted part of the tech
|
||||||
|
company interview process, but I have been mostly hiring _without_ them over
|
||||||
|
the last 5 years. Below I wanted to share some of the thoughts that I sent my
|
||||||
|
colleague:
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
(_in response to a concern about hiring somebody that can't actually build software_)
|
||||||
|
|
||||||
|
I have also made one or two hires who didn't end up being able to really build
|
||||||
|
and implement things. No interview process is going to be 100%, sometimes a dud
|
||||||
|
gets through. :)
|
||||||
|
|
||||||
|
Many coding interviews necessarily need to fit in the time allotted and
|
||||||
|
therefore are merely puzzles or computer science questions. The internet is
|
||||||
|
littered with tools on how to practice your way into passing a coding
|
||||||
|
interview, in fact, I have even seen a book or two at my library on the
|
||||||
|
subject. For the most part, a coding interview tells you how well somebody can
|
||||||
|
pass a coding interview, it doesn't actually tell you that they can build
|
||||||
|
software. [SOME VENDOR] claims to alleviate some of that, but software
|
||||||
|
development is a team sport and there's a lot _around_ the programming that is
|
||||||
|
expected of software engineers, especially more senior ones.
|
||||||
|
|
||||||
|
My second main concern is that it has always come across to me as almost
|
||||||
|
disrespectful of people's time. FAANG companies are awful about this. Many
|
||||||
|
interview processes are already requesting substantial time commitment from
|
||||||
|
people, and to see companies then ask people to do a "take home assignment" or
|
||||||
|
a test boggles the mind. [Automatic](https://artiss.blog/2019/03/the-automattic-hiring-process/) does an interesting twist on this in that
|
||||||
|
they basically pay people up front and take them on in a contracting capacity
|
||||||
|
before hiring.
|
||||||
|
|
||||||
|
As a hiring manager, my objective is to determine whether somebody can build
|
||||||
|
software. I will typically try to find a way without some form of coding
|
||||||
|
exercise that's tailored to each candidate, for example:
|
||||||
|
|
||||||
|
* If they're on GitHub and have activity, I'll look at open source
|
||||||
|
contributions. In some cases that's sufficient, because I can see how they
|
||||||
|
respond to code review, interact with others, and structure their code in a
|
||||||
|
real world scenario (commit messages too!). I enjoy discussing pull request
|
||||||
|
reviews with these candidates too.
|
||||||
|
|
||||||
|
* If they don't have public activity, I will look at their resume for items
|
||||||
|
which mention "design and implementation" and then we'll do more of a "code
|
||||||
|
architecture" interview where I discuss that system with them and ask
|
||||||
|
questions about how they structure their code, create modules, test, etc.
|
||||||
|
|
||||||
|
* If they are simply too junior or for whatever reason they don't have anything
|
||||||
|
above, then what I'll do is a "debugging interview" rather than a coding
|
||||||
|
interview. Where we start with something pre-existing and debug it to make it
|
||||||
|
work, refactoring along the way. In these interviews I'm typically using a
|
||||||
|
bit of our production code, rather than something that's contrived.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Interviewing is _hard_ and imprecise to say the least. Writing code is an
|
||||||
|
important part of a software engineering role, but we rarely do it as
|
||||||
|
performance art, making the coding interview an awkward and flawed means of
|
||||||
|
assessing skill.
|
||||||
|
|
||||||
|
|
||||||
|
An HR leader I once worked with told my team and I to "find reasons to hire
|
||||||
|
[the candidate]" rather than finding reasons they weren't good enough. That
|
||||||
|
dramatically changed my approach to hiring. Coding interviews, like any "tests"
|
||||||
|
during the interview process are finding reasons to bounce the candidate from
|
||||||
|
the funnel. By taking a more personalized approach to each candidate, I believe
|
||||||
|
an organization can still make really strong hires with a more respectful and
|
||||||
|
collaborative interview process that results in better outcomes for everybody
|
||||||
|
involved.
|
|
@ -1,9 +1,10 @@
|
||||||
body {
|
body {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
|
font-size: 1.3rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
max-width: calc(800px);
|
max-width: calc(1024px);
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
|
|
98
index.html
98
index.html
|
@ -1,5 +1,101 @@
|
||||||
---
|
---
|
||||||
layout: home
|
layout: default
|
||||||
title: Home
|
title: Home
|
||||||
---
|
---
|
||||||
|
<div class="apache-nav">
|
||||||
|
<table style="width: 100%;">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img src="/images/icons/text.png"/>
|
||||||
|
<a href="/about">about.txt</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img src="/images/icons/folder.png"/>
|
||||||
|
blog/
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% if paginator.previous_page %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img src="/images/icons/blank.png"/>
|
||||||
|
<img src="/images/icons/continued.png"/>
|
||||||
|
<a class = "newer paginate-button" href="{{ paginator.previous_page_path | relative_url }}">Newer Posts</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endif %}
|
||||||
|
{% for post in paginator.posts %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img src="/images/icons/blank.png"/>
|
||||||
|
<img src="/images/icons/layout.png"/>
|
||||||
|
<a href="{{ post.url | relative_url }}">{{ post.title }}</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<span style="float:right;">
|
||||||
|
{{ post.date | date_to_string }}
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
{% if paginator.next_page %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img src="/images/icons/blank.png"/>
|
||||||
|
<img src="/images/icons/continued.png"/>
|
||||||
|
<a class = "older paginate-button" href="{{ paginator.next_page_path | relative_url }}">Older Posts</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endif %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img src="/images/icons/folder.png"/>
|
||||||
|
feeds/
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img src="/images/icons/blank.png"/>
|
||||||
|
<img src="/images/icons/xml.png"/>
|
||||||
|
<a href="/atom.xml">atom.xml</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img src="/images/icons/blank.png"/>
|
||||||
|
<img src="/images/icons/xml.png"/>
|
||||||
|
<a href="/microblog.xml">microblog.xml</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img src="/images/icons/blank.png"/>
|
||||||
|
<img src="/images/icons/xml.png"/>
|
||||||
|
<a href="/podcast-picks.xml">podcast-picks.xml</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img src="/images/icons/blank.png"/>
|
||||||
|
<img src="/images/icons/xml.png"/>
|
||||||
|
<a rel="me" href="https://hacky.town/@rtyler">Mastodon</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img src="/images/icons/comp.gray.png"/>
|
||||||
|
<a href="gopher://gopher.brokenco.de/">gopher site</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img src="/images/icons/folder.png"/>
|
||||||
|
<a href="/categories">tags/</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue