2024 02 20 - TheEvergreenStateCollege/upper-division-cs-23-24 GitHub Wiki
Week 07 - Tuesday
20 Feb 2024
Web Front-End - Morning Session
Catch-up Day from Snow Day. If you are caught up, please keep working on homework.
-
30 minutes: Bloom's Taxonomy applied to programming
-
30 minutes: graph example from last Thursday's snow day
-
30 minutes: GitGraph Practice
-
20 minutes: Work on homework, TAs and I will come around to help.
-
10 minutes: bad dog hackathon project
-
On Thursday: come prepared to watch Frontend Masters videos, work on final project, present Homeworks, in any state of progress, to receive feedback and to ask questions (HW 01, HW 02, HW 03, HW 06).
A Classification of Learning
Bloom's Taxonomy is a categorization of educational goals, arranged from simple to complex. It has been updated in 2001 since its invention in 1956, still containing six categories.
In the context of programming and computer engineering, we will consider the idea that Bloom's Taxonomy corresponds to abstractness of ideas, and also how long such knowledge will remain useful before it's replaced or obsolete.
Most of the technology that you will use and engineer for the rest of your life, hasn't even been invented yet. With that in mind, how will you decide what to keep in your mind, take notes on, or devote time to understanding?
The below examples are merely suggestions. With a pair programming partner, critique them, decide if the examples make sense to you, or come up with another one that fits better. Submit your suggestions on Canvas.
-
Remembering - Recognizing, Recalling.
- Example:
npm install
used to install a dependency, but required the--save
flag to save it topackage.json
. Now it saves all packages automatically. - Half-life - possibly 1 to 2 years.
npm install
may have different flags as part of its normal release cycle, or new subcommands in addition toinstall
.
- Example:
-
Understanding - Interpreting, Exemplifying, Classifying, Summarizing, Inferring, Comparing, Explaining
- Example:
npm
is a package manager that downloads and installs third-party libraries for the NodeJS ecosystem.pip
,cargo
,maven
are other examples of package managers for other programming languages. "Package managers" are a "kind of thing", or an entity that many programmers rely on in 2024. - Half-life - possibly 2 to 4 years.
npm
may be superseded by another tool,nodejs
may fall out of popular usage, and therefore programmers will not need to be immediately familiar with its command-line flags. Around the timenpm
became popular, NodeJS programmers used build tools likegrunt
,gulp
,yeoman
, and these are less frequent now. Likewise, beforepip
became popular, python used to use a system calledeasy_install
that was a convention that allowed anyone's python library to be installed from source, after it was downloaded. These days, there are other python package managers such asconda
.
- Example:
-
Apply - Executing, Implementing
- Example: You decide to learn a new programming language called
zig
. As part of your first project, you want to use a library to read and write PNG image files and you find such a library online (let's call itzigpng
). You may choose to search for the question "what is the package manager for Zig called?" If you don't find one, you may choose to automate the downloading and extracting ofzigpng
into your build scripts, so that other Zig programmers can build your program without having to find all its dependencies for themselves. You have applied your understanding of "package manager" to a new situation. - Half-life - possibly 4 to 16 years. The Node Package Manager was just coming into use in the 2010s, but most of the package managers that we use today did not exist at all in the 2000s. package managers were not widespread in the 2000s, most people manually downloaded and installed zip files and other archives to install dependencies. They arose to solve the problem of mismatching dependency versions, sometimes multiple versions of the same package, where a new installation may prevent existing software from working ("DLL hell", for dynamically-linked libraries on Windows). Package managers themselves have shortcomings, it's possible that software engineering will evolve past them to something better.
- Example: You decide to learn a new programming language called
-
Analyze - Differentiating, Organizing, Attributing
- Example: After using package managers like
npm
and building your own forzig
for awhile, you notice that when you download and try someone else's code, you still spend a lot of time trying to get the same package versions as the author. Some days, you spend 70% of your time or more on install problems. It's a very frustrating experience. A single new package version in a project that requires thousands of them could stop everything from working, or a new programming language version will no longer support an old keyword that you need for backward compatibility. You search for ways to package software so that the dependencies are mostly immutable and locked to a version, and discover a few options to "virtualize" environments:docker
,devcontainer
, microcontainers, VirtualBox,nix
, hypervisor VMs likeqemu
, and more. - Half-life - possibly 8 to 24 years. The idea of virtual machines in the form of "jailed" processes with limited resources on a native operating system, or software-emulated hardware, is useful now, but it is not so far-fetched to imagine that the same virtualization could happen with FPGAs (field-programmable gate arrays, or hardware circuit simulators) in the near future.
- Example: After using package managers like
-
Evaluate - Checking, Critiquing
- Example: You package and deploy your
npm
projects as docker images or snapshot them in VirtualBox, but you find that one of your clients, or your next boss, finds docker images too complicated to use. They require a separate image registry, which you have to host yourself if you don't want to publish it to DockerHub, and you have to learn a whole new suite of commands likedocker inspect
,docker exec
. You have one week left on an important deadline and decide to just depend onpackage-lock.json
files and specifying version numbers exactly inpackage.json
likesome-package==0.3.0
, rather than a range likesome-package^0.3.0
which means "any version equal to 0.3.0 or later". - Half-life - 16 or more years. A way to gracefully degrade from a purely virtualized, ideal, elegant solution to one that meets your deadlines or the preferences of your teammates is something that is hard to define, but will rarely go out of style.
- Example: You package and deploy your
-
Create - Generating, Planning, Producing
- Example: After configuring a website for a final project in this Web Engineering class, you begin to think that there must be a much simpler way to automate the many different steps, now that you understand the purpose of the different parts and have experienced some of the things that can go wrong. You create a code generator, a set of scripts, or an AI-effectuated system that can produce the final website with a short compact description. (You also create another Perfect Markup Language consisting entirely of emoji's to represent it).
- Half-life - 24 or more years. The ability to simplify is in many ways much harder than the ability to do complex things, and projecting forward, most possible futures will reward someone who can identify needs, adapt, and create new solutions, and make it easier for their community to get things done. On the opposite end of the spectrum, a more complex future may involve online applications that incorporate AI agents traveling between servers, decentralized peer networks, mesh routing on short-lived drones or robots, and more. A single
package.json
andnpm
project now seem woefully inadequate to describe and coordinate such a system. But learning how to use abstraction, modularity, testing, and program design will still be useful. (See Software Construction and AI Self-Hosting, next quarter).
GitGraph Practice
In your assignments
and frontend
directory, create a new subdirectory called week7
and add a README.md
file similar to this one
We will practice adding GitGraph mermaid diagrams to visualize our git branch workflow, as well as common mistakes that can happen.