One thing I learned from getting into programming in recent years is that the door is truly and widely open to newcomers.1 This was the case when I was just getting started in late 2016, but it is more so today, three years later. If anyone is hesitating, this (i.e. late 2019 and beyond) really is the time to jump in.
Based on what I have experienced and observed, I see at least three factors contributing to the lowered bar to entry for programming: economic, cultural, and technical. While they are all related to one another and might be simply three different aspects of the same underlying development, the distinction helps.
Let me elaborate.
Economics: the falling cost of computing power
We all know the story of Moore’s law, which, roughly speaking, states that computing power increases in an exponential manner. Moore’s law in its literal sense may no longer hold as suggested by the rise of multi-core CPU chips, but it is still true that computing power is getting cheaper.
Today, mid-tier laptops (say, the price range of $500-800) are more than capable of handling fairly demanding computing tasks. My personal laptop is a modest Windows 10 machine that is over 3 years old. It cost me a little north of $500 and equipped with the 6th gen Intel i5 CPU, 8GB of RAM, and 256GB of SSD. I don’t do much serious work on this laptop but have experienced little problem building simple web applications or doing some data analysis & model fitting with datasets of the size up to a few GBs. Needless to say, the latest laptops with a similar price tag are much more powerful.
In addition, with the rise of cloud computing, we no longer need to own powerful servers for most personal or even business use cases. Instead, we can simply pay for them as needed without the cost (and pain) of setting up and managing the hardware. In addition to the big, household names like Amazon AWS, Google Cloud, Microsoft Azure, there are also companies like Linode and DigitalOcean that offer competitive options. Today, anyone can run a server instance for as low as $5 per month. And, of course, the decreasing cost of computing overall only suggests the same trend for cloud computing services.
Meanwhile, the ongoing trend in computing is to embrace free and open source software (FOSS). While “free” in FOSS originally refers to the freedom of use, in practical terms, that freedom also brings about countless quality software libraries and packages being available free of charge. Using such libraries, which is made easy with great package managers for most programming languages, even beginners can take advantage of the fine work of experts all over the world—for free!
Culture: the renaissance of (free and) open source software
The 2010s has seen the renaissance of FOSS. In fact, open source has become an established and even profitable business model that is core to many companies. And even Microsoft, a tech gaint known to be opposed—even hostile—to the open source software paradigm in the earlier decades, now actively presents itself as an industry leader for the open source. And the acquisition of GitHub in 2018 is only one element of that shift.
On the fundamental level, however, the open source software movement represents and promotes a certain ethos, the one which encourages participation and community building. The renaissance of FOSS ultimately means thriving open source communities, and platforms like GitHub support these communities with features to facilitate meaningful human interactions.
With their growth, the open source communities have matured, too. Today most communities recognize that there are more newcomers who need help and guidance. This recognization led to expert and experienced participants of these communities to channel more of their time and energy toward answering questions, creating instructional materials, and cultivating a welcoming environment for all.
In more practical sense, this means that there are more resources available for beginners. Many programming languages, as well as popular software libraries, now offer quality official documentations and “get started” tutorials. More learning materials can be found in the form of written tutorials, YouTube vidoes, and online courses. Also you can get answers to your questions, almost real-time at times, on platforms like GitHub, Reddit, CMTY, Discord, and Slack.
Technology: the rise of modern, developer-friendly tools
Learning computer programming and software development, like any other craft, requires practice. Sure, reading a book on or even watching a YouTube video series can help to some extent. But ultimately, only typing out your code in a text editor and struggling to get your program working make it real.
That said, there are many noteworthy recent innovations and developments in the space of programming and software engineering that facilitate experimentations and gaining experience with various aspects of building and deploying a software product or service.
For a starter, modern programming languages, including those that were born decades ago but have evolved to keep up with the time, are packed with features that make them highly expressive while showing great performance. By expressive, I mean that they are capable of encoding the programmers’ intention without hacks and complex boilerplates. They are equipped with well-designed data structures with powerful methods, clean and intuitive syntax, and strong standard libraries. As a result, any widely-used programming language today is flexible enough to handle most tasks though each has its relative strengths and weaknesses. No need to lose sleep to find the “best” language for your first pick.
Plus, the growing awareness of the importance of Developer Experience (DX) has led to products and services aiming to help software developers to focus on getting things done.2 Some examples of such tooling that greatly improves DX include container technology, continuous integration/continuous development (CI/CD) pipelines, and “serverless” computing. I cannot say these are all born out of the need to improve DX, but they certainly help.3
This post is not a place to dig into each element nor am I an expert to do so. But I can say that they all make it easier for software developers to not only build applications and services but also put them out in the real world quickly and reliably. IMO, your programming skills are more rewarding when you can turn it into some real-world stuff. And these innovations all narrow the gap between development and production environments so that you can experiment with and test ideas.
Jump in and get started! 🚀
All in all, this is the best time yet to get started with programming and software development. Equipment is cheaper than ever, communities are welcoming and supportive, and technology is ripe even for the wildest experiments.
This is not to say “learn to code”, i.e. that everyone has to switch jobs and become a software developer. Rather, I believe that more people should take advantage of this opportunity to empower themselves and take back control over their lives in today’s world that is increasingly computerized.
To take my example, my knowledge in computer programming and software development helps me to build something interesting and useful, e.g., this very blog, a professional website for my spouse, and various projects at work that I took initiative and proposed. The same knowledge also helps me to better navigate my daily life to the extent it is mediated by the web and mobile apps. This is a truly empowering experience.
With that, I encourage everyone to jump in and learn programming. Maybe make it a New Year’s resolution for 2020. All you need to get started is a laptop and curiosity. There really has never been a better time to do so.
One big caveat is that this is especially true for those who are at least fluent in English if not proficient. For non-English speakers, the situation may be dramatically different. ↩
This is especially true now that these technologies are well integrated into other popular frameworks, platforms and even text editors. ↩