Personal experience and conclusions after changing professions from designer to programmer

What is this article about



In fact, the article is about how my way of thinking should have changed with the change of profession, understanding of the context and what points should be paid attention to, and how strongly the choice of “what should I teach” affects the subsequent years of my personal career development.







I must say right away that I will not and do not consider it meaningful to start, as in most articles, on how to choose a programming language. It makes no sense. No, you do not choose a programming language. In fact, you choose your future, no more, no less. Your future choice will be based on your application and platform.







A little to myself



I became a programmer in early 2016 at the age of 35, this is if you look at the history of activity in my GitHub profile and accepting the first serious job. Pretty decent age for a change of profession. Yes, this is not an unimportant moment - I left the design. This is actually a very radical change, and not only because at first you have been dealing with the profession of the humanities for many years, with pictures, design, composition, even usability in my case, and then suddenly you jump into the code, technology, compilation, base data and so on. This is essentially just the tip of the iceberg, visible from the outside. I will talk about deeper personal conclusions a bit further in the text.







How did this happen and why? There are two reasons - I did not manage the design this time, depression is two. To become a successful designer as much as I would like, I needed a WOW effect, and not just logical UX, concise composition, operating scenarios for using the product, and some product manager skills again. We needed cool, juicy pictures. For them, I didn’t have enough possession of the color composition, and either due to depression or for some other reason I couldn’t master it. And then ... first, watching the Ex Machina movie turned something over in me and I enrolled in a Machine Learning course from Andrew Ng. I really liked it, just wild, despite sleepless nights and red eyes in the morning.







Then I made the most trivial and simplest decision in my opinion - I made the inevitable choice for the volume and quality of knowledge of the modern IT industry and my capabilities that I had at that time. I decided to gradually switch from front-end to front-end programming of browser-based applications in JavaScript. And from here we can say the real path of trial and error, walking the rake and an innumerable series of amazing discoveries began.







Now I have come to the point where I can already orderly express my thoughts about this transition, what pits and rakes should be expected on the way. I hope that someone who faces the same choice as I did a few years ago will be useful. So go ahead!







About a rake and mistakes of the beginner



When I changed my profession, I didn’t know a few things and made some mistakes for which I had to pay with nerves, sleepless nights and money.

Firstly, as I think, there is a certain scale on which you can define a programmer and probably a person too. At one end, he is interested in everything, he wants to help the common cause, on the other, full concentration on one thing, he will dig one trench for years, decades, and he is ok with that (probably). Both there and there are advantages, disadvantages, and pitfalls that you need to know about. I myself belong to the first type, the “crazy Tiger,” so I can tell you more about him. But what exactly is important is to understand what type you belong to as early as possible.

If you like to dig one thing, then you are unlikely to have problems finding a job in the open labor market - narrow specialists get faster in-depth experience in their field at the same time, it’s easier for the employer to take you because he even knows that you ate a dog on one thing that is very important to him - for example, optimizing the animation of buttons in a browser on a site. But not so simple. When hiring, of course, you will be very happy, but difficulties may arise during the work, because colleagues will very likely expect involvement in the product as a whole and its entire technological stack. Willingness to help, including going beyond the scope of their direct responsibilities - to work without a specific technical task, to storm with a grocery store, speak with a becker in his language, etc. And here it will probably be up to one place. Most likely you will not be promoted and you yourself will not want it. As I understand it, those who sit on the edge of this scale change jobs once a year or two in order to index wages. Because this is basically the only way if you work in the office. The second way is freelance with access to more developed markets, although in the end, if you really need a lot of money, you still have to expand your arsenal of skills.







If you are more likely pleased to help colleagues, get ready. Once you have enough (for the first hire) to learn one thing, then with what you decide to enter the market for the first time, you will be wound from stack to stack from technology to technology. You can find yourself in the role of devopa, project manager, product designer (not the one who draws), architect and the devil knows who else. You will gain a very diverse experience and you will have something to tell. And if you get into a good versatile team with a great interesting product - then keep me seven. The trouble is that projects are ending, companies go bankrupt, bosses make a fool of themselves, and here you are without work, you have an open labor market and you don’t need him, he needs reliable narrow specialists. All doors will be closed. Well, because even if you go through all the technical interviews in one specialization, they will tell you that you polished the buttons only six months in the past few years, and they need a button polisher. And then it turns out that you need to go to the lead developer or higher, but a bummer - they usually don’t take it from the street. The only way I know about is to build a personal brand. It doesn’t matter if you work in an office or remotely under contracts - do something. References will not help you by the way. I know so far about two options - attend industry conferences, presenting chic in general, and write a personal blog. Anything, at least any nonsense, but to start doing it in the first year from the moment you were hired for the first time. It is important.







