LPIC-1 Exam 101 Study Plan

I’ve worked almost exclusively with Windows machines for the past years. However, this is changing rapidly (by circumstance, mostly) at the moment. So the time was never better to start a deep dive into Linux.

As you can see from my past Study Plans, I’m a big fan of “breadth-first” learning. I’ll go into a focused, meticulous, relentless grind starting at the very beginning. I plan to do the same for my Linux studies.

Certification Downsides

I will mention two major problems with certifications though:

  1. The certificates are near to worthless.
    Cheating your way through is commonplace, especially at companies that care only about being able to charge more for an employee because they’re certified. The only “worth” of a certificate lies in the fact that it reminds you that you’ve passed it fair and square.
  2. They tend to test a lot of silly or unimportant knowledge.
    Experts will tell you that many things you need to know to pass an exam are things they will in reality actually have to look up. Knowing whether method so and so returns an INT or BIGINT is useless, in real scenarios you’ll have an IDE or documentation to tell you this.

But for me striving to pass an exam is worth it nonetheless. Following exam objectives closely gives me confidence that I’ve got a solid basis, and frees me of having to spend any mental-cpu-time on monitoring that. I want to cover as close to 100% of the important topics as possible, and I guess covering 130% worth of material is one way of doing that.

Here’s a visualization of what I mean:

Venn diagram of Study Plan Coverage
Venn diagram of Study Plan Coverage

The blue area covers the green area for the most part, and it takes zero time to use it as a study guide. The red area is a plan I would probably create myself composing it from various resources. But creating it would cost me many hours, and is more likely to leave serious gaps.

So I’ve decided that going with exam objectives as a guide is a sane choice for me.

The Actual Plan

So how about the actual plan? Isn’t that basically the objectives from the website then? Well: yes and no. I also like to publicly share my plan, for two reasons:

  1. The main reason: it gives me confidence I’ve got a solid plan.
  2. Secondary reason: others might find it useful.

In addition, as a side effect, I guess it motivates me: feeling that “others” are watching my progress makes me want to complete everything. Regardless of whether there are such “others”.

This time around I tried something different from the previous Study Guides. I’ve used Trello to catch the study plan. You can check out the public board yourself. Here’s a screenshot:

LPIC-1 101 Study Guide Trello Board
LPIC-1 101 Study Guide Trello Board

Personalizing The Plan

Finally, you can easily copy this board and use it as a starting point for your own studies. This is quite easy to do:

Copy Trello Board
Copy Trello Board

It’s exactly what I have done, and you can follow my progress on Trello.

And now that I’ve told you about this, dear reader, I will have to complete my studies…

Learning to Linux: the Road to Becoming a Power User

Let’s first set the scene: I’m participating in an Infi study group and would have to present to colleagues about “WTF is Linux?”. Interestingly, I am a total Linux beginner, and they were ranging from intermediate to advanced skill levels. Joy!

So, what’s on the to-do list? Three things:

  1. Understand history and context of Linux;
  2. Get to know what you don’t know yet;
  3. Learn what the tools to learn more are;

Basically, I’m looking for all the things I need to get started and to keep going. Note that all this is aimed at folks that are at least to some degree a power user.

History and Context

First there was Unix, which was great, but it was closed source and not very portable. So Richard Stallman set to create a clone: GNU. However, the kernel “GNU Hurd” didn’t work out so well at the time. So Linus Torvalds wrote the Linux kernel in the 1990s, and together they now form the Operating System “GNU/Linux”, often referred to as just “Linux”. History has by now shown that GNU/Linux was far more popular than GNU/Hurd.

Before we dive into Linux itself, let’s consider its place amongst other Unix-like OSes. There are both open source ones such as Minix and FreeBSD, and closed source ones like Solaris. All of them are fully or partially compatible with “POSIX“: a standard for OSes. You can get the full picture at Wikipedia, but here’s a simpler version:

Unix-like OSes overview

Zoom in on the green “GNU/Linux” box, there turn out to be very many Distros. A distro being the Linux kernel, GNU tools, a package management system, and possibly a window system and desktop manager. Again, there’s a full picture at Wikipedia, but I made a more condensed overview:

Linux Distros Overview

The top ten distros for 2016 according to DistroWatch are as follows:

