Learn programming languages in the process: software developer about complex projects
From the translator: this post is a translation of the original article by David Harron, an experienced software developer. He often writes articles on his work, including Node.js, which David has a special relationship with.
As software developers, we all know how fast technologies are changing. We are trying to keep up with them, constantly learning new ways of working, tools, languages and frameworks. We constantly have to compare their strengths and weaknesses, deciding what needs to be mastered and what should be left behind. This is not an easy task, you can easily get lost in a sea of options.
Skillbox recommends: Educational online course "Profession Web Developer . "
We remind: for all readers of "Habr" - a discount of 10,000 rubles when writing to any Skillbox course on the promotional code "Habr".
However, in order to remain professional, you need to be aware of current technologies. Sometimes the function X or Y has to be added to the application simply because it requires the spirit of the times.
Developers are helped to keep books, video tutorials, courses afloat. And it is very simple - to spend all your time on training, without having begun work on the project.
Developer Tony Mastrorio once wrote that he was afraid to start one of his projects, because he lacked knowledge to implement. Therefore, instead of working, he began to take a course by course, hoping that each subsequent material would give him the necessary knowledge. This continued until Tony chose a different path, which we will now discuss.
A programming language should be studied so well to perform certain tasks with it.
A few months ago, I started learning Vue.js. He started with the Udemy course, looked through just enough to start work on the project. If I need more information, I can always return to the study of this topic. In the meantime, I make my desktop application without deep knowledge of Vue.js - I study only what is needed to fill the gaps in knowledge on the desired topic.
Let me give you one more example - my experience of studying Node.js.
In the end, I realized: instead of being afraid, you just need to create a good and clear work plan. After that, writing a book turns into the creation of a series of essays. Well, writing an essay, tutorials or posts is already a simpler task. The only thing, each of them must correspond to the general spirit of the book and plan. Each previous essay (chapter) should smoothly go into the next. As soon as I understood all this, the work on the book went much faster.
Obviously, many of us are afraid to perform complex tasks and hide our head in the sand instead of acting. In order to move on, climb the career ladder and develop, we need will. In fact, there is nothing difficult even in the most voluminous tasks. For example, when a person is faced with the procedure of buying a house, the process seems too complicated, realtors are seen as scammers, you think that nothing will work out. But in fact, everything is easier than it seems.
Earlier, I took up several new things at once. So, for example, wanting to contribute to the popularization of electric vehicles, I began to write articles on this topic. I have never worked in journalism and did not know how everything works. But in the end I managed to write several thousand news articles. People say that I have talent, and I really like to feel like a person who tells the truth.
Let's talk about some of the main principles before I talk about the project, which is now engaged.
- Clear target. To focus on achieving it, you need to keep the goal in mind all the time. You should also articulate it clearly.
- Break the project into elements. I have already talked about this before. It is best to divide the big project, the goal into several separate tasks.
- Think about what elements, subtasks you can perform now, and which - no.
- Make a list of subtasks by adding supporting data that may be needed. It’s best to record everything in a weekly or task scheduler. By the way, Trello is a great tool for this.
- Use Agile.
- Be positive. Goals can be achieved, even if at first it looks impossible.
Above, I talked about my project. This software, and the task is quite complicated. I'm going to create a desktop application that allows users to create e-books in EPUB3 format. The program will use files in various formats located in a specific directory and format them according to the EPUB 3.0.1 standard. The development will be based on Electron, I plan to release the release version in Apple and Microsoft app stores. I'm going to build the UI based on Vue.js using the Buefy component library.
This is a rather risky project, because I don’t know how to carry out some of its parts. For example, while selling Electron in app stores is possible, I still don’t understand how to do it. And this is not the only difficult task.
However, I hope to complete all parts of my project.
Achieving each goal is a theoretically possible event. I know that some tasks have already been solved by other people, so that I can do the same. And if I don’t know something now, I’ll try to find out soon.
I have a trello to track the remaining tasks. I try to keep the plan up-to-date, and also study the things that I need for work.
I don't have to be an expert in all this. There are clear tasks in the project for which I need certain data, knowledge elements.
Some things are already known to me now, for example, the specification of the standard EPUB3. About four years ago, I woke up with the understanding that EPUB is just a ZIP archive of HTML files. For three days I studied the question and realized that EPUB3 is a set of XHTML files, this standard uses HTML5 and CSS elements, and ZIP uses the packaging format. A little later, I created a tool on Node.js, which allowed me to compile EPUB documents. A slightly more complex version of this document will be the core of my new application.
Recently, I ran into one rather difficult problem. The fact is that my application comes down to creating a graphical configuration interface for XML files with metadata. An OPF (Open Package Format) file contains several data elements, such as dc: identifier or dc: title tags, which can be viewed as a table. The book may have several different identifiers, including ISBN, DOI, short and long headings, different names in different languages, and so on.
The application should have a method that allows the user to add, edit, or delete items from different data tables. But how?
From the very beginning I began to postpone this task. I wrote everything except the part where I need to find a solution for working with tables.
But it is impossible to postpone the task indefinitely - and I started it. In the end, I managed to achieve the desired using the components of Vue.js for working with tables. It took me a couple of days to sort things out. It turned out this:
Here we see a couple of tables for processing dc: creator and dc: contributor lists. Each line contains two buttons for editing and deleting it. A button marked with a plus sign adds a new row, and the table supports pagination if there are too many rows.
Perhaps this is not the most user-friendly interface, but everything works, and the project has moved from the “impossible” stage to the “implemented” one.
And after all, I have postponed so many times the solution to this problem, and it turned out to be on the surface - you just need to use the Vue.js / Buefy component. And there are a lot of similar tasks - they are found both at home and at work.
Now my next “impossible” task is to figure out how to place Electron-applications in directories. I have seen that other developers post them somehow, so this is quite possible. The main thing - to understand.
Unknown may be a concern. The task, which is not clear how to implement, is a completely new territory, not yet mastered, here everything scares us. But the eyes are afraid, and the hands do. This is the correct principle, which is applicable also in coding.
At the very beginning, we talked about the rapid changes in the software industry. We are constantly trying to keep up, not to fall behind. To do this, we master new “territories” for ourselves - we face the problem, not knowing how to do the task using the new toolkit. And even if we solved this problem with the previous set of tools, now for some reason it may not be available. For example, jQuery becomes obsolete, and we have to relearn.
Ultimately, we are all heroes. We want to achieve a certain goal, we reach a place that seems insurmountable, but still solve the problem. And the solution, the process of its search, gives us not only the working code (we are talking about programming, right?), But also self-confidence and new experience.