Advertisement

Are you the "From Scratch" type?

Started by June 18, 2015 08:07 PM
63 comments, last by Oluseyi 9 years, 2 months ago

Why bake bread from scratch? Why not buy a loaf?

There are thousands upon thousands of modules/libraries in numerous programming languages, using numerous frameworks. Many of them are free.

Why start from scratch when you have all of this stuff at your disposal? As a beginner, I know it can be overwhelming to have an idea and realize that "from scratch" it will take years upon years to complete.

If you really want to start from scratch, learn binary.

Really though, why am I so hesitant to use a library as if it is "cheating?"

I am working on a demo project for a game engine, and I was so hesitant to use code that was made available to me for free, because people will say that I didn't make the project. But who really makes everything completely by themselves?

Where does one draw the line?

So, skill enough, for where I am on this journey, is being able to take these modules, frameworks, free tools, and bring them together to make what I need.

I still consider it a specialization, at least until the average person can do the same.

Are you the "From Scratch" type?

They call me the Tutorial Doctor.

In my opinion, the most important part of being a programmer is being able to understand the program. You need enough knowledge available to solve problems in the program when they occur.

Writing things from scratch is a good way to develop rich knowledge about specific parts of programs, but it's not the only option. Extremely thorough documentation and even articles about designing specific systems are great ways to learn what goes on under the hood.

Once you have sufficient understanding of a system, there is no need to write that system yourself.


...because people will say that I didn't make the project.


Other people's opinions don't matter if your project is a success. However, if you plagiarize things, that's when you'll get into real trouble.
Advertisement

It depends on what your goal is.

I bake bread. I'm not trying to run a commercial bakery, I just like baking bread and I enjoy making something for my family or friends. But I didn't build my own oven or assemble my own mixer, because right now, those parts of the process don't interest me. (I might actually build an outdoor pizza oven next year, but that's another story).

I could use a bread maker or just buy a loaf, but that would skip over the fun part for me, and it's my time my goal is to have fun.

When I'm coding professionally, my goal is to deliver the software as efficiently and correctly as possible. If I need some additional functionality that's not part of our core IP, I'll look for a tried and tested library and only if I can't find something else will I develop it myself. This isn't my time, it's my employers. Even if you work for yourself, you should still adopt the same attitude, especially if you're trying to get something to market.

On the increasingly rare occasion that I'm coding in my spare time, I absolutely might write a library just for the fun of it, because again, it's my time.

if you think programming is like sex, you probably haven't done much of either.-------------- - capn_midnight

I am one of those types, but I like to call it a "not invented here" type.

It's not that I hate other people getting the credit or even think I'm better or smarter than they are. My reasons are about mainly about time savings. Generally, I know what I want to do and sometimes I don't think it's that hard building that thing from scratch. Usually there's a learning curve associated with the library/framework/etc. and I think I would spend at least as much time learning how to properly use the library (which often includes way more functionality than I'm looking for) as I would just coding the bits up that I need. As well, documentation is not always the best, leaving me to either have to read the source to see how they implemented function X, or just use it and hope it doesn't create more inefficiencies. I hate the latter option because it's the programming equivalent of pull-and-pray, so I usually try to go through the source. However, this doesn't extend to things like physics or rendering engines or something of that magnitude.

Like the OP says, why would I not just save myself the time and stop making more work for myself? I think for me, I like baking my own bread but raising and slaughtering my own animals for meat is too much.

For me it's mostly a combination of system limitations and a general lack of knowledge about what would actually be beneficial to me.

The main things that I wish that I didn't try to re-invent would be collision detecting and pathfinding / steering. Other than that, serialization is certainly a pain but as I recall when I looked into using Boost I felt as though it was going to be just about as difficult to implement with the way I've coded everything so far (probably would be worth another look when starting a new project).

I generally had fun putting together the stuff that I put together to handle my graphics through SFML and I'm happy with the results. Never thought of SFML as a library let alone "cheating" it's just been what I've been looking for for a long time to get the damn graphics to the screen at all.

I did use JTippet's Accidental Noise Library to help with the procedural terrain generation. When I took a stab at getting something of my own working (using diamond square algorithm) it never quite seemed to work the way I had hoped. I had a much easier time understanding the ANL.

Not really all that sure what other libraries that are out there would be anything that help or that I'd otherwise be interested in playing with. Maybe some recommendations in this thread could help.

Sure there are thousands of libraries, but if it's not a perfect fit, you're shoving it in, and you have the skills to write it better...why not write it better?

It's not a matter of scale either. I simply cannot make the games I want to make with the existing game engines because they don't meet my requirements. I'm writing one myself

I simply cannot drag-and-drop any lightweight and well-designed classes/libraries into my program because they don't match my requirements. I write them myself.

Of course, it's not as black-and-white as that, but that is my ideology. I'm using libpng, freetype, glm. My builds are handled by SCons. I'm running buildbot. These things alleviate a lot of lower-level work and don't impede my work.

Engine, graphics, low-level, security and cross-platform programming. xsngine
Advertisement

I am a pragmatist at heart.

I wind up going into "from scratch" the further I go with anything, though. Most of the code in the world is halfassed or outdated, and the other half is not tailored to your needs. So you wind up taking this "great" code and heavily modifying it.

I've seen this happen with a project that ran to 100 million and then at the end they scrapped it all, and indeed decided to design something "from scratch".

In the business world you can often get away with doing things out of package then adding some in, but in games I found that engines dictate to a strong degree what you will be doing and how. So I feel from scratch is really the only way to go if you are trying to make something besides a corridor shooter.

And it's ALWAYS needed when you need super high performance.

This is my thread. There are many threads like it, but this one is mine.

I make engines (from scratch) for several reasons.

#1: Learning. This is the best way to understand what really makes games run.

#2: Progress. If every engine was just a mix-and-match conglomeration of Ogre, Irrlicht, PhysX, Bullet, etc., then no new technology would be made. Many people working from scratch is the best way to find new and better solutions to problems.

#3: Originality. This is honestly the main reason when I started out. If I have no pride in what I have done then why would I do it? I want to look at the end product and say, “This is my technology, I made this work.” Times were different and I was different, but back then I just saw all these people “making” an engine by taking all these existing parts and putting them together, and I just thought, “What’s the point? How do you feel good about that? Where is your reward at the end of the journey?”. How could I have pride if all I did was slap Ogre, Bullet, and some sound library together and call it “my engine”?

#4: Control. I have full control over how the engine works. I can add any feature easily, tweak things, tune things, etc.

#5: Freedom. I will never be limited by an existing engine. If I want to support a feature, I support it. For example, I wrote my own shader language so that I would never be limited by Cg when new shader languages arrived, such as Metal Shading Language. I don’t need to worry about how long it will take Cg to add support, if ever. Of course I am instead limited by my own skill, but that goes back to #1, and is a limit that I can control and which is decreasing over time, for my own greater benefit.

L. Spiro

I restore Nintendo 64 video-game OST’s into HD! https://www.youtube.com/channel/UCCtX_wedtZ5BoyQBXEhnVZw/playlists?view=1&sort=lad&flow=grid

So many third party libraries are outdated or unoptimized, it's unreal. I also hate the redundancy and poor documentation.

Many third party libraries for Java uselessly mimic already existing libraries ! Many folks use third party graphical libraries, and never realize Java has built in ones that are simple to use !

I cannot remember the books I've read any more than the meals I have eaten; even so, they have made me.

~ Ralph Waldo Emerson

When learning something new, the only choice for me is making things from scratch. Learning something new and reading/understanding someone else's code at the same time is way overwhelming to me. Apart from that, no. I reuse everything I can that I made in previous "projects" (and I think it's pretty far away from "from scratch"). As far as I remember, I learned OpenGL in University by using a sample program that used GLUT. I just didn't understand what and why am I doing. It took quite a time (months) and some small projects for the jigsaw to fall into place.

Maybe I misunderstood the question which was about using 3rd party stuff, than yes, I made everything I have from scratch apart from .jpg loading. The reason? Dunno. Maybe laziness to learn a new tool, and that I usually would have only used a few specific parts from a tool/engine and I always thought that it's simpler/quicker to hack together those few specific functions I needed than to search for the best engine for the task and to learn it's paradigm and how it's integrates into the language I use and to find that special function/group of functions to use to reproduce that specific function.

Maybe another reason is that for me usually the work is 2% solving fancy algorithm problems (collision, pathfinding, AI, whatever) and 98% stitching everything together to one program and testing/bugfixing. So maybe using 3rd party stuff wouldn't be much help.

It's hard to express. The biggest projects I worked on so far were graphical editor programs and it would take quite an effort just to phrase the question/tasks I need to solve, let alone to search for a tool or tools that do those. And even with creating every feature algorithm from zero, most work is still by putting together a system, which I am not able to plan ahead so they usually fall through some rewriting from zero.

This topic is closed to new replies.

Advertisement