Inter Caetera

Posts About

How to start programming

Published on 8 June 2020

Programming has become somewhat of a unicorn lately. It's an interesting discipline, a very versatile one and, what's most important to many people, an extremely well-paying one. Depending on the market, one can expect a starting wage for any serious, junior programming position to be well above the average wage.
There's a reason for that, though. There's a huge demand for capable programmers, and the job itself is not that easy. But programming offers a unique blend, something that in my opinion is instinctively appealing to a number of people, of craftsman workflow and corporate atmosphere. It takes a certain amount of skill that goes beyond code to balance both of these.
But let us back up for a minute.

What is programming?

I am making an assumption here that you are interested in programming commercially - since for a hobbyist the quick pace of learning and the general mindset of a commercial programmer is not a necessity. The hobbyist works at a pace that brings him fun and stops when it becomes tiresome.
There are many varieties of programmers out there and the field itself has grown beyond the understanding of a single mind - that's why we have website designers, web developers, native programmers, mobile developers, database admins, dev ops, machine learning specialists, data scientists and a whole bunch more I'm probably missing here.
Among commercial programmers, there are many mindsets. Some choose to work in a low-margin business of designing a sort of "business card websites", ones for businesses that are only interested in a small internet presence. Such websites are often done with ready CMS systems, reusable templates and are done fairly cheaply for non-demanding clients. Some of my friends who work in this field are able to turn over 3-4 such projects in a week, with prices for each one ranging in the lower hundreds of dollars.
Unfortunately, that style of website design is at risk of dying out rapidly due to the increased competition from drag-and-drop website builders like Squarespace or Wix. Also, due to rather low barriers of entry, the field is quite competitive and because of that, not very rewarding.
Another mindset I found on my journey through the world of software engineering is the mindset of a corporate programmer. Such people are usually employed in a company that might not primarily do software development and they are only expected to provide custom software for specialist uses. Their management is responsible for the outcome, the programmer is only expected to provide the implementation, estimates and assist in the design process — everything else is handled by stakeholders. Such a job is fairly easy as it is only reduced to coding a specific solution, with little responsibility for the end product that is supposed to just go out the door in a relatively stable state.
Finally, the mindset I personally find most appealing and one that I strive for is the mindset of a craftsman. Such approach imitates very closely the practices and processes of crafting guilds of medieval Europe. It advocates responsibility for the entirety of the software life-cycle by the developers. In a craftsmanship model, coding is actually a very minor part of the process — a much greater is devoted to communication, testing and planning, to precisely understand the requirements of the stakeholders and end up delivering a working product that can then be incrementally extended and upgraded.
Each of these approaches requires progressively more decision making and responsibility — collectively known as "ownership" — for the software. Some programmers just want to code. Some programmers want to have more involvement in their end product. It is up to you to decide which path you want to pursue.


One of the most common questions I hear aspiring programmers ask is whether one needs higher education to get a job. The answer, as with everything, is more complicated than just yes or no. And having listened to both sides of the discussion I can tell that the split seems to be about fifty-fifty.
The decision to take up or not take up university is very personal and depends on many factors in your own situation. It also depends on which part of the ownership spectrum I described above you find yourself at. Finally, the quality of education varies by country or even by region — it seems to me that education in countries where universities are not "free" (as in paid for by the state) is of higher quality than elsewhere.
Time is the currency universal to all of us and some amount of it can be spent on an asset that is formal education. I found it not to be a good investment and decided not to go to university, instead opting for self-education from books and the Internet. I am happy with it, however I am also aware that because of my choice of not pursuing formal education some positions might end up barred from me.
Whether you decide to take up higher education or not, I would still suggest to read and practice on your own time. One of the best pieces of advice someone has told me was not to shy away from paying for good quality materials — that includes courses and books. There is a wealth of good quality free stuff on the internet, but the true marvels require some monetary investment.
In the very beginning anyway the best investment you can make is an investment in yourself, your knowledge and your skills. It will bring in money much faster than any kind of stocks, assets, precious metals or other material purchases.


Another very common question among beginners is "which programming language is best to start with?".
To begin with, it is good to first understand the mindset of a master programmer when talking about languages. Languages are not things to be locked down by, instead they are tools. Much like a master sculptor has a variety of hammers and chisels at his disposal, so too a master programmer will not be confined to just a handful of programming languages.
So where to start? Programming is sometimes described as the art of laziness because programmers always seek to ease and automate mundane processes. That is one approach - to find a problem and then learn to use the tools that will let you simplify or automate it. When I found myself doing many mundane operations on files in Linux, I learned Bash. When I needed a very specific style of SQL linting that was only available as a Python library, I learned the basics of Python. When I wanted to write an IRC bot I learned mSL, and then, when my requirements outgrew its simple syntax, JS.
Unfortunately, the process of learning is very different and very subjective, so any advice I might give here might not apply to everyone. However, what applies to everyone is that there is a certain amount of resilience that is required to learning anything and once you have it, everything will be much easier.
Additionally, the best language you can learn in this field is English. The reason for it is simple — half of the internet is in English, and the best resources are only available in that language. It is also invaluable for communication with the clients and for writing documentation. Especially when it comes to docs, treating English just like a programming language — not repeating yourself, making your documents easy to change, keeping everything in one place, automating repetitive tasks and so on — goes a long way.

The path to mastery

As with every skill, a novice might look at a master and only see the positive side of what he does. Someone unfamiliar with the piano looking at a virtuoso might just think that all he does is move his fingers rapidly across the keyboard and not consider the thousands of etudes played to achieve that level of mastery. A visitor to an art gallery admiring a sculpture only sees the carved marble, and not the tens of thousands of hours of practice and trial and error that the master sculptor put in.
It is the same with programming — our profession is often seen as just a bunch of people who clack on keyboards for eight hours a day and earn six-figure income for it. In fact, what is unseen is the amount of work that goes into becoming a good programmer. So if you only want to be in it for the money, you might find yourself sorely disappointed.