How should somebody teach themselves database and programming skills?
From time to time, I get in a conversation with somebody who is:
- Unemployed, underemployed, or otherwise desirous of having more commercial skills.
- Not a programmer, but desirous of having some technical skills.
- Astute enough to realize s/he will never be a serious techie.
I generally have two models in mind when guiding such a person:
- Analytics/business intelligence/stats.
- Website building.
Those are both useful skill sets for people who aren’t full-time techies, the first perhaps best for those who are more quantitative and big-company-friendly, the second perhaps better for the creative and/or rebellious types.
So what SPECIFICALLY should one guide them to do? My initial thoughts include:
- Learning Java is overkill for most of these people.
- Learning C++ is overkill for ALL of these people. If you’re not out to be a hardcore engineer, the “advantages” of C++ over Java are pointless.
- They all should learn some SQL.
- MySQL is the most accessible DBMS against which to learn SQL. They should download a (free) copy and install it on their PC.
- But I have no idea which books or websites they should go to to learn about SQL.
- While at first blush it sounds like overkill, downloading and installing the free version of Microstrategy 9 is a good way to learn about BI and also the analytic side of SQL.
- The first thing you learn in an app dev tool used to be and probably still is how to do a master-detail form. That would cover the other side of learning SQL. But what would be a good choice of tool? (Preferably free, as building serious OLTP apps is probably not what these people will want to do.)
- One idea I had is that the website-oriented ones should learn how to modify WordPress, by which I really mean modifying WordPress themes. That would involve learning PHP, SQL, and HTML/CSS, which seems like a great place to start.
- But I have no idea which books or websites they should go to to learn about PHP.
- I also have no idea which books or websites they should go to to learn about CSS — or for that matter even basic HTML.
- If they want to take the analytics route, I assume R is the way to go. Thoughts?
- Python isn’t the ideal language for much of anything, but it’s an easily accessible “first language”. Umm, is that a good way to go, or would PHP be a better choice?
- Any other ideas?
For anybody who pitches in — thanks!! I hope to get enough useful answers so as to keep editing this post with people’s ideas.
Edit: Suggestions have started to come in on Twitter. A couple of folks are saying that HTML is a good place to start. Hard to argue with that, although it’s hardly where one should finish. There also was a vote for Yahoo YQL, and of course for a vendor’s own product.
Some great points are in the comments below, including the idea that you should pick an actual, fun, small project to build to get you started. (A site built in WordPress or Mambo would be a pretty obvious choice for such a project, come to think of it.)
Comments
35 Responses to “How should somebody teach themselves database and programming skills?”
Leave a Reply
Hi
There are a few sites I recommmend for learning.
http://www.w3schools.com
http://www.SQLServerCentral.com
http://www.microsoft.com/express/
http://www.databasejournal.com
http://www.bidn.com/
http://www.pragmaticworks.com/foundation/
http://www.w3schools.com for the very basic, intro, what is html, how do I code a style sheet, what is SQL, along with tests to measure performance. Technology agnostic, this is a great start for someone with no experience
The rest of the sites are MS based, as that’s what I work in primarily.
http://www.SQLServerCentral.com for anything Microsoft SQL related. There are FREE versions of SQL and Visual Studio (SQL Server Express and Visual Studio Express :
http://www.microsoft.com/express/)
http://www.databasejournal.com – SQL and MDX code
And I’d recommend learning MS SQL + C# over MySQL + PHP – I’ve done both, started with MySQL + PHP, moved across to the MS world.
There are higher paying positions for .NET programming positions, and SQL Server Express comes with MS Reporting Services free as well.
Having said that, MySQL is a good alternative, with a lot of places doing a .NET + MySQL dev, so also a good option.
PHP IMHO is a good way to learn bad programming habits – I had some bad experiences.
More places to learn about BI :
http://www.bidn.com
Then, this is a shameless plug 🙂
Pragmatic Works, an affiliate of which I run, has a foundation program to get into BI
http://www.pragmaticworks.com/foundation/
I think .net is the easiest technology to learn. Easy to install and start with.
http://www.asp.net
You want to get someone up and running quickly with something that’s easy to learn? Get them to learn HTML.
Its easy, its fairly intuitive, and its the foundation on which all apps in the future will be built so they’re future-proofing themselves as well.
I think the technology doesn’t matter. The problem is motivation, and therefore the first steps should be optimized to maximum fun and motivation. Which means that regardless of the technology you have to create a project that will really mean something to you. If you’re a football fan then maybe create a sports database, if you like cooking (or reading) then build something to manage your recipes (or books) etc.
The next extremely important thing is to start small and gradually increase your project. This is something very very difficult and where newbies always need some guidance. But if you start small and get fast results, then you’re hooked easily and motivation keeps coming with each new function that you write.
That said, in my experience HTML and CSS and Javascript and PHP and Mysql are best for beginners. There’s endless tutorial in every language and for every level out there, and all the software and equipment comes for free.
Web programming and BI support each other well.
These are also the skill sets you are most likely to need in your first programming job.
I have been working as a programmer for little over 5 years now, in small and mid-sized Microsoft environments, and practically everything I do deals with developing public/intranet/extranet apps and delivering reports through these channels.
I would recommend starting with web development. Without users and meaningful data it is hard to motivate yourself to learn BI tools. Web development has a lot of technical and aesthetic motivators that don’t depend on real data. And even if you eventually become a BI developer, having experience on data entry application development is important. After all, data quality fundamentally depends on data entry.
For basic skills, I would recommend some form of formal training with labs. The problem with self-learning is that setting up a development environment easily takes the focus from the actual subject matter. Any large framework like Java or .NET requires a lot of administrative work. However, things have changed since I started: now you can try to avoid system administration by developing for hosted environments. For example, Google App Engine is a great environment for learning Python and web application development basics.
For BI, Microsoft SQL Server Developer Edition is a cheap and feature-complete environment. It has a nominal cost, but most IT departments can have it for free through their licensing. Except for SharePoint/PerformancePoint, it contains most of the Microsoft BI stack: RDMBS, OLAP server, Report server and ETL tools. Online documentation in MSDN is very high quality and there is a vibrant community around SQL Server. SQL Server RDBMS also has a surprisingly highly compatible cloud option: SQL Azure. Unfortunately, there is no free SQL Azure plan yet.
IMHO people get into BI by starting with Excel/Access in a low-leve job and finding out they like data or by being a finance oriented college graduate and getting drafted into the MIS team.
Say they download Microstrategy (or Pentaho or whatever). Then what? Who’s going to talk them through ODBC/JDBC? What data will they start with? I think BI is best learned on the job. Every department has an Excel jockey who needs an apprentice.
With that said… I want to second everything that Christoph Rupp says above; provided we’re talking about an adult who might like to make some money. HTML, CSS, MySQL and (sadly) PHP are the Lego bricks of the internet.
The single best place for someone to start this journey is Kodingen.com; it’s bloody fantastic! They should go http://kodingen.com/w/tutorials/main-screencast > Then sign up for an account > Then install WordPress (1 click!) > And finally start changing things and see what happens. The first lesson for newbies is “In IT you get infinite retries”. If it breaks you can *always* start again.
For a young person the answer is slightly different. They have no need to make money but a big need to be inspired. Lots of people have recommended Scratch http://scratch.mit.edu (thanks @gobansaor). My personal favourite is Hackety http://hacketyhack.heroku.com/. Either way just point the aspiring techie at the page and say something like “you probably won’t be able to work it but you can’t break anything” and watch them prove you wrong on both points. 🙂
Great stuff, guys. Thank you all!!
An appreciation that “the database is not a bit-bucket” would be good, and it’s important to know that different databases have different SQL syntax and different features. Oracle products are pretty much all free for educational and devlopment purposes, from Express Edition up to Enterprise Edition with all the fancy options, and that would ram the lesson home nicely.
David,
I was thinking of something more beginner-level than that. Hence my suggestion that MySQL would suffice to learn SQL. 😉
I agree with Joe Harris above, spreadsheet “programming” would be where I would start (Excel for those who wish to make a living, otherwise something like Google Docs). The primary benefit for those who learn to program is the ability to craft what I call “Time Assets” http://blog.gobansaor.com/2010/05/12/time-assets/ for most “civilians”, spreadsheets offer the best return on time invested.
As Joe also said, MIT’s Scratch project is a fantastic way to learn the fundamentals of programming. (Scratch is also the technology behind Google’s Android App Inventor).
As for databases, the simplest and easiest way to learn basic SQL is SQLite.
For BI, Excel 2010’s PowerPivot free add-in is the way to go.
Tom
Two best traits/habits I’ve seen are personal projects driven by passion and curiosity and gaining street credibility by taking a risk with a small tech startup that’s willing to take a risk on you.
I’ve seen *excellent* developers produced by this. In fact, I’m working with at least two right now.
Coming from a Python programmer who is doing BI I think you are a little too quick to say “Python isn’t the ideal language for much of anything”. Python with it’s excellent readability and extensive packages for doing just about anything (web, sql, number crunching, charting, gui, pdf, excel) is more that just a glue language. Sure it’s got its wart, but it’s got a lot going for it. Anyone who wants to start web programming with Django will probably learn some SQL along the way. As I mentioned a while back in my blog ( http://panela.blog-city.com/ask_matt_java_php_or_python_for_beginning_web_development.htm ), when asked whether to use java, php or python for web development, I’ve seen a lot of php devs go to Python. I’ve yet to see a migration the other way.
Another bonus for the corporate types is Python’s excellent integration with .NET and Java via IronPython and Jython. You can have your “Enterprise” cake and eat it too.
cheers!
The best way to start learning programming is here:
http://mitpress.mit.edu/sicp/full-text/book/book.html
“Structure and Interpretation of Computer Programs”: don’t be afraid about the title, it is really easy to read. The langage used is Scheme, which is somewhat the easiest langage to manage. The rest is well, application and peculiar…
I think it is also the base of the 101 course about programming at MIT.
I’m not at all qualified to advise programmers, but here’s my advice for would-be web designers:
Learn HTML, then immediately (or simultaneously) learn CSS. HTML and CSS are so intertwined these days that HTML is useless without CSS.
Practice both of the above until you can write the code yourself with VERY minimal cheating– preferably no cheating at all. (If you cut corners here, you’ll pay for it later in wasted time and frustration. You’ll no doubt use a tool like Dreamweaver to build your real websites, but eventually those tools WILL screw something up, and you need to know how to fix it.)
Then learn basic PHP and basic Javascript. You don’t necessarily need to be able to write long, complicated scripts by yourself, but you should be able to read other people’s code well enough to follow it and adapt it to your own needs.
Learn about blogging software– how it works, how to customize it, and how to build/edit themes. (There are several popular blogging platforms. If you only have time to learn one, learn WordPress.) If you already know PHP, it’ll be a breeze.
Learning something about mySQL is definitely a good idea, although I’ve managed to get by without it.
Just about everything else falls into the “nice to learn if you have time, but you can get by without it” category, IMO. (At least from the technical side. Design skills are obviously non-negotiable, but that’s a whole other topic.)
As for resources:
I’ve always relied on the O’Reilly handbooks to learn code of any kind. Their format works well for me, although some are definitely better than others.
For WordPress, the online codex and forums have been sufficient.
Otherwise, I’ve done a lot of learning by example– looking at other people’s scripts, themes, etc. and seeing how they did things. Just be careful about blindly following someone’s example. I’ve learned that one the hard way. 😉
Personally, I have learnt a few stuff by examples, i.e. by looking at one’s code, but mostly, if I wouldn’t have re-done by myself, I wouldn’t have had that confidence that I can do problem solving using programming. I believe, practice does help.
But yes, as far as programming and database skills are concerned, I guess, what one needs to focus is what would the intended objective be, and to start with, working towards the objective should be good. Over a period of time, one would tend to have things at their finger tips, and that is when, one would create one’s own tricks, tacts and cheat sheets. Objective based learning would then be of lesser relevance.
I want to chime in support of Joe and Tom’s agreement that Excel and/or Access are “gateway drugs” to databases and programming. However, despite the point about spreadsheets actually being a more appropriate tool for most lay people, the question was specifically about how to learn databases, i.e. how to get beyond that. So Excel is out.
I think many people get into databases via MS Access (and a number via Filemaker Pro also).
I learned SQL as a young person by just flipping back and forth between the Access 2.0 “visual” editor and code editor. Since then I have lost count of the number of people who told me they learned SQL the same way. Any good round-trip query editor could serve this purpose.
MS Access has a way of sucking you into programming, and I know some people have gotten into programming (VBA) via this route. Unfortunately, this is because it’s often impractical to make Access work WITHOUT custom programming.
As someone who has taught Access off an on, to users of different levels and in organizations of various sizes, I have NEVER found what I consider to be a great intro book.
I think web programmers should understand at least the general concepts of SQL. (E.g., I disagree w/ Melissa about that a little bit.) Is Access as good a way as MySQL to learn that? Better?
Oh, web programmers definitely need to understand SQL. But for web designers, I still put it in the useful-but-not-quite-essential group.
Access is a compromise for learning about SQL in my view. It mirrors the concepts of a “proper” database but often uses different terms. Also, it is basically limited to departmental (PC in the corner) uses. I started out doing reports using Access/VBA myself, just like Chase, but had another steep learning curve when I got onto a real database with a real BI tool.
If you are in a business and looking to do something on the job then Access is probably your best option. However, getting it installed can be a challenge because IT departments see it as encroaching on their territory. { God knows what they’re going to think when PowerPivot gets traction… }
If you are learning in your own time on your own PC then MySQL wins hands down. There are tons of helpful tutorials and getting started guides available and you’ll be learning something that has millions of serious production users.
I’ve worked in quite a few different environments and just within the last 2 years fell in love with Python, and I happened to come across these 2 free online books for it that seem intriguing
“Invent Your Own Computer Games with Python”
http://inventwithpython.com/
“Snake Wrangling for Kids – Learning to Program with Python”
http://www.briggs.net.nz/log/writing/snake-wrangling-for-kids/
I haven’t checked them out but they’re aimed at kids and non-programmers.
I definitely agree with the need to have some kind of a goal/project. I would absolutely recommend Python as a good starting language for any beginning developer. As has been said, it reads fairly easily, without a ton of cryptic symbol usage. On top of that you have the option of Django, which is how I got into Python. I can’t say enough good about the framework and it’s excellent documentation.
As for the database side of things I think the best way to go is to first understand the programming language. I would recommend both books like the ones above and tutorials like the one in the Python documentation, Django has one too. The tutorials tend to be very basic and easy to get your head around, excellent ways to ease yourself into the language. Afterward they will have a grasp on the language and can learn from examples on how to connect to databases and how/where to use queries. Along side a book like SQL for Dummies or something to that effect. The DBMS really won’t matter too much, MySQL, SQLite, and Postgres seem to be at about the same maturity level. I don’t know how the Dummies books are on the programming side of things, but these may be a good resource for other languages and development aspects also.
Off the topic of Python, the Visual Studio Express and SQL Server Express combo is tough to beat. You just need to find some good books/resources to explain the environment. Visual Studio is the Rolls Royce of IDEs. As much as I love Python this may actually be the best bet for many staring developers because of the refined visual interface.
For Analytics I recommend to learn SAS , then SPSS, and then R- because of market demand for suck skills in terms of jobs. Of course R teaches object oriented programming will the others are more basic programming languages.
I would recommend SQL from MS SQL Server- and SAS also has a bit of SQL.
For Databases it is hard to argue with MySQL.
For OLTP , Cognos and Crystal Reports are both easy to learn and skills to earn by.
I wrote a piece on top 10 certifications in Analytics/ BI at my site for formal certifications for enhancing resumes here at
http://decisionstats.wordpress.com/2010/06/01/certifications-business-analytics/
I would go with WordPress as a learning skill ( but there is not much money in it due to competition) and also to enhance visibility via blog/social media.
To create websites it is also better to pick up Adbobe’s suite of products including Flash et al.
My thoughts are, if they can’t figure out Google enough to see what is commonly used and then teach themselves… Well, then, they don’t need guidance. They are not technical/ A DBA/Developer etc in nature and would need too much “help”.
Set them free to go back to business or whatever and leave the tech up to the tech folks.
Of someone has a aptitude towards DB’s, programming, computers in general, they don’t have any use for this FAQ.
@Me Googling it self is a skill. I know many very intelligent and technically inclined individuals who I believe do not use Google well, and thus don’t get the results they could.
Just because they don’t know how to use Google in no way indicates what they can learn.
Everyone seems to assume that SQL is almost an afterthought and really easy to pick up. First if all the SQL in MS Access is pathetic and nowhere near ANSI standard. It’s one way to learn SQL really badly. Get SQL Server Express or Oracle Express.
Another thing is that SQL is NOT easy – it just seems to be because it’s easy to get answers. However, most programmers never learn to think in sets, so they see all data in terms of records and usually know nothing about proper database design. Consequently, they don’t know how to test SQL for correctness.
BI is the last place I would send a newbie – it’s a whole level of SQL skill above mere Web programming.
If you need hand holding and a fun productive learning path I suggest Murach’s JavaScript and DOM Scripting book followed up or in conjunction with CSS: The Missing Manual. These books along with a good search engine will get someone started with web design and development.
I think that Alf makes a good point. Database design and query skills tend to be a one of the more misunderstood/neglected parts of many beginning programmers efforts. A simple web search like “learning relational database design” brings some decent results like:
http://www.databasejournal.com/sqletc/article.php/1469521/Introduction-to-Relational-Databases.htm
I think the database side of development is more difficult because you often have to create the visual representation as a secondary effort to creating the DB itself. Alternately many developers can “see” their application fairly clearly in the code they write and the interfaces they create.
Additionally, the DB also goes beyond just the structure. You need to get an idea of what your data actually looks like. The data you have is only as good as the error checking and integrity checks you have in place. To be able to get an idea of what the data does look like you need to create proper queries.
This can all seem very hidden and takes a while for many people to get their mind around. All of this to say, if you will be dealing with databases, they deserve just as much attention if not more than the programming language.
[…] How should somebody teach themselves database and programming skills? […]
Regarding BI (not the web part) – in bigger companies i find new employees often start with reporting or etl. Only when you are more experienced you will do architecture and data modelling.
If you don’t have a actual project, having a look at some of the applications (free microstrategy, MS SQL Server BI Stack, JasperSoft BI, Talend, Pentaho, Qlikview, Tableau, etc) is certainly not a bad idea. Nowadays they are quite fairly easy to install and often come with sample data.
From the theoretical side I would recommend reading a Ralph Kimball and Bill Immon book, just to get a bit of different oppionions on design aspects. E.g.
The Data Warehouse Toolkit: The Complete Guide to Dimensional Modeling (Second Edition) and Building the Data Warehouse (instead of directly jumbing at DW 2.0)
For learning SQL – Oracle has some really good interactive learning programms with CDs. Can’t find the title right now. But defenetly worth it. Because without some training path or tutorial with example or real world task learning SQL is quite dry.
If you want to dive into the analytics part of BI a different route should be taken – quite a bit already mentioned above.
They should learn: Ruby or Python for server side programming, Javascript, HTML, CSS, and jQuery for client side programming, SQL (using SQLite) for database programming.
All of these languages have programming environments that are interactive so that they can learn as they do, fail quickly, and move on.
Check out videos at http://www.youtube.com/user/Jaynonymous1 if you want to see more of what you can do with SQLite.
For books on HTML, CSS and JavaScript, check the recommended reading by the Web Standards Project at http://www.webstandards.org/learn/reference/books/
[…] article is in response to DBMS2’s How should somebody teach themselves database and programming skills? with an eye on Business Intelligence […]
[…] article is in response to DBMS2’s How should somebody teach themselves database and programming skills? with an eye on Business Intelligence […]
[…] were many thoughtful responses to my question about how somebody should teach themselves database programming skills. Indeed, whole other blog posts were written and linked back. That’s a great resource if you […]
[…] DBMS2 take on learning programming […]
As for learning I highly recommend to visit and study http://www.sqlite.org subscribe to one of the author’s maillists e.g. sqlite-users and/or just use it. For me SQLite is at like nine+ W (topping the ‘infamous ;-)’ six sigma…
Alphabetically indexed!
* Well-accelerating (and ‘excel-a-rating’)
* Well-advanced
* Well-built
* Well-designed
* Well-documented
* Well-educating (to be on topic for a change)
* Well-maintained
* Well-priced (that’s kind of an understatement)
* Well-supported
Paraphrasing their own ad: Choose any nine