Mailing lists, IRC channels, Slack channels, and various channels of the stack you're using. i.e: language and other components and dependencies of your project. StackExchange network works, too. (i.e: StackOverflow, ServerFault, etc.)
I read the code of of my project's dependencies and learn from it. I receive the RSS feed of the GitHub repositories in my email client, read the change log, and very often I'll see a commit fixing a bug or implementing a feature and go check how it was done.
This makes coming up with good solutions a lot easier, as sometimes instead of implementing the solution in your code, you either submit a pull request or extend the dependency, especially if it has a plugin architecture and solve the problem upstream so that the downstream part (i.e: your client code) isn't too crazy. i.e: instead of the solution being maritime and going around a continent, you fix the geography and dig a canal so that the downstream solution is elegant.
You can have the IRC channels in your email client, such as Thunderbird. The Python IRC channel and mailing lists are great: top notch people will go above and beyond to help you. Case in point, here's a question I posted to the mailing list https://mail.python.org/pipermail/tutor/2015-April/thread.ht... (Good Taste Question: Using SQLite3 in Python).
The people who replied were nice, informative, and patient.
Look at that yours truly douche trying to learn PCB design: https://www.electro-tech-online.com/threads/my-begginnings-w...
Refine with every remark these generous members made about the board, assimilate the concept, and practice. My second board for a project was way better, but submitted nonetheless for critique again: https://www.electro-tech-online.com/threads/first-pcb-steppe...
For quick, real-time conversations, IRC and Slack channels. For longer, deeper, conversations: mailing lists or forums.
The point is: put something out into the world, and let the world poke holes in it.