This is something that has been bothering me for a long time. Obviously, I have impostor syndrome, and I’m aware that’s not a particularly rare thing to have.
I feel as if the code I write is not “original”, or “authentic” enough. The simpler a project is, the most I find myself having these thoughts. A really good example is the first project in the HTML/CSS project list, the tribute site.
When coding something, I’m often going to be looking at another site for reference, or other source code. While a piece I might copy over and alter to fit my needs will work in my code, and is substantially different from the original code, I still feel as if I’m not doing “real” programming. This is essentially bothersome when doing HTML/CSS, as I feel that CSS is mostly just setting values to pre-made variables. I do have the same issue when doing game development, and using pre-existing plugins instead of writing my own plugins; though I do write lots of custom scripts to work around them.
I’m worried that by referencing other’s code in this manner (whether it be the fCC example projects, snippets on StackOverflow, or W3 tutorials), my work is not authentic, and runs the risk of plagiarism. Can anyone weigh in on this?
I think you are being too hard on yourself. Consider that every bit of human development is based on a previous example. From the first stone tool to the latest technology. That is just how we learn and develop. With respect to code there are only so many ways to correctly structure something and all of it is based on certain standards. Good code will always have a similarity to other good code.
It is the same with anything.
I clicked on this topic because I’m feeling the same way you are, and so I am telling this to you as much as to myself. Something just occurred to me:
I’m an artist. I’ve been drawing for years. All artists (that wish to improve) use references while they’re drawing. Sometimes it’s a live model or photograph, sometimes it can be another person’s art. But if they do not use a reference and put in dedicated practice, they won’t improve. They will stagnate, maybe learning little bits here and there, but to make any real progress you have to see what things look like in real life, and also get new perspectives by seeing how other people draw the same thing.
So too with coding. You’re actively learning by seeing someone else’s interpretations and trying to apply it to your own. You’re not copying. You’re using it as a reference. It is “real” programming, just like it’s “real” art.
The day may come where you can do this all on your own, without looking at what anyone else has done…but that’s not the way to grow. Trust me. There will always be someone better than you that you can learn from, and I hope you, and I, and everyone else on here continues to use reference in order to improve.
Try imagining that you don’t have other projects to do it, and try to do it only by yourself or just looking up in documentation how something works. You will learn much more that way. I was doing same thing as you, but when it came down to creating something without looking I couldn’t, until I made myself and was sitting trying over and over again, and this way I learned a lot more than by copying/adjusting.
There are a few sayings/references/ideas that apply here.
Now when it comes to learning programming there are few things I’d like to point out.
Copy-pasting from Stack Overflow isn’t learning, it’s hardly even solving the problem. If your goal is to learn I recommend do using stack overflow to help you solve common problems, but do try to dive into the solutions and determine for yourself if its the best solution for the problem at hand. Often I find code written by people who “take” the code from elsewhere without considering everything about the code.
Use things you find as inspiration, don’t follow blindly.
HTML and CSS are special in the regard they are “standards” not programming languages. If given a simple problem for JS, odds are there are probably 10000 ways todo it “right”. If your given a simple problem (center a div) in HTML/CSS, odds are there are probably like 2-3 ways todo it “right”. I personally am not a big fan of designing, nor am I good with CSS standards, so I do find myself searching for help more often for even basic problems, but that’s fine because otherwise I’d be guessing my way, and wasting time I could be spending on what I do care about. (application logic)
There’s also the idea of using frameworks as crutches. It could be React, jQuery, or bootstrap, frameworks/libs/plugins are there to keep you from re-inventing the wheel. Yes it can end up being a crutch, but as long as you understand what the framework/lib/plugin gives you over implementing your own, you can understand the benefits and drawbacks so you can make the decision to use it or not.
Finally, it’s important to understand that if your learning X, it doesn’t matter your using Y. So for FCC, if your currently focusing on learning HTML/CSS it doesn’t really matter your using jQuery. You can only learn so much at one time, and somewhere it usually helps to be given help in the form of some framework/lib/helpers. Even in a real world work environment, when deadlines are tight, odds are you will end up leaning on some one else’s open source code. At that point it’s important to be able to evaluate it it meets your needs and will continue todo so.
Goodluck keep building, and keep learning
You are taking some concepts - ‘authenticity’ and ‘originality’ - which have special meaning and value if you are a musician or an artist. But engineering is completely different.
The average software engineer is much more like a plumber or a builder than an artist. You don’t expect originality or creative expression from a plumber. You expect them to solve a problem and do their job to industry standards.
Software engineers work in teams. What is of value to other members of your team is not the originality of your code. What matters is that the code is readable, well-structured, concise and easy to maintain. An ‘original style’ is likely to be regarded by other coders as just a pain in the arse.
Almost all of the problems you will solve as a software engineer have already been solved many times before. There will be standard solutions and coding patterns available and you should follow them unless you have a very good reason not to.
If you want to explore your creativity, originality, authenticity etc, then look into UI/UX design; It is not programming/coding but is related to front-end development. I have seen some companies in job ads expecting front-end devs to have good understanding of UI/UX and also design principals.