Everything you need to know about computing

Everything that is built in industry today is in fact taught at your school. You just need to be able to block out the marketing fluff and know the fundamentals. A lot of times students ask me, or declare, or tell their juniors ‘you learn to learn at college- all this knowledge is not applicable in real life’. I want to dismiss this notion and also explain how this magnificent and exciting field of computing works. Of course it is a gross simplification but I assure you that grasping these fundamentals will set you up for future success.

I used course names from my Bachelor’s degree back in 2004-2008 but it still holds true. Some names differ from university to university.

Ready? Lets do it!

Beginning

To achieve something of value, you follow some steps to take information you have and convert it into new information. For example, if you want to go from LA to Sf, you take a map, chart a route and make a plan. You learn all this in school. We can work these steps faster by using computers who follow simple instructions. Learn about this in ‘intro to computing’.

So, You write a set of instructions called a computer program. Most programs need memory to hold data temporarily or permanently. In our case it needs the map, and it needs to hold some information while it performs those steps.

Temporary data is held in variables or constants. Things like ‘x=42’ or ‘name=‘elon’’. Permanent data is stored in ‘files’ for example ‘inventory-store-2012.dat’. It then performs instructions on this memory. This is done using a ‘computer language’. Almost any language will do so stop fretting about languages, Learn about instructions and memory in Computer Programming.

Now, Programs have a state, which is a snapshot of its memory and instruction it is at. For example, if I give you a map of SF and ask you to give me a route from MoMA to Golden Gate bridge, you will open the map and start following some intuitive set of instructions in your mind to find the route. If I stop you at any point and ask you what you have done so far, whatever you tell me is your state.

Persist

It could be in-memory state, or it could be persisted elsewhere for long term. When you are playing a computer game, which is also a program, your character’s position, your score, your health and karma are all stored in-memory. If you plug your computer off it is gone. But the high score leaderboard is persisted for long term. You can also ‘save’ your game which basically takes a snapshot of your memory and saves it. Learn about persistence in ‘Database Management Systems’. State can be hard to manage. One way is to think in terms of objects so Object Oriented Programming course is for you. As code grows, you need better ways to manage your code itself. Learn about this in Software Engineering which also teaches other things like requirement gathering, testing, design patterns, etc.

Perform

How you represent information is crucial. Searching for your friend in a list of 200,000 names when they are not sorted will take time. If they are sorted, you can use binary search to find it quicker. If you index these names, its even quicker. Data representation is taught in Data Structures. Efficient steps to process that data is taught in Algorithms. Underlying principles of all this is in Automata. Fascinating stuff.

Details

So, Programs run as a process on a machine. A process is executed on a CPU (learn about components of a computer in CS101 and history of computing). An operating system handles this scheduling of multiple processes on a single machine. Processes talk to each other using IPC and RPC. The operating system ensures proper usage of hardware resources(CPU, RAM, video processor, network adapter, power, etc). Learn about this in Operating Systems.

Operating systems make available the underlying hardware resources. Different needs require different hardware. Learn about how simple on/off switches, transistors, registers, circuits work together in Digital Logic Design, Computer Architecture and Assembly language programming.

In order to convert your code to something a machine can execute, you need to compile it. Compilers are simple programs that do it. Learn about them in compiler construction.

Network

Sometimes programs run on different machines. They talk to each other over a network. It is like cable in your TV. There are different ways to do it but mostly they utilize sockets and file descriptors. Learn about this in computer communication.

Discover

While programs can talk to each other over network, sometimes its hard to find which program is where and what language it understands. It sometimes is better to not worry about the fact that programs are running on separate machines. They need to act as one system. A distributed system. So they need remote procedure calls, data serialization and message passing. Learn about this in Distributed Systems. When these systems need to do intense processing you need efficient ways. You can learn those in ‘high performance computing’. Think weather prediction, missile trajectories, nuclear impact and super computers. Fun!

Interact

