←back to thread

427 points JumpCrisscross | 5 comments | | HN request time: 0.199s | source
Show context
skhunted ◴[] No.41904004[source]
I’ve been teaching in higher education for 30 years and am soon retiring. I teach math. In every math course there is massive amounts of cheating on everything that is graded that is not proctored in a classroom setting. Locking down browsers and whatnot does not prevent cheating.

The only solution is to require face-to-face proctored exams and not allow students to use technology of any kind while taking the test. But any teacher doing this will end up with no students signing up for their class. The only solution I see is the Higher Learning Commission mandating this for all classes.

But even requiring in person proctored exams is not the full solution. Students are not used to doing the necessary work to learn. They are used to doing the necessary work to pass. And that work is increasingly cheating. It’s a clusterfuck. I have calculus students who don’t know how to work with fractions. If we did truly devise a system that prevents cheating we’ll see that a very high percentage of current college students are not ready to be truly college educated.

K-12 needs to be changed as well.

replies(30): >>41904090 #>>41904152 #>>41904186 #>>41904319 #>>41904511 #>>41904722 #>>41904882 #>>41904929 #>>41904934 #>>41904943 #>>41905073 #>>41905157 #>>41905596 #>>41905932 #>>41906086 #>>41906130 #>>41906190 #>>41906347 #>>41906523 #>>41906538 #>>41907338 #>>41907713 #>>41907755 #>>41907916 #>>41908035 #>>41908705 #>>41908832 #>>41908901 #>>41909789 #>>41910517 #
lumost ◴[] No.41905157[source]
My personal take, we’ve made the cost of failure to high and cheating too easy.

As a student, the only thing the next institution will see is GPA, school, major. Roughly in that order. If the cost of not getting an A is exclusion from future opportunities- then students will reject exclusion by taking easier classes or cheating.

As someone who studied physics and came out with a 2.7 GPA due to studying what I wanted (the hard classes) and not cheating (as I did what I wanted) - I can say that there are consequences to this approach.

In my opinion, the solution is to reduce the reliance on assessments which are prone to cheating or which in the real world would be done by computer.

replies(17): >>41905181 #>>41905237 #>>41905294 #>>41905316 #>>41905725 #>>41905726 #>>41905940 #>>41906139 #>>41906569 #>>41906787 #>>41906869 #>>41907018 #>>41907041 #>>41907532 #>>41907650 #>>41908740 #>>41909188 #
pj_mukh ◴[] No.41905726[source]
Serious question from someone who is regularly tasked with hiring Juniors. What IS a good assessment for entry-level/right out of college positions?

-> GPA can be gamed, as laid out.

-> Take Home assessments can mostly be gamed, I want to assess how you think, now which tools you use.

-> Personality tests favor the outgoing/extroverts

-> On-location tests/leet code are a crapshoot.

What should be best practice here? Ideally something that controls for first-time interviewer jitters.

replies(15): >>41905746 #>>41905920 #>>41906068 #>>41906227 #>>41906275 #>>41906546 #>>41906692 #>>41906696 #>>41906735 #>>41906854 #>>41907285 #>>41909279 #>>41909462 #>>41909611 #>>41909757 #
Syonyk ◴[] No.41906068[source]
It's hard, and interviewing is better suited to answering "nope, not you!" questions than "yes, you'll be a good fit."

Onsite interviews with a range of approaches seem to be the best I've found over the years. As much as it pains me, things like fizzbuzz are still useful, because people still lie about their ability to program in languages. If you claim to know C very well and can't knock that out in 5 minutes, and it takes you 45 minutes of prompting, well, you don't know C usefully.

I've seen good results with having a pre-done sort of template program that's missing functionality, and the person completes it out based on comments (for remote interviews), and you can generally tell by watching them type how familiar with the space they are. Again, perfection isn't the goal, but if someone claims to know C very well and is trying to make Javascript syntax work, well, they're full of crap about knowing C.