Rank Distro Package Manager Default Desktop(s) Comments
1. Mint dpkg Cinnamon, MATE, Xfce, KDE community-driven spinoff from Ubuntu with a lot of out-of-the-box multimedia stuff
2. Debian dpkg Gnome reliable Linux distro that can be used plain, but is also the ancestor for many other distributions
3. Ubuntu dpkg Unity (moving to Gnome 3) beginner-friendly spinoff from Debian, both for desktop and server environments
4. openSUSE rpm None, Gnome, KDE community program sponsored by SUSE, to promote use of Linux everywhere
5. Manjaro pacman XFCE, KDE, Gnome power and flexibility of Arch, but with a friendly installer and some more GUI stuff added
6. Fedora rpm Gnome latest and greatest features that will also go into Red Hat Enterprise Linux
7. Zorin dpkg Gnome 3 spinoff from Ubuntu for newcomers accustomed to the Windows GUI
8. elementary dpkg Pantheon spinoff from Ubuntu with the look and feel from Mac OSX with a few custom apps
9. CentOS rpm None, Gnome, KDE basically Red Hat Enterprise Linux without the enterprise license and support fees
10. Arch pacman CLI very minimalistic Linux distro, requiring the user to take control of the OS

There is also a pretty good Youtube video that gives some context about this same list.

Oh, and obviously I also have to do an honorable mention for the weirder, more “clickbaity” Linux distros: Satanic Ubuntu, Christian Ubuntu, Damn Vulnerable Linux, LinuxBBQ, Slackintosh, and Stresslinux. For the most part I have no clue what they do (if anything at all), I’ll leave that as an exercise to the reader.

What to Know

First thing to do when getting started with a new technology is finding out how much you don’t know yet. Thinking about the Dunning-Kruger effect…

Dunning-Kruger effect

… I would like to start at the Valley of Despair right away. And I’d like a clear path of that slope ahead of me. Please.

Now obviously you can’t start from zero; even reaching the Valley requires some knowledge. So investing some generic startup time seems good. Here’s a few suggestions:

But where to go from there? What is there to know? Well, there’s a few obvious resources that serve as very natural check lists:

In addition, it seemed helpful to try to do one or two nontrivial in-depth tasks in a VM, and see what you encounter. For example setting up a LAMP stack to host WordPress in a VM, or cloning a cool project and getting all dependencies (like Java, ugh!) up and running.

At the end of my research, and with help of my study-buddies, I conclude these are the few essential skills that I’m missing to be productive with Linux as a developer or sysadmin:

  1. Command Line. Without solid knowledge here you’ll feel lost for any nontrivial task in Linux. Some “introduction to Linux” articles tell you it’s not really needed (depending on the distro you choose), but I disagree, and think you’d get frustrated unless you learn to use it.
  2. SSH. Related to the Command Line, knowing how secure shell works is essential to managing a remote Linux instance (e.g. a VM in the cloud). This includes knowledge on managing SSH keys.
  3. Nano or Vim or similar. Also related to the Command Line. Often you’ll have to edit a config file from the command line, and being able to do that confidently is quite helpful.
  4. File System Hierarchy and Permissions. Knowing where to find stuff (and who has access to it) is essential to be productive. On a specific note, it seems important to know where things will be logged (e.g. where does a package install or server software keep its logs).
  5. Package Management and Installing Software (and troubleshooting that when it goes awry). Most interesting tasks on Linux require installation of libraries and software, and quite often this can go awry. You need to learn how to debug this.

My advice, at least to myself, is to sit down and carefully master these first. At least to some degree. Only then will other tasks on Linux (e.g. managing an NGINX server) not be a frustrating job anymore.

Learn to Learn

So how do you most efficiently climb this learning curve? Discoverability of essential info on Linux can be a bit of a problem. But here’s a shortlist we came up with:

  • man can be used with any other command as an argument, and it will explain all about it
  • info is GNU’s answer to man, intended to be more fully-featured (hyperlinks and such) and comprehensive
  • The “bropages” is like man but more succinct and example-based
  • locate, find, and which are commands for finding stuff on the file system
  • aptitude in Debian distros, or a similar tool for your set of distros, to help understand the package system
  • unix.stackexchange.com can be a great generic resource for Linux (and other *nix OSes)
  • https://askubuntu.com/ is quite a vibrant community should you choose to use that distro
  • LPIC (or similar) exam objectives can be a great study guide
  • read shell scripts before executing to learn
  • and as a final trick, you could do git init in a certain folder (e.g. /var/log) and use diffs to check how things change following your actions

