Tip: If anyone want to speed up the lecture videos a little, inspect
the page, go to the browser console, and paste this in: document.querySelector('video').playbackRate = 1.2
1.2 Topics
What is this class?
Everyone even remotely technical needs to be able to program, which
is also a pre-requisite of managing someone who can.
Computational thinking, debugging, etc.
Not just syntax
Problem first methods
Attention to detail (whitespace matters)!
You may not have cared about what seem like small details before,
but they matter now.
Meta-coding practices
tracing code step by step
manual code-shuffling vs genetic programming
shotgun debugging versus hypothesis testing
What does expertise look like?
What does expertise take?
Coaching and practice programming
lines of code = time under tension, time on-task, time practicing a
skill
If you can’t read English in full depth, which requires less
precision of understanding to do well, then how are you going to read
code, which requires far more precision of understanding and attention
to detail???
How to use a computer (a surprising barrier for many students
learning to program)
First, how to use a VM, Linux, etc. which we’ll cover: 02-GitLinuxBash
For each new programming language you learn, you generalize your
knowledge of programming.
We expect you learn AT LEAST 4-5 languages before graduation.
A conversation that happens all-too-often with first and second year
students:
Young student’s opinion: Meh, I can’t be bothered to learn
[Python/C++/C/Bash/Julia/Rust], I’m a
[visual-basic/JavaScript/Java/FORTRAN/C/C#/Haskell/whatever]
person.
PhD student TA, postdoc, Faculty, or an actually expert programmer’s
opinion: Upon graduation with your BS, at bare minimum,
you should know 5-6+ programming languages pretty well, and have
mastered at least 2-3, and then you might begin to appreciate the value
in the variation between those languages. Once you have mastered 7-10+,
you will begin to have a sound basis for declaring your preference for
one language over another. The nuances that make one language better
than the other are subtle, require many hours of development time, and
most importantly, many hours (think 1000+) making the mistakes that you
tend to make in each language.
The student who barely makes it through a CS degree and eeks out a
job offer might become an X-language programmer (often Java…). The
computer scientists who have companies competing for their applications
can pick up a language in a week (and could be operable in a day),
because they focused on generalizing the principles behind those
languages.
In order to have a debate, you need to define terms first; in order
to learn adjectives and abstractions in natural language, you need to
know some nouns; in order to learn computational problem solving, you
need to memorize the fundamentals of a language first. Language basics
is the first 1/2 of this class, in this later part, we generalize
more!
That being said, not all languages are good at something; some are
just poorly designed, with some degree of objectivity, and some really
are wholly better than others.
As we progress through the semester, if you want extra practice
implementing computational solutions to a wide variety of problems and
algorithms, with auto-graded correctness, then check out Kattis: https://open.kattis.com/
If you want extra reading, see the ../Syllabus and each topic page (there is tons of
extra reading I list!).
Meet your neighbor and exchange contact information (not this
semester!)