Your program needs to help Humans do their job better. Learn in Human Computer Interaction on how to do it. It will teach UX/UI and other stuff.

At this point, we should talk about abstraction. You know how when you plan a trip to go from LA to SF you just assume that at certain points there will be gas stations and our car needs gas and we need food and there are roads? We don’t worry about how gas stations work and how cars work or how roads are build. It is because we work on a higher ‘abstraction’ level. Similarly, what if you could simple make a user interface and do some high level stuff and do things over a network? So we have Web Programming. It lets you write programs on top of programs: a web browser and an application server. Both of which are just simple programs as we discussed but a web programmer works at a higher level of abstraction.

Learn

But what if computers could learn and make decisions on their own based on a set or rules or even make up their own rules? For example what if you chat application knows who your favorite friends are and surfaces their names when you open the app? Learn about this in Machine Learning and Artificial Intelligence. These systems work on very large stashes of data gathered (analytics) and processed (data science) and stored (data warehousing). All this in Big Data Systems.

Sights

Finally, you want things to be visible and get as close to reality as possible or you want to show information in a meaningful way. Learn that in Computer Graphics.

Phew. So now you know and we can lay down to rest the silly notion that schools don’t teach stuff that is used in real life.

Oh but you say what about ‘other courses’ we have to take?

Computer Graphics relies on Linear Algebra. You need to know about matrices, transformations, etc.

Data structures and algorithms need Discrete Mathematics as it relies on Graph Theory, Set theory etc.

Numerical computing, which is used in simulations of real world require knowledge of Calculus and Differential equations, maybe even Physics.

Other than all this, you need to learn about the legal and ethical issues that arise from working on all this so there may be courses related to that.

So, these are at least 30 courses that prepare you as a generalist in computing. It will expose you to a range of disciplines with in computing and different people get attracted to different things. If I were to tell you to simply learn AngularJS and Ruby on Rails, i am barely even touching the surface of what is possible in the field of tech.

So, stop worrying about languages and technologies and companies etc. Learn computing instead. Focus on fundamentals. Get exposed and find your true calling!

In some other post I may go into how, in light of this post, it is actually not just OK but good to do whiteboard interviews like they do in Tech Companies and how to ace them.

2017 reading roundup

In 2017 my reading volume was considerably higher than previous years. With this much reading volume my brain started to fatigue and it shows in 2018. 2017 was also a year of a big change as I switched my job.

Engineering

The first quarter of the year was spent preparing for the programming interviews so I was going through some technical books.

  • NSHipster: Obscure topics in Cocoa and Objective-C
  • The NSHipster Fakebook
  • The Algorithm Design Manual
  • The Pragmatic programmer

The first two were iOS focused and the 3rd one is more geared towards computer science.

Space exploration

On a more interesting subject, I was able to cover some ground on space exploration.

  • Astrophysics for people in a hurry
  • Failure is not an option
  • No Dream is too high

Gene Kranz stole my heart this year with his epic adventures as the director of several key NASA missions including the infamous Apollo 13 mission. Neil DeGrasse Tyson did a wonderful job in ‘Astrophysics for people in a hurry’ and I thoroughly enjoyed it. ‘No Dream is too high’ by Buzz Aldrin was a major disappointment primarily because Buzz sounds too pompous and arrogant in the book. I’ll put “Failure is not an option” up there with “Astronaut’s guide to life on earth” and “starman”. I am continuously amazed and fascinated by their adventures and want to continue this category for years to come.

Biographies

  • Hit Refresh
  • The Art of Learning
  • Saint Mother Taresa of Culcutta
  • The Everything Store

