During Christmas holidays, I have had the pleasure to see my little cousin. If I tell you this, it is because she showed me what she is currently studying in her schooling. She is a 20 year-old student in a field more or less related to the web. Because of this, she has been given some introduction lessons to web design and development. No big deal, only some basic HTML and CSS.
Why would we care?, you think. Wait, I am not done yet. They have been taught to use tables for layout. It’s 2015 and some web teacher in some public school is teaching their student to use HTML tables for layout and Dreamweaver as a working environment. This is wrong on so many levels.
Then I thought, okay, maybe the teacher is more like a design person than an actual developer. I was wrong all again. The teacher forbade them to use bright colors because it would look unprofessional. Along the same lines, the teacher advised them to have a 800px wide centered container, good ol' fashion style. Please.
Have you ever taken over a project only to find the code looks like it has been vomitted by some weird Godzilla? Me too. When it happens, we use to think “god, the developer was a mess”. Not entirely wrong, I suppose. But if they have done things like this, it is probably because someone has told them to do it like this.
Poor teaching means no fun
Coding is slowly becoming an important skill that is being taught in many trainings, even when remotely related to web. Some schools even introduce code to very young children. I think this is amazing. Not only because I am a developer myself, but because I do think having basic coding skills is valuable in everyday’s like now that Internet is everywhere.
For instance, having a basic knowledge of what is the Internet, what is a browser, how it works, what are the essential languages to build websites, what is a database, what are the risks of giving sensible informations online, how to spot poor phishing… This would prevent situations where people feel the urge to reboot their computer when there is a JavaScript issue on a web page, or give their credit card informations on phishing websites.
Meanwhile, many people end up saying they don’t like to code. Understandable, this is a quite specific discipline. However more often than not, I think people don’t cling to coding because they are being very poorly taught. Of course you cannot enjoy writing CSS if no one even bother explaining you the box model. This is the fucking base.
Start with a project
There are few people who like code for what it is. I am one of those people, but that does not matter. Most people see code as an end, not the end. To make them enjoy coding, you need to give them a real project. Something they want to achieve. A goal. It could be anything: a portfolio, a little app to write cooking recipes, a game, whatever as long as it’s stimulating.
My little cousin was asked to do a cooking website. She had to scrap some recipes from Marmiton.org, then put them as a website. While the idea makes sense, I still don’t think it is a good one. This is certainly not something exciting for her, hence I don’t see how she could enjoy building this site. And, oh, she didn’t.
A more suitable exercise would be to ask each student to pick a recipe of their own, and display it the way they want as long as they write valid markup, cross-browser styles, everything powered by a well-thought design.
This would be much better than asking them to have 25 HTML files with the header, footer and sidebar repeated in all of them. This teaches nothing, and certainly does not reflect the way we actually build websites.
Things have changed
Frontend development, and more generally web development, witnessed a tremendous evolution since its early stages. Because of this, people whose job is to teach web development should be aware that we don’t build website the way we did 10 years ago. Or 5 years ago. Things have changed, and teaching should change as well.
You don’t teach people to build websites using tables for layout or Dreamweaver as an editor. You give them a project to think about, and teach them the basics: box model, and valid markup. You don’t teach aspiring web developer Flash or Flex. You tell them about mobile-first design. Git. JavaScript. Grids. Postprocessors and preprocessors. Tooling.
Tell them about what they will use when building websites and applications. Not what you used when you started. This is likely to be outdated. Stop fucking up code learning.