我们应该聘请谁在Perl写C的人吗?

前端之家收集整理的这篇文章主要介绍了我们应该聘请谁在Perl写C的人吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的一个同事最近采访了一些工作的候选人,一个说他们有非常好的Perl经验。

由于我的同事不知道Perl,他要求我对这个潜在的雇员写的一些代码(非现场)的批评,所以我看了一下,告诉他我的问题(主要的是它最初没有评论它不像我们给他们足够的时间)。

然而,代码工作,所以我不喜欢说没有没有一些更多的输入。另一个问题是,这个代码基本上看起来我是如何在C中编码它。已经有一段时间,因为我做了Perl(我没有做很多,我更多的是一个Python bod的快速脚本),但我似乎回忆起这是一个比这家伙使用的更具表达力的语言。

我正在寻找来自真正的Perl编码器的输入,以及如何改进的建议(以及为什么Perl编码器应该知道改进的方法)。

你也可以嘲笑是否用完全不同的语言写一种语言的人应该(或不应该雇用)。我对你的论点感兴趣,但这个问题主要是对代码的批判。

规格是成功处理CSV文件,如下所示,并输出单个字段:

User ID,Name,Level,Numeric ID
pax,Pax Morgan,admin,0
gt,"  Turner,George" rubbish,user,1
ms,"Mark \"X-Men\" Spencer","guest user",2
ab,"user","3"

输出是这样的东西(潜在的雇员的代码实际输出这个):

User ID,Numeric ID:
   [User ID]
   [Name]
   [Level]
   [Numeric ID]
pax,0:
   [pax]
   [Pax Morgan]
   [admin]
   [0]
gt,George  " rubbish,1:
   [gt]
   [  Turner,George  ]
   [user]
   [1]
ms,2:
   [ms]
   [Mark "X-Men" Spencer]
   [guest user]
   [2]
ab,"3":
   [ab]
   []
   [user]
   [3]

这里是他们提交的代码

#!/usr/bin/perl

# Open file.

open (IN,"qq.in") || die "Cannot open qq.in";

# Process every line.

while (<IN>) {
    chomp;
    $line = $_;
    print "$line:\n";

    # Process every field in line.

    while ($line ne "") {
        # Skip spaces and start with empty field.

        if (substr ($line,1) eq " ") {
            $line = substr ($line,1);
            next;
        }

        $field = "";
        $minlen = 0;

        # Detect quoted field or otherwise.

        if (substr ($line,1) eq "\"") {
            $line = substr ($line,1);
            $pastquote = 0;
            while ($line ne "") {
                # Special handling for quotes (\\ and \").

                if (length ($line) >= 2) {
                    if (substr ($line,2) eq "\\\"") {
                        $field = $field . "\"";
                        $line = substr ($line,2);
                        next;
                    }
                    if (substr ($line,2) eq "\\\\") {
                        $field = $field . "\\";
                        $line = substr ($line,2);
                        next;
                    }
                }

                # Detect closing quote.

                if (($pastquote == 0) && (substr ($line,1) eq "\"")) {
                    $pastquote = 1;
                    $line = substr ($line,1);
                    $minlen = length ($field);
                    next;
                }

                # Only worry about comma if past closing quote.

                if (($pastquote == 1) && (substr ($line,1) eq ",")) {
                    $line = substr ($line,1);
                    last;
                }
                $field = $field . substr ($line,1);
                $line = substr ($line,1);
            }
        } else {
            while ($line ne "") {
                if (substr ($line,") {
                    $line = substr ($line,1);
                    last;
                }
                if ($pastquote == 0) {
                    $field = $field . substr ($line,1);
                }
                $line = substr ($line,1);
            }
        }

        # Strip trailing space.

        while ($field ne "") {
            if (length ($field) == $minlen) {
                last;
            }
            if (substr ($field,length ($field)-1,1) eq " ") {
                $field = substr ($field,length ($field)-1);
                next;
            }
            last;
        }

        print "   [$field]\n";
    }
}
close (IN);

解决方法

我建议人们不要雇用Perl程序员,C程序员或Java程序员等等。只是雇用好人。我聘请写Perl的程序员也熟练使用各种其他语言。我聘请他们,因为他们是好的程序员,好的程序员可以处理多种语言。

现在,该代码看起来很像C,但我认为它也很好Perl太。如果你雇用一个好的程序员,在他的皮带下一点Perl练习,他会赶上好。人们抱怨缺乏正则表达式,这将使事情在辅助区域更简单,但我不希望任何人解析该脏数据的正则表达式解决方案。我不想读它或维护它。

我经常发现反向问题更麻烦:聘请一个好的程序员谁编写良好的Perl代码,但团队的其余部分只知道Perl的基础,不能跟上。这与格式不良或结构不良无关,只是一个高级主题(例如关闭)的技能水平。

事情在这场辩论中变得有点热,所以我想我应该更多地解释一下我如何处理这种事情。我不认为这是一个regex /无正则表达式的问题。我不会按照候选人的方式编写代码,但这并不重要。

我写了相当多的肮脏的代码太。在第一遍,我通常更多地考虑结构和过程而不是语法。我后来回来收紧。这并不意味着候选人的代码是任何好处,但对于在面试中做的第一次通过,我不会太苛刻地判断。我不知道他写了多少时间等等,所以我不根据我会有很长时间工作的东西来判断。面试问题总是奇怪的,因为你不能做真正的工作真正的工作。我可能会失败一个关于写一个CSV解析器的问题,如果我不得不从头开始,并在15分钟内完成。事实上,我浪费了比今天是一个总的头部与一些代码

我去看看代码Text::CSV_PP,Pure Perl表哥Text::CSV_XS.它使用正则表达式,但是很多正则表达式处理特殊情况,在结构中与这里提供的代码没有什么不同。它是很多代码,它是复杂的代码,我希望我从来没有再看。

我倾向于不喜欢的是面试答案,只处理给定的输入。这在现实世界中几乎总是错误的事情,你必须处理你可能还没有发现的情况,你需要灵活性来处理未来的问题。我发现,从Stackoverflow的很多答案也缺失了。解决方案的思维过程更能告诉我。人们比他们改变他们对事物的想法更容易掌握语言。我可以教人们如何写更好的Perl,但我不能改变他们的wetware大部分。这来自疤痕和经验。

由于我不是在那里看候选人的代码解决方案或问他跟进问题,我不会推测为什么他写的方式,他做了。对于我在这里看到的一些其他解决方案,我可以在面试中同样苛刻。

事业是一个旅程。我不期望每个人都是一个上师或有相同的经验。如果我注销人,因为他们不知道一些伎俩或成语,我不给他们继续他们的旅程的机会。候选人的代码将不会赢得任何奖品,但显然足以让他进入最后三个考虑提议。那个家伙在那里上了楼,试过,比我在生活中看到的许多代码好多了,这对我来说足够好了。

原文链接:https://www.f2er.com/Perl/173523.html

猜你在找的Perl相关文章