In 2017, I tried to randomize my sample of biographies. No longer am I just going to focus on Tech biographies – but don’t expect radically different subjects either. I really enjoyed ‘The everything store’ about Amazon (it was more about Jeff Bezos than Amazon though). Hit Refresh by Satya Nadella was a refreshing change in pace from the cut-throat Silicon Valley experience to a more mature Seattle/Microsoft setting. There were a lot of places where I could relate to Satya and its ‘refreshing’ to hear the POV from inside microsoft. The Art of Learning is about the life of a chess champion (and he has been good at other things aswell). Book about Mother Taresa was fairly disappointing because it was too ‘Christianity’ based.

Parenting

  • How to raise an adult
  • How Children Succeed
  • Hero: become the strong father your children need

I want to make a claim: ‘any’ book you read is essentially improving you as a parent and parenting books specifically don’t really make people better parents. Yes they have really good advice and sometimes let you see things from different perspectives but nothing compares to an empathetic, knowledgeable parent with a growth mindset, who shows children that learning is a life long process – that parents don’t always know everything and that anything can be learned.

‘How to raise an adult’ is a phenomenal book. It starts with a lot of scolding especially for younger parents. This ranges from overparenting and setting expectations too high from kids which spoon feeding them everything. While I don’t agree with the tone of the book: taking an extremist approach to cull an extremist way of parenting – but I get the point. It has changed my mind and I would urge looking for some serious parenting advice for the long run to read this book.

‘Hero’ was a nice book, too – though I wouldn’t exactly recommend it unless you don’t have specific parenting agendas to complete first. Its about the author’s father and what she thought of him. ‘How children succeed’ was so boring I put it down after a few chapters.

Self help, Productivity

In this category, books I recommend:

  • Relentless
  • Superhuman by Habit
  • Deep Work
  • Managing Oneself
  • Ikigai

Books I don’t recommend:

  • Change Anything
  • 5% More
  • Start with Why
  • Standout 2.0

Business

  • The Idea Factory: Bell Labs and the great American Innovation
  • Chaos Monkeys

The Idea Factory should be a required reading for computer scientists, all Americans, all engineers and anyone interested in innovation and technology. This is an amazing book about the amazing inventions and discoveries made at Bell labs.

Chaos Monkeys was apropriate to read before joining Facebook, right? It chronicles the author’s journey from Wall St. to y-combinator and finally Facebook. He doesn’t hold any punches back and has a great style of writing.

  • Dealers of Lightning
  • Lean: Quickstart Guide

These two books were subpar and I wouldn’t recommend them.

Sociology

  • Gun Germs and Steel
  • Sapiens
  • Homo Deus

I could write a separate blogpost about this topic and in particular the books i read in 2017. I’m kind of disappointed that I picked two of Yuval’s books in the same year based solely on the populatity with the younger crowd and advertisment. Guns, Germs and Steel hands down beats Sapiens by a mile. Sapiens is amateur work in sociology, GGS is text book level stuff. It must be a required reading in schools.

As for homo deus, Yuval shows that he doesn’t have a great story line or way of writing so he blabbers abount any subject here. Common themes include religion bashing, etc. You would be better of reading’ The future of mind’ by Michio Kaku.

Fiction

  • The sun also rises
  • Exit West

I had high expectations from Hemingway but somehow I just don’t get his dry writing style, especially in this book.

Mohsin Hamid disappointed me with Exit West. Too many show-offsy lines and a lack of coherent plot.

Other

  • Long story short
  • Option B
  • Lean In

These three books are amazing in their own right. Margot is awesome on stage and the way she demystifies the magic of story telling in ‘long story short’, its inspiring.

Sheryl is a very thoughtful writer and a person full of life and stories. Both Lean In and OptionB are great samples of thorough writing and stories.

  • The daily rituals
  • Hal Higdon Half Marathon Training
  • Cryptocurrency
  • Creation
  • Status Update

Not much to see here. Bitcoin came and went and as most of the people round me were betting on its worth, I kept away. Tried to learn more about it but I just don’t click with Cryptocurrencies yet. ‘Creation’ was something I picked from Jeff Bezos’s biography The Everything Store but somehow found it really hard to read. Other books here are meh.

So onwards to 2018!