However, perhaps unsurprisingly, the most common piece of advice when asking experts “How to learn?” is…. practice. Practice, a lot!


PS. This was cross-posted to Infi’s blog.

70-480 (HTML5 with JavaScript and CSS3) Study Plan

Looking for my exam summary? Jump straight to it! Want to know more? Keep reading…

Last year I published my study plan for the 70-513 Microsoft exam (“study log” would’ve been more appropriate), which helped me pass the exam (without cheating by using brain dumps) with just under 200 hours of study time. This time I’m going for the 70-480 exam (html5, JavaScript, and css3), and I’ve decided to use an actual plan. When I started rolling up this plan, there were a few premises.

First up: the date for my exam is already set. I will probably not be able to spend a full 200 hours on the subject matter before planning my exam. The plan will have to scale with the amount of time I will turn out to have available. Anyways, given that the exam was free of charge, it’s not as big a deal if I don’t pass it.

Secondly, the subject matter for 70-480 is not entirely new to me, as was the case with the 70-513 (WCF) exam. So, my plan would be okay even if it omits more general prose about the subjects and sticks to the details of objectives. I’m not sure how this will affect my chances. I’m hoping my existing knowledge make things easier, but at the same time I’m afraid that it won’t…

Finally, and most imporantly, I figured that reviewing the exam objectives very carefully should be enoughBecause the exam is brand new, there is no official study guide, nor are there any books specifically aimed at the exam. I was hoping to piggyback on someone else’s summary, but given that I couldn’t find any decent one, I decided to create my own.

The Plan

So here are the steps I’m taking to study for this exam:

  1. Create an overview of all exam objectives.
  2. Find links for all objectives (at least one, preferably two or more per objective), from various sources:
    1. The relevant spec.
    2. The W3 wiki, if applicable.
    3. MDN (my personal favorite source for most web development topics).
    4. MSDN (it’s a Microsoft exam, after all).
    5. jQuery (Microsoft’s gambling hard on this library, it seems).
    6. Miscellaneous other sources (DiveIntoHtml5, Stack Overflow, etc)
  3. Review all objectives by reading through the linked pages.

So far I’m pretty happy with the result. If you want to piggyback on my 70-480 summary: be my guest! It looks something like this:

70-480 Study Guide

Creating the list and digging up all the links took a few nights work, all done over the course of the previous two weeks. Next up: two weeks of reviewing these objectives, followed by the exam itself.

Wish me luck!

MCTS 70-513 (WCF) Study Plan (part 2 of 2)

This is part 2 in a series on the MCTS 70-513 exam. The first part is an introduction, the second part describes the study plan I followed to complete the exam.

There were two questions I wanted answered when I set out to study for the exam:

  1. How much time is reasonably needed to pass the exam?
  2. What materials are recommended and/or needed to pass the exam?

The first question was impossible to answer or to find an answer to. The second one was a bit easier, even though I had to filter the many suggestions to use Braindumps. Here is my answer to both.

Overview

Let’s kick off with an overview of the materials used, and provide an answer to question one:

Material Hours spent
MSDN Getting Started With WCF Tutorial 2
Book: Programming WCF services, 3rd Edition 35
Book: Windows Communication Foundation 4 Step by Step 47
Book: Microsoft .NET Framework 3.5- WCF Self-paced Training Kit 34
Stack Overflow: Reading and answering questions on [WCF] 30
Memorizing web.config’s system.serviceModel section 6
Reviewing All 70-513 Exam Objectives 36
Grand Total 190

If you’re going to create a study plan for yourself based on this, you should note the following:

  • These are pure study hours; breaks and such are not included.
  • This is what worked for me; no warranty given or implied!
  • I spent these hours mostly in the order above.
  • Before these hours I had zero experience with WCF, a wee bit experience with ASMX services, and quite a bit of experience with ASP.NET.

The great thing about these 200- hours: this is approximately what I estimated up front I’d need to get a passing grade.

Materials Used

Here are some miscellaneous details about the abovementioned materials.

Programming WCF ServicesProgramming WCF services, 3rd edition

