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
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
addressable (2.8.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
addressable (2.8.1)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
colorator (1.1.0)
|
||||
concurrent-ruby (1.1.10)
|
||||
concurrent-ruby (1.2.0)
|
||||
em-websocket (0.5.3)
|
||||
eventmachine (>= 0.12.9)
|
||||
http_parser.rb (~> 0)
|
||||
eventmachine (1.2.7)
|
||||
ffi (1.15.5)
|
||||
forwardable-extended (2.6.0)
|
||||
google-protobuf (3.21.12-x86_64-linux)
|
||||
http_parser.rb (0.8.0)
|
||||
i18n (1.10.0)
|
||||
i18n (1.12.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
jekyll (4.2.2)
|
||||
jekyll (4.3.2)
|
||||
addressable (~> 2.4)
|
||||
colorator (~> 1.0)
|
||||
em-websocket (~> 0.5)
|
||||
i18n (~> 1.0)
|
||||
jekyll-sass-converter (~> 2.0)
|
||||
jekyll-sass-converter (>= 2.0, < 4.0)
|
||||
jekyll-watch (~> 2.0)
|
||||
kramdown (~> 2.3)
|
||||
kramdown (~> 2.3, >= 2.3.1)
|
||||
kramdown-parser-gfm (~> 1.0)
|
||||
liquid (~> 4.0)
|
||||
mercenary (~> 0.4.0)
|
||||
mercenary (>= 0.3.6, < 0.5)
|
||||
pathutil (~> 0.9)
|
||||
rouge (~> 3.0)
|
||||
rouge (>= 3.0, < 5.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 (>= 3.7, < 5.0)
|
||||
jekyll-paginate (1.1.0)
|
||||
jekyll-sass-converter (2.2.0)
|
||||
sassc (> 2.0.1, < 3.0)
|
||||
jekyll-sass-converter (3.0.0)
|
||||
sass-embedded (~> 1.54)
|
||||
jekyll-seo-tag (2.8.0)
|
||||
jekyll (>= 3.8, < 5.0)
|
||||
jekyll-tagging (1.1.0)
|
||||
|
@ -44,30 +46,31 @@ GEM
|
|||
rexml
|
||||
kramdown-parser-gfm (1.1.0)
|
||||
kramdown (~> 2.0)
|
||||
liquid (4.0.3)
|
||||
listen (3.7.1)
|
||||
liquid (4.0.4)
|
||||
listen (3.8.0)
|
||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||
rb-inotify (~> 0.9, >= 0.9.10)
|
||||
mercenary (0.4.0)
|
||||
nuggets (1.6.1)
|
||||
pathutil (0.16.2)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (4.0.7)
|
||||
pygments.rb (2.3.0)
|
||||
public_suffix (5.0.1)
|
||||
pygments.rb (2.3.1)
|
||||
rake (13.0.6)
|
||||
rb-fsevent (0.11.1)
|
||||
rb-fsevent (0.11.2)
|
||||
rb-inotify (0.10.1)
|
||||
ffi (~> 1.0)
|
||||
rdiscount (2.2.0.2)
|
||||
rdiscount (2.2.7)
|
||||
rexml (3.2.5)
|
||||
rouge (3.29.0)
|
||||
rouge (4.0.1)
|
||||
safe_yaml (1.0.5)
|
||||
sassc (2.4.0)
|
||||
ffi (~> 1.9)
|
||||
terminal-table (2.0.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
unicode-display_width (1.8.0)
|
||||
webrick (1.7.0)
|
||||
sass-embedded (1.57.1)
|
||||
google-protobuf (~> 3.21)
|
||||
rake (>= 10.0.0)
|
||||
terminal-table (3.0.2)
|
||||
unicode-display_width (>= 1.1.1, < 3)
|
||||
unicode-display_width (2.4.2)
|
||||
webrick (1.8.1)
|
||||
|
||||
PLATFORMS
|
||||
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
|
||||
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,
|
||||
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
|
||||
|
|
|
@ -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 {
|
||||
background-color: #fff;
|
||||
font-size: 1.3rem;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: calc(800px);
|
||||
max-width: calc(1024px);
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
|
98
index.html
98
index.html
|
@ -1,5 +1,101 @@
|
|||
---
|
||||
layout: home
|
||||
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>
|
||||
|
||||
|
|
Loading…
Reference in New Issue