I consider myself a fairly decent coder, as in I can get code to do what I want and usually manage to make it somewhat optimized. But, as any self-taught dev, I feel there's a few obvious I miss from not having had a formal education in the subject/years of experience as a junior dev.
What would you say are the main things self-taught devs lack that only formal education/industry gave you?
It took me quite a while to really understand the correct assignment of responsibilities to objects and how to refactor them when things got tangled.<p>I would follow framework conventions, but get lost when leaving them and end up with spaghetti. The code worked, but was hard to maintain and reason about. I've now learned a lot about core OO concepts e.g SOLID, and learned about the role of sequence diagrams in mapping out what each object's role is and it's a totally different experience.<p>I'd recommend Practical Object Oriented Design in Ruby by Sandi Metz for a great introduction to thinking clearly about objects. Not Ruby specific - that's just the code examples, really. <a href="http://www.poodr.com/" rel="nofollow">http://www.poodr.com/</a>
I'd say group-work.<p>I've been developing some services for some time already but was never able to easily/cleanly work in group, or even think in so.<p>Of course, it may be a problem related to the way I think or so, but I see it as quite common around where I work.