
I think many people had a thought at least once - I was born too late, everything is already open, invented, etc.
It is good for Descartes, or, moreover, for every ancient Greek mathematician, to prove simple theorems and write his name in history. Nowadays, not everyone (yes, there are units for thousands of people) is physically able to get to the front edge of science, not throwing himself out of the window of the main building of Moscow State University on the way.
')
Well-done guys in the early nineties, they raised millions of businesses literally from half a turn. It is good for those who have time-tested the promise of the Internet and opened sites in obvious empty niches. Brin and Paige, because when they launched Google, there was no Google yet.
Jobs assembled computers in the garage and sold them. Now launching a new technical process costs Intel billions of dollars.
In short, it is too difficult to get through now. Very high competition wherever you spit.
I have encouraging news for you. In the software development world, this is absolutely not the case. Unsolved tasks are scattered on the road, there is no one to take and do.This is indirectly proved by the fact that in most programs, systems, and libraries that someone needs, the number of tickets and the intensity of development only grows. That is, the width of the problem is only 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, mobile platform code, front-end frameworks.
As for the graphics sector (game engines, rendering, all of this) I know little, I will not lie, but it seems there is also a lot of moving things there.
Of course, there are systems that have already passed the peak of active development. Their code has reached a certain local optimum (for their tasks) and bezbazhnosti, it is difficult to at least somehow improve it. Examples: jQuery, LaTeX, dlmalloc. Here I mean it is actively used things, of course, because it makes no sense to mention that shit that is not needed by anyone is thrown 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 passed. Although much has already been decided on a large scale, they have just begun to go into details. If we compare it with the gold rush, the nuggets with the hen's egg from the streams have already been pulled out (though not all), but most of the gold, by weight, has not yet been washed.
ExamplesThe algorithm of quick sorting has already been invented long enough, about 50 years ago. Its 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 library of the C language, as I recall, still not optimized sorting.
My theme: hash tables. Just in case I will describe, for those who do not know, this is a very basic data structure, a huge number of algorithms, entire classes of programs depend primarily on their effectiveness. In many of the most popular programming languages ​​(including the same Java and C ++) hash tables are implemented depressingly inefficient without any justification. You just can go right now, replace them and become better in all respects.
Another topic is my database. Problems with performance and inconsistency with the declared characteristics (durability) of the most popular bases have long become a byword. Behind this, there are no fundamental problems, just bad code that no one can edit. Go and fix, it will save millions of dollars in total (naturally).
Developers are dying from crooked, insecure, overcomplicated programming languages. Absolutely ordinary guys go and write their own languages ​​(Rust, Kotlin, Julia), which for certain tasks are the best of all that existed before, therefore they justly occupy their niche. Go and help the guys, they are buried in tasks, there are never enough hands.
Recall that some 3 years ago AngularJS did not exist, now it is used by tens of thousands of people.
Writing this post led me to a
case in Yandex , about which I learned today: their engineers have seriously improved the behavior of the Linux kernel, if there is a persistent structure in the north that occupies almost all 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.
SummaryTo write your name in the history of software development, as though it didn’t sound pathetic, you don’t need to be a genius or lucky now. This is an algorithmized problem with a deterministic result, in contrast, say, to the task of earning a billion dollars or discovering a new law of physics.
1. Select the area you like to poke around.
2. Deepen, understand what's what. In principle, nothing is required except the skill of reading source codes and time.
3. a. Become a popular contributor. To do this, you do not need to undergo a secret initiation rite or pay a large membership fee, just send a good patch. They will pray to you, because most of the projects, including very popular and sponsored ones, are suffocated by the lack of developers. To accurately enter the story, gradually expand your influence in the project. Over time, become a key developer.
3. b. Identify the root problem in your area and solve it. There are such problems in every field, and they will be there in five years. It is not that you can go into the forest and not find a treasure.
four.…
5. PROFIT!
If you don’t get paid for points 2-3, what happens will have to work in parallel somewhere, and go towards the goal only in the evenings. A lot of examples when big projects started as an aid to the main work. Or here:
Con Kolivas , an anesthesiologist (!), Who developed the Linux kernel.