#ChainMeNow is a series of interviews created by the Tecra team, featuring representatives from the blockchain world. They will present this market from different perspectives. Each interview ends with a couple of quick questions and answers. Today we invite you to an interview with Rafał Kiełbus, one of the leading Polish developers in the blockchain industry.
A word of introduction, let's start with the nickname Rav3nPL. What is the story behind it? How did it all start?
My nickname was used even before the “bitcoin era" and it emerged from a combination of words... My name is Rafal, in arcades game machines I used to type my records as RAV (ra-fal), then I got fascinated by the movie "The Crow" and since "The Raven" (yes, I do know crow is not a raven) was already taken, I turned E to 3 and finally added “PL”.
How do you recall your beginnings in programming? Why did you choose this particular career path?
Computers have been a part of my life since I was a kid. First, the arcade games, then Atari, PCs in school (XT, AT...) and some old machines with 2.5 inch floppy disks, which I don't even remember the name of (laughs). There was assembler, Basic, Turbo Pascal, Logo… Later I started coding in ASP.NET/c# for my own use, while playing Foldit I wrote a lot in LUA. When I started my adventure with BTC I started using C++, Python and Solidity. I tend not to get tied to any particular programming language, I treat it as a tool/limitation from existing solutions, and the goal is to explain to the computer what to do.
Which programming language do you find easiest to use? Which one is the most difficult? Why?
I don't like JS (because it can't even do math properly), and PHP might be good after the next few versions. Java doesn't appeal to me. Currently I still feel best in C# and Solidity, but as I said - the language is just a tool. In the age of universal access to information, it's not a problem to code something to work properly in any language - you need to know the capabilities and limitations (and sometimes the underlying logic of the language) rather than the syntax.
Why did you choose to work with blockchain in your programming career?
I guess in my case you could say "the job found the man". I had worked for over 15 years in an automotive service center where I managed all the computers, networking, servers, computer diagnostics and electronics in addition to the customer service. I was programming outside of work. When BTC appeared, I started to be active on forum.bitcoin.pl and Facebook, and after a few years it turned out that there are few people who understand crypto on a level comparable to me. I gave a few lectures at conferences where I got noticed. I was invited to join the Polish Blockchain Technology Accelerator, and that's how my new career started.
What challenges and issues does a blockchain developer face? What is special/unique about this field?
Most of the problems are generated by... the users. The technology itself may be foolproof, but what if people willingly give the thieves or hackers remote access to their computer, private keys or mnemonics? As for the programming, there might be various challenges. There are different problems if we code "from scratch", and there are others when we modify existing solutions. You can also program "in-around-the-blockchain", coding applications fronts or websites using blockchain - and here the challenges will be different too. Basically, there is no monotony - solutions are constantly evolving, updates and new features appear, and not always everything is backwards compatible. A good example is the evolution of Solidity and its compiler - you can't use the same code after a few months, you have to update it, improve it, sometimes rewrite a piece of code - because a new feature that improves the performance of the code has appeared.
What is the stack? Why exactly this one?
It's whatever the project needs (laughs). Currently I'm involved in three different projects and I help occasionally in a few others. Things are different everywhere - because each project has its own software and you have to adapt to it. I'm flexible, I use what is needed and what is available.
How does one get started as a programmer in this industry? What skills are the most desirable?
There is a place for almost everyone in this industry - from low-level (c/c++) for communication protocols, through databases (the blockchain has to be stored somewhere), to mobile or web applications. You need to have your head screwed on the right way and think in a way applicable to blockchain. There are things that are unique in blockchain, in some cases trying to apply it might prove to be pointless and not at all useful in a project. You need to look for the optimal solution to a problem, not try to push a solution that doesn't apply to the problem.
Explain in nutshell what is the difference between a coin and a token?
The token needs the coin to work. The token operates on the coin's blockchain and you have to pay a fee in coins to send the tokens.
Do employers in this niche pay attention to education background?
I think it depends on the employer. Experience and actual skills are probably more important than "documents".
What skills are most important? Networking, algorithms? Why?
For a programmer, it's logical thinking. You have to know what you're doing, what you want to accomplish, and what risks you need to mitigate at each given stage.
Is it difficult to get a job as a programmer in this industry? Where to look for it?
As I mentioned earlier - the jobs find me, so it's hard for me to answer this question. There are a lot of headhunters popping up on LinkedIn, so that seems like a good place to start.
How much do developers earn in this industry? What does it depend on?
The range is quite large, it depends on the project and the payment method - sometimes you’re paid by the hour, sometimes by a line of code, and sometimes you’re paid for the whole solution. From what I see, blockchain programmers don't stand out from the "usual" programmers, but their salary might be on the higher side, because on one hand the market is not big yet, and on the other hand there are not that many people with experience in this field.
What would be your advice to junior developers who want to work in this niche?
Read. A lot. We have the codes on github, we have a developer guide on bitcoin.org - these are the basics, and without knowing them there's no point in starting. If someone aims at ETH/Solidity - there is also documentation available. Not some guides as to how to code contracts, but solid documentation of the language and the protocol. You have to start from the bottom (protocol) and work your way up (application).
What are the potential threats to blockchain? How reliable is this technology?
It depends. Public blockchains rely on their consensus, in the case of BTC and ETH it is still PoW. With the large amount of computing power used for PoW, attacks are virtually impossible. With tens of thousands of copies of the chain in existence around the world, only a global blackout or national/continental internet blockades would compromise the integrity of the network. BTC is over 10 years old and still no vulnerability has been found in the used algorithms, the system runs practically undisturbed. Quantum computers are still the dream of the future, but even once they eventually appear (powerful and fast enough), there will be much more desirable targets to hack than BTC. The vulnerable link is the human - user. They are much easier to "break" than the technology.
How many computer screens do you need to work comfortably?
I’ve always just needed one. A graphic designer or web coder may need more because they can observe the live changes they are making. I usually need focus on one fragment of material, so one monitor is just enough.
Explain in two sentences what "cryptocurrency mining" is about
In BTC (and all PoW) it is a blind search. We have a simple requirement to meet - the hash of the block header must be a smaller number than the current target specified by the algorithm. To comply with this condition we modify the header to some extent. The faster we can modify and check the result of the hash - the more computing power we have and, at the same time, the chance to find a header that finally meets the requirement. Each mine/miner is working on a different version of the block (and thus has a different header) and the race is on - who will hit the "golden nonce" first.
Is it possible to reverse an incorrectly executed transaction on blockchain?
In public blockchain transactions - no. The exception may be transactions on some ETH tokens, but it depends on the code of the token and generally should not be possible. The advantage of BC is certainty, definiteness, irreversibility. Once a transaction has been accepted, it’s final - it has happened. Blockchain is not reversible.
How long does it take to program a blockchain "from scratch"?
A blockchain is a structure consisting of data, in which adding the new data requires a hash of previous data to be included. According to this definition, you can program a blockchain in Excel in 10 minutes. However, if you want to add data duplication, P2P communication, and a consensus mechanism to select one truth from multiple versions - it's more like months or years of work.
What portion of your work is innovation (creating something new - features, products), how much of it is maintenance and how much is bug fixing? What does your day look like in this regard?
It depends on which project and what exactly we are currently working on. Sometimes it's merging upstream for weeks, sometimes it's fixing a bug in two hours at 3 am on Sunday, and sometimes it's coding a contract that is supposed to accomplish a task without costing millions in usage. And sometimes it's drawing a diagram of the system to finally figure out what's going on. There are no boring days.
What would you ask Satoshi Nakomoto if you met him?
Did he expect the system to be so reliable for such a long time? Does he support the current direction of code/protocol changes? Did he anticipate such values and does he really not have the first wallets?
If blockchain was a human - what personality traits would it have? (list minimum 3)
Ruthless - what's done is done. Truthful - cannot lie, has nothing to hide. Honest - does not deceive and will not be deceived.