Here, yes, there is a contradiction with the labor market - they want to see one thing on hiring, but then they want to work in a team with another.







About technology and "what language should I choose?"



Here we have the gradation scale again. Not even a scale, multidimensional space. There are fashionable technologies that are often talked about at conferences, they write a lot in blogs and social networks. There are technologies that have no competitors, like JavaScript and its variations in web browsers. There are old dinosaurs on which a lot of things are written and this must be supported. And between these points there are different intersections in the form of specific cases.







When you choose, you will have to decide, and the sooner the better - to realize that your chosen stack limits you is not very nice. Decide what you want - reliability, money and a good knowledge base, or I don’t even know something else. If the first - it seems to me better to choose from those dinosaurs that are still alive and developing well. Since I myself am all about the web, I can say there are two reliable technologies. C # and Java. PHP developers may be outraged, but I suggest leaving this question to taste and color, so to speak ... The peculiarity is that projects can live and develop for a long time without additional difficulties only when they are written in mature languages ​​with sufficient tools to structure the code. This is the time. The second choice will be a specific framework. .Net or Spring or something else is possible. Here the criterion is this - it should be often found, used in large corporations and long-lived projects, and ideally, it should be convenient to work on. For example, Spring Boot now allows you to quickly prototype services, as well as write serious things with a very sophisticated architecture and a lot of functionality needed by the business, and it deploys it out of the box.







On the contrary, everything that is “fashionable” - as a rule, is very young, has a weak or naive infrastructure, but the community of fans with burning eyes is ready to sell you anything just out of kindness. The problem with all such new or not widely used technologies is that they do not have enough ready-made tools - you will most likely have to write a lot of the trivial functionality yourself, for example, authorization via social networks. This is really monstrous. A business rarely wants to pay money for bicycles. And then you still have to maintain this code. Examples? For Python, there is not a single full-fledged web framework (except for Django, with a few reservations) with which you can live and not go crazy working on a project for more than a year or two. Your problems will start right away, and quite trivial, such as the cyclic import of modules. I'm sorry that I bypassed PHP, they do a lot of things on it, but there is a point - I have not heard that one of the big companies used it, and not a heavily redone fork, like Facebook did.







Separate lines are a kind of monopoly. Swift for the Apple ecosystem, which itself creates its own application development frameworks. Google with Android (by the way, also Java / Kotlin). R language and development environment for data analysis. JavaScript as the only programming language running in browsers.







With Swift, everything seems to be clear. There are few programmers, they pay well (according to rumors), the language is developing rapidly, it is fashionable, but it differs from hype in that it is backward compatible with the ObjC dinosaur and everything that has been written on it for many years. Apple is also behind it, and it is developing platform frameworks very quickly. In addition, it can be compiled into other systems and seem to promise backward compatibility with C / C ++. If this happens, I don’t even know ... there will be something or very good, or something else. Because so much has already been written in C / C ++ that you can spin your head, this is a huge resource.







Javascript Language as a language. Many consider it an inferior language. He has a lot of problems, that's true. These are mainly birth injuries that are almost impossible to overcome in a technical sense. It can be used for server applications, but I would not recommend going this path. NodeJS is pure hype about which its creator himself directly said that fundamental mistakes were made during its creation. As for browser development, I would recommend taking what is most used now, this is React in conjunction with Redux. Just a lot of it. He is needed everywhere. You will find a job. Although you are just in the browser, even though you are full-stack, a minion from a ceramic grill will always be enough on filet.







As a result, your personal conclusions



If I were to reselect, I would take a bunch of Java / Spring + React. Of course Spring then is not spring now, and the same applies to React, but the criteria are the same.







What personally touches me in this stack. It’s relatively easy to “sell” to a React client, it is well known to everyone, because it is a hype which, at the same time, has overgrown with infrastructure and is firmly entrenched in the market, so it can be used in serious projects. At the same time, there are no fussing contradictions regarding the development and future of browser programming - it is component-oriented, the community is well aware of reactive programming, which is now quite relevant, and uses it. New versions of React do not break old code without warnings; application composition rules do not change dramatically. You can’t say about Angular that has already tarnished its reputation many times (I hope now everything is fine and no longer storms). Well, except for Vue, everything else is better not to touch at all, it seems to me.







Java, on the other hand, provides a huge field of ready-made solutions, and almost any “Wishlist” of your client or employer can be, if not easy, but at least not realized through a fence of crutches. I sincerely believe that with .Net and especially the development of the cross-platform .Net Core everything is just as fine, but I personally do not really like C #, well, it turned out.








All Articles