I am a useless idiot, so I want to quit my job: 10 questions to a software developer, a pilot episode
Hi there, Habr!
Remember the story of Steve Jobs and Dennis Ritchie? Without any intention to rekindle the debates or moralize on the subject, let’s face the truth: thousands of stellar techies live in the shadow, while their own stories are hidden in a dusty cupboard.
We, the Habr editorial team, are keen to tackle this injustice. From now on, we will regularly interview people who keep a low profile in media and social networks. So if you have anything to tell about yourself, get ready.
To give you an idea of what this will look like, we will lead the way. Click below to see 10 general questions we will ask every guest. For our pilot episode, the first guest to answer the questions was fillpackart. (This month I’ve had several quite good interview sessions with him, see articles one, two, three). Please read them, and if you make up your mind on telling your own story in a similar way, just send me or baragol a message.
Filipp Ranzhin, a son of an engineer from a small Russian city of Ivanovo. He started coding in С++ at the university when he was 16 years old, and later he learned .NET. He is currently working in the position of a Senior Software Development Engineer at a respectable foreign company. Apart from the commonly used programming languages, he is also proficient in F# and OCaml.
1. Tell me about a feature you deployed that makes you really proud.
— I have not made anything that can make me proud. Throughout my life, I have been dealing with very trivial problems. So I am proud of what I am capable of, rather than of what I have accomplished.
I think I would have been proud if I had designed a smart AI system.
2. Now tell me about your worst fuckup.
— Once I spent a whole day trying to get OCaml to run on Windows (do not try to repeat this, guys). This was not a work-related activity, so the next morning I had to come up with some excuse at a meeting. Just then I saw a bug assignment which I did not even take time to look into. And I’m like, “Give me any bug, and I’ll fix it in two days!” I lied at the meeting that I had been working on that bug and that I expected to release a PR in two days.
It turned out, though, that I had instead to spend three months on fixing it.
The bug was related to the interoperability between two huge systems. It could be consistently reproduced. For all those three months, I kept coming up with various suggestions and checking them, failing time and again, to the point where I abandoned building my house in Skyrim. Those were the worst three months in my life.
Finally, I closed it as “No repro.” I came to my boss and I said, “I’m a useless idiot, so I want to quit my job to relieve you of this burden.” But she instead gave me a big salary raise.
3. Describe your workplace: from your office chair and monitor to preferred development environments and favorite utilities.
— I work with the Windows family of operating systems, because I use the .NET stack and because Windows has a better UI. I sit at a table that I made for myself. It is so enormous that it is capable of accommodating half a dozen coders.
My DevBox is by no means bad, however it has a substantial flaw – I tried to cut the costs and purchased an AMD CPU. This was an epic fail. Despite the claimed high performance, this piece of shit runs my tests five (!!!) times as slow as a similar processor from Intel.
I currently have only one monitor. I plan on buying two more to look like a pro. My favorite IDE is Visual Studio 2017 combined with Resharper. My favorite text editor is Visual Studio Code enhanced with a zillion plug-ins. Downloading them and watching VSCode evolve is one of my hobbies.
Much as I like git, I’d say I prefer Visual Studio Team Services over GitHub.
4. Based on what criteria do you choose work? Is it the stack, the product, the working environment, money?
— At the moment, the key factors for me are salary and the ability to only be committed at one third of my potential. I think I have gone through a burn-out and am no longer ready to give my heart and soul to someone’s business. Even at a threat of getting fired and losing the lifestyle I’m used to, I still won’t go too deep into the project. And I say this as a father of “one and a half” children, so that is some serious threat. But the repeatability and lack of sense in everything I have done previously now hurts almost physically.
Sometimes I think, with such approach I have no moral right to seek a job. My justification is that one cannot be moral or immoral in respect to a system. The abstract nature of corporations helps me distance myself from the thought that I might harm real-life people, so I accept jobs only from large companies.
At the same time, I’m embarrassed by how much I earn (by the standards of my city) for one pull request. As if the status of a highly skilled developer entitles me to have a ten-times better life than a whole bunch of other people who work hard for eight hours a day to do something really useful.
Sometimes I think, if I have managed to outwit a business representative at a job interview, then to a certain degree, I deserve everything I have. This makes me lose my touch with reality, and I begin to believe that this is the way it should be.
I don’t know how this can rub along together, but I love coding, and at the same time I hate working as a developer. I may cheer myself up by saying that I just did not happen to work on an interesting project yet, but I don’t really believe in it myself. This is hard to live with.
5. What would you like to improve in the technology and languages you are using?
— This is what I would like to change:
- Type inference and compile-time immutability for typescript and C#. This would give me a chance to create a method that receives something reliably immutable, unlike the currently used ReadonlyDictionary, which in fact is not read-only (you can pass a regular dictionary to its constructor, keep a reference to it and then easily mutate it).
- I would like C# developers to finally stop messing around with backward compatibility and the stupid using statements, which only work within one file anyway, and to modernize the programming language. Seriously, in a language where it is a usual practice to write something like IDictionnary<IMyStupidType, IMyStupidType2> Foo(Func<IMySupidType, int, bool, string> reallyStrangeCallback, to not implement types aliases is a very much weird decision.
- Automated backing fields in C#, some sort of syntactic sugar over Func<T1,T2>.
- Out-of-box code contracts for C# (e.g. in Roslyn) instead of external solutions that turn my IDE into a sluggish mess.
- An alternative of jsx for the F# language. If nobody of you guys is releasing it next week, then I’ll have to attend to it.
- I’d like the community to realize that unit tests are useless junk, and languages with dynamic typing (not to be confused with weak typing) are the biggest fail in the history of the industry.
- To make processor architectures better fit for the functional approach.
- To optimize tail recursions in JS/TS, so that I could jam my tail recursions everywhere without looking back at the size of the stack. It is there in the specification, but the guys who are working on v8 seemed to just ignore the language spec as something unimportant when it comes to developing the runtime code.
- An option for out-of-box static typing in JS, without prejudice to typescript. Unlike the creators of typescript, I consider it an independent programming language with a cutting-edge, powerful multi-paradigm design.
- For things like WebAssembly to be firmly rooted in the best practices and standards of front-end development.
- To see significantly improved web clients for GitHub and the like. Ideally, I’d like to be able to edit the code of a serious project in my browser.
- More compatibility conventions. Life would be much easier if jvm could interpret and jit a piece of code in .NET CIL.
6. Where is the best place for sharing work experience — is it college, conferences, Habr? Anywhere other than that?
— I used to study at a university, but I was repeatedly expelled. I attended conferences, and I am a regular on Habr. I don’t think I have acquired anything of true wisdom from any of these sources. Maybe I just find pleasure in thinking so.
My trick is reading books and befriending other developers. I believe that talking to smart guys who are into software development has had the most positive effect on my skills.
7. If you had unlimited resources (time, money, facilities, HR), what project would you work on?
— It would be great to create the most precise (to the degree that it is possible) simulator of humankind, in order to test routes for the society to reach its happiest state. It would generally be interesting to emulate people’s behavior under various circumstance.
8. How do you spend your leisure hours? What do you do apart from your work?
— I take walks in the woods and contemplate, sometimes sipping a beer; I play my guitar occasionally and play videogames from time to time. I’d say my hobby is thinking and dreaming.
I have several personal projects that I work on with my friends. I enjoy giving them passive-aggressive code reviews on purpose (e.g. “would you care suggesting a reason for using such poorly thought-out solution?”) and watch how this changes our relationship.
Sometimes I do various liberal-arts shit like giving interviews. I also often get to writing a book, but I’ve never finished any.
9. Tell us about your three favorite books — one learning, one non-fictional and one fictional.
Learning — CLR via C# by Jeffrey Richter. It is packed with so much knowledge about the ins and outs of .NET runtime, which makes it a true treasure. Whoever learns this book by rote, will pass any interview for a .NET developer’s job. I would also highlight Chris Okasaki’s Purely Functional Data Structures. While not very practical, this book re-instilled in me faith in programming, as the author’s implementation of data structures sent metaphysical shivers down my spine.
Non-fiction — I don’t know if Code Complete fits into this category, but I enjoy re-reading it. The author relates unbelievably obvious things, yet at every project I was working, nobody seemed to be able to follow those principles to an adequate degree.
Fiction — An American Tragedy by Theodore Dreiser. I would never think that a pragmatic digital monster, such as I, would be capable of sympathizing with a girl who was first dumped by her boyfriend and then murdered. But I did sympathize, and this meant a lot to me.
10. If an AI system suddenly became conscious right in front of you, what would you say to it?
— I would offer it to design an artificial intelligence project and then I’d compare the two against each other. If the new one turned out to be superior, I’d ask it to design an artificial intelligence project ,and so on…
If an AI bot happened to be a skilled coder, I’d use it to create a reliable proof of Golang being a dead end of the evolution of programming. Because I see so many Holy Wars on this topic, yet I have no budget for learning Golang in-depth to build a solid set of arguments.
Bonus: ask another developer anything you like.
— What technology was the most enjoyable for you to learn?