This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
I often hear that one can contribute to open source projects or make some apps to get real world experience in programming. So, there must be plenty of opportunities to sharpen those skills there.
But, how do you sharpen your SQL skills, just after learning some basics ? The examples given in books only give you small and simple databases with easy queries. Instead, I want to see all the complicated databases and SQL operations
that big companies do. I want to do those kind of SQL operations and "DBMS tasks". Do I have go get a DB/SQL job to gain this experience ? Or is there a way I could get a little bit of it on my own ?
Java Newbie with 72% in OCJP/SCJP - Super Confused Jobless Programmer.
I am a "newbie" too. Please verify my answers before you accept them.
I think you need to prioritise. If you're just starting out, you probably need to get a taste of lots of different technologies, including SQL databases, but then narrow it down to a few key areas that will be your initial focus for skills development and (hopefully) getting that first job.
Bear's post on this thread makes a characteristically robust case for learning about web development in detail if you want to get work as a Java developer in his part of the USA. Here in the UK, most Java jobs I see are on "vanilla" JEE projects i.e. the kind of 3-tier stuff I described in your other thread, so lots of Java jobs demand these skills. In any case, you might understandably prefer to aim for a non-vanilla job which demands different skills. Depending on where you're aiming to work - both technically and geographically - and of course on your own interests, it might make sense to specialise in a particular field, such as web development or databases, but you also need to be realistic.
If it takes 10,000 hours to produce a skilled craftsperson, then you need to be able to make a living while you're gaining those 10,000 hours of experience. If you're not yet a master craftsman at skill X, and you don't have any other skills to offer, you may find this hard (although you'll probably start to become competent at your craft long before the 10,000 hour mark!). A lot of people suggest being a generalising specialist in order to maintain a balance between having specialist skills and still being able to adapt to different roles in a rapidly changing job market. So you need to keep a sharp eye on your target market and work out which direction is best for you.
Getting back to your original question, if you want to be a serious database developer on the stuff "that big companies do", you'll need to learn about the following:
Relational data modelling - how to derive the standard third normal form (3NF), identify primary/foreign keys, denormalisation etc .
SQL - not just the standard CRUD stuff but the many extra functions (especially grouping and analytical functions) and platform-specific variations.
Query optimisation on your DB platform.
Indexing and partitioning on your DB platform.
Non-3NF models e.g. star schemas for data warehousing/data marts.
Stored procedures - pros/cons, proprietary languages etc.
ETL - extracting/transforming/loading bulk data into a DB (often a data warehouse).
A lot of the heavy-duty stuff, e.g. for data-warehousing and analytics, is platform-specific, so Oracle RDBMS has a lot of proprietary tools for this, SQL Server has a different set of tools and so on. If you want to get into this stuff in depth, you'd need to focus on a particular DB platform. And we haven't even started to look at "Big Data", NoSQL databases, business intelligence, etc!
On the plus side, learning just the first two items on the above list will put you ahead of about 50% of the Java developers I've worked with, so maybe that should be your (more modest and achievable) initial goal in DB-land.
But as somebody with over 20 years' experience as a database developer, I'm kind of ambivalent about recommending you travel too far in this direction at this stage. On the one hand, there is a real shortage of good Java developers who also understand how to use databases competently, and I also think there will be a strong demand for people who understand how to manage and exploit large volumes of data in the next few years. But I've also seen a near total collapse in the job market for people with core DB development skills, here in the UK at least, and it seems to me that unless you can ramp up not just your core DB skills, but also gain experience with a lot of proprietary tools for ETL/DWH/BI etc pretty quickly, you might find it hard to break into the specialist DB job market. I know I'm finding it pretty hard to break back in! Alternatively, you might look at some of the NoSQL DBs instead, but you would need to understand how they differ from relational DBs, and why they are a good fit to some problems and not to others. Still a lot to learn there.
So FWIW, my advice would probably be to look at your local job market and your own goals, learn the basics about DBs and SQL, but if in doubt, follow Bear's advice to look at Java web development etc rather than getting too focused on DB work at this stage. Being a good Java developer with a decent basic understanding of databases will be a good thing, but don't risk winding up in a cul-de-sac at this early stage in your career.
If you still want to find out more about databases, then check out the free online DB course at Coursera for the relational theory stuff to get you started, practice on all the tutorials you can find, work on your own data-modelling project and implement your own simple web app using your DB and Java, then see how you feel about taking it further.