I lost faith in the development, burned out, but the cult of the instrument saved me
I often criticize technologies that seem to me wrong, and in return I get not only arguments, but also outright malice, resentment, and even in the face.
Injections in the address of technology developed perceived on your account. The cult of the tool is a very strange thing that cannot be explained logically. Some say that everyone has a cult, because thinking tightly intertwines with yap. Others say this is a junior illness - you wrote something for the first time, it came out, from delight you considered your Jap a miracle of God.
Whatever it was, I never understood this garbage.
Supporters of cults seem to me impassable stupid. And I always try to understand how stupid became stupid, and why I did not become stupid. Began to think and bam! - I realized that I still became. I am a stupid cultist who praises F #. And of course there is a story behind it.
I started my career as a junior C # dev. Crude then still Xamarin, development under android. The first steps on the first job were filled with pain. I single-handedly made an application using screenshots and gifs from the iOS version. Everything was built through time, there were a lot of problems, and the only feedback I received was “is it not like in the picture?”. It was a nightmare, and I quickly left.
He studied at home for half a year to work out, then he got a job in a major outstaff. Everything was just like it was with people - the team, mentors, exams, patterns, code history, strict linters, the highest requirements for quality, readability and performance of the code. In a word - an adult approach. I definitely decided for myself - this is exactly what needs to be done. But it turned out this nightmare is even worse.
For more than a year, we, with a whole team, made a module for a tool that works with tools designed for developing tools. Perhaps the very ones that we need to make a module. Every day we were forced to call either Indians or Americans, and it is not clear what to report to.
At some point I noticed that I was doing less and less, but nothing changed. In frankly speaking English, I frankly lied: “ol pas pas wik ah serch for bug. Steele know saxes. Wil wil continent ”
“ Ok, Phil, Sounds Great, ”spoke from across the ocean.
Once, in a fit of shame and despair from my uselessness, I went to the authorities and asked me to be fired, but for some reason they raised my salary. I have already spoken about this. I was neither funny nor joyful - it was a murderous sur, as if the world of futility conquered the world of logic.
A strange contradiction, but at the same time out of boredom and super-ambition I decided to play a cool developer at home. A lot of ideas were always swarming in my head, how to make the world and your wallet better with the help of software projects. I did everything right. TK, architecture, system requirements, project in VSTS. All grown-up, just like corporations.
Decided - the idea of shit. The code in the trash, take a new idea, throw, everything repeats several times. I tell colleagues, they are perplexed. How so? After all, I do everything exactly the same as those who have already snatched their piece.
A person with my self-esteem is usually easier to live than others, but it is expensive to pay for it. We need high-quality self-deception to put up with their failures. And I said to myself: any developer can do anything. The whole question is how it will be done. And my requirements for this “how” are too high. They are not suitable for home “startups” and they are not worthy of useless business problems. The next thought: "I am not ready to abandon my quality standards." Even if you need to make an application that fart taps on the screen, I will make it as efficiently and thoughtfully as I can.
In the end, I made a local cargo-cult of business at home. Brought rituals, processes, orders, but not content. I just played a business developer without a business, like a Papuan who made a runway and towers out of the straw, and now he is waiting for iron birds to sit there, like on a neighboring island with strange people.
I wrote incredible heaps of formal code that did not bring me closer to the result, but on the contrary - I was wandering around and around. My career is, damn it, the history of files and disappointments. I spat on everything, put a cross on myself and just watched the serials at work, drank 16 cups of coffee and smoked for half a day.
Having knocked about the bottom, I absolutely accidentally read an article on Habré about F #, tried it, and like this: “Hmm! Not bad". My employer gladly paid me a month of training (he really doesn’t know about it).
F # was not difficult to learn, it has the same runtime as C #, and I used a functional programming approach every day in TypeScript. And now I realized that I can transfer any of my projects to F #. Let's leave my technical skill behind the brackets, because the skill is a relative thing. In those teams where I work now - I'm cool, and in a team of, say, F # developers, I could claim, at the most, the position of assistant cleaner.
But at my level I could solve problems. Although in my heart I knew well - I will not decide anything. Just turn my head and continue to throw out knowledge in the trash. I completely lost faith in the development.
And one day I decided that I would give up all this fucking. It was winter, cold and dark. I left the office on the street, got into the car - it won't start. Finally, the engine went down. I do not know what happened before - whether I felt the smell of burning, or saw smoke. Then a flame burst out from under the hood. Another second, and I, like a psycho, run through the parking lot and shout at everyone so that my cars would be driven away from mine.
After five minutes of panic and chaos, there was only an old, burnt piece of shit and vidyushki of all sorts of blockheads, who then gained thousands of views in local “overheard”. Minus 30, I'm in the autumn jacket of a man who was going to go home in a warm car. Zadolbanny at the end, completely broken morally. There is no money for a taxi, public transport for the mobile. I went home on foot, about ten kilometers. At home, you need to help your wife and child, eat, put them to bed, do a thousand things. But night comes, distractions end, excuses, too, and I am left alone with disappointment and insomnia - I am good for nothing, nothing will ever work out.
On this worst evening in my life, without really getting warm, I decided to give myself one last try.
I sat down and decided to write a small digital biome on F #, where units on machine learning will interact with themselves, develop, and I will turn the parameters and see what they will turn into this world.
And yes, maybe then I went a little mind.
Usually I use such a cross between a downward and an upward approach to design. I describe the solution in general terms using pseudocode. Then I begin to implement the most important of the details, which, as independent modules, do the opposite. From details to the general.
Already without pseudocode, I implement a couple of three large modules, and I’m looking at whether it will work. Usually, it does not work, and I begin to use iterations, repeating this process from beginning to end until it is started. But more often just throwing, iteration on the fifth-sixth.
With F #, I applied the same approach. I had a vision of the project, in general terms. In the head a brick behind a brick implementation is built. You think over one case after another, and at some point you understand - everything, you already know how to code it. And then you sit down to code, and you understand that no. Thoughts are not transferred to PL, even though it seemed to you that you think as if on it. I have so constantly.
But it turned out differently. I created a txt file in VSCode, and wrote the pseudocode function that describes the life cycle of my application. And I realized that my pseudocode is valid F #. Nothing needs to be changed, I just wrote the main function of the project. Okay, I changed the file extension, added it to a clean solution. Here is a life cycle function. It accepts the current state of the world, the thing that processes it (the world itself) and spits out the updated state, the thing that turns the state into a set of parameters for AI and back, and the AI itself, which receives its parameters, and spits its decision.
Then everything is simple. They took the state, turned it into AI parameters, fed the AI functions, turned the result back into the state, in turn gave it to the game functions, and the result gave the same life cycle function. Divine recursion, simple algorithm, beautiful code, the whole GoF out of the box. It remains to implement all these functions.
But the point here is that I no longer need to think about architecture. I write what Jarist Sharpeas have called the steep term Inversion of control container - a function that takes the function of the life cycle and sends it to the function parameters from my modules (II, Game). VScode underlines it in red, because there are no modules or functions yet. But I got the main thing - as soon as the red underscores disappear, and the project can be bred - the decision is ready.
I just take and implement these modules one by one, working in the same way. The whole project is five files. File with AI - 500 lines, a lot, but idiomatic. The beauty of the approach is that I was able to write the working function of the life cycle - the heart of my application - without describing anything else.
The whole architecture - 10 lines of code written in a minute. No interfaces, abstract factories, Iocs, all these DefaultInterfaceNameClass and other garbage, which I need to do in C # before I understand what I want to do. You take, and write a stupid code that just solves the problem, and you get it even more qualitatively than your enterprise suffering on these Sharpas java.
I did this by simply driving my thoughts into the editor, as if I was thinking in F #. In places where in C # I would write a work plan in the comments to the code, I had working functions. Instead of describing dozens and then hundreds of interfaces, one small file with the domain model of the application. Sbildil. Got a working solution. Per night. With a good code, which then was not afraid to show on the cab. Just like that.
In the morning I wrote to work that I was sick, and plunged headlong into the project for a week, until I realized that my idea was already implemented and no one needed it. But I regained my faith, and that was the main thing.
I don’t know what the matter is - this is F # fucking technology, or just it suits me too well, or it was created just for such tasks - what's the difference? The important thing is that at that moment I was drowning, and I needed a lifeline. Life threw me F # and I climbed out. Now for me this is not just a soulless technology - it is a huge emotional skoup.
When someone with me laughs at F #: “Stillborn technology! A toy for zadrotov ... "- I immediately remembered the darkness of the winter, a burning car, a cigarette stuck to my lips, a depressed state, and F # that pulled me out of it. That is, they seem to be shitting my best friend. My reaction is obvious - I hurt, and I'm angry.
It looks strange from the outside, but if you lived that day instead of me, you would react as well. I think that is the case with all technology cultists. They fell in love with their Yapas, because the circumstances in which they met them are very sharp for them personally. And here I come, and spit in their souls. Well, who's the idiot? I'm an idiot. I hope no more.
If anything, about F # here .