I'm from an environment where it's normal and actually encouraged to be critical.
Exactly. This is actually a necessary trait for good engineering. You won't (except through luck or sheer brilliance) get a rock-solid bug-free design without critical analysis of the design, and it's best when that comes not just from you but from others as well, since there's always the possibility that you'll miss something simply as a result of perspective. Different viewpoints are useful for the engineering process. Nobody has experienced everything, and experience is a major factor in distinguishing between a solid, workable design and a design that has non-obvious shortcomings.
But on text based internet forums this environment just doesn't (can't) exist and I struggle to fit in.
Actually, I disagree, and do so on the basis of experience, as it happens. There's nothing to distinguish a text-based forum from any other gathering of people when it comes to effective critical review. That's on the
people, not the venue. It has to be understood by all participants that the purpose is objective critical review. That understanding is necessary not only so that the recipient will know not to take anything personally, but also so that those providing critical feedback know that they need to focus solely on that which they're reviewing, and not on who produced that which they're reviewing, as well as to make it clear to reviewers that they don't have to worry about their comments being interpreted as anything personal.
The problem arises when not all participants understand that implicit agreement. And that's why I come into any forum with that kind of approach as the default. In particular, I never take anything personally (even if I did, I have a thick enough skin that it wouldn't matter. If someone thinks I'm a moron, that's on them, even if they might well be right! They can provide feedback that would make it possible for me to improve myself, but I simply don't care about anything in that context beyond that).
In the software industry, which is where my primary expertise lies, there's a term for doing work in that field which maximizes the potential for improvement through critical review: egoless programming (see, e.g.,
https://blog.codinghorror.com/the-ten-commandments-of-egoless-programming/). I think the approach that term applies works just as well for any engineering endeavor.