TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

The missing semester of CS education

1163 pointsby anishathalyeover 5 years ago

44 comments

Jonhooover 5 years ago
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 the down arrow key for 30 seconds to scroll to the bottom of a large file in Vim, or using the nuclear approach to fix a Git repository (<a href="https:&#x2F;&#x2F;xkcd.com&#x2F;1597&#x2F;" rel="nofollow">https:&#x2F;&#x2F;xkcd.com&#x2F;1597&#x2F;</a>).<p>At least at MIT, these topics are not taught as part of the university curriculum: students are never shown how to use these tools, or at least not how to use them efficiently, and thus waste time and effort on tasks that should be simple. The standard CS curriculum is missing critical topics about the computing ecosystem that could make students’ lives significantly easier.<p>To help mitigate this, we ran a short lecture series during MIT’s Independent Activities Period (IAP) that covered all the topics we consider crucial to be an effective computer scientist and programmer. We’ve published lecture notes and videos in the hopes that people outside MIT find these resources useful.<p>To offer a bit of historical perspective on the class: we taught this class for the first time last year, when we called it “Hacker Tools” (there was some great discussion about last year’s class here: <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=19078281" rel="nofollow">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=19078281</a>). We found the feedback from here and elsewhere incredibly helpful. Taking that into account, we changed the lecture topics a bit, spent more lecture time on some of the core topics, wrote better exercises, and recorded high-quality lecture videos using a fancy lecture capture system (and this hacky DSL for editing multi-track lecture videos, which we thought some of you would find amusing: <a href="https:&#x2F;&#x2F;github.com&#x2F;missing-semester&#x2F;videos" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;missing-semester&#x2F;videos</a>).<p>We’d love to hear any insights or feedback you may have, so that we can run an even better class next year!<p>-- Anish, Jose, and Jon
评论 #22235100 未加载
评论 #22232632 未加载
评论 #22231830 未加载
评论 #22233165 未加载
评论 #22230135 未加载
评论 #22232505 未加载
评论 #22236430 未加载
评论 #22232858 未加载
评论 #22230196 未加载
评论 #22232981 未加载
评论 #22248178 未加载
评论 #22232549 未加载
评论 #22233595 未加载
评论 #22231877 未加载
评论 #22245834 未加载
评论 #22235350 未加载
xzelover 5 years ago
I 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.<p>Edit: And since this got some traction, here is the current version of the class: <a href="https:&#x2F;&#x2F;www.cis.upenn.edu&#x2F;~cis191&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.cis.upenn.edu&#x2F;~cis191&#x2F;</a> it looks pretty similar to what I took but they added a little bit of Python.
评论 #22232063 未加载
评论 #22232365 未加载
评论 #22232247 未加载
评论 #22232738 未加载
评论 #22232524 未加载
lkbmover 5 years ago
In the lab for my second or third CS course, the professor was walking us through intro Unix usage, but he didn&#x27;t take attendance so it ended up being just 2-4 of us showing up. After a few weeks, he cancelled the lectures and told us he&#x27;d just be around to answer questions, help with homework, etc.<p>The last lecture before he cancelled things was an intro to Vim. The next would&#x27;ve been Emacs.<p>And that&#x27;s the story of how I became a life-long Vim user. :-)
评论 #22230429 未加载
评论 #22231122 未加载
评论 #22230424 未加载
评论 #22231509 未加载
_sdfoover 5 years ago
There are two sides to this kind of teaching. If you&#x27;re MIT, you can afford to hire great lecturers who know to teach the students fundamental and deep truths about the tools they&#x27;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.<p>We had an AWS course, half of which was memorizing information about pricing and S3 tiers. If I were going into a job as an AWS guy, I&#x27;d definitely have to know that, but this is just third year of undergrad in CS :-&#x2F; and not a training course. The quizzes also had deliberately deceiving questions, which is the worst type of trivia!<p>Even better example. The Windows Server course was also compulsory (just like the AWS course) and mainly consisted of memorizing trivial information about context menus, which buttons to click and the licensing terms&#x2F;durations&#x2F;prices for different Windows Server versions. I&#x27;m jaded from the experience. Got my first two Cs in both since I spent time learning stuff described in the post instead of that nonsense.
评论 #22233944 未加载
评论 #22237419 未加载
gen220over 5 years ago
I graduated a top 50 school, that gave us an “engineering” degree but had no such similar course. There were no more than 20 students, out of 300ish, who understood the material of this course well enough to teach it. From my perspective, this knowledge was generally inversely correlated to GPA and strongly correlated to postgrad performance.<p>Take my anecdata for what it is, but I think these skills are strongly underrated by universities and students alike. Kudos to MIT for publishing this online; I know I would have benefitted from exposure to these topics in my first couple of years.
评论 #22231823 未加载
评论 #22231793 未加载
评论 #22231671 未加载
评论 #22232641 未加载
ameixasecaover 5 years ago
Metaprogramming has an actual meaning and it means something completely different from what it is used for on this website:<p>&quot;Metaprogramming is a programming technique in which computer programs have the ability to treat other programs as their data.&quot; [1]<p>i.e.: it&#x27;s a programming technique and not something related to any process related to building code.<p>I understand the idea of giving some more practical side of using computers in a &quot;missing semester&quot;, but please pay attention to the nomenclature. It can be really confusing for someone studying CS that does not yet grasp the concepts that well.<p>[1] <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Metaprogramming" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Metaprogramming</a>
评论 #22232293 未加载
评论 #22234839 未加载
wes1350over 5 years ago
This course is wonderful! I&#x27;ve read through all the material and watched all the lectures and I can say it has helped me tremendously thus far. I&#x27;m still trying to master all the tools they&#x27;ve mentioned but I already feel much more proficient with e.g. version control, vim, using the command line, etc. If you&#x27;re an experienced dev then you might already know all of these things, but if you feel that you have some gaps in your knowledge with some of these tools, this course will likely point you in the right direction.
评论 #22230183 未加载
arman_ashrafianover 5 years ago
At my school there is a 2 unit class that you must take along with the intro DS&amp;A course that teaches bash, vim, git, testing, etc. It was definitely the class that helped me the most in my internship and also made me a Vim user.<p><a href="http:&#x2F;&#x2F;ieng6.ucsd.edu&#x2F;~cs15x&#x2F;" rel="nofollow">http:&#x2F;&#x2F;ieng6.ucsd.edu&#x2F;~cs15x&#x2F;</a>
评论 #22231023 未加载
评论 #22232122 未加载
jsd1982over 5 years ago
I think the reason you don&#x27;t see this kind of course offered is because it is primarily concerning training and not education.<p>Imagine if your training course 25 years ago focused on the Turbo C IDE and that&#x27;s all the University offered. You would be amazingly proficient at Turbo C and know all its keyboard shortcuts but that wouldn&#x27;t be too relevant in today&#x27;s market.<p>Keeping such training material up to date with the latest trends is exhausting work and not worth maintaining, especially given how difficult it is to predict what may be the next tool de jure. Contrast this with more timeless educational topics and it starts to be clearer why this sort of thing is explicitly not taught.
评论 #22232042 未加载
评论 #22230938 未加载
评论 #22231717 未加载
评论 #22232440 未加载
评论 #22231562 未加载
jedbergover 5 years ago
It&#x27;s funny, when I was in school, I was always told the difference between a good CS school and an ok school was that the good school only taught you theory and left the practical application to the reader. The ok school had courses on tools and language syntax.<p>It&#x27;s kind of awesome to see this coming out of MIT.
评论 #22230892 未加载
xrdover 5 years ago
My book about the GitHub API from O&#x27;Reilly had a similar idea: thinking in and about tools is an important concept. O&#x27;Reilly permitted me to release it under creative commons so you can find it here for free:<p><a href="https:&#x2F;&#x2F;buildingtoolswithgithub.teddyhyde.io&#x2F;" rel="nofollow">https:&#x2F;&#x2F;buildingtoolswithgithub.teddyhyde.io&#x2F;</a>
dahfizzover 5 years ago
I really wish this practical stuff was more emphasized. I graduated with a lot of very smart people who could write great code - but they could not compile, run, test, or check it into VCS to save their lives.<p>It made group projects hell.
评论 #22230602 未加载
cosmoticover 5 years ago
Learning about a command-line debugger and command-line profiling tools would be helpful for those that find themselves in the past. IDEA and Visual Studio have had these things integrated for decades. I find the likelihood of knowing how to use a debugger or profiler is inversely proportional to the amount of time someone spends in the terminal.<p>It&#x27;s astonishing how many developers rely on logging&#x2F;print statements for debugging. The learning curve of using a tool like PDB or GDB is just too steep for most people.
评论 #22231993 未加载
评论 #22231363 未加载
评论 #22233366 未加载
评论 #22241622 未加载
评论 #22231733 未加载
评论 #22232226 未加载
评论 #22232292 未加载
评论 #22232071 未加载
Aperockyover 5 years ago
Non CS graduate here, funny how my learning curve has been basically what y&#x27;all are saying.<p>I had one java class before I officially kick started my programming career by wiping windows off my laptop and installing ubuntu. Then proceeded to force myself to do everything from the command line, not that there were many other options. It escalated quickly from there.<p>Starting from the terminal is much more intuitive than writing &#x27;int main&#x2F; public static void main&#x27; in an IDE.
评论 #22238592 未加载
trillicover 5 years ago
Here&#x27;s a link to a similar course offered by UMich EECS. I really enjoyed it when I took it as an undergrad.<p><a href="https:&#x2F;&#x2F;github.com&#x2F;c4cs&#x2F;c4cs.github.io" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;c4cs&#x2F;c4cs.github.io</a>
jacques_chesterover 5 years ago
In other engineering disciplines this used to be called &quot;shop class&quot; or similar. In his day my dad was taught as much about carpentry, metal work, plumbing etc as he was taught about radios and circuits.<p>As an educational technique, &quot;sink or swim&quot; is about as efficient as spinning a wheel and handing out degrees.
sabootover 5 years ago
This is not only useful for CS people, but to us hard science members. Coding is a mandatory prereq.. which is usually one class on C or C++. Then we&#x27;re expected to collaborate on a project with hundreds of developers. This is a great resource for those of us who are a bit lost, thank you.
hailerisover 5 years ago
Good as a primer for those that aren&#x27;t naturally hackers but decided to become computer science majors and have little to no experience with a unix-like operating system.<p>I learned Linux, the shell, basic scripting, and the terminal environment in high school out of necessity and then began to thoroughly enjoy it. Planning to enter university as a CS student I took the time to learn Vim, though I didn&#x27;t start using it regularly until much later.<p>I can&#x27;t exactly articulate why, but I&#x27;m fairly upset these sorts of things comprise an entire course. What happened to RTFM? Where is the general curiosity? Even if you have no prior experience with a majority of these things, these are the kinds of things you figure out over the weekend while doing your regular courseload.
评论 #22241593 未加载
评论 #22237147 未加载
sn41over 5 years ago
When someone comes to me these days for knowledge about basic Unix&#x2F;MacOS&#x2F;Linux CLI tools, I direct them to the GNU core utilities documentation - it is very nicely organised according to task. I also demonstrate how CLI can do read-based operations as fast as SQL on medium size databases (just take an SQL dump and pipe) -<p><a href="https:&#x2F;&#x2F;www.gnu.org&#x2F;software&#x2F;coreutils&#x2F;manual&#x2F;html_node&#x2F;index.html" rel="nofollow">https:&#x2F;&#x2F;www.gnu.org&#x2F;software&#x2F;coreutils&#x2F;manual&#x2F;html_node&#x2F;inde...</a><p>For various sorting and filtering followed by report generation in latex etc., a knowledge of awk also helps. I use the mawk interpreter since I have found it to be slightly faster with ASCII format files.
sumoboyover 5 years ago
It&#x27;s sad to see freshman CS students getting thrown into this unknown world of programming with zero understanding of basic programming principle such at simple logic, tools, and even a book. I just witnessed this last semester where the students first class was basically &#x27;intro was a C++&#x27;. No books or resources supplied or referenced.<p>So it even gets better when the instructor implies don&#x27;t get help from the internet or examples for assignments, in his eyes everything on the internet is bad or wrong. I gathered he basically wanted the students to fail, what a super hero. Glad to see the effort here to help CS students, great job.
评论 #22230556 未加载
tgbugsover 5 years ago
In my graduate program (Neurosciences) the students with a computational background usually realize after about two years that all of our colleagues desperately need a basic orientation for how to actually use a computer to do real work. The only institutions that I know of that teach the kinds of courses we need are community colleges.<p>The curriculum presented here is an enormous community resource and I hope the other institutions recognize the desperate need for a course like this and allocate the resources to teach it.
nandkeypullover 5 years ago
CMU has a similar course called &quot;Great Practical Ideas for Computer Scientists&quot; (a play off of the infamous &quot;Great Theoretical Ideas in Computer Science&quot;) at <a href="https:&#x2F;&#x2F;www.cs.cmu.edu&#x2F;~15131&#x2F;f17&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.cs.cmu.edu&#x2F;~15131&#x2F;f17&#x2F;</a>.
whateveracctover 5 years ago
Purdue CompE has a required 1 credit hour lab that covered Unix command line, bash, git, and a little Python. It&#x27;s been the most useful credit hour I&#x27;ve ever earned.
beefhashover 5 years ago
<a href="https:&#x2F;&#x2F;missing.csail.mit.edu&#x2F;2020&#x2F;security&#x2F;" rel="nofollow">https:&#x2F;&#x2F;missing.csail.mit.edu&#x2F;2020&#x2F;security&#x2F;</a><p>&gt; An example of a hash function is SHA1, which is used in Git. It maps arbitrary-sized inputs to 160-bit outputs (which can be represented as 40 hexadecimal characters). We can try out the SHA1 hash on an input using the sha1sum command:<p>Can we please stop presenting SHA1 as a valid choice for a hash function anytime now? Especially in a security context? This passage is probably just a holdover from the 2008 version of this page, but it&#x27;s still frustrating to see.
yodsanklaiover 5 years ago
I still remember my first week of engineering school (1997). Before the actual classes started, we had an intensive UNIX week. I loved it. It seemed like the real deal to me. I was already using linux at the time, but for the first time I was properly taught things by experts, and not computer magazines. What was my hobby was suddenly becoming something serious and respected. So much has changed since then but I&#x27;m glad that to this day I&#x27;m still using the same commands and tools.
joerickardover 5 years ago
I just graduated from University of Colorado Boulder this last semester with a CS degree, and am glad to say that this was a required course. It was a 3000 level course called Software Development that also incorporated a long form group project for team cooperation skills. It definitely helped me to improve my efficiency and organization when working on projects. Teaching thoughtfulness in designing not only a solution, but a work environment, is an important lesson.
chatmastaover 5 years ago
When I was in college, we also followed a &quot;traditional&quot; CS curriculum. The introductory language was Scheme. The language in core courses was C. Advanced courses used whatever was best for the course, usually C or C++. Many of the courses have had the same problem sets since 1985.<p>At the time, students had problems with it because &quot;how are we supposed to build apps with this knowledge?!&quot; There were even student efforts to &quot;modernize&quot; the curriculum by supplementing it with student run workshops on app building (which actually did really well).<p>Personally, I really appreciated the curriculum. I was a self taught programmer going into CS, having done lots of web dev and automation stuff with PHP &#x2F; Python. And I was really cocky about it. But as my adviser told me on my first day, &quot;yes, you&#x27;re a programmer, but you are not yet a computer scientist.&quot; I knew nothing about Computer <i>Science</i>, and had never touched a low level language, because I had no practical reason to. The next four years were valuable for me because they forced me to learn about topics that I will never teach myself.<p>And you know what? By the time I graduated I was fully proficient with git, python, Javascript, bash, and a whole bunch of other tools and concepts, despite the fact that no class forced me to learn them. I picked them up from working with others, scripting tests for my assignments, and <i>my internships</i>. It also helped to have the foundation of lower level knowledge. It&#x27;s a lot easier to understand the &quot;magic&quot; of your scripting language when you have an appreciation of what it&#x27;s actually doing underneath the hood. It&#x27;s easier to understand bash when you&#x27;ve written a shell in C. Etc.<p>For me, this approach worked well. School taught me the fundamental concepts that haven&#x27;t changed since 1985, which means they probably won&#x27;t change much by 2054, either. Who knows what industry will be using in 2054? I appreciate that the school curriculum prioritized core, fundamental concepts over tooling trends and the language <i>du jour</i>. Yes, it&#x27;s important to learn those practical skills, but they&#x27;ll come with practice and experience in industry (especially if you have 3 internships); there&#x27;s no need to take a class on them. And when the next one comes along, you can learn it in a week. Your knowledge of the fundamentals will help.
评论 #22233704 未加载
tombertover 5 years ago
I can&#x27;t speak for any other schools, but before I dropped out of Florida State, they had a class called &quot;Intro to Unix&quot;, which was only worth one credit.<p>We all were given login credentials to a server and our assignments were typically Bash scripts; there was one class spent on Vi, and the professor combined the Nano and Emacs class together. We also learned how to do Makefiles and how to run GCC...<p>I had assumed that this was standard in most CS majors...was I wrong?
评论 #22232416 未加载
评论 #22236879 未加载
terminaljunkidover 5 years ago
Thank you a lot for posting this link.<p>I am majoring in CSE in India and I think you guys have it still better. India&#x27;s engineering education (maybe except IITs) is completely screwed up by people who don&#x27;t know what they are doing. The average student here doesn&#x27;t come out of interest but for sake of getting some job. There are lot of people who don&#x27;t understand difference between text editor and word processor till end of the 4 year program, but still get an &#x27;S&#x27; grade (&gt;90% score) because of rote learning system. Leave alone mastering the tools, they expect to open a PDF&#x2F;docx in their phones and copy it to the computer. Having said that, the college I study is one of &quot;top&quot; colleges of the state.<p>They foolishly waste 1 year in our life by teaching &quot;common&quot; subjects like chemistry, physics, elements of {electronics,mechanical,civil} engineering etc.. I mean, they may be somewhat marginally useful, but they waste time and money for that while there&#x27;s lot of stuff to learn in CS itself; just because some baldhead decided it would be good to teach all subjects to engineering students in first year.<p>I really wish I could study in US.
daniel_rhover 5 years ago
2 words: bash reduce<p>(eg using cut, sort, split -l, nohup, ssh to orchestrate a massive job with only bare unix tools available)
pgcj_posterover 5 years ago
All of this seems like stuff I would expect someone studying CS to pick up on their own. I learned to use git in college, but not because anyone taught me: I just figured it out because I had group projects and needed version control. On the other hand, there&#x27;s no way I could have possibly learned how something like ray-tracing worked without learning it in school or doing some really intense self-study. I feel like it&#x27;s a waste of class-time to teach stuff like git, shell scripting, etc. If you&#x27;re smart enough to understand graphics or compilers, you should be able to learn those tools on your own without any trouble.
daxfohlover 5 years ago
I wonder how different things would be if cs departments had a special lab without mice.
mannykoumover 5 years ago
We had a similar course at Columbia (half semester, 1 credit). The professor was good and the information pretty useful; very similar material to this one. The paradox was that for the ones who knew the significance of such a course, well, we had already learned most of these things the hard way. Maybe our other CS profs should have advertised the course as an optional requirement to get people interested early instead of their junior&#x2F;senior year.
peter303over 5 years ago
I have a MIT degree and learned these when I encountered them in my work. An important thing is to learn how to learn for the rest of your life.
cneesover 5 years ago
University of Michigan had this as an elective three or four years back, and it&#x27;s served me well to understand things like piping, output redirection, and reflog. I&#x27;m glad MIT&#x27;s making this public. It seems like it could fill a big gap for people who don&#x27;t have the mentorship to know what they don&#x27;t know.
deadgrey19over 5 years ago
This is a standard second year CS course at UNSW: <a href="https:&#x2F;&#x2F;cgi.cse.unsw.edu.au&#x2F;~cs2041&#x2F;19T2&#x2F;index.html" rel="nofollow">https:&#x2F;&#x2F;cgi.cse.unsw.edu.au&#x2F;~cs2041&#x2F;19T2&#x2F;index.html</a><p>Topcis included: Shell Perl Git Javascript Webservers Make Performance tuning
amaiover 5 years ago
Vim? Why not teach a real IDE like Eclipse or Intelij Community Edition? It has much better auto-completion, has a GUI for Git, debugging and profiling etc.<p>Also I&#x27;m missing test driven development or at least unit tests in the curriculum. Reproducible results are important, even at university.
rawoke083600over 5 years ago
I could add, one course or two about &quot;communications&quot; the one with people in. Most of us will spend our times in teams, with highly opinionated and sometimes conflicting individuals. Computer programmers don&#x27;t know how to listen or to respond, we mostly just react.
fao_over 5 years ago
To be honest, I was kind of disappointed with this, because most of it I already knew! (That&#x27;s not a criticism of your course c:)<p>In the vim section, you might want to cover `*` - go to next match of current word and `#` - go to previous match of current word
mhh__over 5 years ago
Probably at less depth but I ended up learning quite a lot of these topics at GCSE (16ish), with the exception of proper version control although I taught myself git and C++ instead of actually working. Probably quite lucky in retrospect
tester89over 5 years ago
We have a class like this at my uni and it’s the most hated class for the CS course.
alienlikeover 5 years ago
In my observation (at a major research institution), some grad-level CS students lack an even more fundamental skill: touch typing.
adultSwimover 5 years ago
I thought it was going to be communication or active listening.
robomartinover 5 years ago
&gt; 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.<p>I&#x27;m sorry, it isn&#x27;t my intent to start an editor war. Use whatever you want, I don&#x27;t care. Just don&#x27;t lie about it. I expect far more from MIT than this nonsense.<p>VI and VIM are what they are because keyboards of the era --and the entire UI-- looked like this:<p><a href="https:&#x2F;&#x2F;retrocomputingforum.com&#x2F;uploads&#x2F;default&#x2F;original&#x2F;1X&#x2F;d4ee796ce7397d62b975d7ab03a8e0975146b330.jpeg" rel="nofollow">https:&#x2F;&#x2F;retrocomputingforum.com&#x2F;uploads&#x2F;default&#x2F;original&#x2F;1X&#x2F;...</a><p>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.<p>This is from a Tektronix terminal, which I used in the early 80&#x27;s. Here it is:<p><a href="https:&#x2F;&#x2F;www.computerhistory.org&#x2F;revolution&#x2F;input-output&#x2F;14&#x2F;349&#x2F;1826?position=0" rel="nofollow">https:&#x2F;&#x2F;www.computerhistory.org&#x2F;revolution&#x2F;input-output&#x2F;14&#x2F;3...</a><p>The VT-100, if I remember correctly, introduced four cursor keys:<p><a href="https:&#x2F;&#x2F;www.computerhistory.org&#x2F;revolution&#x2F;input-output&#x2F;14&#x2F;349&#x2F;1849?position=0" rel="nofollow">https:&#x2F;&#x2F;www.computerhistory.org&#x2F;revolution&#x2F;input-output&#x2F;14&#x2F;3...</a><p>I also used VT-100&#x27;s and clones during the &#x27;80&#x27;s.<p><a href="https:&#x2F;&#x2F;www.computerhistory.org&#x2F;revolution&#x2F;input-output&#x2F;14&#x2F;349&#x2F;1697?position=0" rel="nofollow">https:&#x2F;&#x2F;www.computerhistory.org&#x2F;revolution&#x2F;input-output&#x2F;14&#x2F;3...</a><p>Notice the total absence of anything even resembling much more than a simple typewriter. No mouse, function keys and other modern facilities.<p>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&#x2F;insert operation for more reasons than just the archaic keyboards. These terminals were used to connect with remote systems at VERY LOW BAUD RATES.<p>It&#x27;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!<p>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.<p>This is why, quite frankly, I hate the &quot;cult of vi&quot;. 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.<p>So, yes, at the time, if you had to write a text&#x2F;code editor (I wrote a few) you had no choice but to use a bunch of Ctrl-&lt;something&gt; codes and perhaps even implement a distinction between reading and inserting code. I still remember sequences like Wordstar&#x27;s &quot;Ctrl-k-x&quot; running on an 8080 S-100 system with, yes, a VT-100 terminal attached.<p>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.<p>Like I said above, use whatever you like, I truly don&#x27;t care. Just don&#x27;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&#x2F;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.<p>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.<p>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&#x2F;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!<p>If coding is factory work, then, sure, mechanize as much as possible and count strokes. That would be the day I become a gardener.
评论 #22237729 未加载