Since computers are all around us those days and many of us grew with them, it's quite tempting at some point in one's life to think "what if I wrote a smartphone app?" or "I could re-write this software so much better".
And you would be wrong not to try ! I don't know a programmer that wasn't first a tinkerer, and I would put the separation between amateurs and professionals in our sector on a handful of traits only.
Professionals ship regularly
The same way a professional writer has to write every day, and actually finish books. As an amateur you get the freedom to keep it private, refine it for ever, until it is perfect.
We just tend to ship working code on a regular basis, and get our motivation not (only) from tinkering with code, but solving problems, and getting to the next one.
Professionals know and use the right concepts and terms
Like in every profession, there is an "insider" vocabulary / lingo that allows practitioneers to express complex ideas with their peers efficiently. The same way doctors, mechanics, sailors and athletes use obscure terms for the rest of the world, our industry is widespread and new terms and ideas get contributed daily.
So I would highly recommend that you learn the proper terms for what you want to describe, and not hesitate to ask around what is the best way to describe this or that.
I insist on proper, because nothing is more confusing than people who know the words, but fail to use them appropriately, this leads to endless confusion, and credibility issues.
Education matters ... to a degree
Pun intended. I am a firm believer that a degree does not reflect aptitudes or fitness for a given job. But following a proper computer science education will get you familiar with notions that most online courses will ditch because deemed "boring".
With time and effort, you can definitely learn all those things by yourself, online resources are abundant and the quality varies ... as much as university courses quality does actually.
Here is a quick list of topics that you cannot really skip if you plan on doing any serious work:
- (distributed) version control (sigh yes, I mean
git) (don't cry, Mercurial, we still love you)
- graph theory
- finite state machines
- relational modeling and database implementation
- basic networking
- memory allocation
- threads / processes / locks
- file systems
Professionals don't have time to get stuck
Finding the solution of a complex problem by yourself is a huge source of satisfaction and pride. However, taking 10 days to fix every bug in your code comes with a high price tag, and your customer/manager might not share your satisfaction here.
I usually think really hard on an issue for 5-10 minutes, try find inspiration online, tinker for 20 more minutes. Review what I did to be sure I did not miss some critical information. If it's not solved after 30 minutes, I just drop my initial idea and change my strategy, back to step one.
Professionals can communicate
As a nerd myself, I suffered a lot of the "mubmling geek with glasses" stereotype that is often associated with people who enjoy the company of computers as much (and sometimes more) than the company of other human beings.
As funny as this stereotype can be, Sheldon Cooper-ish personalities don't have a place in our profession. Our job is to be the mediator between a device so 1st degree that will literally erase itself if you mistype a command, and humans who can be as creative and crazy as humans can be.
Developers are master translators, turning a human language into a machine language, so our ability to communicate with both parties is key to our success.
Ok, but where's Python ?
None of the above is specific to Python, not even to the Python ecosystem. However, the most important in being a developer, is not being a developer for a language, it's knowing your craft, and honing your skills, so they can be used in more than one language.
Ok, but seriously, no Python ?
Allright, allright, if you really want to get some good pointers for learning Python:
- obviously Learn Python 3 with my co-worker Jerry, using TDD and Jupyter notebooks
- Python Module of the Week, by Doug Hellmann, where I learned so many tricks
- literally any talk from Raymond Hettinger, a brilliant mind and eloquent speaker
- Harry Percival's "testing goat" book, not just about testing unlike the name suggests
- The Flask tutorial, because web applications are 90% of our job today
- The SQLAlchemy tutorial, because I still get to see a project that does not use a database
Sometimes it does not work
I'm convinced that with sufficient training and hard work, you can get good at anything you want. But as appealing as this work can be, don't lose sight that it's just ... work you know. It does not define you as a person, and being a developer might sound cooler than it actually is (or not, I don't know, your mileage may vary).
What I mean is that sometimes, it does not work. For some people, the price to "get good" is too high to pay, and you might find yourself struggling to the point this is not fun anymore.
Then maybe it's a good time to review your options and to pick something else. I don't judge people around me because their website is stuck in the 2000's or because they can't troubleshoot their printer (hell, I can't even do it myself).
There are plenty of other jobs to explore out there, and even if you want to remain in IT, there are dozens of opportunities which do not require to write code on a daily basis. Just listen to your instinct and believe in yourself!
The Pragmatic Programmer, from Journeyman to Master, by Andrew Hunt and David Thomas. Nicely replaces 1-2 years of CS classes on software design, well explained, with examples still relevant today. And yes, it's classified as a Java book because the examples are in Java, but if you read carefully what I wrote above, it does not matter, right ? ;-)
Adimian YouTube channel, if you are into live-coding extravaganza.