
9 things that I learned as a programmer, and which I would like to know when entering a magistracy
- Transfer
The article was translated for Habr by the editors of the site about payment systems with monitoring of Web-payment.ru exchangersThree years ago, I worked in a neuroscience laboratory in Barcelona, doing things like putting electrodes on people and teaching courses on cognitive systems. And today I design and write software for life.
As part of science, I wrote a lot about software, something like - if you want to understand the 40 gigabytes of data obtained by scanning the brain, you should roll up your sleeves and write a couple of sorting scripts. And I was always a really good programmer, although I did not realize this until I graduated from the academy and started working on one small and very ambitious startup, - it was then that I learned the whole truth about software developers and - more importantly - about what it means to be in this business. Software development is not just knowledge of languages, libraries, algorithms and design patterns. This is a special way of thinking.
And this way of thinking would help me a lot in my work if I had been known before I entered the magistracy.
The following notes are a kind of indication to me young - the things that I learned about, sometimes under very painful circumstances, over the past three years.
1. Our intelligence is too overrated
When you are young, you study, and study completely. You are like a big fish in a small pond. Or like a fish that is twice as large when you know how to express your thoughts quite eloquently. In fact, the ability to seem smart and to be a good conversationalist allows you to complete the entire course of study in high school and most special education institutions, without really studying at all (which, however, does not apply to physics - you still have to memorize formulas). In this case, you can congratulate yourself - you are lucky. And on the other hand - a loser, because while you didn’t hit a finger with your finger at school, passing certain things past your ears, others managed to learn something very important later on: they taught themselves to be diligent and persistent. Learned to work in a team. And also eight more things, which will be discussed later.
In our society, the concept of intelligence is given too much importance. When I tell people that I worked in a neurobiology laboratory, they usually react as follows: "Wow, you are probably very smart." Yes, not stupid - I note - but at the same time I know a lot of people who, being less intelligent than me, are much more successful neuroscientists.
Our intelligence is the key to many doors, but it is almost never connected with the direct execution of work. In this regard, it is much more important to be diligent, strict and responsible - and this applies not only to programming, but also to any other profession outside the soap bubble that we call higher education.
2. Give importance to everything you do.
Perhaps this “mantra” is also too “worn out”, however, this is a very important lesson for you, my young friend: no matter what you do, consider this as a most important phenomenon. You should never do work just to end it.Of course, everyone likes to read his name in publications, but it is much more important here what contribution you made to the solution of a particular issue and how many hypotheses you went through in the process of searching for this solution; it is important to correctly analyze the data and compile statistics, how important it is how many times you had to redo everything, because at some point you noticed a small mistake, because of which everything was covered with a copper basin. And if you are writing software, it is also important to be able to plan your work, find source codes, learn new paradigms and programming languages, edit your bugs, process and upgrade your own algorithms. And if you don’t enjoy it, and you do the work only because it needs to be completed in order to publish or release as a finished product, You will never become a specialist in your field. If you don’t have an aspiration for this, then you should probably think: maybe being a scientist or engineer, or something like that is just a waste of time for you?
A great sign that you respect your work is when even the so-called just4fun projects interest you: i.e. those projects which, it would seem, are not necessary to be completed, which at first glance do not contribute to the advancement of your main work. And you just like to take them apart. And interestingly, often among developers it is precisely such projects that give birth to many software products that are widely used in our daily lives and do not particularly gravitate towards the scientific community. One of my favorite quotes about this is the saying of Konrad Lorenz:
“A great morning exercise for any researcher: reject a couple of fictitious hypotheses before breakfast.”
And if in your understanding it sounds stupid, then perhaps you better give up the idea of being a research scientist.
3. Learn new tools
As a continuation of the previous paragraph: devote some time to the study of new tools and instruments. And not only to broaden your horizons, but also to find those tools that can help you in your work. Believe me, it always pays off with interest.
A great way to learn new tools involves just working with the above just4fun projects. Whenever you create something new, do it differently. Remember, with just4fun projects you will never lose: you don’t need to invest a lot in them, you learn something, and even if this knowledge turns out to be unclaimed, there will be nothing to worry about. No one is losing.
Useful tools that I would recommend to each student include:
- Git and Github . Git helps you manage your work and allows you to never worry about creating backups, plus, it comes with a ton of codes with which you do not have to reinvent the wheel every time. Oh yes, and again: please always share your codes with other people, colleagues, and colleagues. Let them look at them. Never use a code for analysis that no one else has read (I would never have believed that I would focus so much on this, but now I know for sure that 30% of the results in any scientific research are erroneous data that could have been easy to avoid by timely passing the codes to your friends).
- Illustrative applications: I personally prefer Inkscape , but the standard Adobe Illustrator or the relatively new Sketch are also good. Use them to post-process your graphs and diagrams - it's much easier than writing graphs in Matlab or Matplotlib.
- Learn how to make the most of your text and code editor. By the way, one of the best, in my opinion, editors is Sublime Text - to learn to work with it is much easier than with VIM or Emacs. Learn hotkeys - they will save you a lot of time.
- Learn to speak. Watch speeches at TED and especially learn how some speakers manage to gain the attention of the audience in the 15 minutes they have been given. Train in front of the mirror. Your body and voice are also means.
- Learning the basics of Python, R, HTML, and Javascript can take a very long time. If you are no longer an expert in programming, always try to learn new aspects and libraries. Be interested in computer vision, natural language processing and robotics, read as much information on the Internet as possible, make music, etc.
The solution to a particular problem always depends on the means at your disposal. Thus, the study of new tools allows you to look at a question from different angles.
If you study at an institute, I strongly advise you to set aside one of the days of the week to learn new tools. And when the time comes to prepare your candidate work, devote two days to it. You can save a lot of time, and people will be amazed at your effectiveness. If this is too much for you, and you think that you simply do not have time for this, consult with your curators - they will surely be able to tell you what you should pay attention to first of all.
4. Be an interested person, and let your agenda always be known to all.
It is logical to assume that your curator or manager always acts in the interests of your institution or company. This is their job.
However, no company or laboratory is ever something with a living consciousness, i.e. they lack internal interest. When we discuss the main goal of a company, we primarily mean the goals of individual stakeholders. The main question here is: who do your curators regard as stakeholders and how important are their interests.
And if your boss believes that he is the only person interested in the enterprise (who is trying to release the maximum number of finished products and looking for quick and effective ways), write out of such a team as quickly as possible, otherwise all the dogs will hang on you. And who else? Not for investors to hang them. And not for students. And the rest of humanity is unlikely to be here in business. The bottom line is: find out as soon as possible who is doing what. And if you do not have the opportunity to remain one of the interested parties, run. Otherwise, your favorite work will turn into a stupid occupation, pursuing the interests of others.
5. Keep your groundwork in the wings
This strategy has become very fashionable in the technical environment in recent years. It implies the fact that your work, in the end, must satisfy the end user. And this concerns not so much actions as mentality. You must think that all the fruits of your work are useless until they fall into the hands of the consumer. And this should be their end in itself.
As a student, I most often wrote programs that were supposed to shoot only once on a deliberately defined system. But when you write codes for software that will be used by half a million people, everything is perceived differently - and when I started writing codes professionally, I was very soon convinced of this.
There is no point in delaying work for years in order to produce the perfect product: it is much better to move in small but confident steps. Write in small parts, from which you can then assemble a single whole. Don't bother with how complex the final product should be. Engage in the basics of the basics, keep your groundwork in the wings.
6. Know the 80/20 rule
The 80/20 rule is that in order to achieve 80% of the desired effect, you need to spend only 20% of the time, and the remaining 80% of the time you will need for the competent completion of the remaining 20% of the work. This is like a journey from the outskirts to the city center: for 20% of the time you will cover 80% of the distance, after which you will get into a traffic jam, the passage of which you will spend much more time.
Why is it important to know this rule? Because people constantly underestimate the time they need to complete a project. Scientists and various engineers are especially prone to this. In general, this is just a matter of experience: the more you know, the easier it is for you to assume what might go wrong and what kind of obstacles that might be unforeseen at the time you start work.
If you don’t have such an experience, just multiply the time that you think you need by 5 and then you can consider the work as almost done after one fifth of the calculated time.
7. Do not sell your soul
I began my training as a candidate of science, guided by reasons that completely did not deserve attention. For one of them, I even came up with my own term - “academic service”. I firmly believed that if I did not follow the main training program, I would simply bury my talent in the ground. I felt responsible to the people who helped in the formation of my academic career - i.e. to professors and those who paid for my studies. It is not right. People who invest in the future can always blame you for the fact that their investments have not paid off. But these are their problems, not yours.
The same applies to any other activity. People will always invest their money in you, and, as a rule, do it, guided by their own interests. But this does not mean that you should sell your soul to them.
8. Leave your comfort zone
Here's how I look at the world:

