12 May 2016

This is going to be a series of posts where I intend to dive into the stuff which "formally trained" programmers seem to know.   

What do I mean by "formally trained"?

The easy way to think of it is programmers who have a university education, or similar, where the focus on theory matters a lot. It also feels to me that the old & wise men of programming all just know this and the upcoming generation doesn't seem to have this knowledge. I don't put myself in that group of formally trained, and even after 20 years I don't know these things well enough to hold a conversation about them.

What will I be covering? (these will be linked as the posts go up)

Language

The biggest pain for me in 20 years of programming is not everyone speaks the same language. I am not referring to C# or JavaScript, rather terminology that we use. Is an Array always an Array? How do we talk about measuring performance?

Big O Notation

Data Structures

The way we structure data, the advantages and disadvantages of each.

Array

Linked List

Trees

Binary Tree

Binary Search Tree(coming soon)

Red/Black Tree(coming soon)

Heap(coming soon)

Hash Table(coming soon)

Stack(coming soon)

Queue(coming soon)

Trie(coming soon)

Graph (directed or undirected)(coming soon)

Indexes (forward & inverted)(coming soon)

Algorithms

Algorithms are ways of working with data and data structures in a consistent way. The advantage to knowing them is two-fold; First it helps communication since we can all use the same names and secondly it expands our thinking about programming.

Bubble Sort(coming soon)

Merge Sort(coming soon)

Quick Sort(coming soon)

Radix Sort(coming soon)

Depth First Search(coming soon)

Breadth First Search(coming soon)

Shunting Yard(coming soon)

Comments

David V. Corbin's picture

For the definition of "programmer" that was in use many decades ago (say 1970's when I started) those were indeed critical. But remember that "programmer" sat below the "analyst" and above the "coder". Today (and for quite a few year) most are "developers" which have a significantly different set of responsibilities.

I screen a lot of technical people [my company offers it as a service for senior levels where the client does not have the skill or expertise to do a deep technical interview]. Most misunderstand Big O [and even much of the documentation is misleading] thinking that it has to do with performance rather than scalability. Most also use build-in collection where the characteristics are important, but the specific internal mechansism as not [and may even change as the result of an update]

dan's picture

Are these words supposed to be clickable? They are not in my Firefox v46 ?!

Robert MacLean's picture

Some of them are - as I write them I come back to and make them clickable.

Add new comment