Over the years, we (@anishathalye, @jjgo, @jonhoo) have helped teach several classes at MIT, and over and over we have seen that many students have limited knowledge of the tools available to them. Computers were built to automate manual tasks, yet students often perform repetitive tasks by hand or fail to take full advantage of powerful tools such as version control and text editors. Common examples include holding…
I read through the article, and a lot of what you've got looks really useful. Your explanation of GIT and source control is especially valuable. These are all pretty much skills a good programmer should have, but I would make one exception. Personally, I like and have frequently used VIM. It's a useful tool to know how to use if you need to edit text files on a GUI-less system. However, I have yet to meet a single pr…
The Missing Semester of Your CS Education
151–160 of 200 posts
Re: The Missing Semester of Your CS Education
#152Earlier quoted context omitted.
Science doesn't abstractly drop from the heavens, fully formed. Every science has practical enablers that are required to get stuff done. Astronomers use telescopes, physicists/chemists/etc use lab equipment, Mathematicians use various notations and other tricks (and nowadays proof assistants) to make their job easier. MS Office might not be practical for computer science (also note how the OP doesn't list that), but…
They should be writing them in asciidoc (or even markdown) and using style sheets if they really need complex formatting!!! (although at least latex is decent at typesetting and has nice defaults.)
Re: The Missing Semester of Your CS Education
#153I took a Unix half credit course randomly where you basically did bash scripting, a huge bunch of command line tools and then eventually use all that to build your own linux distribution. I swear I learned more in the half credit class, and way more if you try to count it as useful information, than 90% of my other CS courses. Edit: And since this got some traction, here is the current version of the class: https://w…
Going through Linux From Scratch[1] manually and reading each component, while allowing yourself the time to look into interesting bits of each, is essentially this. I did it back in the early 2000's, and view it as one of the most useful educations I've ever gotten on how a Unix-like system functions (even if a lot of the knowledge is somewhat obsoleted now for many Linux distros with the introduction of systemd). I…
Re: The Missing Semester of Your CS Education
#154There are two sides to this kind of teaching. If you're MIT, you can afford to hire great lecturers who know to teach the students fundamental and deep truths about the tools they're using and not trivia. That way, they can generalize onto other tools, so anyone who studied git can quickly adapt to using cvs or svn. My university (in a developing country) is on the other side. Last semester was a disaster. We had an…
Low rank universities train students to be button pushers in a world of increasingly automated systems. Because that's also what the market needs : people to keep the systems running and run applications updates.
The good thing ? Developing is one of the fairest trade : if you are good, you will manage to find good job and decent money without much struggle.
Re: The Missing Semester of Your CS Education
#155Earlier quoted context omitted.
"I choose a lazy person to do a hard job. Because a lazy person will find an easy way to do it." -- Bill Gates Some people just accept absurd drudgery interacting with computers; it never even occurs to them to seek an easier way. But if you can teach the students to be "lazy" when it comes to that kind of repetitive drudgery, they'll be set for life.
I think the problem is more a lack of imagination. They just keep doing things the way they always have. I seem to have a surplus both of "there has to be a better way"-itis, and some skill in finding such ways.
Re: The Missing Semester of Your CS Education
#156I'm sorry, it isn't my intent to start an editor war. Use whatever you want, I don't care. Just don't lie about it. I expect far more from MIT than this nonsense.
VI and VIM are what they are because keyboards of the era --and the entire UI-- looked like this:
https://retrocomputingforum.com/uploads/default/original/1X/...
Notice the location of the Ctrl key. It used to be where the Caps-Lock key is today, making it FAR more convenient and comfortable for entering Ctrl sequences.
This is from a Tektronix terminal, which I used in the early 80's. Here it is:
https://www.computerhistory.org/revolution/input-output/14/3...
The VT-100, if I remember correctly, introduced four cursor keys:
https://www.computerhistory.org/revolution/input-output/14/3...
I also used VT-100's and clones during the '80's.
https://www.computerhistory.org/revolution/input-output/14/3...
Notice the total absence of anything even resembling much more than a simple typewriter. No mouse, function keys and other modern facilities.
So, yeah, if you were writing a text editor at the time, you would be well served to do such things as implement modal view/insert operation for more reasons than just the archaic keyboards. These terminals were used to connect with remote systems at VERY LOW BAUD RATES.
It's hard to imagine that BAUD 300 or 1200 was great speed at some point in history. In that context, cursor keys or grabbing a scroll bar with a mouse to yank it around with abandon made no sense. You were literally only able to receive from 30 to 120 characters per second...and a screen with 80 characters by 25 lines had 2,000!
This is another reason for which escape control commands had to be invented. You had to be able to address you 80x25 canvas and place text where needed rather than to refresh the entire 2,000 character screen.
This is why, quite frankly, I hate the "cult of vi". Cult members are, for the most part, people who have no historical connection to where this tool came from and why. We, at the time, would have KILLED for a graphical UI with a mouse. Yet that was impossible at the time due to both machine and connection speed limitations. You literally could not have used it even if you had it.
So, yes, at the time, if you had to write a text/code editor (I wrote a few) you had no choice but to use a bunch of Ctrl- codes and perhaps even implement a distinction between reading and inserting code. I still remember sequences like Wordstar's "Ctrl-k-x" running on an 8080 S-100 system with, yes, a VT-100 terminal attached.
Yes, the VT-100 introduced four cursor keys, but if you were writing software at the time you could not make the assumption that the user had access to cursor keys, most keyboards did not have them until much later. That assumption was not safe when VI was created.
Like I said above, use whatever you like, I truly don't care. Just don't lie to yourself about it, particularly when the truth is a matter of history. I think most people who came up through that era of computing laugh at the vi/vim cult because from our perspective --not yours-- it is complete nonsense. This text editor had NO CHOICE but to be as it is due to being written for crappy computing hardware and environments of the time. If you had to use one of those systems today you would be horrified. If you had to write a text editor back then you would write it exactly this way. And the minute a decent an ubiquitous GUI showed up you would drop it like a hot potato and try to forget the nightmares.
MIT Computer Scientists ought to know history and not print nonsense like that. That entire paragraph about VI is basically wrong, historically wrong. You can leave it like that and perpetuate a fantasy or correct it and at least show some respect for history.
And then do everyone a favor and explain that the speed of text entry is of no consequence whatsoever. MIT should not propagate that cultist belief. The time devoted to things having nothing to do with text entry is, in some cases, orders of magnitude greater than text entry. Not everyone is a PHP script kiddie. Some of us are writing real and complex software, some of it with life/death potential, and code entry is so ridiculously low in the scale of where time is spent and what things are important that it is absolutely laughable to talk to someone who has become religious about text editors because of stuff like this out of a respected university. Do you really think code entry speed and efficiency is important at all when working on the code for an MRI machine, a space capsule or an implantable insulin pump? Exactly!
If coding is factory work, then, sure, mechanize as much as possible and count strokes. That would be the day I become a gardener.
Re: The Missing Semester of Your CS Education
#157Over the years, we (@anishathalye, @jjgo, @jonhoo) have helped teach several classes at MIT, and over and over we have seen that many students have limited knowledge of the tools available to them. Computers were built to automate manual tasks, yet students often perform repetitive tasks by hand or fail to take full advantage of powerful tools such as version control and text editors. Common examples include holding…
You use Vim in your example. Get your students out of it and into something like IntelliJ IDEA or VS Code or (at a bare minimum) Eclipse.
If I was to design a CS101 course, I'd do away with Java (which is the language of choice at my university) as well. I don't know what would be the replacement; vala looks nice but the resources are lacking. My main points in choosing a language to teach would be that I can do OO in it while not needing everything to be encapsulated in classes. Also, the language shouldn't care about whitespace, because if I'm teaching a few hundred students, I'm not going to debug a boatload of mixed tabs and spaces issues.
Also, my CS101 course would be about debugging as much as about programming. Including stuff like "here is some source code, that's the observed bug, submit a corrected version by midnight x-y-zzzz and describe how you debugged it in bullet points". Unfortunately, plagiarism on these types of assignments makes them very much useless in the real world where grades depend on that.
Re: The Missing Semester of Your CS Education
#158> Vim avoids the use of the mouse, because it’s too slow; Vim even avoids using the arrow keys because it requires too much movement. I'm sorry, it isn't my intent to start an editor war. Use whatever you want, I don't care. Just don't lie about it. I expect far more from MIT than this nonsense. VI and VIM are what they are because keyboards of the era --and the entire UI-- looked like this: https://retrocomputingfor…
I haven't read the article, but this reads to me as "using the mouse is too slow, so try VIM instead and soon you won't need to use the mouse anymore." and "Reaching for the arrow keys takes too much time, so try VIM and keep your hands on the home row for added productivity.", respectively.
Re: The Missing Semester of Your CS Education
#159Earlier quoted context omitted.
That’s cool. Now, on to my possibly unpopular opinion: This isn’t what computer science is about. In fact, you don’t even need to use a computer to do computer science. Sure, some stuff you learn in CS can make you a better software engineer. CS cannot make you a software engineer. CS can definitely not make you adept at using computers and neither should it. That’s something earlier education institutions must tackl…
> That’s cool. Now, on to my possibly unpopular opinion: This isn’t what computer science is about. This is not an unpopular opinion at all, CS degrees do not typically cover what's in this class which is precisely why they called it "the missing semester".
Indeed, universities should once again become a place where you go to pursue a career in science. Not a half-baked vocational training center. That’s why I’m against excessively accommodating this misuse.
Re: The Missing Semester of Your CS Education
#160Earlier quoted context omitted.
You use Vim in your example. Get your students out of it and into something like IntelliJ IDEA or VS Code or (at a bare minimum) Eclipse.
Unpopular Opinion: IDEs suck when teaching people programming. A simple Text editor, the simpler the better, is all we need, combined with a compiler. Modern IDEs introduce a boatload of completely irrelevant concepts and complexity that just adds to the confusion. Doesn't matter which one you use. If I was to design a CS101 course, I'd do away with Java (which is the language of choice at my university) as well. I d…
> I'm not going to debug a boatload of mixed tabs and spaces issues
As someone who uses an IDE, I have literally never had to worry about tabs vs spaces.