Working with some exceptional programmers, I often find myself in meetings with architects, leads and developers who (I think) love to throw some big words or phrases out there to try and scare the heck out of Product Managers or their clients.
It's one of those things that programmers like to do. Here's ten of them with a very simple description (that will undoubtedly draw the ire of developers everywhere as I hack their terminology to death with my simple car metaphors):
- Abstraction – this is taking a difficult process or function and basically breaking it down logically… either by hierarchy (A belongs to B, B belongs to C, etc.) or by feature or function (color, size, weight, etc.). Abstraction makes object-oriented programming easier by organizing the functionality logically. To build my car, I build a frame, an engine, and a body separately.
- Deprecation – this means that there is some old code in the system that may remain but needs phased out. When code is deprecated, programmers don't reference the code or utilize newer code until all references are gone to the old, at which time it should be removed. Sometimes, if it's a feature that's going away, you can keep it for a while with a warning to your users that it's going away. I get a new stereo system with new wiring but I leave the old wiring and don't use it.
- Encapsulation – this is the process of organizing your programming functions within a parent when the function doesn't reach across any other parts of the system. If you have millions of functions, you want to have them efficiently organized and functioning within the areas that they operate rather than having them available globally. I put the engine's supporting mechanics in the engine compartment… I don't put the oil filter in the back seat.
- Inheritance – this is the ability to take on the properties of another piece of common code (a class) in order to reuse it for new functionality without having to rewrite it. Inheritance is another good object oriented development practice. My car seat can be used to carry a child or an adult – whoever sits in it.
- Normalization – this is the method of organizing data more efficiency in a database by building out references. An example would be if I had to record traffic lights all day… red, yellow and green. Rather than write each record with red, yellow, and green – I write 1, 2, and 3 and then make another table where 1 = red, 2= yellow and 3 = green. This way I only record red, yellow and green once. Each of my car doors has the same door handle. One handle, used in 4 different locations rather than 4 different handles.
- Object Oriented – in modern programming languages, this is a design method that allows you to write specific code in pieces, by functionality, and then reuse them. An example would be if I wanted to check for a validly constructed email address. I could build the function once, and then use it where ever I need to in my application. My car has 18″ rims that can be used on other cars by the same or other manufacturers.
- Polymorphism – This one is tough to explain, but basically it's the ability to develop code that can be used dynamically for other situations. In other words, it can inherit unique and dynamic functionality simply by the way it's referenced. This is a very efficient means of development. I can use my automobile's electrical outlet to charge my phone or to supply juice to my tire pump.
- Recursion – this is a method where code references itself. Sometimes, it's efficient and intentional, but other times it can wind up spiraling your applications out of control. I click seek on my car stereo and it loops through the radio stations. It never finishes, just keeps going.
- Refactoring – this is the process of rewriting code to make it easier to follow or to organize it better but not necessarily add any additional functionality. I rebuild my engine.
- Server Oriented Architecture (SOA) – take object oriented programming and apply it to large systems where you can have entire systems that do certain functions. You might have a customer relationship management system that speaks to an ecommerce system that speaks to a shipping system, etc. I pull a trailer with my car to ship items from one place to another. I use a trailor hitch (XML) to connect them.
I realize that my metaphors weren't always perfectly on target. I hope they helped a little bit, though!
Some advice when you hear these words in your next meeting with a developer… don't run back to your seat and look them up on Wikipedia, they'll be watching. Don't flinch, they'll attack. Here's what to do… ponder out the window as if you're in deep thought and then look back with an inquisitive look or scratch your chin. Wait for them to follow up their declaration with more info.
… They're watching.