Hello friend...
Hi there! Maybe some of you are asking yourselves where have I been as of late? Two people contacted me personally asking me what's up, thank you very much for all the care, you guys are awesome.
In the past few months, I've grown as a blogger on platforms such as Publish0x, Hive, Steem, and recently Blurt. Some of you, the people that used to read my articles, probably grew accustomed to my publishing schedule which more or less happened every Sunday. There have been a few weeks right now since I posted the last time though, so I'd like to address my absence in this post.
If you're reading this on Blurt you've probably already gone to the comments section typing: "Mwhell acshually you've posted last week". That's right, in the last couple of weeks I've been running a series on Blurt, called "Your rock infusion" in which I recommend you songs that I like and also share with a memory that I have with that song. I considered it inappropriate for the other platforms since all of you are probably more used to me writing about technology, programming, and Linux. But, if getting some rock(and other genres) in your feed via me is something that a lot of you would like, I can bring this series over all the platforms.
What have I been up to?
If you remember some of my latest posts, they were about this project that I've been working on called Instrumentality that served as my final project for University. As the deadline drew near I found myself unable to keep writing at the pace that I did before and I decided to set this aside for a time.
I've also been job hunting while working crazy hours on this project and I'm finally in the negotiation stages with a company that's ready to take me in. I'm really excited at the prospect of working there, I'm going to be in charge of one of their newest project if we agree on the salary.
The future looks pretty promising and even though I've been working crazy hard for the past few weeks I feel like everything's been worth it. I don't want to seem whiny, but I had a couple of weeks of waking up at 7 or 8 AM and working until 1 or 2 AM, with meal breaks of course.
The Instrumentality project
In a nutshell, this project aimed at finding a better solution for tracking the experience levels that programmers have with different technologies. We like to track those using years, but that has no value, it's just arbitrary values. What's the difference between someone who has worked with Angular for 5 years and someone who used it for 3 years?
Or how can we say for sure that one year of experience is the same across all developers? Maybe one solved more complex tasks than the other, yet that's not reflected in any way in the resume.
Companies know that this system is bollocks, but they use it anyway. Every job ad has something along the lines: "We want you to have 5 years of experience with Java. 3 years of experience with Docker" and so on so forth. So there's a clear necessity for tracking this stuff, yet nobody wants to do it right.
The companies, being the "intellectual hubs" that they are, they came up with the "brilliant" idea of practical tests. You graduate university or don't even go to one just so you don't have to deal with the stupid standardized tests and here we are deciding who gets hired and who doesn't based on a 30-minute test. And guess what? Most of those tests aren't even evaluated by human beings, no, they use automated tests to check your code. You wrote the best, cleanest, most elegant code ever? Whoops, you forgot a semicolon on line 146 so this code doesn't run at all! Well better luck next time!
Everybody is trying to heal a system that's already dead. Sure, people want jobs so they just cram as many years in that CV as possible.
"You learned C++ in high school? Well, I guess this counts as 4 years of experience, right?"
Every logical human being would just answer no, that doesn't count, but no company will even glance your way if you say you've got no experience.
Obviously, companies know what we're doing and how we "measure" our experience, that's why they introduced those damned tests I was talking about.
How do we solve this?
We don't.
This model might work for other career paths, but as a software developer, you have to work with dozens of technologies that you are supposed to keep track of individually.
We make a better system that is simple, automatic, and which we can trust to have only real data. And what better way to ensure that data can't be manipulated than implementing a blockchain solution?
But before talking about the blockchain part let me tell you about my solution in a few words. It's very simple. We use points that are awarded when you solve a task at your job. How does this work? A team leader usually assigns tasks to the developers. All he has to do on the platform I built is to specify a complexity level(easy, medium, hard) and up to three technologies used in the solving of the task.
The rewards are as following:
- Easy task: 0.1 for each technology
- Medium tasks: 0.2 for each technology
- Hard tasks: 0.3 for each technology
"But you can just make a lot of tasks and abuse the system!"
Well no, because each company has a limited number of points it can reward. So using them up means that you have to wait till next month when the company's account is replenished.
The blockchain
I had to find a blockchain solution that allows for different kind of accounts since I planned on letting the programmers register freely, but verify the companies. After some searching, I found Hyperledger Iroha which can be used to implement a hybrid, permissioned blockchain.
"But why permissioned?"
In one word: privacy. It would be bad if companies could just stalk great developers or developers with potential and "steal" them from other companies when the time is right and their skills developed enough.
It would also be just as bad if developers could just send points from one to another.
Also, it would be bad if everybody could just add new technologies to the platform, there would be chaos.
So none of that.
I also wanted to verify the nodes in the blockchain since I couldn't use a public consensus algorithm like PoW or PoS because there's no market value attached to those technology points.
I ended up creating three kinds of accounts on my blockchain:
- Orchestrator: which can add new technologies, add companies, refill company funds, and so on. Usually, a new decision requires it to be signed by 50% + 1 of the orchestrators. Each node must have an orchestrator account attached to it.
- Company: which is an account designed for people that represent a company. Such accounts are meant for people posting job offers and team leaders that sign tasks to developers.
- Programmer: this is a public account that can't do much. It can be used to apply for jobs, get hired, and then receive tasks. It can get rewards for solving tasks and that's all I think.
The rest
Besides the blockchain which was the most interesting part of my project, I had to work a lot on an API to interact with it and the actual graphical application people were meant to use. I made it a web-app written in Angular and the API was designed in Python.
If you've seen some of my previous posts you might remember some of the interface elements. Since my last post on this project, I migrated to a dark theme because my eyes would hurt after spending so many hours working on it.
I had to create different parts in the app for every kind of account since they are meant to interact with it differently.
Here are a few more screenshots of the final project:
That's just a part of the whole application. The API ended up being a couple thousand lines of code as well.
Written thesis
Besides the project, I also had to prepare a 70 pages thesis about it containing all the theoretical knowledge and implementation details. I ended up having around 42, but I think I covered everything essential and I'm ready to defend it in a couple of days.
The future
Right now I have a bit of free time until I get officially hired and then everything will settle down. I'll try to post a couple of things until then, though I can't promise anything on the schedule. I still have to set some paperwork straight with my graduation and all, and since in my country the pandemic is still raging on, the public office of my University has a limited schedule.
I'm officially ending the "Full-stack wizard" series as it was centered around this project. I just found out that once I present this project I will not own the copyrights so I won't be able to tell you to use my code and so on. All rights will be passed on to my University.
I'll start another project though pretty soon, also blockchain-based and you can expect a new series on that one. This one will probably be more detailed since I won't have to rush things.
Also, I'd love to do some Linux series, exploring some nice exclusive programs, especially those that run in terminal.
Final thoughts
I'm ready to start writing again, I missed this and I'm having some great productivity energy now that I finished that project. I'm seriously thinking about doing some video content as well, but I'll have to first record a couple of things to see if I like my voice enough. If not you'll never hear me 😂😂😂.
I'm glad to be back in all the wonderful communities that I found on the many platforms I write on. Hopefully, I'll have some Linux content ready for Sunday so see you then 😉.
I knew you were crazy busy. When I was in school I had no life. Just school and projects and tests. I couldn't do anything else. It was very hard and then job is another thing. You need all these requirements and programming and tests... a lot of work for sure!
Yeah I tried for a while to post while working on this project, but it became increasingly difficult once the deadline grew nearer. Since my next project won't have a deadline, I think I can do a much better job at writing about it. I also want to engage the community a lot more since I can now accept contributions.