Patience! One step at a time
I spend a fair amount of time hanging out on places like Stack Overflow helping people with simple questions about things I know a lot about (e.g., Apache Derby).
One thing I notice is that people often try to learn a lot of new things all at once.
I suspect many of these people may be college students, as situations like this seem to pop up regularly at certain times of the year, which I imagine is around the time when Introduction to Databases classes around the globe are all getting to the point where they are assigning their first homework assignments.
I think there's also a lot of hysteria in the professional software development community recently about the notion of the Full Stack Developer.
Everybody wants to be a Full Stack Developer, because then they can get a job at Facebook/Google/Twitter/Uber/Dropbox/etc.!
Anyway, a typical Derby question on Stack Overflow might be something like:
Hi,
I'm new to Java and am trying to learn by writing a simple app.
I've written a JSP web app and I'm trying to make it so that when I fill out a form and click this button, my Java code will use JDBC to store my record in the database.
But it isn't working.
... giant dump of blocks of various code pasted into question ...
Please help.
Let's look at what's GOOD here:
- The questioner is self-aware enough to realize that they're trying to learn some new technologies,
- and they've decided to approach that by learning-by-doing: that is, they're trying to write some actual programs to help themselves learn
All of that is wonderful!
But, you can't learn too much at once.
You just can't.
SQL is a deep technology; it's more than 30 years old.
Java is a deep technology; it's more than 20 years old.
The JDBC API is enormous and complex; it's at least 15 years old.
And web app development technologies such as JSP are almost as old as Java itself.
So don't try to do all of that at once!
I suspect some of this arises due to poor instruction in many universities. The state of the art in programming education appears to remain dismal, decades into the discipline.
However, I think that it also just reflects unrealistic expectations by people who feel like they should be able to master deep and complex subjects immediately.
After succeeding in primary education, and in secondary education, and finding that they can learn many, many things quite easily, young learners meet the world of computer systems and unexpectedly flail and flounder.
One of the things that's wonderful about computers is that there's essentially no limit to how complex a computer program can be: if you can imagine it, you can (try to) write a computer program to do it.
That's why computer programming is a career that can bring you valuable and rewarding employment for 30, 40, even 50 years of your life, which is a truly wonderful aspect of our modern life that doesn't get celebrated anywhere near enough.
But, it's also why you Just Can't Expect To Learn It All Instantly. There's simply too much.
And it will only get more complex, over time.
So what might be a successful approach?
First, get a nice simple standalone SQL product like SQLite or H2 or Derby. Look through that tool's docs and tutorials until you're comfortable starting it up, and shutting it down.
Then add a simple interactive SQL editor like SQuirrel, and learn how to write SQL. You don't have to learn ALL of SQL, but you need to learn some basics: SELECT, INSERT, UPDATE, DELETE. CREATE TABLE. The concept of indexes, and views. Referential constraints. Table design and at least the concepts of normalization.
Then have a look at the JDBC API, and write some JDBC programs of your own.
OK, NOW you are ready to try writing a JSP web app which makes JDBC calls to issue SQL statements against a database system of your choice.
At least at this point all you're really trying to learn is the JSP and web technology.
And hopefully, the result will be that the young learner:
- Has some success, and doesn't despair, and doesn't throw the computer out the window and decide to switch their major to, say, Diesel Mechanics (not that there's anything fundamentally wrong with Diesel Mechanics, but the world needs more successful, well-educated computer programmers badly!)
- Gets enough of an introduction to the various sub-specialties of the computing world that they can make an educated and informed choice about what appeals to them, what they have a knack for, and what they'd like to learn more about.
Very, very, very few of us are going to actually end up being Full Stack Engineers, after all, and there are a lot of good reasons to not even try.
OK, odd rant over (for now).