I feel the need to speak about this here due to a multitude of prior events. Individuals are not mentioned in this post, it is intended to be as generic as possible while still addressing the issue.
Fairly often I go through moods of hopelessness and depression. Much of the fuel to this is about my perception of my projects being useless, worthless, pointless, or that nobody's ever gonna use. I know in my head that they are worthwhile but not always in my heart.
It doesn't help doubting whether I should even bother to post when it's just gonna get shit on.
It's really disconcerting when some will bite your head off for writing code wrong as if it's your fault for not knowing how to write good code, or even better to tell people their projects are pointless and stupid.
It's not only frustrating but depressing that people feel they have to question whether it's even worthwhile to upload a game, or post progress updates. Chastising people for writing "bad code" isn't gonna help them write better code. It just makes them less likely to continue their passion that brought them here.
It feels very attacking when people you look up to condemn your project(s), intentionally or not.
If this community is to grow and foster a more constructive atmosphere, we need to stop making people feel bad for their ideas. However dumb they may appear in your eyes they mean the world to the beholder. Trashing it would serve nothing more than a bully at recess.
I'll sound off on a few parts of this matter, and perhaps with a sword that has an edge pointing in each direction.
No project a person starts is truly pointless. Even if it has no practical purpose, it can teach you a lesson from something as mundane as how to use a For loop properly to something as complex as how to write an efficient algorithm. Take HASHLIB for instance. It is more or less useless as a calculator tool. If you're trying to do things that require true "security" on a calculator, we need to have a whole other discussion. But as a learning tool it is useful--it is teaching me about various algorithms.
While I feel that for the most part people here are generally supportive and want us to spend our time on projects that have more of a practical use (given that projects that are more concept than practical get one-and-done type of usage), there are times where that constructive criticism could be phrased a bit better.
2) Quality of Code.
Noone codes in exactly the same manner. And that's fine. Further, some people are a bit more advanced in programming than others. A more advanced programmer can do in 2 lines what might take a less experienced one 5. SHOW that person how and why a different way is better. Sometimes it may be easy to look at a bit of code and think "omg how dumb is this guy". Sometimes, people do dumb things and need a bit of a kick in the rear for it. That being said, some people on this forum seem to be in a competition with Gordon Ramsay for who can be the most pain-in-the-backside mentor. I'm sure these people mean well, just as Ramsay does. But not everyone responds well to that kind of mentorship. And the better question is, do you truly want to be a mentor to people with less experience than you? Or do you just want to develop for experts who think and code exactly like you and be left alone by everyone else? Because sometimes, I'm not quite clear.
At the same time, to those who are learning, I can sometimes see questions and statements that may irritate someone who feels they keep having to answer the same questions over and over again, especially having asked them myself, and from time to time still do. I suppose a lesson to myself and others trying to learn is... actually learn. Don't keep making the same mistakes. And read the dang documentation. But to the flip side.... if you're going to tell someone to do that...make sure the answer is actually there.
3) General statements.
We are all human here. Some of us need to jump less readily to questions, some of us, less readily to conclusions. At the end of the day I've got no problem being yelled at if I'm genuinely being dumb and I'll take it. However, if you're being a nub, or not listening to me or understanding me, I've got no problem telling someone to cool their jets and listen more carefully.
I would venture the guess even that from time to time, the tough criticism is even levied because the person levying it wants us to stick up for ourselves. Even if this isn't the case, sticking up for yourself and defending your own worth (or the worth of your projects) is more important than having someone else praise it for you, as awesome as praise can be. After all, at the end of the day, everyone else's opinions are just opinions.
To be completely honest, the finished product of basically any calculator-related project is entirely useless. Any math program is going to be outclassed by Wolfram Alpha, and most calc games have a smartphone equivalent. However, that's not to say that calculator projects are worthless. Like Cags mentioned, it's not the finished product but the development process that gives calculator projects their value - I've learned a ton about computers during the four years I've been working on calculator projects, and I find the process of developing for calculators enjoyable in and of itself.
I feel like it's not particularly healthy to view the "success" of your programs based on how many people download and use them. Instead, I feel that you should make your programs for yourself first and other people next. I've definitely fallen victim to this a few times - I'm kinda disappointed that nobody's used cap'nhook yet, and it also hurts a bit when nobody comments on my progress updates.
With that being said, I imagine that people value your projects more than you realize. There have been lots of times when someone has posted something really neat, but I didn't respond because I didn't know what else to say besides "oh, that's really neat!", which wouldn't really live up to the Cemetech post quality standards. I don't think anyone here wants you to give up on your projects, and that even those people criticizing your code are doing it because they want to help you become a better programmer.
I have noticed a few times that people have commented about certain projects being "useless." However, since no finished product of a calculator project is really that useful, I don't think they're really criticizing the project itself, but more the reason for creating it. They're saying that, if you're just working on this project to please other people, you should work on a different project that you would personally enjoy more instead.
Regarding "bad code:"
Constructive criticism is both hard and time consuming. It's really easy to say that a piece of code is bad, harder to say how to improve it, and even harder to explain why making those changes would be an improvement. I feel like a lot of the frustration here is the result of people who mean well stopping at that second stage, where, without the context of why it's important, it seems like they're getting upset over extremely minor nitpicks with your code. It also really doesn't help that this criticism is often phrased negatively rather than positively (e.g. "globals are bad" vs "using local variables instead of global ones helps make your code easier to read"). We're all volunteers, so we shouldn't expect anyone to be obligated to give a full explanation of why writing code one way is beneficial over another. But at the same time I feel that people who aren't willing to help people understand why they way they're writing code is bad shouldn't complain about that code in the first place.
That being said, it's best to correct bad practices early, as people might interpret a part of their code not being commented on as an endorsement of that piece of code, and write more like it in the future. So, I feel the best option would be to compile a list of resources that help explain why writing code certain ways leads to better code, and then non-judgmentally direct people to the link for whichever issue they have in their code.
(e.g. "globals are bad" vs "using local variables instead of global ones helps make your code easier to read")
I use way too many globals in my projects lol.
Usually though it's because I expect to have to use them in multiple files, and then when I don't, I forget to change their scope. Oops :p