As more and more people learn to code, better tools become available for beginners. Fortunately for me, and anyone else that doesn't know the basics, there's a wonderful website called Codecademy (Think "code-academy") that takes you through the fundamentals of any mainstream language, step-by-step. The website itself is well-coded and looks very clean, and it features reward-giving widgets like badges, which you can share on Facebook and Twitter. These rewards turn coding into something akin to playing a video game.
CSS is a language designed to go hand-in-hand with HTML. HTML lays out the content for a webpage, and CSS styles it. Short for "Cascading Style Sheets," CSS lets you group pieces of content into classes (seen as <div class="example_class"> in HTML files) and then apply properties to these groups, making it easy to modify the appearance of large parts of a web page with only a few keystrokes.
While teaching you website building, Codecademy also introduces you to a tool called Bootstrap. Tools like Bootstrap are important to modern coding. To create the beautiful sites that populate the web today, coders build upon pre-existing structures and frameworks. Often, parts of the coding process are automated. For example, when you create a new Android project in the Eclipse IDE, a lot of code is automatically generated for you. Your role as a programmer is then to work within that existing framework, rather than to build everything from scratch.

It seems to me that these are the things not taught in traditional schools. Schools, being institutional in nature, are slow to adapt, and therefore ill-suited to training people in the latest and greatest tools and methods. (I guess it depends on the teacher--but if a new tool just came out this year, it's certainly not in the official curriculum yet.) The other weakness of traditional schools is one shared by Codecademy: It gives you all the tools you need to solve the problem before you. At no point are you staring at the screen, wondering, "What the hell do I do next?"
It is this open-ended problem solving that our school system seems to struggle with. (Having just graduated from college, I'm qualified to at least speak for the schools I went to and the classes I attended.) In school, 90% of your time or more is spent solving a problem that is laid before you and spelled out for you. In the real world, problems do not present themselves to you already defined. Progress is made by finding the problem and then solving it. Sometimes, finding the problem is half the battle (or more!) I think that's why people sometimes end up feeling betrayed by the school system as they enter the real world. When faced with a real problem, they say, "You didn't prepare me for this!" No, in fact, your time in school was spent solving problems and answering questions, not recognizing them in the first place. Rarely were you presented with an open-ended problem. Why? Because they're too difficult to grade! Open-ended problems take longer to solve, and the results take longer to manifest in measurable ways.
I'm going to cut myself off before this becomes more of an editorial than it already is. Suffice it to say: Learning to actually complete coding projects is a lot different from the kind of coding that I learned in my CS 10* courses!
Back to CSS. Say you have two files, an HTML file and a CSS file. In the HTML file, you have some HTML elements:
<!DOCTYPE html>
<html>
<head>
link rel="stylesheet" href="main.css"
</head>
<body>
<div class ="classA">
<h2>Heading Text</h2>
<p>Paragraph 1 paragraph 1 paragraph 1</p>
<p>Paragraph 2 paragraph 2 paragraph 2</p>
</div>
</body>
</html>
In the CSS file (of filename "main.css",) you style the elements as follows:
.classA {
color: #f0f0f0;
}
.classA h2 {
font-size: 20px;
}
.classA p {
font-size: 10px;
}
In the HTML file, there's one div (short for "divider," or something) element. This div element is of class "classA," and it contains three subelements: An <h2> element and two <p> elements.
The CSS file contains three little chunks of code. Each chunk gets applied to certain elements within the HTML file. The element or group of elements that the chunk gets applied to is determined by what follows the dot (
.) and precedes the bracket (
{ ). The first thing that follows the dot is the class name. In this case, all three chunks of CSS pertain to some or all of the items within the HTML div element labeled as "classA".
The second thing that follows the dot is the specific subset of elements, within that class, to which we wish to apply additional attributes.
So, the first chunk of code gives a color to any HTML elements of class "classA". The color it gives is the color represented by hex code value
#f0f0f0, which is some kind of grey. (The first two digits of the hex code represent how much red is in the color, the middle two digits of the code represent green, and the last two represent blue. Since there are equal parts red, green, and blue, the color is some shade of grey.)
The second chunk of code gives a font size of 20 pixels to any HTML elements of class "classA" and type "h2".
The second chunk of code gives a font size of 10 pixels to any HTML elements of class "classA" and type "p".
And there you have the most basic parts of CSS. Explaining it verbally, it gets a bit dense! But Codecademy's show-and-tell method gets the job done much more naturally. Less reading = more fun. That's why it's a great learning tool.
That said, I'm off to complete some more segments, and maybe work on an app for a bit. Later.