This book by Juval Löwy is widely considered the most in-depth book about WCF. It explicitly focuses on the things the author deems important, leaving out (or just barely mentioning) the esoteric or “useless” bits of WCF. When studying for something I prefer to get in over my head, and slowly fill in the gaps. If you prefer to build up your knowledge steadily instead of doing a deep-dive: save this book for last.

Windows Communication Foundation Step-by-StepWindows Communication Foundation 4, Step by Step

This book was probably the worst but most complete tour you could get for WCF. It takes you along most of the features with practical excercises, but is horrible in explaining things (even mis-informing at times). The worst part about this tour is the fact that you have to follow the tour guide to the letter, otherwise you’ll get lost without any clue how to get back on track. Glad I read the other book first, which allowed me to understand what this tour guide was showing me.

WCF Training KitWCF 3.5 Self-paced Training Kit

There is no .NET 4 version of the WCF training kit (makes you wonder how invested Microsoft is in this technology, huh?). Instead, most fora recommend just grabbing the 3.5 version. This book is very decent, has topics chopped into nice small chunks, offering a mix of theory, exercises, and training questions. It also was very complementary to the book by Juval Löwy.

Stack Overflow

Answering questions on the various Stack Exchange sites is one of my current hobbies. It made sense to practice and test my WCF knowledge by answering questions, and I can highly recommend it as a form of study! It was based on the slogan: “If you want to get good at something, start teaching it!“. Words of wisdom.

Memorizing <system.serviceModel>

Okay, maybe not one of the brightest ideas I had. It did act as a general review of WCF, but in the end it didn’t feel worth it. I suggest you spend your time on something else.

Reviewing the Exam Objectives

This was crucial to passing the exam. I printed all the objectives, and went through each letter of it, making sure I knew exactly what each and every item was about. I reviewed every topic by at least looking it up in one of the books I had, and often enough I also went on to read more about it on MSDN. This exercise was useful not in the least because there were some objectives on the list that weren’t even mentioned in any of the books.

In Conclusion

There’s a lot about the 70-513 exam that understandably lures folks to using those brain dumps. The most important things to mention:

  • WCF is a vast topic, boring in many aspects. Given that you’ll only use a small subset of WCF.
  • Questions on the exam are horrible, with things like “In which namespace does class X reside?“.
  • The exam on itself tests factual knowledge and not in the slightest practical proficiency.

Yet still I’m glad I finished and passed without resorting to “cheating”. The above study plan is what did the trick for me. Maybe it’ll help someone else too.

MCTS 70-513 (WCF) Study Plan (part 1 of 2)

This is part 1 in a series on the MCTS 70-513 exam. The first part is an introduction, the second part describes the study plan I followed to complete the exam.

A few months ago I started studying for the MCTS 70-513 exam on Microsoft WCF (web services). Before I started I had already heard of a phenomenon I knew under the name “TestKing”: test-questions to prep you for the actual exam. As I found out, “TestKing” is just one of the more well-known Brain Dump providers: cheat sheets with just about all the possible questions you may get on your actual exam.

Microsoft Learning logo Turns out a lot of people use these prep sets, usually as a companion to quite a bit of study time. They ginormously improve your chances of passing the exam, partially because they shield you from (amongst others) the utterly worthless type of question: “In which namespace does BadAssClassXyz live?”. In fact, it seems you can pass an exam with nothing else but about 20 hours of cramming those brain dumps.

Early on, I decided I would try to get the certification without using brain dumps.

Okay, glad I got that decision out of the way. Time to make a plan of attack, time to find out how much study time would be needed to pass the exam without resorting to cheating. So I hit up a typical Google query, but that turned up nothing. Following that I searched Programmers.SE, finding only this meagre question which just links to companies providing test exams or brain dumps. In the end, the only thing remotely useful was a blog post I didn’t find until one week before my exam date: this overview of MSDN links for reviewing the exam objectives.

Turns out, nobody knows, or at least nobody has posted online how much time studying for MCTS exams typically takes. Is it 40 hours? Maybe 150 hours? Or even a 1000 hours? Sure, the answer will always be “it depends” to some degree, but if only someone had posted how much time it took him/her this could help get a general idea.

So I decided to diligently keep track of my study hours, and publish them on my blog once I had passed my exam. By now I’m the proud owner of an MCTS 70-513 certificate. So stay tuned for part 2 in this series, where I’ll post the study plan actuals that turned out to be good enough for me.

Read on for part 2, detailing the study plan.