Skip to content

Instantly share code, notes, and snippets.

@minivan

minivan/blog.md Secret

Created October 8, 2017 12:11
Show Gist options
  • Save minivan/cb7ef12a80cacd1373c7eabe74799f23 to your computer and use it in GitHub Desktop.
Save minivan/cb7ef12a80cacd1373c7eabe74799f23 to your computer and use it in GitHub Desktop.

How we work in 2017 for the time-traveller.

Hello dear Time Traveller from 2007! I hope you like this new world of ours. Quick tip: if you just got a mortgage, go back and cancel it; trust me.

I'm glad that you're still interested in computers! Today we have many more of those than 10 years ago and that comes with new challenges. We wear computers on our wrists, in our pockets, on our faces and in our fridges and kettles. The cars are driving themselves pretty well and we've taught programs to be better than humans at some tasks.

Web Apps

You might have seen the iPhone being released just before you stepped into the machine. Let me tell you, the iPhone is HUGE these days (in 2017 we pronounce it yuuuge); Apple is the biggest and richest company, even though Steve Jobs passed away. Google has this competing thing called Android, and Microsoft tried to get a slice of the ever growing pie with Windows Phone. It didn't really work. Also, Nokia isn't there anymore, but you can still play Snake.

We started calling programs apps now and some websites are calling themselves web apps. In 2008, Google released a new browser, called "Chrome". Nobody at the time knew why, but 9 years later it's the most popular way to get on the web. The Chrome team invested a lot in working with JavaScript and hence, JavaScript (we also write it as JS now) has become better with every month. Web apps are mostly written using a lot of Javascript and they resemble the desktop interfaces of your time. More companies have invested into JavaScript to make it better; it now supports classes, modules and even proper types using languages called TypeScript or Flow. We write a lot of JavaScript these days, since nobody supports Flash anymore. We even put our JS on servers, creating frameworks that generate a response to an HTTP request. It sounds easier than it actually is.

Remember Swing, SWT and the likes of wxWidgets? We had to reinvent those for the browser world; and several new UI programming models emerged, mostly focussed on components. We had to have a way to design, build, test and ship code, convert it to HTML, make sure it's responsive (a term we use to describe a website that doesn't look like crap on the phone) and that it doesn't send a lot of data to the client, because not everybody has a fast connection, but everybody has a computer in their pockets. We have built component frameworks that help with that. The term is vague, since it includes the likes of Angular by Google, React by Facebook and Vue by the community, but it's the best term we have. By the way, I'm not sure you remembre Facebook in 2008. It was getting big in the US and now it's bigger than yuuuge. Sporting more than a billion users, it's also one of the largest applications out there and the Facebook development team writes a lot of great code and publishes it online.

CSS also had to evolve, since the new apps require more intricate layouts. We have created new standards, like CSS Floats, Flexbox and CSS Grid, we've iterated on those standards and have built libraries to make things look more or less consistently. We have things like Bootstrap, Foundation and many, many more of these now. Similarly to Javascript, we have created languages that compile to CSS, to make up for some of the things that CSS misses, like variables or modules.

Don't feel bad if you're confused, the truth is that we're all confused and it's okay to be so. If there's one thing that conditioned all of these, is that there's many, many, many more developers on the planet now and tech companies are getting more and more successful. For a while we used the term "startup" for companies that grew quickly, but even that term becomes old now.

there are many, many, many more developers on the planet now

We have more programmers, more programs and more devices. We have more data now and because the computers grew powerful enough to crunch that data, we have developed several techniques to extract insight from it. First, we created a field called Data Science and we learned to extract information from data. For example, a startup called Waze let people install an app on their phone that would track their movement while they're in their cars. Because many people installed the app, Waze had a lot of data on how quickly the cars move and could develop programs that understand where traffic jams are. So when you opened Waze on your phone, you could see on the map where there's a traffic jam in real time and choose another road. Waze has since been bought by Google, which happened a lot with startups.

Data

There were three main challenges with Data Science — storing data, understanding data and acting on data and we've improved in all of these.

Because we need to store a lot more information and then find out which part is important, we needed to invent new databases, since the likes of MySQL and Postgres weren't fit to store terabytes of data (we called it Big Data). Because these challenges were mostly faced by big, internet-first companies, they were in the forefront of developing the technologies, using them internally and then open sourcing them. We had a movement we called NoSQL, which is as vague as a term can be. It described a new class of databases that take some of the conventions of traditional Relational databases and alter them. There's Hadoop, which is concerned with how the data is stored on many computers and defines a way of processing the data called MapReduce (inspired by a paper from Google. Big companies write good scientific papers these days). There's Cassandra, which looks at data not as tables, but as sets keys and columns which can be stored on different computers; it takes a lot of effort to make sure any of these computers can go offline without causing issues to the system. There's also MongoDB, which is a database that is easy to install and prototype apps with. In 2017, we're treating technologies the same way we treated pop stars ten years ago — we inexplicably like some of them and vehemently hate others. MongoDB, like Nickelback, belongs to the latter group.

