ID:41854
 
I have a problem with people telling others they should always use a library if possible. I don't have a problem with the implied meaning, I have a problem with the way it's phrased.

This is telling other programmers to be lazy, not just with their amount of work, which is a good thing, but with their skill level, which is usually a bad thing.

There needs to be a new way of phrasing that. Something like: "You should use a library only once you understand the underlying concepts."

The reason I say this is because there isn't a library out there for everything, and you're going to encounter problems on that lower level that you'd normally use a library for; you will need the skills to deal with those problems. Also, most libraries have a few bugs that you won't be able to fix without being able to understand the internal code.

What are you going to do when you've embedded Prototype into every page of your site and suddenly a Prototype bug prevents development? Are you going to recode your entire site?

Use libraries all you want, but don't actually rely on them if at all possible. This doesn't mean you need to take apart the .NET CLR; you have to draw the line somewhere, but there is no reason why you shouldn't know several forms of AJAX if you're into AJAX development.

I mention prototype because I've noticed that nobody cares to learn classic AJAX anymore. They use Prototype, calling classic AJAX obsolete, yet you can't work with the internal code of prototype without knowing classic AJAX.
I find libraries should only be used if they actually provide something that is normally unavailable to anyone else (except for those who know to program such features themselves). I had to develop a library for ByMail to provide support in games or anything else that wants on the go ByMail access. ByMail Server has been down though for a couple months and haven't brought back the download to the main client yet.

One exception for library use is C++ (including C). To even achieve the basics (unless you play with assembly) will need libraries that provide such functions.
I've never even heard of prototype before this post; I like AJAX. :)
It certainly is good to understand the underlying concepts for how something works since if you have a special case and know what you are doing you can write a more custom tailored optimized version. However sometimes it goes out of the scope of the programmers experience or writing a specific library would require much more work/expenses to do yourself. Would you write something like OpenGL or HAVOC yourself? Could you? Those may be a bit extreme of a case but the point remains not only does it take a lot of expertise you don't have but a lot of time and the libraries already available have been thoroughly used and tested by other people so bugs have been found and squashed which if you wrote it yourself would be time intensive and you wouldn't likely find them all without a lot of testers.
No sense reinventing the wheel if you already have a well constructed well tested one unless you have a special case or the goal is to learn how to make the wheel not build a product you're going to market. There may be a line but for practical work I have a feeling you have it set a bit high.
Yeah, before I got good at DM I had a 'no library' policy, but once I learned how the stuff worked I was more than happy to include libraries by the ton, I even wrote a few of my own to include. I still remember this one instance when I found a BYOND bug that make DM environments impossible to load if they didn't have any libraries included, and I still remember Deadron complaining that I wasn't using libraries.

Although he did of course come around when he learned why I wasn't using them.
Being distrustful (and stupid!), I often accidently implement my own less graceful, less robust and less intelligent version of whatever feature most people use a library for.

That said, whenever I'm doing anything in C++ and someone tells me not to use a library they can go to hell. :P
There are many great reasons to learn more about what you're doing, but if people are getting results without understanding classic AJAX then what advantage is there in learning classic AJAX?

When you're producing something as complex as a computer program you can't afford to bog yourself down by forcing yourself to know it inside and out.
You need functions X, Y and Z, then use libraries X, Y and Z. If Y doesn't work right then you're forced to learn how Y works in order to fix it. It's a shame your program has to face a hurdle (although you are better off), but you still shaved months off development by not gaining an unnecessary understanding of X and Z.



When I'm programming for fun I let my curiosity go wild. If it's interesting I want to get up to my elbows in it. I see a library and I take it apart. I get a kick from that, but if you look at my portfolio I don't get much more.
When I'm programming to produce something I can't afford to put my needs before the product or else I'll end up focusing on the perfect brick and forgetting that I'm meant to be building a decent house.
Would you write something like OpenGL or HAVOC yourself?

No, but I can certainly try :) If I hadn't attempted to make my own game engine last year, even though, understandibly, it failed, I wouldn't know how so much of it works and wouldn't be able to solve many of the high level problems that come with using even highly-tested engines. All big frameworks and libraries have problems, and even if you don't get into the internal code, you need to know how it works internally to work around it.

Note that I'm not saying people are bad if they don't delve into libraries, and there's even a limit to that (OpenGL, .NET, C++, etc.), I'm just saying I hate when people are criticized for reinventing the wheel. Reinventing the wheel makes them a better programmer for when they do start using libraries. Not just with that particular program, it makes them all-around a better programmer.

Also, I don't mean during a job. I mean on your own. I understand people don't have time to do it on the job and often on their own too. But when it's just a fun project and on their own, it's not always a bad idea to reinvent the wheel.
That's a waste of time in my opinion. It's better to get your project finished faster.