I would rather say it’s not a feature, it’s a bug.
In the case of the results leaking onto GitHub that at least requires a bit of effort and team work on the parts of a few people to cheat the system.
The current system is too much of a “Press X to Win” type scenario for my liking…
Hi everyone and thank you for your feedback about Solutions.
I would like to share with you the reason why we launched this feature.
Why we did that
In fact, this is not a bug, it’s intentional but we agree that there’s some problems dues to achievements and Coding Points.
Our main goal is to allow everyone to become a better programmer while having fun. By releasing Solutions, we were hoping that everyone could learn new languages in a new and a more fun way :
- Solve a puzzle in your favorite language (algorithm part)
- View solution in a language you want to learn to understand the syntax
- Try to use this language on a puzzle without looking at the solution. But if you feel stuck, refer to the solution
We believe that it is more fun than reading an entire academic book when you want to learn a new language and this is why we would like to keep the possibility to look at every language solution when you have solved a puzzle.
What we should change
However, we agree that this new feature leads to some cheating possibilities with regards to the achievements linked to languages.
We see 3 potential fixes :
- keep it as it (not the best, considering your feedback ;))
- remove coding points linked to language achievements
- modify language achievements : the language counter increases only if this is the first time you solve the puzzle and it can also increase when submitting Clash of Code puzzles at 100%.
(i.e. If you have solved Power of Thor in Java and then in Python, it will only increase the counter of the Java achievement. If you do 3 clashes in Python, it will increase by 3 the counter of Python achievement).
We would love to hear from you about these fixes.
About the share option, this is a very first step to have a lot of solutions really quickly. We will of course update it as soon as possible to choose more precisely what solution you want to share.
What do you think about all of this ?
The third looks good to me
I agree, the third option looks great! Would completely solve the problem while still allowing players to get points for using different languages for new problems.
Thank for your feedback and explaination.
About the language learning argument:
It is a personal opinion, but I do not think seing ready-to-use solutions in language A for a problem already solved in language B is the best way to learn and develop in language A. This for 2 reasons:
1- There is no guarantee that the solution I am currently seing enforce best programming practices.
2- Slutions are based on a particular “mindset” (I do not know if this term is correct), the one of the developer. As a beginner, seing an “expert coded” solution based on a different approach might not be all that helpful.
The “framework” you use for displaying those solutions already has good things in it that could help in the long run (upvote / downvote, comments) but they are really subjective (maybe I liked the dirty solution of .ash. because he is my friend and downvoted @nicolas_patrois because his avatar is a cacodemon and those bastards were my nightmare as a child. And what might happen even more realisticaly is that “dirty hacks” that use some language tricks get upvoted - and this is a good thing, as those are a + when you want to progress in a language you already know. But they are really bad when it comes to aquire best practices learning a language from the scratch)
What I consider being an excellent way to progress is getting feedback one one’s own code. This is targeted to one’s own mindset and more experienced coders might still be able to project in it and provide feedback and what is good practice, what is “dirty”, what is “rube-goldberg code” and where did one reinvent the wheel because the function is natively implemented in the language. This learning method also maps with the feedback some user provided about limiting the solutions viewed to the language you already 100%ed a puzzle.
About “what you should change”:
I do not have a strong opinion regarding your ideas. I agree that “do nothing” might not be the best one though . As mentioned couple lines above, I think limiting the displayed language to the ones you 100%ed a puzzle does not come in contradiction with your ultimate end of making learning new languages easier. If on top of that you also want to remove CP or the way the language achievements are counted, that would be fine with me - as long as I still have those shiny little pictures on my profile ^^.
Couple Ideas regarding the feature:
Let’s not be all about complain - especially that the feature itself has a huuuuuuuge potential of awesomeness. Here couple ideas
- As mentioned, only display solutions of languages already 100%ed.
- Let the user chose which solutions to publish (2 positive effects: I can filter the “best coded ones” and thus improve the quality of shared code while reducing that absolute ammount of code shared)
- Implement a way to request code reviews.
- Do nothing and provide a example solution well implemented and documented for each puzzle for each language so that new users of a language have a example guaranteeing easy understanding and best code practices for a give language (good luck with that )
This resume it all for me, especially the part that you don’t learn a new language by looking at the perfect answer, the best way to learn a new language is to practice, and once you’ve looked to another person answer, isn’t really hard to think by yourself about another way to do it. I won’t repeat (much) what @Naity just said but the two major points for me would be:
- Separate language solutions accessibility
- Choose which code to submit (I have some nasty code I don’t want to show ) or at least disable showing your code entirely is you wish so.
Moreover, to add a little more to it, on the ranking system of the solutions, that’s a great idea but it’s not visible enough (you have to click on a solution to see it) and it could be cool if we have different ranking system like “Best practices” or “Code golfing” or even “Funny answer” like this:
By the way this website separate solutions by language too, just saying
For the 3 potential fixes:
- See above text
- Why not? But it lose a little of its meaning and defeat the aim achievement=reward.
- It isn’t ok, because it will mean that the progress of all achievement combined can’t go above 64 (current puzzles number) and that those that already finished all puzzle won’t get to choose where to rank. That also means one cannot be “Language Addict” for more than 4 language, and that some achievements will remains unreachable forever (which is something every completionist fear)
Also, what will happen to those who have already got all language achievement? Will the achievements be removed? If so they’ll lose all the hard word they put into this.
I really ship the separate language part, and I hope you’ll consider it (refer to @Naity well detailed post for more information).
Hi everyone !
I agree with the arguments and solutions given by Naity.
I will not repeat them but I would like to add one more thing about that. I think that it is important to keep in mind that this website is also a platform for hiring people. With the possibility to see and copy codes in every language, how will you recognize someone who truly know the language? I am perfectly aware that you can already probably find most of the solutions in every language on the web, but having this option here is just an invitation to do so.
By the way, thank you for all the hard work you put on CodinGame !
Hey, my cacodemon is cute,
Agreed. While I have no intention of using this site, myself, to advertise my abilities at this time, I have frequently thought that CG could possibly over time grow into a location to verify claimed skills of potential hires. The balance between teacher and assessor is a difficult line to tread, but I have always considered CG to have potential for both roles.
I would prefer not to do this, though I would understand if you were to do so. Permit me a couple of short anecdotes to explain why…
I tried functional programming for the first time because of the Clojure achievement in the Roller Coaster puzzle. After spending a good amount of time trying to wrap my head around the concepts and techniques of FP, I decided to watch several training videos about using an FP approach in other languages. I also spent hours researching Haskell and other FP languages. I don’t professionally program in an FP-oriented language, but this learning experience has affected the way that I design and write all of my code. Thanks for giving me the nudge in this direction.
I have used Bash extensively for years, but when attempting to solve CG puzzles in Bash (motivated by the Bash Addict achievement badge) I realized that my Bash knowledge was lacking in the area of solving computational problems. I had just never had a need to use the language in this way before, and now my Bash knowledge is that much richer as a result. It will affect the way that I write Bash in the future.
Thanks for making me a better programmer.
I’m sorry to criticize this feature, because I know that someone took the time and effort to implement it with the intention of building something useful, however, as it stands, I don’t like it one bit.
Here are my considerations.
I think that seeing the solutions can be helpful to learn a new language only after attempting to solve the problems in that specific language. You can’t assume that if someone solved a puzzle in C, its solution can be easily translated in Bash or Clojure. Fighting with different paradigms and language idiosyncrasies is an important learning step.
Moreover it can be discouraging for honest users having to fight more to reach the same rank as copy-pasters, unless they become copy-pasters themselves. We don’t want to teach that looking at someone else’s code and saying “I would have done the same” it’s equal to actually doing it, do we? Somehow I think that it becomes harder to achieve higher position just by copy-pasting, so it’s more a new user problem.
As stated by others, the language specific achievements incourage people to learn new things. They got me and other players, like @player_one, to learn Clojure and new Bash magic.
For these reasons my suggestions are:
- show the solutions only to people who achieved 100% with that language;
/* I don’t know how it currently works with extra achievements, I guess they should be taken into account too */
- keep the achievements as they are (and maybe add some for the highest voted solutions?);
- give me 1 million dollars in small bills and an helicopter with enough fuel to reach Mexico;
- allow people to choose for which puzzles share their code (to avoid leaking optimization solutions).
As a further cosideration, I think that the issue originates from the will to offer a challenging place to prove one’s skill and to teach coding. Nothing wrong with it, I like the idea, as long as one purpose doesn’t impede the other. Trying to add a didactic factor to the puzzles is taking away some of the challenging one and this is why people don’t like the change. I think you can find a balance this time, but maybe it would be better for the future to keep different purpose stuff in different sections (I saw a couple of “teaching puzzles” on the forum and I think they deserve a section on their own).
Well, I hate clashes (and loathe code golf, hence not liking clashes) so I wouldn’t like the third option.
Third option is a little contradictory.
We’re talking about fairness on coding points attribution, ranking and everything, but if you already solved most problems in a language and you still want languages achievements, you’ll have to compete against others in clash code against with a language that you don’t master, and who can be inapropriated for clash of codes…
I agree with this. Languages achievements push us to discover new languages.
If you master, say, Java, you already have solved the easy puzzles, and medium ones. Now if you want any achievement for, say, Python, you will have to solve difficult puzzles in Python. But you are a beginner, so you won’t.
I personnally really enjoy trying out new languages in order to get achievements. The Thor puzzle for instance, being really just about IF/ELSE and Increment/Decrement, I enjoy porting my solution to different languages and learning that “omg scala doesn’t support ++ notation” or stuff like that.
Also it has been said, but I guess sharing only portions of code would be nice. Like, “I want to show you that neat data structure I came up with to store the inputs of the puzzle” or “That exact pathfinding algorithm”, without the rest of the code that is either not interesting, or we don’t want to share because it’s a special asset we use in AI / Optimization battles
No it is not . I got the Shareware of Doom between my hands when I was 6-7 and those were baaaad.
There is one of the point I suggested which has not be mentioned in other threads. Is it because you disagree or you overseen it? I refer to the “code review request” as a way to progress. My opinion was (and still is) that the easiest way to progress is to have other more routined CiGamers throw a look at he code and provide feedback. It however requires a way to request his for one’s code (forum thread, button embedded in the code sharing section or other). Any comment on that?
The cyberdemon is worst.
I agree with code review but it might be a lot of work for CG.
The cyberdemon wasn’t in the shareware version so far I remember, only in the full game
Regarding Code Reviews, one idea which is “easy” to implement from the website side abut somewhat hard to maintain is to get a thread dedicated to code reviews request.
Every solution has an address. For example: https://www.codingame.com/solutions/43/1289403
The discussion can be done in the comment section of the code. The whole structure is here theoriticaly. The only worry I have with this is that, depending of he ammount of request, the forum thread can end up being a mess.
In the other hand, having a request thread per language will create another kind of mess. The ideal state would be to have it integrated in the solution sharing plugin. One could flag his solution as “asking for review” and “review completed” and every user could see the current active review requests for the puzzles and languages he is granted access. But this requires much more work from the side of CiG.
The cacodemon isn’t in the shareware too.
We have finally limited the solutions to languages you have used.
We are now working on the possibility to specify the solution you want to share.