Why are Algorithm Scripting problems so poorly explained?

Is there a reason that the explanation of the problems are so sparse and the “get a hint” section so robust? Often the original description is only a few sentences and I find it a little confusing on what is being asked. I used the read-search-ask method, in my mind that means breaking the problem into small parts and searching the internet to learn the things I don’t know how to do. After spending time on this and getting frustrated, I give in and think “maybe I just need a little hint” so I click the hint link, already feeling like I’m cheating for even considering it.

This opens up and entire paragraphs on the problem clearly explaining what needs to be done, along with bullet points and links. Keep in mind this description does not tell you what steps you have to do to solve the problem(it’s above the hints), it only gives a complete explanation of what needs to be done. After reading the complete explanation I can usually complete the problems in 20-40 min.

Why doesn’t FCC move the complete description to the main page instead of hiding it on the hints page?

This can be frustrating, but it does teach a really valuable skill…dealing with ambiguity.

Like you noticed…the additional information is there if you need it, but its not handed to you with every question. That gives you the opportunity to look at the challenge and start forming your own ideas and coming up with your own solutions without being influenced by all the details.

2 Likes

I totally agree with this.

I would also add that that is often how the “real” world works. I regularly get problems at work that aren’t as clearly explained as I’d like. And even if the problem is clearly defined, the how is left up to me to decide. I’ve got to think about it and figure out a the plan of attack. I may not even know if certain steps are possible, but I’ve got to trust some well honed instincts and my researching skills. Often I have to come up with a few different plans of attack and use my “spidey-sense” to know which is best.

I’d also say that often on tests when you’re applying for a job this is often the case too. Sometimes what they want is even left a little vague just to see if you will ask questions or will just make assumptions. Or if you have to make assumptions, do you know that they are assumptions.

But, yes, it is very frustrating. Just keep struggling and you will get better at it. Stuggle. Then if you need to, look for a hint. If you’ve tried and then need a hint, I don’t think it’s the end of the world - if you understand why and how it is working, you are still learning. And then even better, after you’ve solved it, is to scour the web to find different ways that others have solved it and understand those solutions. There is no magic pill that makes you good at this, just a lot of struggling. Realize that the struggling is learning. Even if you made a mistake and have to start over, you still learned something. Don’t be so hard on yourself - everyone struggles with algorithms. Eventually the easy ones will be easy, but there will always be something that challenges you. Just keep getting better.

1 Like

I see the points you both made about being able to infer what the problem is with the ambiguity. I think the problem is the company I work for and you look at the problem from two different ways. Where I work if a ticket / bug is ambiguous the devs are told to not work on it until there is a clear explanation of exactly what the product owner wants. We used to work where we would have to try and figure out what product owners wanted until the CTO droped the hammer one day. The CTO decided that nobody would work on anything if there were any questions about it, all questions got resolved before any dev work was done, with devs and product owners signing off on the final ticket. It was a little rocky at first but, this actually resulted in tickets and business requirements being very well written. But thanks for the responses, I will take all your advice to heart and keep on keepin’ on here though.

1 Like

I agree that the FCC problems are not perfect. And I agree that as academic problems, at least what they want should be clear, if not how to do it.

FCC is a non-profit fueled by volunteers. If there is something you think needs to be changed, you are welcome to go to the repo, create an issue, have a discussion, make some changes, and make a PR. There certainly challenges that have been improved that way.

Pehaps this is hard to discuss without context. Was there a specific challenge you think is problematic?

Here’s an example Arguments Optional, look at the explanation, then click get a hint, you’ll see what Im talking about. I don’t know any others off the top of my head, but I have seen the same thing other places on the site.

OK, so when talking about the explanation being “sparse”, you can be talking about two things:

  1. What is expected is not adequately explained.
  2. How to do it is not adequately explained.

I think that the explanation adequately explains what to do. It starts with:

Create a function that sums two arguments together. If only one argument is provided, then return a function that expects one argument and returns the sum.

That is abundantly clear to me exactly what is required. Then it additionally provides two examples of what is expected for both possibilities. Reading the test cases will further clarify what to do in cases of bad data. (If I had a criticism of the problem statement, it is that it should explicitly state how to handle other data types rather than have you figure it out by looking at the test cases.)

I don’t see how what is required could be any clearer. You state, “Where I work if a ticket / bug is ambiguous the devs are told to not work on it until there is a clear explanation of exactly what the product owner wants. [emphasis added]” Yes, again, “what is required/wanted”. I would agree for the most of the part that that should always be there. Of course, at my work, I’m often working on new features that aren’t as fleshed out as I’d like, and we’re and Agile environment so we often go with it until we can clarify with the UI/UX team, but I agree that the ideal is that what is clearly stated, and especially in a learning environment. But it is clearly stated in this challenge. Is there another interpretation of those instructions?

So that leaves us with how. When you get a ticket, does it tell you how to do it? Do they tell you which libraries to use and which algorithm? Your work place must be very different than mine. First of all, we all pretty much know how to do it, and if we don’t we grab another dev and whiteboard it out. I can’t remember a ticket ever telling me how to do these things. In fact they’re usually written by non-coders so they wouldn’t even know how to do that. Yes, our team would eagerly refuse to work on something if we didn’t know what was required - we’ve certainly kicked things back to UI/UX before, but if I refused to do something because I didn’t know how, I wouldn’t last long.

A learner at this point should have learned everything to complete this challenge. Now, FCC does move rather quickly and (I presume in the interest of not boring people) does go over things over and over so it is easy for people to not remember every little thing. But again, I think that is a good thing. On a good day I only google or check the docs on something a few times an hour. This is a fundamental skill of dev work. I might even argue it is one of the most important. I think this is a good way to teach this skill. I think we would be doing a disservice to the learner by spoon feeding the learner every little thing about how to solve the problem.

But that information is a click away with the “Get a hint” button. Many learners may specifically not want the hints on the main page. I for one generally like to try to find an answer on my own before getting hints. I expressly don’t want to see the hints. I learn more when I figure it out, or even fail for a while before looking at a hint.

Now, I will be the first to admit that FCC is not perfect. It is an open-source, non-profit site. There are a lot of mistakes. There are a lot of things that can be improved. I’ve made some PRs myself. You are welcome to do the same. But reading over this example that you provided, I don’t agree with the criticism. I don’t think the hints should be on the same page as the problem statement. I’m sure there are some problems where what is expected is not adequately or correctly explained. I’ve found a few myself. If you find some, please make an issue on the repo. But if your issue is that the problem statement doesn’t tell you how to do it, I think you’re going to get a lot of people disagreeing with you.

1 Like