![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
I really should get a "professional" blog for some of this commentary.
brushwolf asked me about this and it is a large part of my identity so I figured it might be helpful for other people in my circle.
Programming is a relatively new career and what people believe it to be is very different from what it actually is. Popular depictions of it focus almost exclusively on the typing words at a computer for the computer to understand. However, this is not what programming is in the real world.
By far, the largest amount of programming is done in the service of another business. From intranets to scientific programming, this is the goal of programming. It is only a relatively small portion, the Google, Twitter, and Facebook level companies, which the product is almost exclusively the programming part. Even a large number of what are considered "tech startups" like Uber or Airbnb, the technology is a means but not an end.
What this means is that, in the large, code written is a liability, not an asset. Also, most code is code which has lasted for a while and needs to be modified, updated, or new functionality added.
If this is the case, why do these companies hire huge numbers of employees for thier technical staff? Mainly because of a tradeoff made in the 80s called Worse is better. The approach that won computing says that we should make designs easy for people to initially understand at the expense of things like consistency and correctness. However, when you layer enough inconsistent and incorrect designs on top of one another, you need huge teams of people to stand around it to hold it all upright.
In large part, this means that the modern programmer's job is trying to find the least bad combination of inconsistent and incorrect designs and telling a computer to use them. The actual programming part is translating that understanding to something the computer can understand. In fact, what is more important is communcating along side that code what combination was picked, why it was picked, and what issues you will have in the future. You might be communicating that to yourself in the future.
This is one of the reasons I describe my job as being clever in close proximity to computers. I personally spend most of my day trying to figure out what would be ideal interface for some problem in the future and then figure out the steps we can take towards that interface. The actual part where I type words for a computer to understand is much smaller than the part where I type words for other beings to understand.
The actual coding part, I feel, just about anyone can learn. Code.org is a relatively gentle introduction to the concepts behind programming. RailsBridge is a course which shows you how to make website on top of a modern stack. Stacks are exactly these sets of inconsistent and incorrect designs that people have curated to solve a problem and enough people use them that there is constantly work to make sure they stay upright for the most part.
Reading the Installation documentation will show you how to install exactly one stack and they are highly opinionated in order for people who are new to get to an end place where they can do something useful. If you look on the internet, you will find people arguing over literally every piece of that stack from operating system to text editor.
But at the end of the day, none of that actually matters for the product being made. It is a side effect of a large number of decisions by a large number of people, written down, and realized digitally. This sounds quite a bit like engineering. But it isn't. Estimating how long a task will take is a joke. The majority of software projects never actually complete. How often does a building start getting built and then abandoned half way through? Usually that only happens with major economic downturns, not constantly as it happens in software.
Most people think of programming as a task that is solitary but most modern work requires a team with different skillsets. One skillset which I don't even mention here but is extremely important is that of the User Experience designer. This is a skillset I have next to no knowledge of but is extremely important. This is figuring out how exactly other beings are going to interact with this software. The very best ones understand not just that but also the inconsistent and incorrect behaviors of HTML, CSS, and Javascript to then build these interfaces and make them work.
This is what I feel my job as a programmer is. I'd be very interested in feedback from other people in the field if they feel the same way or parallels to other fields of work.
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Programming is a relatively new career and what people believe it to be is very different from what it actually is. Popular depictions of it focus almost exclusively on the typing words at a computer for the computer to understand. However, this is not what programming is in the real world.
By far, the largest amount of programming is done in the service of another business. From intranets to scientific programming, this is the goal of programming. It is only a relatively small portion, the Google, Twitter, and Facebook level companies, which the product is almost exclusively the programming part. Even a large number of what are considered "tech startups" like Uber or Airbnb, the technology is a means but not an end.
What this means is that, in the large, code written is a liability, not an asset. Also, most code is code which has lasted for a while and needs to be modified, updated, or new functionality added.
If this is the case, why do these companies hire huge numbers of employees for thier technical staff? Mainly because of a tradeoff made in the 80s called Worse is better. The approach that won computing says that we should make designs easy for people to initially understand at the expense of things like consistency and correctness. However, when you layer enough inconsistent and incorrect designs on top of one another, you need huge teams of people to stand around it to hold it all upright.
In large part, this means that the modern programmer's job is trying to find the least bad combination of inconsistent and incorrect designs and telling a computer to use them. The actual programming part is translating that understanding to something the computer can understand. In fact, what is more important is communcating along side that code what combination was picked, why it was picked, and what issues you will have in the future. You might be communicating that to yourself in the future.
This is one of the reasons I describe my job as being clever in close proximity to computers. I personally spend most of my day trying to figure out what would be ideal interface for some problem in the future and then figure out the steps we can take towards that interface. The actual part where I type words for a computer to understand is much smaller than the part where I type words for other beings to understand.
The actual coding part, I feel, just about anyone can learn. Code.org is a relatively gentle introduction to the concepts behind programming. RailsBridge is a course which shows you how to make website on top of a modern stack. Stacks are exactly these sets of inconsistent and incorrect designs that people have curated to solve a problem and enough people use them that there is constantly work to make sure they stay upright for the most part.
Reading the Installation documentation will show you how to install exactly one stack and they are highly opinionated in order for people who are new to get to an end place where they can do something useful. If you look on the internet, you will find people arguing over literally every piece of that stack from operating system to text editor.
But at the end of the day, none of that actually matters for the product being made. It is a side effect of a large number of decisions by a large number of people, written down, and realized digitally. This sounds quite a bit like engineering. But it isn't. Estimating how long a task will take is a joke. The majority of software projects never actually complete. How often does a building start getting built and then abandoned half way through? Usually that only happens with major economic downturns, not constantly as it happens in software.
Most people think of programming as a task that is solitary but most modern work requires a team with different skillsets. One skillset which I don't even mention here but is extremely important is that of the User Experience designer. This is a skillset I have next to no knowledge of but is extremely important. This is figuring out how exactly other beings are going to interact with this software. The very best ones understand not just that but also the inconsistent and incorrect behaviors of HTML, CSS, and Javascript to then build these interfaces and make them work.
This is what I feel my job as a programmer is. I'd be very interested in feedback from other people in the field if they feel the same way or parallels to other fields of work.
no subject
Date: 11 Dec 2014 17:51 (UTC)That's a rather clever reflection.
I've always looked up to you as someone who really knows what they're doing in their career; and things like this only make that more clear. <3