Do you think the biggest challenge is learning a new programming language? Experienced developers talk about the profession’s difficulties.
Communication
IT-developer:
No one warned that here you need to talk to people so much! The exchange of opinions, knowledge and just constant discussions turned out to be the basis of this profession. And the meetings take soooo much time! You explain to the customer what you have done, what remains to be done, how it will be implemented, where the customer is wrong, where there are design errors – never ending story.
And at the same time, you need to be very patient and remember that all people are different: some do not understand you at the first try while others like to explain the same thing ten times. I belong to the second group and suffer from it.
Chaos due to multiple languages and frameworks
There are many programming languages and frameworks that are used everywhere, like pills for all diseases. And the developer often has to deal with the fact that he must have good knowledge of too much that surrounds him. These are scripting languages on the front side: HTML / CSS, JS, including a set of modern frameworks like BackBone.JS, AngularJS, ReactJS. At the same time, C#, Java, Python languages and .Net Framework, JavaEE type specifications for the server side. Let’s add here the knowledge of databases and the language of data manipulation and standards of service interaction. This huge boom creates chaos, and developers often don’t grasp the intricacies of languages or technologies.
Huge load
Today in app development, product features are delivered quickly so as not to keep the user waiting. This generates a colossal burden on programmers: what took months to develop 10 years ago is now being implemented 2 or even 4 times faster. A specialist who does not know how to apply design patterns (prototyping, singleton, adapter, facade, decorator, MVC architectural pattern) will not be able to build a proper web-based application for a wide audience.
Don’t waste precious resources on unnecessary tasks
Consultant of a technical support:
Here is a story from the life of a developer. There was one request from a client: “Dear members of the project, we have a file that we want to open with the help of your program. We can assume what’s inside but do not know how to proceed with it. We consider useful the information from the file. Please evaluate the complexity of processing such files with your program.”
Business analysts say that the request cannot be fulfilled. The manager promises a bonus to whoever opens it. Googling the file headers every day brings a different result. Windows tools don’t help you identify the content. Sorters crash when trying to sort it. The format recognition tools say that there are at least 15 different files. When transmitted over the network, the corporate antivirus goes crazy. All mail systems swear at the file archive, but it is compressed 10 times easily.
Former developer writes:
public static void main(String[] s) throws Exception{
VTDGenHuge vgh = new VTDGenHuge();
if (vgh.parseFile("C://TEMP//file_big",true,VTDGenHuge.MEM_MAPPED)){
VTDNavHuge vn = vgh.getNav();
AutoPilotHuge aph = new AutoPilotHuge(vn);
aph.selectXPath("//company/@Name");
int i = 0;
while ((i=aph.evalXPath())!=-1){
System.out.println(" element name is "+vn.toString(i));
}
}
}
The developer finds her mail by the name of the company, writes a letter and finds out that it is a Word file with corporate reporting which for some reason was placed as a jpeg slideshow, and then copied several times into XAML.
That’s why the difficulty is not to download the file, disable the antivirus, or even come up with a use for the data. The most difficult thing is not to waste precious resources on unnecessary tasks. And if you do, spend the time wisely.
Mixed principles of modern programming languages
Head of Software Solutions Development Department
A prime example is the JavaScript programming language. The central core in terms of organizing building blocks is functions.
However, if you look at it carefully, it’s not that simple:
- function is an element of the paradigm of functional programming;
- function is a classic element of procedural programming;
- function is an object.
Such a symbiosis gives rise to short, chain and flexible implementations; the understanding of it sometimes does not come immediately. These are closures, callbacks, the use of anonymous functions (in C# it is the use of delegates in events, tasks, etc.)
Tests, names of the variables, communication with colleagues
You can learn a new language or framework. You open a book or course on YouTube and after a while you can write code – it’s not that difficult. Difficulties often arise with tests, variable names, and communication with colleagues.
Task evaluation
An important part of the job that many people neglect is task evaluation. If you calculate how long something that you have never done before, or prioritize tickets based on a description consisting of one or two sentences, as a result, you will have to spend a lot of time on problems that you haven’t foreseen but they “surfaced” at the end of the sprint.
The best option is to try to estimate a new task based on similar ones and predict how many tasks will fit in a sprint. Therefore, sometimes you have to neglect grooming, creating subtasks and evaluation. The difficulty lies not in whether we manage to do everything in a sprint, but in how wrong we are in our own estimation – by hours, days, months or years. And it’s a really complicated process.
Deadlines
Head of Software Development Department:
Very often managers come and say: “This truck should fly at a height of 10 meters above the ground, reaching a speed of 10 knots in ideal weather conditions. You have three days. We have already sold everything, signed contracts, received money and bonuses. Now it’s your entire fault.” As a rule, salespeople don’t care if it’s possible or not, how long it actually takes, that you have five deadlines in a week. The programmer, in their opinion, is omnipotent and has 1024 hours in a day. How to cope? You get down to business.
Problems with documentation of third-party libraries
I often came across the fact that I saw all the functions of the tool that I needed in its documentation, but in reality it turned out that they were only on paper. When you contact the manufacturer or the authors, you get in response: “Oops, thanks for the feedback. Your call is very important to us. Go in peace.” Selecting the right libraries takes a lot of time, and if we are talking about equipment, then the money is involved too. In the end, you have to conjure with what you have.
Finding a balance
The balance between the development and study of new technologies, between boring tasks of the same type and breakthrough features. Dealing with this is both difficult and simple at the same time. We need to build strategic goals for ourselves for the medium term, and then the balance will be found by itself.
Wealth of choice
The choice is really huge. You can go into backend development, into testing, into mobile development. There are dozens of technologies in each direction, and it can drive you mad. You only need to dive into it and try. And read specialized resources.
To re-do
Mobile products developer
For me, the most hated moment comes when the manager comes in with the super-important task of “redo it urgently.” How do I cope? I take pills. I’m kidding. Music in the iPhone and deduction of Sherlock Holmes: I divide tasks into iterations, monitor the synchronization of the design, and the logic of writing the program.
Mindanity
Frontend developer:
The hardest thing is to wake up in the morning and get to work.
What helps me? Smoothie machine. What motivates me? The understanding that I can be kicked out if I don’t do anything.