I am a mediocre programmer, at least I think so. But recently I am getting frustrated over the fact that if I should focus on a particular language. Or is it okay to learn and work on multiple programming languages. Currently I am involved with Laravel. I am also good at Java and honestly, I love it. And also I love to prepare material designs using HTML, CSS and JavaScript. I am quite familiar with Android and can prepare pretty decent UI for android as well.
I was building a social networking site (facebook like) with Laravel. But I am afraid if I'll forget the knowledge I have on Java and Android. But even so I don't want to leave Laravel. I want to learn them both to their depth.
I want to become some sort of full stack developer because I don't feel live giving up on either PHP or Java. I'm stressing over the fact I will not be able to properly learn any of the mentioned technologies. Any suggestions or personal experience which might guide me will be appreciated.
P.s.: I am studying currently on Bachelor's if that makes any difference.
As a student, it is important to understand things and learn how to do stuff. It is not a bad thing to amass a broad knowledge, if you feel comfortable with that. I did the very thing while I was a Bachelor student and it still helps me a lot. People from all over the BU come over to me and ask for help automating different things in different languages. Just last week, I had to add Perl to my repertoire, which was very easy because I already know logic and many similar languages ;)
While you might think that you are on the best way to becoming a jack of many trades, master of none, the time as a student is actually the best time to build such a broad base. Later on, when you work for a company, they will most likely want you to become an expert for a single technology. However, at this point in time, you don't know what that might be, so you can just do what you want and then leave the decision to the job description you get later on.
Sometimes a person has difficulty understanding certain languages. Some languages are easier to learn and to work with than others. You won't know what works best for you until you've tried several different languages.
The same can be said about frameworks. I find Angular convoluted compared to React or Meteor.
You never fully "forget" a language if you don't use it for a while. I have used many languages over my career. I did Java programming for five years. I switched jobs, and thus languages four years ago, and now I'm doing mostly PHP. I could still do Java if I had to. Here's the thing you'll come to realize: just like spoken languages, programming languages are mostly similar. There are nuances to each one. But, if you learn one or two really well, you'll be able to pick up on others fairly quickly. For example, if you know Java, C# should be pretty easy to learn.
This is the one point I always hated about job descriptions and clueless recruiters. They say, "must have 5 years experience with X language". What if I don't? But I have something better: 18 years experience with many other languages. Unless X language is so vastly different, there should be no reason I couldn't pick it up in a few weeks' time.
Learn concepts. Understand there ARE differences, but also understand there are also MANY similarities that cross language barriers.
Personally, I think it's great you want to be full-stack. I wish more developers were. From a management perspective, it's very frustrating to not be able to assign projects to certain developers because they don't know the X layer (e.g. database, front-end, etc.) I'd so much rather have a developer who is able to do everything, than one that specializes in a particular area. But that's just me. Not everyone shares this opinion.