That said, probably the best approach I've seen for hiring junior dev sorts is a formal summer internship program - and some places have a pretty solid system for doing this, with 20-30 people coming in every summer for a few months. That's a far better way to get to know someone's actual technical skills. In the programs I interacted with, it's safe to assume that if you have 30 people, you'll have about 15 that are "Thank you for your time, good luck..." sorts, maybe 5 or 8 that are "Yeah, you'd probably be a good fit here, and can be trained up in what we need, you'd be welcome back next summer!" and if you're lucky, one or two "HIRE NOW!" sorts that leave the summer program with a job offer.

It's obviously a lot higher effort than interviewing, but the "Throw things at people for three months and see what they do, with a defined end of the program" process seems to be a really good filter for finding quality people.

replies(2): >>41906598 #>>41906781 #
withinboredom ◴[] No.41906598[source]
> If you claim to know C very well and can't knock that out in 5 minutes, and it takes you 45 minutes of prompting, well, you don't know C usefully.

I recently had an interview and a "skill test" in C. It was proctored by the interviewer in-person. I had so many questions about the questions. It was like, what is the output of "some code" and while obvious, there were some questions where specific CPU architecture mattered:

    #include <stdio.h>

    int main() {
        unsigned int x = 0x01020304;
        unsigned char *c = (unsigned char*)&x;

        printf("First byte of x: 0x%02x\n", *c);
        return 0;
    }
I was like, what architecture are we running on here? So, I answered that "it depends" and explained how it would depend on the architecture. They came back and said that I didn't know C.

Sure, whatever. Probably dodged a bullet.

replies(2): >>41906732 #>>41908809 #
clarebear123 ◴[] No.41906732[source]
What architectures would it not be 04 on?
replies(2): >>41906838 #>>41906900 #
Syonyk ◴[] No.41906900[source]
Anything big endian.

  unsigned int x = 0x01020304;
  unsigned char *c = (unsigned char*)&x;
Assume x is stored at 0x100. On a little endian architecture (x86, most modern ARM systems, etc), it will be stored in memory as [04][03][02][01], from bytes 0x100 to 0x103. If you assign char c to the address of x (0x100), it will read one byte, which is 0x4.

However, on a big endian system, that same value would be stored in memory as [01][02][03][04] - so, reading a byte at 0x100 would return 0x1.

Older ARM systems were big endian, and there are others that run that way, though it's rarer than it used to be. One of the perks of little endian is that if you want to read a smaller version of a value, you can read from the same address. To read that value as an 8, 16, or 32 bit value, I read at the same address. On a big endian system, I'd have to do more address math to do the same thing. It mostly doesn't matter, but it is nice to be able to have a "read of 8 bits at the address of the variable" do the sane thing and return the low order 8 bits, not the high order bits.

replies(1): >>41906963 #
1. clarebear123 ◴[] No.41906963[source]
Do you know if compilers are smart enough to return 04 even on big-endian architectures nowadays? For some reason I'm under the impression that (at least clang and gcc) are able to change this from "first byte in x" to "least significant byte in x" but don't actually know why I think that. Maybe embedded compilers typically don't?
replies(4): >>41907043 #>>41907047 #>>41907251 #>>41909157 #
2. Syonyk ◴[] No.41907043[source]
No, and it would be wrong for it to do so, because you've given it a very explicit set of instructions about what to do: "Give me the value of the byte of memory at the start of x."

To do what you're asking, you'd do something like this:

  unsigned char c = (unsigned char)x;
That will give you the low order byte of x. But to do that, on a big endian system, when you've told it to get you the byte at the base address of x, is simply wrong behavior. At least in C. I can't speak to higher level languages since I don't work in them.
3. ◴[] No.41907047[source]
4. _flux ◴[] No.41907251[source]
To expand slightly on Syonyk said: the compiler cannot do it, because the object is stored between addresses c and c + sizeof(unsigned int). You can use this information to, for example, copy the object to another place with memcpy, and that of course wouldn't work if c wasn't pointing to the "leftmost" byte in the memory.

Unless, I suppose, sizeof was negative :).

5. odo1242 ◴[] No.41909157[source]
If you wanted to return 04 on big-endian architectures, you can use a binary mask - (int &0xFF).

Since this compiles to FF 00 00 00 in big-endian and 00 00 00 FF in little-endian, it would work on both platforms.

If you’re reading a file in binary format from disk, though, you always have to know whether the byte you are reading is little-endian or big-endian on disk.