I would go to the programmers, let me teach

    Today, many people are romanticizing the IT sphere, striving to get into it and stay in the cloud of fame, money and world fame. Of course, everything is not as it seems: development is a complex intellectual work that takes a lot of time. But if you still decide to change your profession and join the ranks of IT people, do not miss the way of training.

    We received another message from an employee asking for a free microphone. This time we will focus on programming (and a little administration) as an additional professional education. Our employee, who studies every year, will tell about the experience tested on her own skin and methods for obtaining sacred IT knowledge, only as the great Lenin bequeathed.



    Hello, Habr! I have been working in RegionSoft for 4 years, and during this time I managed not only to survive two major releases of our CRM system , but also to learn three times. Today I’ll talk about the pitfalls of corporate universities, universities, courses and try to classify the possible ways of training and retraining the future IT specialist. The text is more focused on those who want to change their profession, but I'm sure it will be useful for students.

    Universities, you are sick


    Our university course was lucky - we were the second year of the new specialization “Financial Management and Financial Mathematics”, and the university was forced to solve the personnel problem in a rather unusual way for Russian education. Yes, part of the financial disciplines were read to us by the same old professors who began their career paths with political economy and didn’t particularly turn off it. But in everything that concerned the securities market, technical analysis, stock exchange business, specialized mathematics, they were complete ignoramuses. Therefore, three teachers suddenly differed from the classical school - they were a practicing programmer, professional trader and trainer, who trained the first players of the current Moscow Exchange (then the MICEX). What distinguished them:

    • Linking theory and practice at all stages - we did not have any clean lectures or seminars, all the information came to us with real examples, without distilled tasks.
    • In addition to basic information, they analyzed atypical stories from practice - it was immediately clear that in the future everything would be a little different than in textbooks (not at all).
    • They were not mistaken. In the sense that there were no such stories when, after long formulas and decisions, half of the board was erased. This is because they solved practical examples with us, for which they were used to receiving money and in which they were responsible for other people's investments.
    • They showed how higher mathematics is applied in practice - and we no longer had the thought "well, where will I need this terver". By the way, none of us went into the exchange business, but there were different reasons for this.

    When I began to teach after the fifth year, I took over their experience, but, alas, it fell on me to keep statistics and institute grandmothers from the department quickly cut off my newfangled plans. However, a year later I forever left the sphere of education in business, dragging after myself only graduate school studies. What did not regret for a second.

    What is bad in modern university education?

    • Deprecated logistical base and outdated curricula - agree, it is strange to study Windows Server 2003 or Pascal in 2017.
    • Theoretical teachers, some of whom simply took advanced training courses and, for example, from a mathematician turned into a teacher on algorithms and data structures.
    • Lack of practice - you must admit that the formal month for which students visit the practice base twice is absolutely not what developers or engineers need. At the same time, a university can easily provide a primary and fairly deep experience, pushing students to internal projects or grants.

    However, this does not mean that you need to be inspired by the example of famous IT specialists and ignore the university. The first basic higher education should be, all the more so since new programs, directions and specialties are now opening in many universities.

    Why is it important:

    • university teaches to correctly formulate and express their thoughts
    • the university gives an invaluable skill - the ability to use literature and sources, and not just google
    • the university has a huge scientific base and a good library - and sitting in the reading room is by no means a retrograde
    • University develops thinking and generalization skills
    • the university provides the basis on which to continue development and training
    • and whatever one may say, a university is a state diploma. sample, which, contrary to many judgments, employers continue to wait. Well, if in the career plan there is something like Rosatom, Gazprom, etc., then a diploma is simply necessary. Not to mention science.

    By the way, large companies, in collaboration with universities, open many programs, hold hackathons, meetings and conferences for students. Free, but not disinterestedly - they seek out the best from the student bench.

    Corporate institute as not ideal, but the best form of training


    And business is other realities, the needs of the employer and other training schemes. When escorting me outside the university, my first boss, vice-rector for science, said: “Every year you have to spend one salary on studying - whether it is courses, education, books - it does not matter. The learning process itself streamlines thinking. ” The first year of working in business, I completely forgot about these words - my whole life was already like training (or rather, a hybrid of army hazing with a manula trainer). At the end of the second year, it dawned that working in IT (a commercial service) and not understanding the insides of IT is fraught with errors and idiotic situations, so it was decided - I’m studying.

    Three options were considered:

    1. magistracy mehmat - was rejected due to the fact that in the curriculum there was a lot of unnecessary things, and time would have taken three years. Well and expensive, of course;
    2. additional education at the university was rejected due to an outdated program (how do you like VBA or Access office programming as a DBMS being studied?) and a studied list of theoretical teachers;
    3. training at the corporate institute of the largest developer company in the city. The curriculum was relevant, the stack was interesting, the length was a year (in fact, almost one and a half), the teachers were exclusively practitioners. The bonus was 100 hours of English - at that time I did not know him at all, my first foreign language was French. The course was called Software Development.

    Studying at a corporate institute was fundamentally different from university, but, as time has shown, was not ideal. Here it is worth stopping and sorting out in more detail.

    First and foremost: a corporate university (even if it is the basic department of a university, its own faculty, etc.) is always the interest of the company.In fact, she prepares staff for herself, and you need to be prepared for the fact that part of corporate standards will be transferred to you. And if for students and young professionals this is a chance to get both practice and work, then this profile can interfere with adult specialists. For example, we have C, C ++ and Java prevailed over all subjects, but the same Python almost passed by - we managed to write a TV program on it, a tournament table of matches and a calendar with sending reminders to e-mail. Again, from the point of view of operating systems, they gave us only UNIX - however, it is very cool. But more about that below.

    So cons:

    • corporate interest and corporate stack
    • core tasks in practice

    Pros:

    • almost guaranteed opportunity to get a job (everyone who survived was invited for an interview, two changed jobs)
    • getting to the first front of those who are considered for vacancies in the future - letters with vacancies according to the profile of training periodically come to the mail.

    The groups are not uniformly formed - apparently, the leadership of a corporate university is counting on the consciousness of students. In general, we had 16 people - 5 girls, 11 guys, all different: from zero level like me to a high level of professional programmers (there was a S-shnik and a really powerful team lead 1C-sheep). Seven finished and defended, two girls. In this case, before admission, testing and interviews are conducted to determine the level of the English language and the distribution into groups. But an interview on the level of knowledge of technology - no.

    As a result, those who already had development experience confidently delved into and outstripped those who could not digest thoughts such as “pointer to pointer”, “garbage collector”, “inherited properties and methods of the BaseClass class” the first time. The problem was that we were immediately immersed in the programming language - is it a joke, but the data structures and algorithms happened a few weeks later.

    And now about UNIX. Both the strongest guys were able to give lectures and practice, who could answer any question, no matter how crooked it was formulated. In practical classes, the laggards were not scored, and the whole group reached out to the one who got confused. For example, regular girls wrote for a designer girl, analyzing each element with it, or searched for forty minutes why I didn’t get the C-code in gcc (it turned out that the semicolon was missing in the header - classic). As a result, everyone who lived up to him knew and passed UNIX, and six months later I was interviewed for one or two years as a VoIP testing engineer with a bunch of questions on bash commands.


    So cons:

    • teachers sometimes ignore lagging students
    • not always the course is logical
    • the weak adapt quickly and begin to write off and copy from the strong, becoming even weaker.

    Pros:

    • the most ridiculous and at the same time difficult questions
    • the strong, explaining the weak, receive additional development
    • there is an incentive to rummage in the literature (though not at all).

    And now about the most important thing - about teaching programming languages ​​and related IT infrastructure. Tasks are remote from practice. We simulated the flight of a bomb in C, on it we counted polynomials, programmed the sieve of Eratosthenes and worked with Fibonacci rows. In C ++, we wrote and developed a student card up to the use of trees. In these tasks, issues such as security, networking, design, etc. were missed. Development in practice looks, of course, completely different. And perhaps the course would be even more interesting if out of our surviving remnants the groups had put together a real department - senior, juniors, testers, a project manager. Then maybe more people would have reached the end.

    The development structure was not explained - if we, beginners, knew that in real life the programmer does not write the entire program, but works on his part of the project, we would psychologically perceive the tasks easier.

    For some students, the tasks turned out to be overwhelming from the point of view of understanding the tasks themselves - in order to program the Eratosthenes sieve or factorial, you need to understand what it is. The same story with the bomb - it’s one thing the training partner and I solved, both winners of physical competitions, the other is a girl who was sent to study from the company and who did not even remember what free fall acceleration was. Still, in such cases, it is more important to understand the structure of the code and algorithms than to take into account the speed of the fighter, wind and air resistance.

    Bugs are always there - it’s worth starting the code.

    Teachers demonstrate the code, write it in real time at a lecture, everyone understands everything, but they can’t write it themselves. It was a very good find to give code snippets so that we could understand and answer what he was doing. Our wonderful C / C ++ teacher called it “think like a compiler”. And everyone liked it, it was lively and sometimes provocatively, although it did not always work out.

    But what was really unpleasant was the requirement to write code on exams and tests (yes, they were!) ... on a piece of paper. This caused stupor, trepidation and blocked brains. That is, you’re used to having a compiler, that it’s your assistant, that there is a development environment, code highlighting, and here - bam, and you already write this on a piece of paper:

    #include<iostream>intmain(){
    int i, fact=1, n;
    cin>>n;
    for (i=1; i<=n; i++)
      {
      fact=fact*i;
      }
      cout << fact;
      return0;
    }

    This is at best. With inheritance in C ++ was much more fun. However, there is a second point of view about the leaflet and the code - during interviews one is often asked to write a code or command with a pen on paper, and the specialist should be prepared for this. But is it right to ask to solve a problem using a programming language outside a PC? This is a topic for a separate discussion.

    By the way, about OOP - apparently, to explain it, you need to understand it simply without a hitch. Honestly, they didn’t explain it to us on our fingers, the most acceptable definition was “everything is an object” (similarly, on UNIX we heard about “everything is a file”). It’s hard to explain complicated things, therefore, teachers should formulate brief and succinct explanations beforehand so that students remember this “squeeze” and then increase their understanding of the subject. In short, the majority did not work with OOP.

    OOP was seen that way.

    Some teachers were, as they say, “over qualified”. These are smart and experienced team leaders, for whom everything is transparent and obvious, therefore they provide deep and high-quality material without the basics - that is, in fact nothing, since the listeners did not join the database. However, it was they who broadcast practical values, talked about the advanced features of the IDE (we had Visual Studio and Eclipse), and opened for those who do not know Habr, Schildt and Straustrup books. By the way, which is typical, for almost a year and a half of training, not a single teacher uttered the words “github” and “opensource”. And this was in many ways fatal - so much so that even our solutions and projects almost none of us survived.

    At the end of the course, there was a special form of perversion called Project Management. We were happy to think that before the diploma (yes, there was a real project with protection in English) we were unloaded. But instead, the full power of UML diagrams fell upon us. No one got the top three, one of the girls reached almost the end, but did not pass the exams precisely because of this subject. But on the other hand, it was with this unpleasant occupation that an understanding of the integrity and coherence of a software project came. So all is not in vain.

    There will be no minuses and pluses - there will be a list of what I would like to receive at such narrowly specialized courses.

    • The concepts of repository, project structure, separation of tasks of programmers on a project (junior, middle, senior) must be introduced.
    • It is important to show the role of books, specialized sites and open source in training - only three of us bought textbooks, only one had a live pumped-up account on Habré and Toaster. And of course, it is necessary to talk about the existence of courses MIT, CS50 in Russian, available lecture notes of technical universities. Lotions like codecademy will also not be superfluous in programming practice - the teacher is simply obliged to know his arsenal and broadcast it to students.
    • At lectures, each listener should have a PC turned on - this is a golden, even platinum, rule. It’s one thing to look at the magic on the projector, it’s another thing to repeat it in front of you and pick your code. Yes, it will take more time, but it is more effective. Now, again, I voluntarily study in the same place on the “Windows Server Administration” stream ( RegionSoft CRM- the product is mostly Windows, and you need to know the infrastructural environment of the project) and this is very cool - when we execute each action, each command on a virtual machine, and often in several versions - for example, we configure the system via the GUI, command line tools and scripts / Power Shell cmdlets). Firstly, all types of human memory are connected, and secondly, there is an additional discussion of the jambs and successes of each other.

    By the way, I will be distracted and express my opinion about online courses. Somehow foolishly went through a rather long free course of one very annoying well-known school of programming in C # and the basics of web development. At first, this format seems ideal - you can choose the time, stop the video, repeat the actions in the IDE, discuss in the comments. But the first enthusiasm gives way to reality: an online course can only be an addition to your own classes and offline work in a group with a teacher. By itself, it makes it impossible to understand deeply. Maybe I lacked perseverance.

    How to log in to IT


    The first way - complete self-education


    With the seeming absurdity, an absolutely possible way. The main thing is proper thinking, perseverance and a great desire. Self-education should not be chaotic, it is worth choosing a stack and starting to work in a comfortable mode: for example, starting with an hour or two a day.

    A single learning algorithm does not exist, but the chain of actions may be as follows:

    1. Decide why you need programming or administration - for brain development, your project, job change, emigration, in order to reach a new level in current activities. Based on this, you need to set the timing and intervals of training.
    2. Choose where to start. Here, all the tools are good, but paradoxically, it’s best to start with applications like codecademy or the book Python for Dummies. This will not spoil your style (it is not there yet), but it will immerse you in the basic language in an accessible language and let you try the code "on your fingers".
    3. To expand the range of readable literature, start working in the IDE.
    4. Stop being afraid of 127 errors in the compiler, become more attentive to the syntax.
    5. Start working with your or open source project. Few people reach this stage. But if you get it, be sure - everything will turn out.

    A great advantage of this method is your own motivation, your own attitudes. While you are not working with a code for money, this is just your hobby - enjoy it. Even if you do not change work and do not become a programmer, you will start looking differently at development and at business processes, the logic will change. There is one minus - the risk of leaving everything in the middle or at the very beginning due to lack of motivation, time and interest.

    The first modified method - self-education + mentor in the company or internship


    It differs from the first method in that someone in the company is interested in your development and is ready to allocate resources or even your time to learn the secrets of mastery. The advantage of this method is in quality, practical orientation and speed of training. And people tend to learn something new faster if it is their job and they pay money for it. Still, the right motivation is a great thing.

    Separately, it should be said about internships and training immediately at the beginning of work in the company. It is always a good experience and a good way to adapt staff on the one hand and a source of knowledge on the other. Work with such companies should always be used to the fullest - even if you are not going to linger for a long time (the opinion of the author here does not coincide with the position of the company ).

    The second method is higher education (second or additional)


    Yes, you can take and enter a magistracy or plow a few more years in the evening specialty. This is an interesting process, mastering fundamental knowledge and zero practice. It all boils down to term papers and a separate control with small tasks. Advantages - a state-issued diploma (useful if you are planning to pursue a career in state corporations or large companies) access to the university library, the relative cheapness of training and diversity in time. Cons - an outdated curriculum, formal approach, extra items. By the way, with teachers lucky on the principle of 50/50, programs of additional education and master's programs have recently begun to invite young teachers-practitioners.

    Method Three - Corporate University


    A tricky way, because you can finish training and at the same time change jobs. In general, frankly, along with internships, this is one way to get around hundreds of resumes flowing into a large company and take your place. But for this you need to show either your skills, abilities and experience, or the desire and ability to learn. Pluses - practically applicable knowledge, current program, convenient class time, dialogue mode with the teacher. Cons - lack of a diploma (certificate only), diverse groups, sometimes not the most logical curriculum, high price and high load on time.

    On the most important thing - there is nothing to do without


    In any case, there is no magic lecture or super-chip that will make you a specialist. And no one will drive knowledge into your head. Besides the training itself, there are things without which you will never become a programmer.

    • Without continuous work with the code. You should write it, disassemble it, look for optimization ways, ask critics in expert communities and be able to listen to it (although they will tell you about “get out of the profession”, and about “hands from the w…”, and about “govnokod.” This is absolutely normal way.
    • Without knowledge of the basics: positional number systems, PC devices, knowledge of algorithms, working with variables, Boolean algebra, typing, etc. Most of those who want to join the developers, for some reason, consider this knowledge as something unnecessary and immediately plunge into ready-made code fragments, redoing them and cooking up their project. This is wrong - sooner or later in the project you will encounter precisely these problems.
    • No books. Not a single google, Toaster, Stack overflow and tube-forum of SQL-schiki can replace books in terms of depth and basics. Of course, ideally, these should be the originals of books by foreign authors, since today Amazon has a terrific assortment - from classic C to neural networks and NLP (which is natural language processing). But translated publications are more and more pleasing. Do not be afraid to spoil the book - read it with a pencil, pen and anything. And yes, if the code is given in the book, then it is not enough to look at it - it is better to reproduce it on a PC, compile, disassemble and delve into it. From simply reading the code, the benefits are many times less.
    • No questions asked about yourself, teacher, Google, community, mentor. The ideal scheme looks like this: listen to a lecture, write basic things, immediately note that it is worth exploring a little deeper or finding out for yourself. The next day, take apart the notes, again outline the most important. Then you practice writing code or, for example, administering.
    • Without exploring the companion environment and IT infrastructure. Yes, you can write a small site and even post on it, for example, a beautiful gallery of works, but the ceiling will come quickly if you have not bothered to study the issues of load, data security, forms on the site, etc. Therefore, it is worthwhile to study the necessary technology comprehensively, capturing the rest.

    This is the most accurate picture about learning programming.

    • No refactoring. With all your efforts, you will never create the perfect code the first time. And do not do the tenth, even experienced developers do not always get it quickly. But working with the code, thinking over optimization options, you become a professional who is able not only to code, but to make the software work and quality. Do not be afraid of code reviews.
    • No design. If you sit down to write code, but don’t know what you are writing and how it should work, then you are just training in remembering the language syntax. Try to draw a diagram of the future application, establish which components will interact in what way, write down the features and features. So it will be easier for you to assemble the project and make it work in the end.
    • Without knowing the design of your IDE (development environment). All modern environments are crammed with a bunch of features like automatic code generation, backlighting, controls, etc. Be sure to understand the possibilities, read the documentation, pay attention to how the code is entered, how the project is assembled, how the compiler and debugger work.
    • Without understanding what libraries are and how they work. During training, teachers sometimes troll us - for example, once we prescribed functions of arithmetic operations and factorial for a long time, and then they showed us math.h. For educational purposes - a useful, fun and instructive lesson. For the purpose of work - a waste of time, effort and breeding crutches. Much has been invented before us - just take it, connect it and learn how to use it.
    • And without testing, DevOps, documentation, etc. But this is an advanced level - as a rule, they are already doing this at work.
    • Without English. But you know this without me. In English, materials are available that can give a powerful impetus to the development of a professional. Their translation often looks dull.

    But in general, the most difficult thing is not even to start. The most difficult thing is to continue, if it doesn’t work, not to throw it away in despair. At a minimum, training will come in handy for you - sometimes at a time when you do not even imagine. So do not stop for a minute.



    If you love IT and you are interested in getting a job at RegonSoft, we will be happy to consider your candidacy, regardless of the availability of vacancies.

    We are interested in specialists in the development of IT solutions and technical support with a wide stack of technologies, as well as experienced salespeople. Call +7 (499) 709-81-41 (Moscow), +7 (831) 233-13-03 (N. Novgorod) or send your resume to personal@regionsoft.ru

    Also popular now: