I want to join a regular software shop. But I am not good enough programmer to be called an expert. Should I study more programming and get more experience first? Or should I just go for try to apply for a job and see what future holds for me.
Submit your CV, do whatever coding test you are given. If you are able to pass the tests, take the job. If not, study more about programming.
How about a code-related job that is not "front line" coding, such as writing and performing unit tests, regression testing etc, or business analysis?
You get to do paid work, rub shoulders with devs and hopefully pick up some skills from them too.
Look for companies that offer a traineeship or internal academy; you'll be paid and trained at the same time. It's a good way to earn experience while also getting some actual work experience.