Self-taught NWNscript and FPI. Never had any formal (or indeed informal) teaching on general purpose programming. But I am starting C# next year.
That's because programming languages have no really adequate datastructures to represent tables... and database-tables in turn are not really efficient for most of the relational stuff for which they are used.TEMHOTA said:Java
I hate programming, and the DB stuff was the worst of it.
Classes are perfectly fine for representing tables, the real problems are that OOP deals with state, relational databases do not have state. It is the same reason why web programming is such a pain. What compounds the problem is that lots of application programmers or system programmers more specifically the guys who write the ORMs we are trying to use nowadays are not primarily DBAs. This means that most ORMs are broken at the conceptual level and do things like not support referential integrity at the database level in some cases. (Active Record at least prior to Rails 3.) What these developers do not get is that having the interface developer create the code that maintains referential integrity defeats the entire purpose of using a relational database in the first place! Without that the database is nothing more than a series of flat files and you mine as well use excel spreadsheets are your database at that point instead of wasting your time on a database of any kind.Lyx said:That's because programming languages have no really adequate datastructures to represent tables... and database-tables in turn are not really efficient for most of the relational stuff for which they are used.TEMHOTA said:Java
I hate programming, and the DB stuff was the worst of it.
So, you end up spending most of your time with converting container-structures from one conceptual format to another, which are both not optimal for what you tried to represent in the first place. Unfortuatelly, there also isn't really a good alternative to databases yet. I hate situations like that - it seems to pointless and a waste of energy, and yet one has no other choice than to put up with it.
erm what? It's like one of the best languages you can ever deal with.Bran Mugen said:Java <- the worst programming language ever invented
Actually, data structures has been the most interesting part of my CS degree thus far. That said, I'm not at all sure how you could say that "you end up spending most of your time with converting container-structures from one conceptual format to another, which are both not optimal for what you tried to represent in the first place". I mean, what is a database but a data structure that can be sorted and searched? I'll grant you that most examples are just conceptual solutions to a problem but I can't see why you'd say that they are non-optimal. Are you suggesting perhaps that a tree (for example) should be a primitive data type?Lyx said:That's because programming languages have no really adequate datastructures to represent tables... and database-tables in turn are not really efficient for most of the relational stuff for which they are used.TEMHOTA said:Java
I hate programming, and the DB stuff was the worst of it.
So, you end up spending most of your time with converting container-structures from one conceptual format to another, which are both not optimal for what you tried to represent in the first place. Unfortuatelly, there also isn't really a good alternative to databases yet. I hate situations like that - it seems to pointless and a waste of energy, and yet one has no other choice than to put up with it.
IMO, while what you describe are all important issues, they are just symptoms of something bigger: That there is any seperation of data and code, at all. It of course fits the von Neumann design, but i guess we both are aware about the issues with that shism, right? It's like we constantly seperate data and instruction, just so that later we can then again patch both together (which is the whole reason for approaches like OOP, actors, prototypes, and so on - what we're trying to represent, are entities that include behaviours and information - not a stack of data and a stack of instructions, isolated from each other.shadow skill said:Classes are perfectly fine for representing tables, the real problems are that OOP deals with state, relational databases do not have state. It is the same reason why web programming is such a pain. What compounds the problem is that lots of application programmers or system programmers more specifically the guys who write the ORMs we are trying to use nowadays are not primarily DBAs. This means that most ORMs are broken at the conceptual level and do things like not support referential integrity at the database level in some cases. (Active Record at least prior to Rails 3.) What these developers do not get is that having the interface developer create the code that maintains referential integrity defeats the entire purpose of using a relational database in the first place! Without that the database is nothing more than a series of flat files and you mine as well use excel spreadsheets are your database at that point instead of wasting your time on a database of any kind.
Then there is the fact that a developer who uses some of these conceptually broken ORMs will have to end up duplicating code that already exists in the DB in real life. If they used the ORM to create the database then every other interface that uses this broken database has to have code to handle things that could, and perhaps should have been handled by the database, which just increases the number of points of failure. OOP paradigm is the least of our problems when it comes to dealing with databases. Ignorant ORM developers are a much bigger problem. (Ignorant not because their tools sometimes do not support certain features of modern DBMS'; but because they actually believe lacking support for this type of functionality is desirable.)
Seems like you are one year ahead of me.DaJoW said:Doing a Bachelors in Computer Science at Uppsala University, Sweden. So far, we've done SML, C, Java and an assembly.
I get you now. I would argue however that rather than using databases because other languages lack certain features, we use the SQL domain specific language variants because we do not want to have to handle the same common tasks over and over again.Lyx said:IMO, while what you describe are all important issues, they are just symptoms of something bigger: That there is any seperation of data and code, at all. It of course fits the von Neumann design, but i guess we both are aware about the issues with that shism, right? It's like we constantly seperate data and instruction, just so that later we can then again patch both together (which is the whole reason for approaches like OOP, actors, prototypes, and so on - what we're trying to represent, are entities that include behaviours and information - not a stack of data and a stack of instructions, isolated from each other.shadow skill said:Classes are perfectly fine for representing tables, the real problems are that OOP deals with state, relational databases do not have state. It is the same reason why web programming is such a pain. What compounds the problem is that lots of application programmers or system programmers more specifically the guys who write the ORMs we are trying to use nowadays are not primarily DBAs. This means that most ORMs are broken at the conceptual level and do things like not support referential integrity at the database level in some cases. (Active Record at least prior to Rails 3.) What these developers do not get is that having the interface developer create the code that maintains referential integrity defeats the entire purpose of using a relational database in the first place! Without that the database is nothing more than a series of flat files and you mine as well use excel spreadsheets are your database at that point instead of wasting your time on a database of any kind.
Then there is the fact that a developer who uses some of these conceptually broken ORMs will have to end up duplicating code that already exists in the DB in real life. If they used the ORM to create the database then every other interface that uses this broken database has to have code to handle things that could, and perhaps should have been handled by the database, which just increases the number of points of failure. OOP paradigm is the least of our problems when it comes to dealing with databases. Ignorant ORM developers are a much bigger problem. (Ignorant not because their tools sometimes do not support certain features of modern DBMS'; but because they actually believe lacking support for this type of functionality is desirable.)
By storing data in a database, and then using a program to work with it, we just again create such a shism, and then try to patch it together again on a higher abstraction level. Of course, there is a reason why this is done - it is features that programming languages lack:
- relational addressing and lookup (all current programming languages do not really have an idea of complex hierachies. In the end, we still just have a bunch of memory postit notes, linked together via pointers - without any sense of "space/location" (addressing!). Compare this with a filesystem, where there are super and subdirectories - sure, you can emulate it in programming languages, but it's not the same)
- Persistence. The way how nowadays memoryallocaters work, mean that running an application is "construct and discard after use". It is not meant to allow dumping and then later reloading from disk.
- Concurrency. Though, actors are attempting to lessen this problem for programming languages.
So, what i'm trying to get at is: We use databases, because programming languages lack certain features, but then constantly have to deal with translating and interfacing another data/instruction chasm.