What every computer science major should know (2011)
Given the expansive growth in the field, it's become challenging to discern what belongs in a modern computer science degree.
I'm a computer scientist that became passionate about precision medicine in a quest to diagnose my son Bertrand .
Visit matt.might.net → On Hacker News Apr 2010 – Jan 2025
Software Engineering 18Life, Learning & Writing 11Career & Management 8Math & Algorithms 7Tools & Productivity 6Programming Languages 6
Given the expansive growth in the field, it's become challenging to discern what belongs in a modern computer science degree.
These structures are so universal that most research papers in the theory of computation, programming languages and formal methods present concepts in terms of discrete mathematics rather than code.
The point of these scripts is not to ban all use of constructs like the passive voice. (When it comes to writing, there are exceptions to every "rule.")
Since making a sudden leap from computer science to academic medicine about seven years ago, I haven’t programmed as much.
Students often ask for a recommendation on what language they should learn next. If you're looking for a job in industry, my reply is to learn whatever is hot right now: C++, Java and C#--and probably Python, Ruby, PHP and Perl too.
I recently wrote about completing Advent of Code 2022 using a different programming language (or two) every day for 25 days.
As an interactive shell, bash is a terse language for initiating and directing computations.
Unix is a bestiary of ad hoc databases: comma-, colon-, tab- and space-separated tables. Think of /etc/* or /var/log/* , or of columnar commands.
Continuations are the least understood of all control-flow constructs. This lack of understanding (or awareness) is unfortunate, given that continuations permit the programmer to implement powerful language features and algorithms, including exceptions, backtracking search, threads, generators and coroutines.
Implementing a programming language is an experience no programmer should go without; the process fosters a deep understanding of computation, and it's fun!
Racket provides a simple yet flexible web framework for serving dynamic web content.
Unix is an alliance of loosely structured text files bound together and governed by scripts. Unix is the United Confederation of Strings:
One's sentiment toward JavaScript flips between elegance and disgust without transiting intermediate states.
Though it contains forms only for function applications, variable references and anonymous functions, it is equivalent to a Turing machine.
I prefer functional languages like Scheme, Scala or Haskell over C++ for most tasks. So, when I'm forced to program in C++, I write functional C++.
The halting problem asks whether the execution of a specific program for a given input will terminate.
In terms of unreasonable effectiveness, the transformation to continuation-passing style (CPS) ranks with the Y combinator .
Generally, academic software is stapled together on a tight deadline; an expert user has to coerce it into running; and it's not pretty code. Academic code is about "proof of concept." These rough edges make academics reluctant to release their software. But, that doesn't mean they shouldn't.