In short, the best way to learn is generally to hang out with someone you can learn from. If you feel that your skills aren't up to scratch, hanging out with people who are better than you is the best you can do. Certainly much better than withdrawing and isolating yourself further.
However, I think you're painting a very simplified and misleading picture.
Far from all "professionally taught" programmers are really any good. Just because they do something doesn't necessarily mean it's the right thing to do.
And much (but not all) of what you're saying really sounds like you're the one who could teach them a trick or two.
I lean to the Functional side more than OO, but I see the use of OO when something would make more sense as an abstract entity.
That sounds great to me. The best coders are the ones who use the right tool for the job. I'd always pick someone who knows both paradigms, and uses each of them where it makes sense over someone who religiously uses only one paradigm.
Next I also go the simple route when doing something. When in contrast, it seems like sometimes the code I see from professional programmers is complicated for the sake of it!
Again, simplicity is good. Don't make your code complex until it needs to be complex. Some people do tend to make things complex out of some misguided idea of elegance, or because "we'll need this additional functionality later". Generally, it's better to do the simplest thing that solves your problem.
I use lots of closures.
Good. That's why they're there. They do scare some people who got stuck in the 1990's and Java's outmoded quasi-OOP model, but really, that's their problem.
And lastly, I'm not the best commenter.
What should be commented, and how, is highly subjective. There's no real "right" or "wrong" there, but when working on a team, it's important to write code that the entire team, and not just the author of the code, can understand. And sometimes, compromises have to be made to conform to the team's coding style. That doesn't necessarily mean that you should write more comments, it simply means that it's something you and your team will have to agree on.
I hear professionally trained programmers go on and on about things like unit tests. Something I've never used before so I haven't even the faintest idea of what they are or how they work.
Well, ask them. :) Testing your code is essential, and unit tests are a popular and useful tool for this.
Lots and lots of underscores "_", which aren't really my taste.
As with commenting, that is subjective, and depends on the language. In C and C++, lowercase_with_underscores
is a fairly common naming convention. In many other languages, you'd virtually never see an underscore. But at the end of the day, it's really not important. Whether a function is called write_to_log
or WriteToLog
isn't actually going to make a difference. Someone is going to have to just suck it up and conform to what the team has agreed upon there.
Don't know anything about MVC, I've heard a lot about it though with things like backbone.js. I think it's a way to organize an application. It just confuses me though because by now I've made my own organizational structures.
As with unit tests, never stop learning. You work together with people who know things you don't, and who come from a different background than you do. Learn from each others. There are clearly things you can teach them, but there are also things you don't know, or have never heard of, which they can teach you. That doesn't mean you (or they) are a bad programmer. It means that a good programmer is one who strives to improve, and to learn from others.
Complete OO programming really leaves a bad taste in my mouth
Same here, and I am what you'd call "professionally trained" (a CS degree). People who have been taught programming differ just as much as people who are self-taught. It sounds like you're working with some who really need to learn a few new tricks.
In fact I'm rather scared of the fact that people will eventually be checking out my code. Is this just something normal any programmer goes through or should I really look to change up my techniques?
Both. Of course it's scary to have others look at (and judge) what you've made. But it's also very educational. They can tell you what they'd have done otherwise, or why they'd have done it otherwise. They can help you improve, and they might also learn something themselves. Show them code that solves a problem better than their "preferred" solution would have done, and hopefully they'll go "oh, that's neat. How did you know to do that? What do you call this? I should use this technique myself"