I think one of the things that software developers have above every other profession is learning from failures. In other professions, most failures are roadblocks that people avoid. In programming, the opposite is true. We believe that our code is going to be buggy before we run it, and are pleasantly surprised when it works with no hiccups. Therefore, our mindset is to fail fast and learn quickly, which is Facebook's mantra. I believe that this mindset is the hallmark of entrepreneurial success, which explains why most of the billionaires in the world have a programming background. Well, I am not going to do a research to prove that hypothesis, but you get the gist.
One thing about programming and software development that I have found rather interesting is that they are not the same. Writing code and creating software are as similar as laying bricks and designing a house. One has squat to do with the other. Although only programmers can create software, except for all these "no-code" mumbo jumbo applications out there, not all programmers can create good software. The process of learning to create good software architecture and products is an entirely new learning curve. Learning to program gets you into the entry level of developing such programs, but that's it. There are a million other things that you need to learn to create reliable, resilient software, in addition to coding.
I believe that a novice coder with a wide range of skills can create superior software than a brilliant programmer without any software development skills. To be a backend developer, you have to understand more than just logic. You need to understand databases, and optimizing these databases. You need to understand error handling and error logging to prevent these issues. You need to understand good data structures and algorithms, especially for large scale projects. You need to understand modularity and creating modular code. You need to understand.... You get the point, software development is freaking freaking hard! But, as the intro paragraph insists, we learn by failing.
I have only 8 months of programming in me, but since I had to learnt o program relatively faster to sustain myself after AI replaced me in my previous profession.... I have learned rather quickly about these concept. I went all in on a project to create a POS system that I would sell to business people so that I could not starve. And I thought creating the program and storing the data in JSON files would suffice. Boy was I in for a shock.
So, I get this one client, who owns a relatively sizeable hardware. So when I was adding the products for the client, when we got to like the 50th product, mind you the business has about 300 different types of products, the app began crashing on me. Also, it began raising new errors that I had no idea to expect. Mind you, I was down to my last 2 dollars and really needed the client's money to survive, but that deal fell through because I had a beautiful program, in terms of its UI, but extremely shitty software. I could have thrown in the towel and stopped creating software at that point, but I had no other option. I still needed money to pay the bills.
God came through for a bit, and a friend lent me some money to pay for my rent and sustenance. And I went back to fix the program. So I first downloaded a book and error handling and made sure that the software would never crash on me again. That was all fine and dandy... and so I got another client. The client would smell the desperation in me and pushed me to take half the price I wanted for the product. Another important business lesson. Always ask for more than what you expect, because Kenyans always bargain, and want to have a bargain. So, I gave him the program. At least I had some food for about a week.
The user goes and adds product to this application that is using JSON to store data and it became so sluggish that he almost gave up. But the nicest thing about this client is his level of patience. So I asked for sometime and then decided to fix the issue by using SQLITE instead of JSON to store data. And that worked like a charm, until it did not. After the client made all the entries, the app began being slow again. It was a better solution than using JSON to store file data, but it was not the optimum solution, especially as the client made more sales, thereby adding more memory usage to the database.
So I started optimizing the database, using LIMIT in the SQL queries to reduce the amount of memory used by the product. And now its lightning fast. I have since increased the value of my product as it becomes more resilient, less buggy and stops crashing on people, which I feel is making the application extremely valuable so far. However, am always waiting for the next error so that I can handle it amicably, and learn from it. Like I said, iteration and bugs are a software developers best friend. And clients are your best teacher. So to be a great software developer, I believe, you need to learn how to fail and take criticism which is semi-synonymous with being a good entrepreneur. FEEDBACK LOOP! That's the holy grail. Until next time, Sayonara.