During my recent effort to force myself to understand Unicode and modern text encoding/processing, I was reminded that this is something that “every programmer should just know”, an idea that comes up every so often, usually in relation to a subject in which the speaker is already an expert. One of the most absurd examples I ever witnessed was a blog post along the lines of “What every working programmer ought to know about [some very specific niche of enterprise-level Java programming]“. I remember reading through the article and recognizing that I had almost no knowledge of the material. Disturbing, since I am demonstrably a “working programmer”.
For fun, I queried the googles on the matter of what every programmer ought to know.
Specific Topics
Here is what every programmer should know about: Unicode, time, memory (simple), memory (extremely in-depth), regular expressions, search engine optimization, floating point, security, basic number theory, race conditions, managed C++, VIM commands, distributed systems, object-oriented design, latency numbers, rate monotonic algorithm, merging branches in Mercurial, classes of algorithms, and human names.
Broader Topics
20 subjects every programmer should know, 97 things every programmer should know, 12 things every programmer should know, things every programmer should know (27 items), 10 papers every programmer should read at least twice, 10 things every programmer should know for their first job.
Meanwhile, I remain fond of this xkcd comic whose mouseover text describes all that a person genuinely needs to know. Still, the new year is upon us, a time when people often make commitments to bettering themselves, and it couldn’t hurt (much) to at least skim some of the lists and find out what you never knew that you never knew.
What About Multimedia?
Reading the foregoing (or the titles of the foregoing pieces), I naturally wonder if I should write something about what every programmer should know about multimedia. I think it would look something like a multimedia programming FAQ. These are some items that I can think of:
- YUV: The other colorspace (since most programmers are only familiar with RGB and have no idea what to make of the YUV that comes out of most video decoding APIs)
- Why you can’t easily seek randomly to any specific frame in a video file (keyframe/interframe discussion and their implications)
- Understand your platform before endeavoring to implement multimedia software (modern platforms, particularly mobile platforms, probably provide everything you need in the native APIs and there is likely little reason to compile libavcodec for the platform)
- Difference between containers and codecs (longstanding item, but I would argue it’s less relevant these days due to standardization on the MPEG — MP4/H.264/AAC — stack)
- What counts as a multimedia standard in this day and age (comparing the foregoing MPEG stack with the WebM/VP8/Vorbis stack)
- Trade-offs to consider when engineering a multimedia solution
- Optimization doesn’t always work the way you think it does (not everything touted as a massive speed-up in the world of computing — whether it be multithreaded CPUs, GPGPUs, new SIMD instruction sets — will necessarily be applicable to multimedia processing)
- A practical guide to legal issues would not be amiss
- ???
What other items count as “something multimedia-related that every programmer should know”?
3a) understanding the shortcomings of the (mobile) platform and why you still want to compile and use libavcodec on it.
Love it. Maybe too much; I posted it to eight accounts/pages across five social networks….
3a.1) or why the real player in play store can’t play real video on most devices
@Mike: that always reminds me of quote #48 at http://www.cs.yale.edu/quotes.html
@Janne: because that’s the only feature people want from it and thus they should pay for it? Anyway, why should _I_ bother about it?
@Kostya: indeed, it has now RealAudio and RealVideo support as in-app upgrade. That wasn’t the case a couple of months ago.
Would be interesting how that compares to libavcodec’s decoder. But I guess I’m not interested enough to install RealPlayer let alone pay for the decoder.
http://immike.net/blog/2007/04/06/the-absolute-bare-minimum-every-programmer-should-know-about-regular-expressions/ does not work
@Marko: Strange; I thought it was working yesterday. Please accept this copy in the Internet Archive instead.
I had no idea Real was still a contender in this day and age. Are there large archives of legacy Real material still available? Or do some sites still encode new material using it?
The importance of the ratecontroller. A topic sadly neglected
I think rate control is losing relevance fast for many use-cases. Realtime streaming kind of remains, but considering how variable the network connections usually are I think even there it is a bad solution.
However I think realizing how difficult it is to measure “quality” in a way that matches almost everyone’s perception probably is core to all lossy multimedia formats.
Which is why I prefer to work on decoders :-)
My local county government still uses Real audio: http://legis.suffolkcountyny.gov/audio/audio.html and the archives of said “live” meetings are posted in Real too.
Real is _still_ alive in China.
I’ve seen movies released in 2012 encoded with Real video. They always come with Simplified Chinese hardsubs.