In the "understanding data" camp, most of the focus has been in an area called "Machine Learning". There have been many new techniques, from naive classification to deep learning that are now in the toolkit of every Data Scientist. They mostly write Python and work alongside developers to put machine learning pretty much everywhere. For example, with the help of Data Scientists, a lot of web apps use A/B testing now — a technique where we serve two slightly different versions of the app to different, but similar groups of users to see which version leads quicker to our desired goal, whether it's a up or a purchase. A lof of big companies like Airbnb (pronounced as air-bee-en-bee), Uber and Netflix are running hundreds and thousands of A/B tests at the same time to make sure their users get the best experience. Netflix is an app where people can binge-watch TV shows on all their devices. ¯\_(ツ)_/¯

Microservices and The Cloud

Companies like Netflix are enormous. Because they serve a lot of people, they have to make sure they are up at all times. That means they have to manage their computers pretty well; adding hundreds of new servers when it's needed. This is difficult to achieve in a traditional data center, so what the amazing engineers at Netflix ended up doing is leverage virtual computers in the cloud. Remember Amazon Web Services launched in 2006? Back then, they started offering Elastic Cloud Compute, known as EC2 to help people get virtual computers in Amazon's data centers. Today, they have almost 80 of similar services, all built to help companies grow quickly. We used to have a trendy name for that, "The Cloud", but it's as difficult to define as NoSQL.

Google and Microsoft have joined Amazon and offer their own clouds, creating a market for cloud services. And when smart people compete with each other, there's all sorts of crazy innovation that is happening.

First of all, we've started thinking more about our infrastructure as code. When before you had to buy a new server, plug a keyboard and install dependencies, we now have configuration management tools like Puppet, Chef and Ansible to automate our servers. You write actual code, in languages Ruby (Ruby is a nice language that got big for a while and it fades away now) and provision servers based on the configurations. You barely SSH anymore.

Then we started looking more at containers. Because we could provision that we could put on EC2 and run in the cloud, we needed to develop on similar environments as our production software. We started with virtual machines, using tools like Vagrant to automate those, but then we had Linux containers and, eventually, Docker. We found a way to run Linux on our MacBooks (a lot of developers use Macs these days) without running a full virtual machine, but sharing some of the OS-related operations; using that we could create descriptions of systems that match exactly what we run on production. The developers called these descriptions images and the somewhat-virtual machines their apps were run in are called containers.

Cloud providers caught up to this and let us run our containers directly on their clouds. They gave us tools like Marathon and Kubernetes, which are called orchestration frameworks. These frameworks let developers run apps inside containers without caring about scaling, fault-tolerance, monitoring and discovery. This also let developers build small apps we call services or microservices and run them independently. Because these microservices have few external dependencies, we started looking into using new programming languages, like Go (which was created to make concurrency bearable) and Java. Yes, Java is still here and it's gotten good. There are also languages like Scala and Clojure that let us use the Java Virtual Machine and all the libraries that have already existed.

Because of the microservices, we had to revisit some of our programming models. We have more smaller applications that have to be coordinated. There are now more tools like Apache Kafka, Google PubSub and RabbitMQ.

How we build

The extra complexity introduced by the orchestration frameworks is mostly relevant for larger teams. Remember, we have more people building software than ever and every programmer wants to ship the software ASAP. If you have a company with 500 developers working together on a new online banking system, you need to make sure they don't have to ask all the others for approval. So we build software in small teams, up to 10 people. The teams usually have some DevOps skills, i.e. developers know enough operations to be able to deploy their software. Teams usually use some form of an Agile process, where they release software continuously in short iterations. Organizations also experiment with other forms of hierarchy, like Squads, Chapters, Tribes and Guilds as Spotify does. Spotify is an app that lets you listen to music on all your devices.

All these projects (and many others that were mentioned before) are developed publicly by a community of people, sometimes sponsored by companies. Most of the time development goes on a website called GitHub, where people can talk about software, build it publicly and approve contributions by replying with a 👍 emoji. An emoji is a special character we use to express an emotion. Shrug emoji.

Let's go get a cup of Mate tea and I'll tell you about this Bitcoin thing.

@andreasgrimm
Copy link

Oh, and dear Time Traveller, I forgot to mention that now there’s also this thing called serverless which combined with PaaS turns a lot of this infrastructure stuff mentioned above like microservices and containers into something you don’t need to care about anymore at all.

You can focus on the actual business problems more then ever before and finally are able to do continuous exploration

@jdjuan
Copy link

jdjuan commented Dec 2, 2017

Loved this explanation ❤️

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment