For any tasks we do, having a reference material is always good. We can remember something from our childhood that we intend to admire someone and wish to become a person like them. During young age, we may not have our own unique things to showcase. It will either be things or skills that are brought from our parents or from what we observe in our life. This is common even if we grow up. We will not be able to do all the things on our own. Taking references is quite common.
As humans, we tend to take references from the best things that we usually see outside. After taking references we then add our creativity to make things better. When I started writing code, that is exactly what I did. I did not write all the codes on my own. Most of my initial projects were something that I copied from online sources or from other projects. Even today I say to my teammates that it is a fair thing to do because we have several problems in coding like deadlines, lack of knowledge, lack of resources, etc. Considering all that, in order to come up with a solution so soon, referring to online materials or codes is always a good thing to do.
Even today, I keep learning new things by referring to existing projects. My ideology is that, when we start writing code for new projects, it is quite obvious that we will not be able to achieve all the requirements with the knowledge that we already have. If we have to achieve something in an optimized solution, it is always good to refer to some existing projects. It can give some basic idea and also when we see different solutions online, we will be able to get some experience as to how we should handle our requirement. Even in the future, if we get similar problems/requirements, we will easily have multiple solutions in our hand.
Same requirement but different approaches
While glancing through some of the existing projects available online, I usually see that a similar requirement can directly through multiple approaches. If I read the answers from Stack Overflow or any website, the author or the coder will explain why each approach is best. This gives an insight as to why we should be using that approach and whether that will suit our requirement or not. If we go with the solution that we have in our mind, we are not giving some space for new learning at all.
When I look online for the solution to my requirement, I might end up reading lots of articles and that also gives me lots of experience. Even though some may not be relevant for the current requirement that I have, it will help me use that solution when I have a similar requirement in the future. This gives multiple learning experiences from a single project.
Will it affect our thinking ability?
I once shared this ideology with one of my team members and she started arguing saying that if we do something like this, the self-learning and self-thinking ability will reduce. In a way, it is true because ultimately we are not writing any code from scratch on our own. But I explained to her saying that it will not affect our abilities because we still implement solutions only by understanding what we are doing. If we blindly loot code from other project and insert it into our project, then it should definitely be an issue and I will never recommend that approach at all. But if we fully study the code that we take from online sources and implement it in our project, then it should definitely be additional learning for us.
When we do things by ourselves, we will be exploring it or we will be approaching the requirement only with the concept that we are familiar with and only with the concepts that we already know or we have already coded. But when we try exploring other options or opportunities, there is a huge learning curve for us instead of rolling again and again inside the same little loop of knowledge that we have.