Learning more after today
Want to learn more code after today? Yay! Here are the two
things that people tell me, over and over, are the most
important things:
-
Projects. If you're trying to do a real thing
you care about, you'll be more motivated to stick with it,
and you'll have more fun. It doesn't matter if it's a work
project or a personal one, or something you build from
scratch vs. something you modify — it just needs to be
a real thing. Need ideas? I wrote
a whole Library
Technology Report about short programs librarians have
written to get real-world things done.
-
Mentors. It's good to have people who can
answer questions if you get stuck, or show you better ways
of doing things that you didn't know existed.
In terms of specific learning resources, you know your own
learning style, so you know what's likely to work for you.
But here's my take on some widely available options:
-
This course! You can come back to this site
for review whenever. There's also a link to the source
code for this site at the bottom of every page, so you can
read the exact code I wrote to make all the effects happen.
-
Local user groups vary in how newbie-friendly
you are, but if you have a good one, they can be very helpful.
Check meetup.com to see if there's a group near you for a
language (Python, Ruby, Javascript, etc.) or project (e.g.
Drupal) you want to learn. My local Python group has a
beginners' table at project nights. Some Python and Ruby
groups have women-oriented groups which can be very friendly
(they generally expect either that you are a woman, or that
you sign up with a female friend).
-
O'Reilly books. O'Reilly books are the sine
qua non of tech publishing, and your library may already
have a Safari subscription, giving you access to their
whole ebook library. Look for books in the language of
your choice that are geared toward beginners (if you're
just getting started) or that have "cookbook" in their title
(if you need code samples you can adapt for your projects).
Good options if self-directed learning works for you.
-
MOOCs. A popular option, but one I'm
skeptical of; course completion rates are low, and there
can be big jumps in difficulty and cryptic feedback. The
basic content you need is there (and there's at least one
library-specific module on Codecademy), but the MOOC route
works best if you have a close friend who can answer lots
of questions, or if you sign up together with a whole study
group.
-
Formal classes. A good option for a lot of
people, though maybe only workable if you can get some time
at work to do your homework (and maybe some funding to cover
tuition). Better support than MOOCs. Often fairly abstract,
though, and not specific to library use cases; they'll give
you foundations you can apply to lots of things, and make
it much easier to self-teach later, but you may be on your
own for building the bridge between the class and your
real-world applications.
In terms of programming language choice — honestly
this should not be your major question. Languages all
involve the same core concepts; if you solidly master one,
a second will be dramatically easier to learn. People definitely
have languages that play more or less to their personal tastes,
but for the most part any language is fine. Your choice of
where to start should be dictated by the projects you see
yourself working on. For instance...
If you want to do text mining, MARC batch processing,
or data cleanup, Python is a good choice.
If you're a web design geek, more jQuery and
Javascript will be relevant.
Hacking on WordPress and Drupal? Do PHP.
Using, or contributing to, library open source projects like
Hydra, Blacklight, Koha, or Evergreen? Do their language.
More practice
Didn't quite get hang of things, and need time to catch up?
Think you got it, but want more practice so it sticks?
Loved the exercises and want some additional challenge?
These are all great, and you're in the right place.
Start at whichever step looks like the right place for you,
and feel free to move around the room to sit with other people
working on the same steps.
You probably won't finish everything on this page, and that's
fine. If I wrote so few that you run out, I messed up ☺.
Step 1: catch up/review
Start here if you didn't get through all the exercises in
the previous pages, or if there were some that you don't
feel confident about.
-
Finish any exercises from previous sections that you didn't
finish.
-
If there were any you finished but didn't understand, get
help!
The rest of the exercises on this page will build on those
earlier ones, so you'll be happiest if you make sure you have
a solid grasp on them.
Step 2: extend the examples
One great way to expand your programming skills is to take
something you've already written and make it just a little bit
better. What does "better" mean? Could be lots of things! For
example:
-
Easier to read (clearer variable and function names;
explanatory comments; simpler logic, if possible)
-
Able to handle more edge cases
-
Better at responding to errors
-
More general: able to handle a wider variety of inputs and
situations
So, let's extend some work you've already done. Here are some
ideas.
From the functions page:
-
Write a function that makes
#trigger-1
change the buttons to purple if they're yellow, and then
change back to yellow if they're purple. (You can do this
with the functions you've already encountered; you might
also try writing it with toggleClass()
. Check
out the jQuery documentation (linked from the bottom of the
page) for details.
-
Write a function that makes
#trigger-1
change every other button purple. This is the kind
of logic that comes up a lot in web development (e.g. where
you might want to color every other line of a table). A few
things you will need to know for this:
-
You'll need to define a counter variable which you set
equal to 0, and then add one to it every time through the
loop. (This counter variable idiom is super common in
programming, too.)
-
Assuming your counter variable is named
counter
, then counter % 2
will return 0 if counter
is even and 1
if counter
is odd. (For those of you who
like math: %
is the modulus operator, so
x % y
is x mod y. If you don't like math,
don't worry; you don't need to understand this
parenthesis for your program to work.)
From the loops page:
-
(not yet written. sadface!)
From the conditionals page:
-
Handle ISBNs a bit better. Don't just flag things missing
an "ISBN:"; also flag things that have an ISBN that can't
be valid. There are a lot of rules governing ISBN validity
(and if you want to really do this right you'll need to
learn regular
expressions), but one quick-and-dirty rule for now is that
ISBN-13s start with 978 or 979.
Step 3: make new stuff!
Here are some new challenges that build on what you've seen
before. These problems don't have one right answer, and that's
fine! Remember, it's generally easiest to build the smallest
thing you can get working first, and expand from there.
You'll also be happiest if you write your code in a text
editor and copy-paste it into your browser for testing.
-
Below, there's a longer, dirtier set of book data than what
we've seen before. Write a program to flag problematic records.
(What does "problematic" mean? Read the data and decide
for yourself. In the real world, you'd probably have a
much larger data set and you'd read a sample of it.)
-
Make my public
library's catalog look better. Those
<strong>
elements serving as headers -
wouldn't they be nicer with a different font and a larger
font-size? That navigation bar with the languages - can
we increased the contrast between the text and the
background color for better accessibility? What do
you think would help? Some things to know here:
-
Because you can't write a new stylesheet and add it
into the page source, you'll need to use jQuery's
.css()
function to change how elements are styled rather than
adding and removing classes.
-
You will have to read the HTML source of the document,
or use your developer tools, to figure out which
selectors to bind your functions to.
-
This challenge is particularly well-suited to teams whose
members have complementary skillsets. If you have one
person who's strong in jQuery, another who's good with
HTML and CSS, and another with excellent design sense, you
can do killer work. (Most real-world tech projects of
any size are team projects, in part for this reason.)
-
You can use this technique to make your own
catalog look better, even if you can't alter its HTML,
as long as you can insert some javascript (and ideally
a link to an additional stylesheet) somewhere on the
page. Here's
a real-world example.
-
Heck — make your catalog look better.
.dirty-data
Author: Marcus Sakey; Title:
Brilliance; ISBN: 9781611099690
Author: Julia Serano; Title:
Whipping Girl: A Transsexual Woman on Sexism and the
Scapegoating of Femininity
Author: Alfred Lubrano; Title:
Limbo: Blue-Collar Roots, White-Collar Dreams;
ISBN: 34870005769746
Author: Alice Goffman; Title:
On the Run: Fugitive Life in an American City;
ISBN: 9780226136714
Authors: Matthew S. Rotundo,
Kam Oi Lee; John P.Murphy; Title: Alembical 3;
ISBN 978-0-9887587-5-9
Editors: Andy Oram & Greg Wilson;
Title: Beautiful Code; ISBN: 9780226136714
Author: Chimimanda Ngozi Adichie;
Title: Americanah; ISBN: 9770307397911
Author: Robert B. Parker;
Title: The Widening Gyre; ISBN: 0440195357
Author: Cherie Priest;
Title: Boneshaker; ISBN: 978076531841
Author: Alexis de Tocqueville;
Title: Democracy in America; ISBN: 0226805328
Author: Jane Jacobs;
Title: The Death and Life of Great American Cities;
ISBN: 0375508732
Author: Michael Pollan;
Title: The Botany of Desire;
ISBN: 0375501290
Author: Sudhir ALladi Venkatesh;
Title: Off the Books; ISBN: 978-0-674-02355-0
Author: Henry Hazlitt;
Title: Economics in One Lesson; ISBN:
05175482322
Author: Naomi Kritzer;
Title: Freedom's Sisters; ISBN:
978055356756
Author: Apostolos Doxiasis and Christos
H. Papadimitriou; Title: Logicomix; ISBN:
978159914520
Author: Rainbows End; Title:
Vernor Vinge; ISBN: 9780812536362