Discussion:
Suggestions for LAMP Curriculum
Ed Felt
2014-09-18 21:25:15 UTC
Permalink
I am looking for Suggestions for LAMP Curriculum for a sophomore level
college class. Please share any opinions/suggestions you have. The goal
of this class is to teach the major admin skills that are necessary to
support the most popular services that run on Linux with major emphasis on
managing and running production Linux servers and minor emphasis on
performance/coding of the databases and web technologies. It will be for
students that have successfully completed a Linux Administration course:
setup, bash skills, etc...

1. Some are saying that PHP is dying or almost dead but what about sites
like Yahoo and Facebook that still use it heavily? Should PHP/MySQL be the
main crux of a LAMP class?
2. How important is MySQL currently? Would MariaDB be better to teach
in such a class?
3. Should this not even be a LAMP class (with focus on MySQL/Maria and
PHP/Python/Perl) but a class that just teaches the basics of the most
popular and emerging database/web technologies that run on Linux like
Hadoop, MongoDB, NodeJS, MySQL, MariaDB, PHP, Python, Ruby, Perl etc...?

The focus of the two year college I teach at is to prepare students as
quickly and thoroughly as possible to go into the workforce, not just to do
two years of college to transfer to a four year. So the main focus is
skills and experience as apposed to theory, (though it's important to have
a little theory in there), enough to one could get an internship or entry
level job by the time they graduate from the two year program. Of course
flame wars are welcome :)

Sincerely,

C. Ed Felt

/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/
Nicholas Leippe
2014-09-19 00:55:51 UTC
Permalink
There's a considerable difference between how to administer a stack and how
to architect a stack.

The latter is about guessing/testing/measuring what needs to be scaled and
selecting how best to implement it so that it can scale (language,
client-server protocol (e.g. JSON-RPC vs RESTFul or HTTP vs sockets),
backend storage container(s)). This often is dictated by the business
rules--the type of data, the semantics required of the data and
transactions, and the use cases interacting with the data.

The former is a matter of selecting and using toolsets to make the stack
manageable and maintainable--deployment tools, update tools, backup
strategies and tools, how high availability is achieved, and other
logistical considerations (which webserver, which os, where/how it's hosted
(vm, bare, docker, jailed), data location (san/local storage/db/distributed
fs,memcache,reverse proxies), where/how/of what are logs captured, etc)

In either case, there's enormous room for preference--even after deciding a
working set of the above there is still enormous room for preference in the
millions of little implementation details.

You say your focus is on both--primarily on the admin, secondarily on the
performance/coding.

For admin, I'd say focus on the most common current setups. Teach them how
to work with the main canned environments: bluehost, rackspace, amazon,
hostgator, etc. Teach them how to translate between similar setups with
common distros: centos, ubuntu, rh, debian. You don't have to do all of
them, but get them used to knowing where to go to figure out the
differences (man pages, google, IRC).

Make sure they know what all the components are at a high level, and only
delve into the parts that they'll deal with most often. E.g., take them
through the entire process of creating a site for a new company from DNS
registration, DNS records & hosting, creating and installing SSL
certificates for HTTPS through setting up a webserver with a database. Then
get picky about logging, ssh keys, (no ftp!!!), troubleshooting, backups,
update procedures (what happens when you have two webservers in DNS RR and
only update one?, etc). Another good exercise might be having them move a
complete, working site from one hosting provider to another--lots of
details can be missed.

