My Interview for Apple
As I am preparing my solutions and tests for the Advent of Code problems to get into Apple, I realize that if I could explain a little bit of how in the world I got into the position of even having a chance to work at such an important company, it can potentially reveal a whole lot about the current state of web technology. I've only been doing this stuff for a couple of years but have managed to make some critical observations and decisions that have given me a major advantage. I want to explain how you could do this too, even more easily than I have.
Learning to make abstractions begins with math, but more relevant to the issue here is the way programming is taught, particularly the differences in the rate of adaptation to the technological trends by the tech industry and the computer science education curriculum. A recent example of this is MIT switching from Lisp, a theoretical language invented for AI in 1958, to Python, a modern dynamic scripting language. I love Python and there are many benefits to learning it, but the decision to make this change highlights some areas where we can greatly benefit from a "re-orientation".
The classic textbooks on computer science raised the bar on the capabilities of programmers to understand and compose complex processes from a system of simple abstractions. But then after the fundamentals of algorithms and data structures are taught, a major disconnect exists, and it switches entirely to learning the language semantics and paradigms used in the industry currently.
Then, in 2007... Lisp meets Java
Keeping in line with the current reality is a good thing generally. But the technology is evolving so rapidly right now in ways that none of us can predict, and there are ideas and systems being developed that are finally allowing us to bridge this rift that I described. One of them is Clojure, a language invented just 10 years ago by Rich Hickey. It was built to tackle one of the biggest modern challenges we have run into with designing programs that take advantage of computers with multiple cores, and is a dialect of Lisp, which until now has been mostly confined to academics.
Clojure is a "parasitic language", designed to run on whatever host platform it chooses, giving its users all its resources and ability to target its users. These host platforms are Java and Javascript, the two languages most used, loved or hated, but the one thing undeniable about them is they are not going anywhere. But much more than simply hijacking them, it transforms them into a more manageable building material for designing complex systems.
Another technology that has come about as a total game-changer is Facebook's React library, which has blown developers' minds in 3 different ways - by making it possible for a single team to build mobile and web applications, making the web development process more dynamic, and bringing people to an awareness of the power of functional programming.
The last one is what actually happened to me, I came upon Clojure through React. By acting like a magic parasitic glue, Clojure molds itself to harness all these abilities, and that's only the beginning.
In fact, it works so well, that big companies are starting to notice, and Clojure programmers are suddenly in urgent demand. You can learn the basics in like 10 minutes, there's almost no syntax because all of the code is data. But people have not become massively aware of how much power you actually gain with its proficiency.
In this series of posts, I will be diving into these big ideas, describing how to get started with Clojure, and documenting my interview process with Apple. I'll be posting example code and presenting a path for any of you to develop these skills as well, because while I was lucky enough to stumble upon this stuff when I did, I took a rather winding road to get there and wouldn't want anyone else to have to do that!
Follow these steps, and you will have programming superpowers!
Let's go!
Get ready for Meta-Problem #1, Parsing the input data
Learning to make abstractions begins with math, but more relevant to the issue here is the way programming is taught, particularly the differences in the rate of adaptation to the technological trends by the tech industry and the computer science education curriculum. A recent example of this is MIT switching from Lisp, a theoretical language invented for AI in 1958, to Python, a modern dynamic scripting language. I love Python and there are many benefits to learning it, but the decision to make this change highlights some areas where we can greatly benefit from a "re-orientation".
The classic textbooks on computer science raised the bar on the capabilities of programmers to understand and compose complex processes from a system of simple abstractions. But then after the fundamentals of algorithms and data structures are taught, a major disconnect exists, and it switches entirely to learning the language semantics and paradigms used in the industry currently.
Then, in 2007... Lisp meets Java
Keeping in line with the current reality is a good thing generally. But the technology is evolving so rapidly right now in ways that none of us can predict, and there are ideas and systems being developed that are finally allowing us to bridge this rift that I described. One of them is Clojure, a language invented just 10 years ago by Rich Hickey. It was built to tackle one of the biggest modern challenges we have run into with designing programs that take advantage of computers with multiple cores, and is a dialect of Lisp, which until now has been mostly confined to academics.
Clojure is a "parasitic language", designed to run on whatever host platform it chooses, giving its users all its resources and ability to target its users. These host platforms are Java and Javascript, the two languages most used, loved or hated, but the one thing undeniable about them is they are not going anywhere. But much more than simply hijacking them, it transforms them into a more manageable building material for designing complex systems.
Another technology that has come about as a total game-changer is Facebook's React library, which has blown developers' minds in 3 different ways - by making it possible for a single team to build mobile and web applications, making the web development process more dynamic, and bringing people to an awareness of the power of functional programming.
The last one is what actually happened to me, I came upon Clojure through React. By acting like a magic parasitic glue, Clojure molds itself to harness all these abilities, and that's only the beginning.
In fact, it works so well, that big companies are starting to notice, and Clojure programmers are suddenly in urgent demand. You can learn the basics in like 10 minutes, there's almost no syntax because all of the code is data. But people have not become massively aware of how much power you actually gain with its proficiency.
In this series of posts, I will be diving into these big ideas, describing how to get started with Clojure, and documenting my interview process with Apple. I'll be posting example code and presenting a path for any of you to develop these skills as well, because while I was lucky enough to stumble upon this stuff when I did, I took a rather winding road to get there and wouldn't want anyone else to have to do that!
Follow these steps, and you will have programming superpowers!
Let's go!
Get ready for Meta-Problem #1, Parsing the input data
Comments
Post a Comment