There's a category of questions on Stack Overflow like,
> How do I do (complicated task X) without using (class of solutions Y)?
It's like madlibs. I'll fill in the blanks for you:
> How do I write a portable function for searching the filesystem in pure C++?
Here, X is "search the filesystem portably" and Y is "just use Boost, dummy".
> How do I create an iOS application without using Xcode?
> How do I do AES encryption in my network code? (instead of just using a library to handle TLS)
Programmers develop highly specialized taste as they mature, with preferences like "C is good, Java is bad" or "everything should be done with the command line" or "I never want to leave Visual Studio again". I'm amazed by how many people say, for example, that they absolutely can't use Boost but when pressed, they can't give a good reason why. That's because Boost offends their subjective sensibilities for some ill-understood reason, not because Boost is flawed in any particular way (although Boost certainly has its flaws).
I have a ton of rep on Stack Overflow from answering questions, and so every time I answer a question like this, I remember all of the discussions I have had with people which go like this:
> Me: (complicated task X) is a complicated task. It will take you weeks to do it by yourself.
> Asker: But shouldn't it be easy?
> Me: (reasons 1, 2, 3 why it's not easy)
> Asker: But I don't care about 2 and 3, and I don't think 1 is a problem.
> Me: (list of ways that things go horribly wrong if you do it yourself) If I may ask, why can't you use libraries?
> Asker: I can't use libraries because (misconception about how libraries work).
> Me: Oh, that's not true at all.
The exchange takes place typically over the course of a couple hours, since Stack Overflow is not designed to allow a question to be used as chat.
So sometimes, if I'm feeling like a show-off, I post some ridiculously complicated way of solving the question just as it was asked, then say at the bottom:
> Or you can just do (easy solution Y), which is super easy, but you apparently can't do that for unspecified reasons.
There are a lot of good reasons not to use Boost. It has had version issues in the past, where code that compiles with one version does not compile with a later version. If you are creating a library, using Boost forces the users of your library to also depend on Boost... in particular, to depend on the SAME version of Boost as what you used, which could be a problem if they are already using a specific version.
In general, Boost is just a huge library. Using it may make your code unfamiliar to people who don't know the whole huge library, because there is a strong temptation to start using random parts of the library. Additionally, the style of Boost doesn't always mesh well with the coding style you are using. This is why Google, for example, bans boost except for a small number of approved functions.
When I'm on Stack Overflow, I always end up downvoting a lot of answers that don't answer the question being asked. "You are dumb for wanting to know the answer to this question," no matter how politely it's phrased, is not an answer.
> Me: (complicated task X) is a complicated task. It will take you weeks to do it by yourself.
It sounds like you're arguing against learning. When you're a beginner, one of the most frustrating things is when people won't answer your questions due to an air of superiority. I know you feel like you're guiding people onto the best path, but it can't be true that you're correct in every case. So it must be true that at least some of the time you're being deliberately evasive for incorrect reasons. In other words, you believe you're being helpful, but you're not.
Answer their question, choose not to answer, suggest an alternate way of doing something, but please don't go on for hours about why their original plan is a bad idea. It's often the quickest way to kill the fun and their will to learn.
You can learn a lot by writing your own code to solve problems solved by existing libraries. I always used to do these kind of things when I was in high school; just because I was bored and wanted to code. Plus, there are many reasons you might need to write your own library to replicate functions of an existing library. A great example is when you can't use an available library because of its license (closed source and you're an open sourced project, or open source and you're a closed source project).
These are people who want to learn how something is actually done, to experience that sense of accomplishment themselves, and not just use a solution someone else has already written; and I don't think that's necessarily a bad thing.
>These are people who want to learn how something is actually done
While this is true sometimes, many times it is simply that they don't want to learn a new way to do something. You can tell which side of the fence they lean towards in the way they phrase the question.
>Programmers develop highly specialized taste as they mature, with preferences like "C is good, Java is bad" or "everything should be done with the command line" or "I never want to leave Visual Studio again". I'm amazed by how many people say, for example, that they absolutely can't use Boost but when pressed, they can't give a good reason why. That's because Boost offends their subjective sensibilities for some ill-understood reason, not because Boost is flawed in any particular way (although Boost certainly has its flaws).
I've personally have wrestled with this, and many times its a case where its most certainly a premature optimization. There are times where I've bent over backwards to avoid calling a `new` inside a Java loop because of some project, some years ago, was running slowly and when I profiled it came down to too many allocations in a loop. I try to hammer "benchmark & profile" in may head however.
> How do I do (complicated task X) without using (class of solutions Y)?
It's like madlibs. I'll fill in the blanks for you:
> How do I write a portable function for searching the filesystem in pure C++?
Here, X is "search the filesystem portably" and Y is "just use Boost, dummy".
> How do I create an iOS application without using Xcode?
> How do I do AES encryption in my network code? (instead of just using a library to handle TLS)
Programmers develop highly specialized taste as they mature, with preferences like "C is good, Java is bad" or "everything should be done with the command line" or "I never want to leave Visual Studio again". I'm amazed by how many people say, for example, that they absolutely can't use Boost but when pressed, they can't give a good reason why. That's because Boost offends their subjective sensibilities for some ill-understood reason, not because Boost is flawed in any particular way (although Boost certainly has its flaws).
I have a ton of rep on Stack Overflow from answering questions, and so every time I answer a question like this, I remember all of the discussions I have had with people which go like this:
> Me: (complicated task X) is a complicated task. It will take you weeks to do it by yourself.
> Asker: But shouldn't it be easy?
> Me: (reasons 1, 2, 3 why it's not easy)
> Asker: But I don't care about 2 and 3, and I don't think 1 is a problem.
> Me: (list of ways that things go horribly wrong if you do it yourself) If I may ask, why can't you use libraries?
> Asker: I can't use libraries because (misconception about how libraries work).
> Me: Oh, that's not true at all.
The exchange takes place typically over the course of a couple hours, since Stack Overflow is not designed to allow a question to be used as chat.
So sometimes, if I'm feeling like a show-off, I post some ridiculously complicated way of solving the question just as it was asked, then say at the bottom:
> Or you can just do (easy solution Y), which is super easy, but you apparently can't do that for unspecified reasons.