413 karma · joined February 4, 2014
All languages have some notion of static types and dynamic types. They're most easily bucketed by whether they consider more than one type.
C is statically multityped but dynamically unityped. Python is statically unityped but dynamically multityped. Haskell, since it uses lazy evaluation, is statically multityped and dynamically multityped.
The main issue with static unityping is that insufficient testing can easily lead to type errors in production (or worse). And static multitypes help static analysis tools reason about code more easily.
Introducing a new type that is intended for use in a specific context that can easily be tracked is tremendously useful when programming at scale.
Specifically, the system should be auditable in a way that makes it difficult to trace individual votes back to voters, but allows individual voters to verify that their votes are counted correctly.
There must be a good way to accomplish this while also addressing potential voter fraud. Does anybody know of any research in this area?
With paper ballots, I have no way of knowing whether or not my vote was counted correctly. And I find that really unsettling.
Several of the labs have a somewhat incremental process where you start out with an acceptable implementation and optimize in steps.
In a field like computer science, time is better spent working on personal projects, hashing out ideas with peers and exploring research opportunities than aspiring to get an A in every class. A's make for boring, one dimensional students. People who make priorities based on more complex factors than an arbitrary letter grade are preferable to interact and work with.
Watching computers is valuable to a point, but completely different from watching humans. The search space that humans can cover is much smaller, so the games end up being more positional, and easier to understand for a spectator. I wish that they would build a chess engine that emulated a human thought process so that it could be used as part of following a game in progress. The way they used the engine in the official world championship broadcast was frustrating. I don't care if white has a forced mate in 83 moves, I want to know how the position seems based on a shallower but more positional analysis.
To be clear, I am not promoting piracy, it does pose ethical problems. The metaphor to stealing simply fails to illuminate any of them.
Wind instruments are necessarily tuned to a specific key, due to the nature of the harmonic series. But most talented wind instrumentalists are capable of modifying pitch to be in tune in any key or chord.
Down the rabbit hole, read on at your own peril:
Even string instruments are tuned to a key, to a certain extent, due to the use of harmonics. It is possible to fine tune the pitch of a harmonic by shortening the string as usual, but it is exceedingly difficult, since shortening the string changes the position of the nodes (the spots on the string that must be touched in order to produce harmonics).
Pattern matching makes for more readable code. And more readable code makes writing projects easier.
It is also more convenient to write code using pattern matching, but that isn't the primary benefit.
Java, C, Python and Javascript all lack algebraic datatypes and pattern matching, which make writing a compiler much easier. There are many additional features of Haskell that make it especially good for implementing a compiler, if you know what you're doing.
I guess that's cheating because a compiler is just a function from source language to target language, so it is easily expressed in a functional language. But it does answer the question nicely.
You could also explore languages from an academic perspective. Benjamin Pierce has written several high quality texts about topics in programming languages.
I can't speak to Boston, but having lived in Philadelphia, Pittsburgh and a suburb of NY (Fairfield county CT), Pittsburgh has the most accessible cultural outlets. The local art scene is incredible, there is a top tier orchestra, the city is mostly bikable (with more protected bike lanes on the way), there are 3 professional sports teams that are within 20 minutes on public transportation of anywhere in the city. The list goes on. There may be more things to do in NYC than Pittsburgh, but I constantly felt like I had to pick and choose because it was just so expensive.
Basically, Google has an enormous code base. Stylistic decisions should have semantic weight, but since everybody has their own style, it becomes challenging to understand the reasoning behind certain choices. When you have a standard, it means that you can read into some of the stylistic decisions sprinkled throughout the code.
Take for example, the use of pointer arguments for passing the addresses of results. The justification is that using a pointer is explicit and unambiguous. Non-const references have value syntax but pointer semantics, which can be confusing. Yes, this is contrary to some of the core values behind C++ but Google felt that the improved readability was worth that dissonance.
Additionally, insiders are usually required to report any trades of company stock that they make.