Exclude a custom category from a list

I am puzzled at how that could possibly work, even a little. You are setting your $terms variable after you start to try to loop over it. That makes no sense. A quick rewrite would make this a little better:

$html="";
$html .=    '<ul class="item-direct-filters"><li class="first"><strong>view more:</strong></li>';
$taxonomy = 'category';
$k = 0;
$terms = get_the_terms( $post->ID, $taxonomy );
foreach ( $terms as $term )
{
    $k++;
    if ($term->name != "") $html .= '<li><a href="https://wordpress.stackexchange.com/work/" . $term->slug . '" class="' . $term->slug . '">' . $term->name . '</a></li>';
}

$html .= '</ul>';

echo $html;

But that won’t let you exclude a category. get_the_terms() is not natively capable of that, and you probably don’t need to worry about a specialized query. The results should be cached relatively well. Just exclude your term on the fly:

foreach ( $terms as $term )
{
    $k++;
    if ($term->name != "" && 1 !== $term->term_id) {
      $html .= '<li><a href="https://wordpress.stackexchange.com/work/" . $term->slug . '" class="' . $term->slug . '">' . $term->name . '</a></li>';
    }
}

Notice the extra condition in the if statement.