Performance/coding is such a large topic I'm not sure how you could
condense it in any reasonable way. Teaching how to be resourceful is
probably more valuable than trying to teach the answers up front. Give them
a vm that is misbehaving and have them figure out why and how to fix it.
Progress it to more and more obscure problems--troubleshooting skill,
experience, and ability are invaluable. Solutions can include changing the
code, changing a query, or changing the stack setup (tuning a db, indexing
a column, changing the # file descriptors, etc). Knowing what tools or how
to look for more tools is useful (e.g. htop, mytop, dstat, lsof, etc.)

PHP is not dying. It's very large and everywhere. It's a terrible language
that makes it very easy for newcomers to learn very bad habits and bad ways
to do things. However, it's very easy to be productive in because it's an
easy language to use and is fairly well documented. I wouldn't spend a lot
of time on it because they can learn it on their own later when they
actually need, so long as they learn to be resourceful. If you focus on a
better language such as python, they will learn better programming skills
and that will translate to writing better PHP once they do use PHP. Point
them at sites/articles that talk about better ways to use PHP for when they
do need it.

MySQL vs Maria vs Percona doesn't really matter. They all implement 99.9%
the same exact SQL flavor and features. They will also require nearly the
same administration. Converting from one to the other might be a good
exercise though. You may also want to spend some time with MS SQL since
they very likely will encounter it in the workforce.

I don't know if I'd recommend nodejs--while it is gaining some popularity
it is not most people's first choice for backend services. Javascript,
however, is a must if they are learning to be a full stack developer--and
that combined with all the other stuff you'll teach them will make learning
nodejs for them later a simple exercise.

Ruby is turning into a one-trick pony--ruby with rails for web apps. It
hasn't seen much growth outside of that. There may be a lot of existing
codebases using ruby+rails, but I don't see it as becoming an industry
leader any more--I think python has taken the lead over ruby and java is
still holding strong.

Basic Perl would be excellent if the focus really is on admin tasks since a
majority of admins use perl for maintenance scripts. There is also a
ginormous body of perl code used in every corner of programming purpose
that they may encounter and knowing the basics of perl, perl
packages/modules, cpan, etc would give them a leg up.

A crash course in java would help, especially class paths, build tools
(ant, etc), and configuring/administering/tuning the servers (a big topic
by itself, let alone the language).

If they haven't learned regexes yet that's an absolute must. Regex with
grep, egrep, perl -pie, awk are vastly transferable skills.

Teach them how to search stackoverflow,
project/library/language/tool-specific bug databases, and how to file good
bug reports. Teach them how to ask good questions in forums and on IRC.

I'm not sure how relevant any of the above is since I don't know in detail
what the course prerequisites would have them ready for, nor how much of
what you want them to be prepared for by just one course. About the best
advice I can give to anyone in any school is that learning to be
resourceful and self-taught is the most important thing in any technology
job these days. Technology moves so quickly that by the time anyone has a
degree in their hand they are already behind in something. Learning on the
job is not an option in these fields. Very frequently a job *is* to learn
and use something brand new. If they don't enjoy the learning process then
that may be a big red flag that it's a poor fit of a career path for
them--it's not something they can learn and then be done and set for the
rest of their career.

I hope you find something useful in my ramblings.

/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/
Dan Egli
2014-09-22 11:07:12 UTC
Permalink
(reply to Ed Felt's message below, do not include quoted portion starting
----- Legal Aide, Access)


Ed, as to your questions, here's my $0.80 (inflation adjusted):

1) PHP Should absolutely be a good part of the curriculum. Anyone who says
it's dead is tooting the same horn that those who claim the home PC is dead
are using. It's not dead, not even close. I don't think other programming
ideas should be ignored though. I love PHP, don't get me wrong. It's my
favorite web language. But at the same time, if you're getting them read
for Corporate life, they should understand PERL too, and to a lesser extent
Python. After all, those are the alternate Ps in the LAMP architecture.

2) As to how important MySQL is, I have to say I'm of mixed opinion on this
one. MySql is very effective, and it's popular in many environments, but
I'm personally more partial to Postgres. Still, I did start learning SQL
via MySQL and I'm grateful to it. I've never heard of MariaDB so I can't
testify good or bad on that one.

3) I think it SHOULD be a LAMP class. You can mention the other
technologies briefly, but unless you're making this a multi-semester class,
there's more than enough material to cover via the standard LAMP stack. If
someone wants to learn more about NodeJS vs. Ruby, or MongoDB vs. MariaDB,
then there can be a second class that goes deeper into other technologies
like that. But for any of those the person is going to need the same
background that would be taken by at least half the class, namely
configuring/managing Linux and Apache.

I know you said that this would be a class for those who had already taken
a Linux admin class. That's good. But understand that to be (in my opinion)
really ready for Corporate life, one needs to understand Apache rather
well, and understand how Apache interacts with the O/S like Linux rather
well. A Web Technologies class by itself wouldn't give enough depth to such
a requirement, I think. It would be like teaching someone the basics of SQL
and then saying "Okay, since you understand SQL itself, you can now manage
a MySQL server" or something like that. It's good starter material, but you
want more. And the companies that these folks hope to get hired by want
more. So in that case, I think a 3rd semester would be good. You can then
give them deeper experience in a few of the technologies. I.e. they can
learn about Ruby on Rails using Hadoop, or NodeJS using Msql or something.
The number of possible permutations are quite large. :)


Anyway, that's how I feel. Take it as you need/want it. :)
--- Dan

/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/
Jeff Jibson
2014-09-22 12:49:31 UTC
Permalink
Post by Dan Egli
I've never heard of MariaDB so I can't
testify good or bad on that one.
....
Post by Dan Egli
there's more than enough material to cover via the standard LAMP stack. If
someone wants to learn more about NodeJS vs. Ruby, or MongoDB vs. MariaDB,
then there can be a second class that goes deeper into other technologies
like that.
Maria is a fork of MySQL. It's a lot like the fork that LibreOffice
was to OpenOffice.

/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/

Loading...