Becoming a Self-Taught Programmer: Cory Althoff Interview
Cory Althoff is an author, speaker, and startup advisor. Book Authority called his book The Self-Taught Programmer one of the greatest software books of all-time. He based it on his experience working as a software engineer at eBay and several startups in Silicon Valley despite majoring in political science in college.
His book shows you how to become a self-taught coder in Python using a non-traditional approach: learning to code first and theory second. It is a guide that takes you from writing your first Python program to passing your first technical interview.
More and more people are becoming self-taught programmers nowadays. Thinking that this trend will only continue, we decided to talk to Cory about new developers’ biggest challenges. He told us if it is reasonable for a new developer to learn and practice both front-end and back-end development, and what kind of projects new Python developers can expect at the beginning of their careers.
Evrone: Hey Cory, it's a pleasure to be speaking with you today! Let's start our interview. Do you think that a “natural affinity” for software development, as for music playing or drawing, is a real thing?
Cory: I’m sure some people have a natural talent for programming. That doesn’t mean the majority of people can’t program, though.
I recommend reading The Talent Code by Daniel Coyle if you are worried you aren’t naturally gifted enough to program. He does a great job explaining why natural talent is overrated and why the key to success in any skill is less about talent and more about deliberate practice.
Evrone: Modern IDEs and programmer editors like VSCode tend to integrate git with a fancy graphical interface. For new developers, do you think it's better to learn and use a git command-line interface or rely on the IDE integrations?
Cory: In my book and course, I teach my students how to use git from the command-line. IDE integrations are nice, but you should have a basic understanding of what is happening underneath the GUI.
Evrone: What is the single thing or concept that is the hardest for new developers to learn?
Cory: The first thing most programmers get stuck on are functions. The hardest concept for new programmers to learn, most of the time, though, is object-oriented programming. The idea of passing “self” as a parameter in Python can be particularly confusing.
Evrone: Do software developers from all over the world need to be able to read and write proper English in 2020? Is it a mandatory skill for our profession or is it optional?
Cory: It is helpful, but not mandatory. It is useful because so much documentation is in English. That said, I had the opportunity to speak at PyCon JP last year in Tokyo. The Python scene is huge over there, but very few people speak English in Japan. So you can absolutely have success as a programmer without speaking any English.
Evrone: Your "Self-Taught Programmer" book established a solid foundation for any wannabe software developer to start with. What are you doing right now, with all this popularity and 50k Facebook group under your belt?
Cory: Right now, I’m writing a new book called The Self-Taught Computer Scientist. It’s a follow-up to my second book. I teach some computer science in my first book, but in this new one, I dive deeper and explain some of the concepts that will help self-taught programmers throughout their careers.
I also have a new project called Coding List. It is a website that lets you filter over twenty thousand programming courses by price, reviews, subject, and more. Once you find the right course, it helps you meet other people that are also taking coding classes.
Evrone: Is running such a huge community on Facebook helping you to discover new and improved ways to teach new developers?
Cory: Definitely. It helps to see what questions come up over and over. That is one of the reasons why I created Coding List. So many people were asking what the best course was for different programming subjects, which wasn’t efficient because we had to answer the same questions repeatedly. So I decided to create a website that helps you find the best course for any programming subject. I’ve had a bunch of insights like that, which have helped me improve the curriculum for my course as well.
Evrone: It's a popular opinion that Python is the best general-purpose programming language we should teach first to new developers. But what language would you call the second-best for the job? Any other languages that you like besides Python?
Evrone: Would you recommend a new developer to start with a simple, but extensible "programmer's editor" like VSCode or jump-in with a full-featured IDE like PyCharm?
Cory: In my book & course, I start everyone off with IDLE. Many students have trouble getting the hang of IDLE, even though it is less complicated than VSCode or PyCharm.
I like to give them a chance to get acquainted with something simpler first. Later on, I introduce them to PyCharm, which is my favorite IDE. PyCharm has so many useful features that make programming more convenient, but you don’t need them right when you first start.
Evrone: There is this Ruby idea that "by choosing the language you also choose the projects you will do for your day job and how you do them". As for Python, what kind of projects new Python developers can expect at the beginning of their careers?
With Python, you can go into many fields: back-end web development and app development, game development, and data science, among others. Because Python is used in so many different areas, as a Python programmer at the beginning of your career, you might end up doing any one of those things, which is exciting. You probably won’t find yourself working on the front-end of a website or app, though.
Evrone: Is it good for new developers to learn the new Python "async" libraries at the beginning of their journey, or this functionality requires some field experience and it's better to learn asyncio and aiohttp after a few years of practice?
Cory: I don’t think it is good to focus on them at the beginning of your journey learning to program. Better to learn those libraries later on once you’ve mastered the fundamentals of programming.
Evrone: Type hints and the "gradual typing" approach were recently introduced into Python and are already very popular among experienced developers and library authors. But what about new developers? Should they learn types from the start or wait a few years for some battle practice before learning how to put traps for their future errors via types?
Cory: Understanding data types was a big aha moment for me when I was learning. It is important for new programmers to understand the concept of data types and to be familiar with the different types in their programming language. As a new developer, I wouldn’t worry about type hinting for a while, though. It is a cool feature, but it is not helpful for new coders.
Evrone: What do you think about the "Full-stack developers" hype? Is it reasonable for a new developer to learn and practice both frontend and backend development?
Cory: I wouldn’t recommend it. Learning the front-end and back-end was one of the biggest mistakes I made in my journey from a beginner to a software developer.
If I were going to do it again, I would focus on either the front-end or the back-end. The problem with learning both is, I always felt like I wasn’t good enough at either.
There is so much to keep up with to be a great front or back-end developer that it doesn’t make sense to try to learn both. It is better to become a superstar at one or the other. Plus, you are doing two jobs and only getting paid for one!
Evrone: Developers learn new things outside their job, which often leads to a "burn out". What would you recommend to new developers as a good work-life balance routine so programming does not literally eat all their life?
Cory: Play a sport! I started playing basketball again a few years ago, and that did wonders for my work-life balance. As programmers, we are in front of a screen all day, so finding a hobby that doesn’t involve a screen like playing basketball or another sport is helpful for avoiding burning out. I’ve also played ultimate frisbee in the past, which is a lot of fun too and I’m trying to pick up golf, although I find it very difficult!
On one of Tim Ferriss’ podcast episodes, he talked about how he likes to have a professional goal and a personal goal—for example, doubling revenue for his company and deadlift 300 lbs. That way, if one collapses, he still has the other, which is excellent advice and something I try to do too.
Evrone: Software development is an industry that took the world by storm. Lots and lots of professional developers are self-taught. But how do you see a good education for a software developer? Do we need a "science" like "computer science" with all math, algorithms, and data structures or do we need something else?
Cory: The problem I have with computer science curriculums at many universities is the order they teach subjects in. It is helpful to study computer science, math, algorithms, and data structures if you want to have a successful career as a software engineer. However, it doesn’t make sense to teach those things first.
Students should learn to program first, and see how fun it is, then worry about all that other stuff later. In some industries, like web development, you do not need to study math to be successful. Making math a prerequisite for your first programming class, as many universities do, doesn’t make any sense because it discourages people who are afraid of math from learning to code.
Also, there are so many free and low-cost resources out there, it is making less and less sense to invest so much time and money going to college when you can learn to program faster on your own without going into debt.
Cory’s first book has been translated into eight languages and featured in publications like Forbes. Now, Cory is writing his second book, helping the students in his Facebook group, Self-Taught Programmers, learn to program, and building the Coding List community. We are glad that so many people all over the world are choosing to learn Python and orient their careers toward it. Here at Evrone, we strive to stay on top of new tech developments and embrace innovative new tools and methods. If you have an idea for a project and are interested in using Python, our developers are always happy to discuss the possibilities with you. No matter what stage you’re at in your project’s development, let us know how to contact you, and we’ll be in touch soon to discuss your project and how we can help.