10 miliardi di farmaci!
1 day ago
...or how to be heavyweight and agile at the same time
A relational database is more flexible than a network programming language, so it doesn't need anything like a navigation direction - data can be viewed and retrieved in any possibile way.
select *as well as
from person p
left outer join person_event pe
on p.id = pe.person_id
left outer join events e
on pe.event_id = e.id
select *but this comes at a cost. You need keys. And you need indexes to manage them (even if this relates to the phisical aspect rather than to the logical one). And a bridge table to manage the many-to-many relationship, which doesn't belong in the domain at all but is a pure fabrication used to represent the model. This clutters things a bit, even if we're so used to it that we don't even notice.
from event e
left outer join person_event pe
on e.id = pe.event_id
left outer join person p
on pe.person_id = p.id
public class Person {The language shields you from how the model is represented (that's where the rigidity is hidden), and it is more natural to use.
// stuff
public ListgetEvents() {...}
public void addEvent(Event event) {...}
}
public class Event {
//stuff
public ListgetPersons() {...}
public void addPerson(Person person) {...}
}
Know how long it takes your computer to execute an instruction, fetch a word from memory (with and without a cache miss), read consecutive words from disk, and seek to a new location on disk.
Get involved in a language standardization effort
Have the good sense to get off the language standardization effort as quickly as possible.
With all that in mind, its questionable how far you can get just by book learning.
Program. The best kind of learning is learning by doing.
Work on projects with other programmers.
Work on projects after other programmers.
Learn at least a half dozen programming languages.