Arthur Krewat writes: > For today's kids, well, it's a much different story. My son has a CS > degree, but has almost no experience really peaking under the hood of > any OS - some small ventures into kernels, but nothing huge like UNIX. > Which brings me to another thing. Linux sources are freely available, > and yet I don't see anyone really looking at them as an educational > thing. I might be wrong, my experience in higher education is NONE. I know kids who have poked at this stuff in college. But, it opens a whole 'nother can of worms. UNIX was small. One could actually understand it pretty easily. Linux is huge. I hate to say it, but it's gotten bloated. And it suffers from a problem with open source. Don't get me wrong, I love open source, but it's not perfect. I'm worried that I'm going to come across as flogging my in-process book too much on this list. Not my intent, it's just that I've already written stuff that addresses this topic. Here's what I have to say on it (this part hasn't been attacked by my editor yet). It's way cool to me that I can run it through nroff and have it work! A Young Programmer’s Computer Primer Open Source Software Open source software is widely successful despite alarmist propaganda by some established closed‐source companies.1 A main advantage of open source software is that many more eyeballs are available to look at the code which translates into benefits such as greater security. Even if you used a closed source computer system there is a pretty good chance that you’re still using some open source components. The development of open source software was greatly enhanced by the Internet and ‘‘cloud’’ services. It’s trivial to find open source projects and to start your own. But, and this is a big but, the majority of open source projects out there are garbage. A lot of open source software comes from student projects. Since they’re often first projects, the authors haven’t yet mastered the art of writing good code. And, much of this software is unfinished as the student finished their class or graduated or just moved on. It’s often easier to rewrite something than it is to decipher someone else’s poorly written and documented code. This is a viscous cycle because the rewrite often doesn’t get done so there are multiple ver‐ sions which don’t work in different ways.2 It’s often difficult to determine whether or not there is a good working version of something because there is so much litter. There is a belief that one of the advantages of open source software is that you can fix bugs that you find. Unfortunately, much of this software is so poorly written and completely undocumented making the amount of effort required too great for a casual user. Just because something is open source doesn’t mean that it’s a great example of the craft. But, you can learn what not to do just as well as you can learn what to do from looking at other’s code. There are two indicators, one positive and one negative, that you can use to help determine the quality of a piece of code. The positive indicator is whether or not a project is under active development3 with more than one contributor. It often helps if a project is supported by some organization. Many of the major open source projects originated at companies4 who still support their development. Others have been donated by companies to foundations that support their development. This often yields a consistent vision which keeps the project on track. This indicator is not completely reliable5 so take it with a grain of salt. The negative indicator is the type and quantity of dialog that you’ll see at various programmer ‘‘self‐help’’ web sites. If you see lots of ‘‘I can’t figure out how to make this work?’’ and ‘‘Where do I start to make this change?’’ questions then it’s probably not a great piece of code. Furthermore, if the responses are mostly useless non‐answers or snarky and unhelpful then the project probably lacks good develop‐ ers. Developers who blame the questioner for their own lack of qual‐ ity work are not good role models. Of course, it’s also a bad sign if there are no comments or questions as it means that the code is proba‐ bly not used. Cautionary tales aside, open source is a great thing. Make your code open source when it makes sense to do so. But first, learn how to do a good job so that your code becomes a good example to others. __________________________ 1 For example, Microsoft claimed that ‘‘Open source is an intel‐ lectual property destroyer. I can’t imagine something that could be worse than this for the software business and the in‐ tellectual‐property business’’ despite the fact that they were secretly using open source tools in‐house. 2 I recently needed to extract tags from mp3 files and tried six different open‐source programs each of which failed in a differ‐ ent way. 3 This doesn’t apply to projects that have been around for a long time and are actually ‘‘done’’. 4 One must be careful of open source projects created at companies who are later acquired by companies with different philosophies. For example, Sun Microsystems was a prodigious developer of open source software including OpenOffice, Java, and VirtualBox. However, Sun was acquired by Oracle who ended support for some of these projects and tried to find ways to control and monetize others; see the Oracle versus Google lawsuit for details. 5 For example, the code base for the firefox web browser is a poorly documented complete mess. Copyright © 2001‐2017 Jonathan E. Steinhart. All Rights Reserved - Page 2