I mean, what languages and tools are requirements in your profession as a software engineer? What do you have to have in your toolbag?
I’ve been thinking about this a bit over the last few months, and the list, for me at least, is pretty long:
- JavaScript
- HTML
- CSS
- Document Object Model Levels 0, 1, 2, 3
- XHTML 1.0
- XUL
- XBL
- XPIDL
- XPCOM (JavaScript)
- XPCOM (C++, especially strings, hashtables and arrays – I colloquially call this “Mozilla-style C++”)
- XPath
- XPCShell tests
- Reftests
- Mochitests
- Chrome Mochitests
- Where the major specifications are (hence all the hyperlinks above)
- Bugzilla
- MXR (including some other branches)
- Subversion and TortoiseSVN
- Mercurial
- Mercurial blame for Mozilla
- Reading patch files
- GNU utilities (including MozillaBuild tools)
- Makefiles
- Configure options (and occasionally, configure.in scripts)
- Shell scripts
- Visual Studio debugging
- Windows desktop usage
- KDE / Gnome Desktop usage
- jar.mn files
- XML DTD’s (content AND locale)
- How to build a Firefox extension
- How to build a XULRunner application
- How to reduce a bug to a minimal testcase
- Many, many useful XPCOM components and interfaces, and how to use them
- The English language (I’m not quite kidding)
- Writing specifications and documentation
There are also a few I infrequently use:
- Python
- Perl
- PHP
- MySQL
- Apache
- GDB debugging (on occasion)
- CVS
- Macintosh operating system
- MathML
- SVG
- RDF
- HTTP
Now, I don’t need to be an expert in all of them. I do need to be an expert in a few of them (JavaScript, HTML, CSS, XUL, XBL, XPIDL, Makefiles, tests). The rest, I can look the details up when I need them.
Even so, it’s a lot – and I imagine Professor Humphrey’s students might be intimidated to see a list like this. The good news is you don’t have to learn it all at once! In the corporate world, for new professionals, there is a learning curve. The bad news is that this list is always changing. Two years ago, I doubt I’d have listed Python above – and I suspect in less than two years, it will move into the “must-know” list.
So here’s a new Internet meme for you software engineers: List out the languages and tools you need to do your job. Extra credit if you post it as an unified diff against my own list here, linking back to this post.
I just hope I haven’t missed anything terribly obvious.
Let’s see…
* Javascript (+jQuery and MooTools) / HTML / CSS
* PHP (+ Smarty), Perl
* Apache / Lighttpd, MySQL
* general Linux administration (it helps that I’m a full time Linux user)
* Java
* Bazaar
* Make
* XML parsing
* general lexing and parsing (surprisingly how often it comes up, and how few programmers are able to do it)
* database design
* basic mastery of bitmap and vector image editing, sound editing and video editing and transcoding
I’m probably forgetting a few things, but these cover the basics.