Learning The Right Way
Technology, as a practitioner, is counter-intuitive. This is perhaps the hardest concept for people learning to become technologists to understand. It seems simple, but it affects so many things that will occur as you learn and grow your skill-set and build things. The purpose in most cases of course is to build useful abstractions that make using technology feel intuitive to the end user, but as the practitioner you have to deal with the burden of this inherent lack of intuitiveness so that your users don’t have to.
Bad technologies do exist, and in many cases, they’re bad because they attempt to make things easy which are not in any way easy or generally considered solved, and therefore encourage bad practices or hide critical problems. PHP is a perfect example of this, MongoDB is another example of this. There are hundreds of examples though that meet this criteria.
Many of these bad technologies are very popular with beginners simply because they are easy to learn and work with. The problem is, you will end up learning bad habits and putting trust in things which are not trustworthy. This may not matter much when you’re just playing around on your own time to see how something works or try something new. But the things you learn always end up coming back to you. Your time is perhaps your most valuable asset, and how you invest it will determine many of the future choices you will end up making when you’re professionally using those skills to build something.
Because, ultimately, technologies are tools, just because a technology is bad in the general case doesn’t necessarily mean it should never be used. But, it takes a significant amount of experience and expertise to adequately understand all the possible pitfalls of using a bad technology and whether or not those trade-offs are acceptable. When you’re in the stage in your career where you’re still learning, this is not the time to throw away your very valuable time by investing in learning bad technologies. You are much better off investing in learning technologies which are generally good, and ensuring you understand where all their skeletons are buried and what pointy edges exist, so that you can accurately and intelligently decide what trade-offs you’re willing to make in your designs.
The Definitive Answer
This is kind of the philosophical answer as to why we recommend not learning PHP as their first language. While PHP is very easy to learn at a superficial level, it has a lot of faults and glitches that are not immediately apparent and are a direct result of it having a fundamentally bad language design. These glitches can be near invisible, because they may not even prevent your application from working, but they could lead to opening up serious remotely exploitable security vulnerabilities or create a ticking time bomb waiting for the right conditions to cause the application to crash. This type of unpredictable behavior is extremely frustrating even when you understand what is causing it, but as someone who is learning it wastes your time and distracts you from learning a clear understanding of the abstract concepts involved.
Python is an extremely sane, structured language, which is designed specifically to enforce good practices and help guide new programmers into understanding the proper way to build things. Some of this is enforced in the interpreter, some of this is enforced in the community and the standards of companies and projects that use Python. Either way, Python is an excellent first language to learn.
The absolute best way to become a competent programmer, somebody who your peers look up to and rely on to be the person who can really solve problems, is to put a lot of effort in early on learning things the hard way. Rather than picking heavily abstracted frameworks and technical tools that do a lot of heavy lifting for you, it’s important to understand why those pieces of heavy lifting are being done and what is going on in the background. Python is a great introduction to this, because it’s abstracted enough to keep it from making you get dejected while learning, it provides immediate feedback because it’s interpreted, and it also provides an easy sliding scale to get you into deeper systems understanding.
As technology continues to change and improve we have no doubt that there will be a need for you to continuously learn new things. Don’t start from a easy to learn foundation, learn the fundamentals in a proper way so you have the right knowledge to act as building blocks for a long time to come.
The choice is ultimately yours.