Under normal circumstances, you learn very slowly. On the other hand, if you are concerned about something, you may not learn anything at all.
And here is your comfort zone. You know every little fish in this pond. You yourself belong to this pond. You know how to solve problems here. And nothing is new under the sun. So if you want to learn something new and grow in your eyes, you must first leave your comfort zone. This is where your training begins. All sorts of interesting things also begin with this, and you don’t have an ace hidden in your sleeve.
Of course, one cannot fail to note the point at which you are a weak link, i.e. your discomfort zone. You should stay away from her, because in it you are not able to do anything except to hide and wait for help from outside.
So the best position is somewhere in between. It is in the middle ground that you will be able to learn as much as possible and grow to the sky.
“Forget about safety.
Stay where you cannot be sure of anything for sure.
Destroy your reputation.
Become a byword. ” - Rumi
9. Tame your mind
Sit comfortably, close your eyes and just breathe. Focus on how the air you exhale through the nostrils is felt in the area above the upper lip. And nothing more. Just concentrate on that.
How much time will it take for your mind to switch to something else? Five minutes? I don’t think so. Maybe a minute? Already better. Twenty seconds - or less? Most likely so. Your mind is like a monkey clinging to a nearby branch. However, when it comes to training, other expressions should be used here. There is, for example, this: associative thinking. An excellent thing when you need to do something creative, and the worst enemy of concentration. But there is good news: you can learn to concentrate. To do this, there are a million special techniques that, in fact, are not very effective. You do not need massagers for elbows and special software. You need to tame your mind - once and for all.
However, what worked in my case may turn out to be completely inapplicable to you. For example, I achieved amazing results through meditation (which, by the way, give a lot of other useful “side effects”), but even here there are a huge number of different styles and techniques that are selected individually. So the only thing I can advise on this issue is to try to keep my mind in the best possible shape and take this extremely seriously. Do you think meditation is a waste of time? Then go ahead to the gym and work out with zeal: a few kilos burned are equated to burning a few pounds of abstract thoughts. Also develop your mental gaze. Strengthen your position now so that in the future your mind will do you good service without being distracted by extraneous things.
