How to achieve success in computer programming? To find the answer to this question we’ve talked to the student, who won #OMRS202. Learn what advice does he have for you!
Our main project this year – #OMRS2020 Internships – is coming to an end. Its aim wasIt aimed to promote open-source projects around the world, especially among young developers. The participants had 4 months to meet the requirements allowing them to reach the dev2 level in the OpenMRS community, which was a condition for winning a cash prize. To be promoted to a dev2 member, it was necessary, among other things, to complete 10 tasks available on the Jira platform, to be a member of the community for at least 3 months, and to take an active part in the community’s Talk forum.
More than 140 people with varying advancement in programming from all over Poland have applied to join the #OMRS2020 program. Reaching the dev2 level was not an easy task, since OpenMRS technical documentation is extensive and on the one hand, contains all the necessary information to start working on the code, but on the other hand, it is also a serious obstacle for those who are just beginning their adventure with this medical open-source. Choosing this program as the main item of our internship we hoped that our participants wouldn’t get discouraged (after all, even commercial projects aren’t perfect and many problems may be found in them, too) and some of them would get the said promotion.
The unquestionable success of the program is reaching the dev2 level by one of the participants after only 3 months of being of the community member, who had no idea of the program when joining the internship. This is the only dev2 promotion for the time being, but we hope there will be more such successful nominees.
The first winning nominee, Łukasz, was interviewed to celebrate his promotion in the community structures. We asked him, among other things, where it all started, about his programming background as well as how he achieved his success and found a niche he used to win the prize. Łukasz describes himself modestly as a soldier, a network administrator, a programmer passionate, an amateur runner and a devoted blood donor. Maybe it was his humility and strong motivation to let him win? We don’t know that, but we do know his recipe for success instead.
Enjoy reading 🙂
To begin with, I’d like to ask you where it all started. What made you think of taking part in the program?
I received an invitation from the programming school with which I was working last year. The link went to the #OMRS2020 website, I opened it, took the opportunity, so I’m here.
Just like that? What was the most interesting for you in this project, then? Was it the prize or perhaps the possibility of self-development?
Mostly? The prize. However, I was aware that meeting the conditions for receiving the prize might be beyond my capabilities. But this was not the only motivation, otherwise, I would’ve given up immediately, knowing that the goal was beyond my reach. I therefore, approached this challenge with an additional goal on my mind.
So, what was the goal then?
A large project, a large community, many developers and myself. The one, with no experience in group programming, but with only small, my own projects completed. So there was an opportunity, involving no obligations, to see how things are done. At first it seemed to me there were no obligations, but I was definitely wrong. I found out much later how much I was wrong…
Was the course you attended to teach you programming from scratch or you had tried to learn something on your own before?
My first experience with programming languages was in a primary school, I mean “eternal” Turbo Pascal. 😉 Then, I had something to do with programming a few years ago during my studies, when I encountered such languages as: C, C++, Java. The latter one was the language of my engineering degree thesis. Then there was a break of a few years, meaning a kind of regression as regards programming.
It was hard for me to start again, so I decided to buy a training course. I was bored half the time, but I’m not complaining, as the other half of the course gave me what I lacked, the belief that I could still learn something.
Right, changes in the IT world are implemented very quickly and you have to follow them continuously keep yourself sharp. I’m glad that the course was successful in spite of all drawbacks and in the end let you be with us. I remember that at the beginning you complained about unavailability of easy tasks and a high level of complexity of the available ones. How did you deal with this?
You’re right, this was initially very demotivating. As a matter of fact, I was not the only one who faced this problem. A lot of us, including many of my competitors in #OMRS2020, came across such an obstacle. At first, I did not really know where to start. The project is simply too big, and I haven’t fully comprehended it until now. The first thing that came to my mind was to open each file separately and analyze IDE, which allowed me to see if something could be improved. Static analysis of the code was an unknown term to me at the time. My actions were very inefficient, and the things I managed to find were unsatisfactory. I felt discouraged and really thought it was out of my league.
And then, by chance, Daniel showed up. 😉
We could notice a lot of frustration, anger and nervousness in your email. However, that has changed and today you’re more relaxed when approaching the problem.
Anger? Well, that was not my intention. I rather wanted to show that I was about to quit after the first attempt. However, as you have rightly pointed out, my attitude is different now, as I managed to find a way to help not only myself but also others who are in the same situation I was at the very beginning.
So, I’d gladly hear about Daniel’s role, who seems to be a mentor to you. What finally made you change the way of thinking and stay?
As I mentioned, my first idea was to look through each file separately looking for possible problems. Of course, I initially found some small errors in the JavaDoc links, some unused imports and so on. Naturally, in order to meet the condition to be eligible for the dev2 level, I created a ticket on Jira and asked the community to approve this ticket. Then Daniel showed up and sent me a link to a tool being used by the community. It was SonarQube. Although the word “used” seems to be a little bit inaccurate from the present perspective.
I know that participants did not ask Herbert for help through OpenMRS Talk or request me to intervene, although I did offer it myself.
At first, before I ask someone for help, I try to deal with problems on my own. Daniel’s help was simply delivered quicker. As regards other people, they probably got discouraged faster than I did, or lacked a bit of perseverance. It is hard to judge.
Had you had anything to do with SonarQube before? Weren’t you put off using this “intricate” procedure from creating a ticket to starting working on it?
I had not used tools like SonarQube before. I hadn’t needed it, as I had written small applications alone and for my own needs. I just wanted the application to work properly and to fulfil its function, not to be immune to all threats and reflect the best programming practices. However, by working with this tool I could see its usefulness. Without SonarQube I wouldn’t be able to approach the next one.
As regards my experience with JIRA, well, the method seems simple and logical today, but at that time it was also my first contact with such a system, so I had to make some mistakes before I was able to grasp its inherent rules. Nevertheless, I’m not complaining, because without them I wouldn’t have acquired the knowledge I have today.
Has any of the participants tried to make contact with you? You are the most active participant in the program and maybe someone has noticed your success and the fact that you managed to overcome the problem?
I had no opportunity to exchange messages with other participants. In the beginning, we didn’t know who they were. It was only later that a channel was created via which we could see who was in the game, but most of them were not active any longer at that time.
Did you feel sufficiently cared for by us at the early stages and related problems in the OpenMRS community? Or do you perhaps think that we could have done more to make your work on the tasks easier?
I cannot complain about your care, but, as I said before, I did not especially seek it, either. Today, however, I don’t think I would’ve been disappointed, although I don’t know if I would’ve been in the same place I’ve reached without it.;)
The pride in what you’ve done yourself is surely a hundred times greater. Moreover, you have shown how determined and ambitious you are, even though others had initially the advantage of their development experience.
Today, I wonder whether or not my concerns about the class of competition were exaggerated. At the moment, I’m eager to think that experience of all of us was similar.
It’s hard for me to say, as at the registration stage we didn’t ask participants about their programming skills. Numerous courses, training programs and tutorials available on the market nowadays makes it possible to learn programming on your own, so we believed that everyone who applied knew what they were doing.
Before I got to know the project, I also thought I knew what I was doing, but reality verified this view.
What was Daniel’s role in your OpenMRS adventure? Was he a teacher, a mentor or he just provided guidance?
A mentor, a teacher are valuable words, but I find it difficult to use any of them here because such a relationship must be bilateral. Nevertheless, one thing is certain, Daniel’s hints were very helpful. Thanks to them, I found the right niche for myself.
It started with the fact that he showed you SonarQube, a what happened next? Did you become interested in this tool and similar ones or did you perhaps otherwise find this niche?
That’s true, he showed me SonarQube, and I used it to submit several other tickets. Thanks to this, a few of my PRs were attached to the master, which gave me great satisfaction. However, there is one disadvantage of using SonarQube in OpenMRS. Only openmrs-core repository is attached to it. Therefore, I had to do something about it. I found a solution on the Internet, it was SonarLint.
We both know that OpenMRS is a huge ecosystem, consisting of many modules. So, using the said SonarLint, I “reworked” the first of them. I created the tickets and asked Daniel if he could approve them, and he added a comment that completely turned my vision upside down. Up to now, I don’t know whether it was knowingly or accidentally, but the result was achieved.
What was that comment and why did it change your entire vision so drastically?
He wrote something like “I’m glad you doubled the number of intro tickets”. I knew there is something like that, but my first experience with them was instantly discouraging. Daniel’s comment may not seem significant now, but that is when I got enlightened. It was what I myself, the other participants of #OMRS2020 and those who have the first contact with OpenMRS are short of. When you want to join the OpenMRS community having no experience, you’ll encounter a whole range of new tools. Jira, Travis, Bamboo, not to mention principles of creating and managing PRs. Nothing is more demotivating than intro tickets which are a complete mystery without knowing OpenMRS code well.
The problems shown by SonarLint were trivial, but they allowed me to take my time to learn about the tools used when developing OpenMRS. After reading Daniel’s comment, I understood that this is what is missing in order to attract, not to discourage new people who might get involved in creating and maintaining the OpenMRS code.
It’s brilliant, simple and much needed. Why has nobody added such tasks before?Daniel and many other experienced programmers surely use such tools. Why wasn’t anyone able to take care of it and create a friendly place for rookies in OpenMRS?
And here we find a reference to SonarQube and its use. As I mentioned earlier, I also wonder, from today’s perspective, why no one had come up with this before, as some of the elements that could have been improved had existed in the code for several years. Maybe nobody used this system, and the system itself was developed and left.
I think Daniel is too busy to deal with such little things. His role is more important, and it is our job to improve the code at such a low level.
And why did no one use this to create such an environment? It is hard for me to judge, but there must always be the first person to notice something that no one has noticed before. Maybe that is my role in developing OpenMRS?
True, however, it is frequently discussed via the community forum how to attract new people, how to keep them and increase the number of contributors, and yet, nothing is being done to change the situation to actually let new people know the code.
Maybe the problem is that experienced programmers think about it…? Maybe there was no one here without such experience. Someone who knows what he was short of?
I have a question about the tasks, I mean Jira tickets. You added a lot of new and easy tasks. Didn’t you prefer to keep them for yourself and easily meet the necessary conditions to be promoted to dev2?
But I already met these conditions when I came across SonarQube. Using SonarLint, I was no longer so keen on…, I could take a broader view. Making these tickets on and on wouldn’t have been of any benefit to me. They could be useful for others.
You have selflessly done something bigger for the community, something that is discussed so much here. Is or was there anything, apart from the support and availability of easy tasks, missing in the OpenMRS community? Considering also this technical part.
As I have already mentioned, my first intention was to type in the code without obligations. Only over time, it turned out that it was not that simple. I mean to come across it and not to get involved. OpenMRS documentation is more than huge, contains everything, but you can get lost in it easily. I think this can still be improved, availability of the documentation, especially for those who have their first experience with this topic, so that they are not overwhelmed with information. Too much information at the very beginning can also be harmful and demotivating because you prematurely become aware of how big this project is.
Are you saying that you have already got involved in the organization?
In the organization? Not really. In the community, I think. Although I’ve never thought about such a division.
Are you planning to stay longer? Or it’s rather not a place (OpenMRS community) for you in the long run?
I am currently starting to write my Master’s degree thesis, therefore I may have a problem with time for OpenMRS, but I’m not going to leave it completely. After all, there are tickets under my supervision. There are also a lot of modules that can be used to create tickets for people who want to start working with OpenMRS, and even if there is one person in ten who stays and uses my tickets longer, it will be a success. Moreover, I keep getting notifications. If someone asks me for help, they always get it.
That’s correct. Undoubtedly, such people will be grateful to you, and your experience, your advice and the fact that you yourself have gone through this will be of great help to others. Speaking about the tools you’ve mentioned, why do you think so few people use them and why should they do this after all? These are tools to improve the quality of the entire code making it clean, nice and well readable. Commercial companies pay a lot of attention to this subject, and here it seems to be neglected and ignored.
I don’t want to make judgments as to why these tools are underappreciated. I can only guess that beginners don’t know them and that the experienced programmers are focused on providing new functionalities, but maybe that’s what they should deal with? Anyway, it provides opportunity to young and inexperienced programmers to show their skills. Maybe the only predefined path is what is missing?
SonarQube is described in the documentation, like everything else, but as I have already mentioned, sometimes too much information can be harmful.
Do you think then that there should be a team, a group of people whose tasks would be to improve the code?
Of course, quality of the code is quite an important issue in a project like OpenMRS, because human health may depend on it, but what would then be left for us as beginners? 😉
For each repository (on the GitHub) there are also other tools such as Travis CI, CoverAlls or Codacy. Did you have a chance to use them?
No, I had no chance to use other tools; unfortunately, time is here crucial. Work, school. Very little time is left.
If you had the opportunity to do so, would you also like to deal with other tools and create tasks for “rookies” based on them?
I think there is plenty of scopes to do here. The code coverage is approximately 60% for openmrs-core, it may be lower for other modules, so there is room for improvement. And the tests do not have to be complicated, after all, they’re unit tests, you can come up with something simple here.
And this will also allow them to learn about the OpenMRS structure.
So, it’s certainly a safe and good option for newcomers who are just starting out, so that they do not get scared and yet benefit from their contribution.
Well-defined tickets won’t scare newcomers. A good description of “what?, “where?” and “how?” will prevent this. At least I think so. The idea is to let new people write something right away without the need to go through piles of documentation and the code for the whole project. There will still be time for that.
Did you choose openmrs-core as a starting point by chance or you had viewed each project before?
At first, I thought that openmrs-core was OpenMRS. It was only over time that I realized that it is just one of the elements. The most important, but one of many.
I have an idea. Do you think that adding a mandatory point to each of the tickets requiring to use the tools and obtain a certain result, such as code coverage above a certain percentage, would work and, over time, become a daily routine of everyone?
The idea isn’t a bad one, but it requires a lot of commitment from the person who’ll undertake this task. It’ll be difficult to create such a universal procedure because each person will face different problems when joining the project and everyone will have to be supported at each level.
In addition, maintaining such a project at every stage causes that the tickets will run out, so it will be necessary to make additional ones. And this will also take a lot of time.
In that case, is there a solution for the poor quality of the code, occurring mistakes and frequent technological debts resulting from not using such tools?
I think you overestimate my knowledge and skills. The obvious answer to this question is “to start using them”, but I don’t want to be seen here as someone who knows everything best. I think there are smarter people than me, who know better how to solve this problem. You should ask them.
Looking back, when did the prize stop playing the most important role and became a side issue? You said at the beginning that it was the prize that made you apply for our program.
It was exactly when I found out how valuable OpenMRS is to the community using it. I mean not just the dozen or so programmers, but thousands of doctors, nurses and patients. Entire hospitals in some countries are operating thanks to such initiatives. Sometimes it is even a pity that you can’t afford to make a greater contribution to this project.
Did you feel like you were doing more than just coding, that you were making an additional contribution to a great project changing the lives of many people around the world?
The “yes” answer will probably not be satisfactory, but it best reflects how things are.
Talking more privately, how important is it to you to help others? Was this also one of the reasons for joining the program or it was completely unimportant then?
Then? Three months ago? It was a programming project like any other. Some program, some database, Java, Spring and a chance to win the prize if you manage to add a few lines of code. It was only over time that I understood what OpenMRS really is, that it is not just a program, a bigger notepad or a calculator. That it is something more, something that is even hard to describe in words.
This will probably be my last question. Would you like to add anything, any advice or suggestion for the whole community or beginners? You are part of it and you also have an input into how it will look in the future.
First of all, I would like to thank you for your forbearance and help I received at the beginning of my adventure, not just Daniel, as many people give a helping hand when it’s needed. As far as advice or suggestions are concerned, I’d like them not to give up, to continuously work on the project, to fix and improve it as a community, my advice for beginners is not to be afraid of the huge amount of documentation; someone will surely show you the right place if you ask for it.