Before Getting Started: Your Commitment
Home > Commitment
Before we get started, we're going need you to understand and
commit to these five principles:
- The Principle of Simplicity.
Because this is an online program without some of the
social and in-person advantages of a typical on-campus program,
simplicity will help both you, so that you are less
often in need of clarification or help, and will help us so that
we're best able to help you remotely. We're going to achieve
simplicity with the following:
- Everybody uses the same operating system
(Mac OS-X) so that it's aligned with how the course is presented,
and so that we can test software that we know will run on your Mac.
All the instructions for running on a Mac should work, with minor
changes, on Ubuntu or on other Linux platforms but all our
examples and screenshots will be from Mac OS-X.
While a sophisticated user can make this program work on a
Windows laptop, we are not going to be able to help set it up for you.
And there are no guarantees that our testing software will work
correctly on Windows.
- All the coursework is presented in a particular order and,
even if you're tempted to work on material out of order, we ask that you
stick to the presented order. A lot of thought has gone into
how to lay out the material especially into how microskills
build on earlier skills.
- Some of the 16 units will use a special testing software called
GTest for convenience of submitting. Please use as directed.
- The Principle of Practice.
This is perhaps the most important principle of all. Learning
programming is like learning any other complex skill: it takes
continual practice and takes time. Just as you can't learn
a musical instrument solely by watching videos or reading a book,
you can't learning programming without significant practice.
Committing to this principle means understanding and
acknowledging the following:
- Micro-skill hierachy. Any complex skill features
a multitude of micro-skills that need to come together just right.
For example, in learning a new language, you have to learn
the alphabet and words, but also sounds and grammar, and each
of these themselves consist of many microskills such as
diphthongs fluency or grammar expertise. So it is
with programming: ignoring or skipping past some microskills will
impede your progress later.
- Deliberate practice. The science of learning tells us
that the most effective way to practice a
microskill is to push yourself to do something just slightly harder
than your current skill level. Thus, in tennis, you don't want
to practice backhands at your current level of comfort but instead
to try and master something just slightly more difficult.
Some people say that you aren't really practicing if you don't
experience some struggle during practice.
- People are different. As with any skill, people learn
them at different rates. One person might appear to sail through
the initial exercises but struggle later; someone else might find
the early skills very hard and then really take-off. Do NOT judge
your skill acquisition by comparison with others. We have seen
all kinds of students: some of the best students are the ones
that struggled throughout the first few courses.
- Anyone can learn. Saying "I'm not cut out to learn programming"
is like saying "there's no way I can learn Japanese". Anyone can learn a new,
even supposedly difficult, language. It just takes time and patience.
While not everyone can become
a world-expert, you can certainly achieve reasonable mastery.
- Delayed gratification.
You won't, and won't need to, understand every detail as you
proceed. Some things will become understandable only towards
the end of the program. You have accept a little confusion
and be willing to push along.
It is tempting to think "if only I receive the right explanation,
then it'll all make sense and I'll be able to program anything".
Unfortunately, this is just not true. We will simplify as
much as possible but you'll have to accept not understanding
every little thing.
- Your approach to struggle. You need to understand
your own reaction to struggle and the key to your
resilience. Do you give up easily and seek help right away?
Are you easily frustrated? If you are willing to develop a
good attitude towards struggle and even celebrate your own grit,
you will succeed more comfortably.
- The Principle of Initiative.
Learning programming and computer science differs from other
disciplines in one significant way: there are many ways in which
a programming task can go wrong. It could have to do with your
own computer setup, some small detail about the text editor,
some issue with version numbers, some problem with installation
or one of many types of programming errors. Contrast this with,
for example, studying biology in which the textbook has everything
you need and there is little uncertainty in just simply working your
way through the material; generally, you tend to believe "if there's
something not in the book, they would have told me".
In computer programming, on the other hand,
you will have to get used to taking initiative in tracking
down problems. Do not expect that they" will tell me everything
I need to know". For example, we can't tell you about every single thing in
a text editor, nor every detail in the programming language.
We'll certainly tell you enough to get
started, but there's at least some that you'll have to explore on your own.
This approach to can-do optimistic self-driven exploration will
be even more needed in later material. It's an essential quality
for a successful student.
- The Principle of Motivation.
An online learner may not have some of the motivational advantages
of an on-campus learner such as a social circle, a fixed schedule, and
regular in-person contact with professors. It's all to easy to
feel low motivation in an online course
especially during a time of struggle. To
create a motivational safety net, we're asking for the following
before you start the program:
- Make and post an announcement video in which you announce to the world
that you are taking this program. Include in this video the reason
for enrolling, what you hope to do in the future, and how
you plan to address the occasional bout of low motivation. Then,
post this video to your social circle as your public commitment
to completing the program.
- Appoint a mentor. Ask someone close to you to perform
a "nagging" role, checking in with you at least once a week.
Please give us the contact info (email) of this person. Yes,
we'll check in with them periodically.
- Create a schedule for time alloted to this course and
stick to it rigidly. At least some of that time should be
high quality "first thing in the morning" time.
- Design and implement your micro-reward system.
Give your self small rewards for milestones achieved along
the way. Since the program is divided into units, and each
unit consists of small modules, we think that completing a
module deserves a reward. So, OK, how are you going to reward
- The Principle of Teamwork.
You are not going to be alone in doing the program. We will
place you in teams of two or three. Working in a team
helps you, and you get the satisfaction of helping someone else.
Yes, it's difficult to break the initial ice to form a bond
and, yes, it's possible that your team members turn out to be uncooperative.
You will anyway do all the coursework by yourself and are not going
to depend on your team for submitting anything.
The purpose of assigning you to a team
is make learning more interesting and lively.
- The Principle of Integrity.
We are going to assume you are here because you want to learn.
And the only way to learn is to complete all the coursework
by yourself. You cannot learn a musical instrument by having
someone else play it for you. Thus, while it's easy to google
solutions to exercises and succeed in that manner, the only
way to learn is to struggle by yourself. You might be tempted
to think "I'm not like the other homework-googlers, I get
answers online but I make sure I understand them".
Again, no explanation is going develop your skill
level; it's your own practice and struggle that will.
Note that a student
passes a unit by passing an in-person on-campus exam; it is not
going to be possible to pass this exam without learning.
Your first homework:
Upload to Blackboard or, if that's not set up yet,
submit by email a PDF document with the following:
Once you submit this homework you will receive a link to the
homepage of the first unit of the program.
- Your name.
- The version of Mac-OS you are running. To get this, click
on the apple symbol at the top left and then "About this Mac".
- A short (3-4 paragraph) essay explaining how you
understand and plan to apply the six principles above.
- A publicly accessible (but not necessarily publicly
advertised) link to your commitment video.
- The people in your social circle
you've shared your commitment video with, just their first name
and their relationship to you.
- Name and email of your mentor, and an explanation of how
your mentor is going to track your progress.
Lastly, an opportunity for self-reflection. Did you read this whole
page carefully and in sequence? Or did you skim through quickly
and find it too "text-y"? There's an error deliberately left
unresolved ... did you find it? That tells you something about yourself,
about how you read.
We are going to ask that you make a
habit of reading everything
slowly and carefully, digesting and mulling over, as you proceed.
You will need this careful attention to detail in reading code.
© 2017, Rahul Simha