Guide to Technologies for Recruiters
This describes the cryptic technologies you see in job descriptions for website development, and how they fit together.
I wrote this for recruiters who don't know the buzzwords yet, or who need to look up some.
Use the Find function on your browser to search through this page (^F or ⌘F).
This doc is Quick and dirty so it's not too pretty. (C) 2014 Tactile Interactive.
When you surf to a website, there's two computers involved:
- Client - the computer you have in front of you. It's running a program called a 'browser'. Often called the 'front end', although sometimes the 'front end' includes part of the server.
- Server - this is the remote computer you're surfing to, owned by whatever company or institution. It's running a program called a 'web server'. Often called the "back end".
WHen you go websurfing, you type the URL into the location box in your Browser.
More often, you click on a link, which does the typing for you - each link has a URL behind it like the above.
'URL' is pronounced "You Are Ell" or "earl".
Here's the parts:
- http - the protocol - rules for engagement - between the two programs
- hire.jobvite.com - this is the "domain name" of the remote computer you're surfing to; this one is owned by jobvite.com
- hire. .... /CompanyJobs/Careers.aspx?c=qve9Vfwx&cs=9d5aVfw7&page=Jobs - this part tells where on jobvite.com to see, what page, and other options and info
The browser runs on your computer - the screen, keyboard and mouse in front of you. Popular operating systems:
- microsoft's Windows - the only kind NOT on Unix
- apple's MacOS X - if it has an Apple logo, and a menu along the top of the screen, probably a Mac. Actually runs Unix underneath.
- open source Linux - you have to be a real hacker to use Linux on your workstation; runs on PCs instead of Windows
- other kinds of Unix - very rare.
Languages that run in the browser:
- google's Chrome - this is the one I use to program for. Windows, Mac, Linux, everywhere.
- mozilla's FireFox - Also popular to program to. Windows, Mac, Linux, everywhere.
- apple's Safari - Mostly on Mac, but there's also a windows version. Internals similar to Chrome.
- microsoft's Internet Explorer - only on Windows. Everybody hates this one cuz it's so hard to program to, and buggy, and behind the times.
- Opera - somewhat rare but more popular than the other really obsure browsers
- HTML - the main language. xhtml is a takeoff on html. html5 is the latest coolest version. This file itself is just plain old HTML with almost none of these others.
- CSS - describes details about the HTML. I made the toolbar at the top with a tiny bit of css. CSS3 is the latest coolest version.
- images - pictures. these are separate files, with suffixes like .jpg or .jpeg, .png, .gif . Programmers or Graphic Designers hack on these with adobe's Photoshop
- multimedia - these are also separate files, that do video or sounds or other magic stuff.
Sometimes there's other stuff browsers can run, "browser plugins". long story. A very specific craft that not everybody knows.
The server generates web pages from a program called a Web Server. Actually, the Web Server quickly hands off the job to one of the server programming languages as described below.
A server has:
- a machine - hardware. you can even use a laptop, but it goes away after you close the cover. For production, often a 'virtual machine' which means they have a layer of software like VMWare, that runs on a real computer, but makes phony computers inside it that act just like real machines. Amazon Web Services does this for its customers, although there are plenty of competitors.
- OS - lowest level of software, often Linux
- programming language(s) - often there's a main language a shop will use to do their server software: PHP, Ruby, C#, etc.
- database system - stores data in some sort of organized way. eg MySQL, MongoDB
- web server - eg Apache, nginx, IIS
- other software - here, things get diverse. You can think of 2 parts:
- a 'web framework' or 'app server', software that you buy or download for free, cuz every site needs some of the same pieces. See 'Server Languages and Stacks' below. Optional, but that means that the programmers have to write it themselves. Which usually they did a long time ago, so it's done but always gets tweaked.
- the software the shop programmers write themselves. This is what most programmers work on. This is what customizes the website to whatever company.
- other add-ons, too many and too varied to list
Popular operating systems:
- open source Linux - as in LAMP. Very popular, and becoming the main flavor of Unix on servers.
- microsoft's Windows - the only kind NOT on Unix; runs on PCs
- sun's Solaris - fading in popularity, this used to be a favorite on high-end servers. Bought by Oracle and continued its downward slide.
- other kinds of Unix - FreeBSD, MacOS X, SGI, AIX, others. these are all getting pretty rare these days.
The 'web server' software talks HTTP over the net to your browser, and hands off each page request to the languages below.
Popular web servers:
- open source Apache - as in LAMP. Very popular, probably the biggest
- microsoft's IIS - part of .NET
- nginx - new guy on the block, and taking over some from Apache.
- others - lighttp ("lighty"), others, too many to list
Server Languages and Frameworks
The framework/app server often defines the religion for server-side work. Different frameworks run on different programming languages; very rarely does a framework exist on two or more languages, cuz there's so much code, they have to pretty much start over. And, usually there's not a mix of languages, as these are religions so Everything has to be rewritten in The Language in order to be ideologically pure. And, really, you can do almost everything in almost all of the languages.
That means, for instance, if you hear CodeIgniter, you can safely assume they're using PHP as the language. And DJango means Python. ColdFusion means Microsoft Windows.
Microsoft Frameworks - .NET
Java Frameworks - Java Enterprise
When Java 1.2 came out, the big push was to write web server software with it. This system was ultimately called J2EE (Java 2 Enterprise Edition); more recently it's been renamed Java Enterprise. They call their frameworks 'application servers'. If you see URLs that have '.jsp' in them, it's probably this. Other buzzwords: JSP, JVM, JSTL, JSF, JBoss, servlet, POJO, ESB, WebLogic, WebSphere, Tomcat, Spring, Hibernate. If you see any of those, it's most probably Java Enterprise of some sort.
These are frameworks, with lots of other stuff on top. See below.
Python - Django
Python - other
Ruby - Ruby on Rails
This was all the rage around 2008, but it's cooled off a bit and gotten more mature.
Runs only on MS Windows servers. If you see '.cf' in the URL, chances are it's this. It's got its own programming language.
CakePHP, CodeIgniter, Zend. Here's some more:
People tend to write their own on PHP.
These aren't so much languages or specifics; these are more design or process ideas or practices. They also tend to be religions
- MVC - Model View COntroller - a convention for making user interfaces
- MVVP, MVsomethingelse - same as MVC but a separate religion
- TDD - test-driven development - idea is to write test software as you write the main software.
- BDD - behavior driven development - way to do user interface, by repeatedly trying it out on real human users. Apple did this in the 1980s before the BDD name got coined. Works really well if you do it right.
- Extreme Programming - The latest 'new' way to run a programming group. includes:
- scrum - daily meetings, 5 min
- pair programming - one on the keyboard, one standing behind coaching or discussing
- TDD, BDD, Backlog, Sprint
- other stuff
- Open Source - the idea that software should be free, "free as in speech, not free as in beer". Although it's also free as in beer. Most unix/linux server software these days is free and open source; one can download Linux, Apache, MySQL, PHP, python, ruby, and tons and tons of more obscure software freely. Part of this is because charging money for each piece, and enforcement, is a hassle. Part is also because they're sometimes buggy (but also true for commercial software so why pay). And poorly documented. So the users themselves fix bugs and documentation. But it also means any programmer can download it on Saturday and learn it themselves for free. A very very big overlap with Unix flavors.
- programmer, developer, software engineer - writes html, css, server stuff, and everything
- front end developer, user interface developer - does the html/css/js on browser, and usually some of the front layer of the server
- back end developer - server software, down to the database
- full-stack developer - writes front end and backend
- QA - quality assurance, tests software. Should NOT do programming, but sometimes does.
- automation - write programs that do QA
- release engineering - manages taking the software that developers write and pushing (uploading) to the website. Often includes QA.
- UX - user experience, designes user interfaces without doing much programming, or just a little
- Graphic Designer, Designer - art degree, designs site's look, and uses Photoshop to make images for site. Sometiems also programs HTML and CSS a little.
- Product Manager - Decides what website does and how and what features; manages bug list for programmers. Usually non-programmer.
- manager - Could be anything. Might manage people or processes. IBM used to call all their salesmen "Sales Manager" to make each customer feel important - but most of them had nobody else under them. Often, the 'hiring manager' for programmers is, themselves, a senior programmer. manges the above people. Does the 'process'.
- DBA, database administrator - manages the servers and the database systems and all of the data in them - the corporate jewels. Must be a reliable person, and a programmer who's good at SQL and other database languages.
Databases store the data for a website.
When you make an account on the site, under the hood, they're adding your data to the database. Same when you make just about anything on the site that belongs to you or your account.
Also has other kinds of data; anything needed by the site that's a big chunk of organized data.
This is always 'backend' - usually considered the most backend of the backend. 'mid-tier' usually means the server stuff that runs on top of the database, but is still lower than the 'user interface' or 'front end'.
Databases are managed by software called 'database servers'. The server software internally talks to the database system.
- Relational Databases - became popular in the 1980s, and still very popular. Most databases are relational. Data stored in tables. Tables organized into 'databases'. They pretty much all use the language SQL ('sequel'). Some popular ones:
- MySQL - massively popular. Free and open source.
- Oracle - flagship product of Oracle Corporation. Very expensive. But very big.
- PostgreSQL - similar to MySQL, but somehow never got as popular.
- DB2 - IBM's
- NoSQL - these are different kinds of non-relational databases systems. Often they are similar to relational, but they break the rules of relational, with other capabilities, long story. Getting very popular. do NOT use SQL.
- redis - different; does not replace mongodb.
- lots of others
Content Management Systems - CMS
A server-side system for a complete website; in many cases, non-programmers can add content. Easy to toss together a quick and dirty website. Harder to do custom stuff with it. Stores most website details in the database. Uses the database a whole lot; it's a performance problem. Not everybody uses one of these; long story.
Some popular ones:
- Drupal - runs on PHP. Very popular. Very complex, and its own religion.
- WordPress - runs on PHP. older, simpler than Drupal
- Joomla - runs on PHP.
- MediaWiki - runs on PHP. more like a wiki; runs Wikipedia
- ExpressionEngine - runs on CodeIgniter on PHP. Commercial (costs money).
- others - really, there's a lot of others that run on languages other than PHP, I just can't think of any.
Photoshop is the #1 graphics editing tool.
It takes some work to learn it; if you just start out, you'll be flailing around unable to do anything.
Many programmers learn some Photoshop, like me, because websites involve a lot of graphics.
Making simple things like buttons is fairly easy; editing photos is different but not too hard; drawing cartoon characters or 'painting' is very hard, unless you have a drawing palette and pen. You can do an enormous amount of stuff with Photoshop; but you'll have to learn a lot about computer graphics, graphics files, photography, light, color. You can't just sit down and use it without experience (or a good tutorial).
Programmers tend to organize into religions, cults that form around operating systems, languages, and other technologies and brands. The bigger (more visible) the technology, the more chance there's a big religion.
It's a kind of chauvanism, where adherents believe that their technology is way better than rival other technologies that replace them. They tend to be blind to the shortcomings, but know ways to get around the problems. They compare the latest version of their technology with older versions of rival technologies; that's part of the delusion.
Most computer religions are sortof bullshit; every system has its plusses and minuses. If people are still using it, somehow the plusses are enough for their users.
But don't tell them that their religion is bullshit!! Sometimes, these are like real religions - the fanatics will have somewhat irrational beliefs, don't challenge them. Say they're Ruby fanatics. It's like this:
Everything Must Be Ruby! All programmers who work for us must be expert Ruby programmers! Other languages, we don't care. cuz nobody uses them anymore, someday, programmers will stop using the other languages and move to Ruby! Engineering groups lead by fanatics may want to hire similar people. (Partly legitimate: the fanatics tend to know it better.) If you present to them candidates who are not among the faithful, that might not go over very well. This is especially true for short-term contract jobs; the candidate has to hit the ground running.
On the other hand, a lot of people have figured out that the differences aren't all that important, so they are more interested in finding someone who's an all-around generalist, thinking that they can learn as they go along, especially if it's a FT job that will be long-term. This is also a reasonable way to run a shop; most programmers can jump between at least two languages, and often 6 or more. Most of the concepts are the same, and so are most of the features and a lot of the syntax, so it's not like English versus Japanese.
Major religions depend on the technologies and what they run on top of. So, for instance, if you want to run Drupal, you need PHP and usually the rest of LAMP, and usually that's on top of Unix of some sort. If they're listed on the same level in this list, they usually replace each other and you won't find them together - so Drupal competes with WordPress, people run one or the other but not both (unless they're converting from one to the other). These all tend to be so different, the things that run on top of them are totally different. So for instance, you will never see Drupal on Python, or Backbonejs on top of mootools.
- Microsoft - usually uses .NET, .asp, IIS, Visual Basic, C# (cee sharp), JScript. But often they run the same stuff that's on Unix, although more awkwardly. I don't know much about this.
- Unix - usually runs Linux on the server, with Apache or nginx, PHP, Java, Python, Perl, Ruby...
- server-side religions. If you own the server, you can decide what languages and everything else.
- LAMP - Linux, Apache, MySQL, PHP - very very popular
- Smarty - a templating system.
- Drupal - CMS written in PHP
- WordPress - CMS written in PHP
- Joomla - CMS written in PHP
- LAMP with python or perl- Linux, Apache, MySQL, and Python or Perl - same idea, different language that starts with the letter P
- Java Enterprise - Java on the server. aka J2EE. Often if they just say "Java" or "JSP" that's what it means.
- Ruby on Rails - uses Ruby programming language
- mootools - very old
- YUI - from Yahoo
- prototype - old
- jQuery - the king, very common
- angularjs - from twitter
To be continued...and extended
more topics to cover:
- programming languages
- mobile devices
- flash, flex, actionscript
- browsers in mobile devices, mobile OSs
- religion houses vs generalist houses
Experience of SOA or Web Services SOAP, REST.