Everything is already stolen before us
I think that many people even once had a thought - I was born too late, everything is already open, thought up, etc.
It is good for Descartes, or, moreover, for all ancient Greek mathematicians, to prove simple theorems and write his name in history. Now far from everyone (yes there, units per thousand people) are physically capable of reaching the front line of science without having jumped out of the window of the main building of Moscow State University along the way.
Well-witty guys in the early nineties, raised millions of businesses literally half a turn. It’s good for those who in time discovered the prospects of the Internet and opened sites in obvious empty niches. Brin and Page, because when they launched Google, there was no Google yet.
Jobs assembled computers in a garage and sold. Now launching a new process technology costs Intel billions of dollars.
In short, it’s too difficult to break through now. Very high competition, wherever you spit.
I have some encouraging news for you. In the world of software development, this is absolutely not the case. Unsolved problems are scattered on the road, there is nobody to take and do.
This is indirectly proved by the fact that in most programs, systems, libraries that someone needs, the number of tickets and the intensity of development only grows. That is, the breadth of the problem is only being revealed at the moment. Positive derivative. Examples: operating system kernels, popular programming languages (i.e. their compilers, virtual machines and standard libraries), databases, site management systems, code for mobile platforms, front-end frameworks.
As for the graphic sector (game engines, rendering, all this) I know little, I won’t lie, but it seems that there is also a lot of traffic.
Of course, there are systems that have already passed the peak of active development. Their code reached a certain local optimum (for their tasks) and hopelessness; it is difficult to improve it at least somehow. Examples: jQuery, LaTeX, dlmalloc. Here I mean precisely the actively used things, of course, because it makes no sense to mention that shit that is not needed is rushed and does not develop.
But in such a “golden” state, a noticeable minority of projects are practically exceptions.
I repeat, even the crest of the wave has not yet been completed. Although much has already been decided on a large scale, they have just begun to delve into the details. Compared to the gold rush, nuggets with chicken eggs from streams have already been pulled out (although not all), but most of the gold, by weight, has not yet been washed.
The quick sorting algorithm was already invented a long time ago, about 50 years ago. Its optimization almost lying on the surface (two supporting elements instead of one) was implemented in the standard Java library (perhaps the most popular platform at the moment) some 5 years ago. In the standard C library, as far as I remember, sorting has not yet been optimized.
My topic: hash tables. Just in case, I’ll outline it, for those who don’t know, this is a very basic data structure, a huge number of algorithms, entire classes of programs primarily depend on their effectiveness. In many popular programming languages (including the same Java and C ++), hash tables are implemented depressingly inefficiently without any excuse. You just can go now, replace them and it will become better in all respects.
Also my topic: databases. Performance problems and inconsistency with the declared characteristics (durability) of the most popular bases have long become a byword. There are no fundamental problems behind this, just bad code that there is no one to edit. Go and fix it, it will save millions of dollars in total (naturally).
Developers are weary of crooked, unsafe, over-complicated programming languages. Absolutely ordinary guys go and write their own languages (Rust, Kotlin, Julia), which for certain tasks are the best that existed before that, so they rightly occupy their niche. Go and help the guys, they are drowning in tasks, never enough hands.
Remember that some 3 years ago AngularJS did not exist, now tens of thousands of people use it.
To write this post I was prompted by a case in YandexI learned about today: their engineers have seriously improved the behavior of the Linux kernel, if in the north some kind of persistent structure is spinning, which occupies almost all of the physical memory. And this is a fairly wide range of server tasks. I had a dumb question: why Linux, which is actually a server and sharpened, did not have this optimization before? Because not everything is stolen before us.
To enter your name in the history of software development, no matter how pathetic it sounds, now you do not have to be a genius or a lucky one. This is an algorithmizable task with a deterministic result, in contrast to, say, the task of earning a billion dollars or discovering a new law of physics.
1. Select the area in which you like picking.
2. Go deep, figure out what's what. Basically, nothing is required except the skill of reading source codes and time.
3. a. Become a contributor to the popular stuff. You don’t have to go through a secret initialization ceremony or pay a large membership fee, just send a good patch. They will pray for you, because most projects, including very popular and sponsored ones, are suffocating from a lack of developers. To accurately enter history, gradually expand your influence in the project. Become a key developer over time.
3. b. Identify the root problem in your area and solve it. Such problems have in each region, and will be in five years. It’s not that you can go to the forest and not find a treasure.
If for points 2-3 you are not paid what happens, you will have to work in parallel somewhere, and go to the goal only in the evenings. A bunch of examples when large projects began as an aid to the main work. Or here: Con Kolivas , an anesthetist (!) Who developed the Linux kernel.