📜 ⬆️ ⬇️

Essay on "How to become a programmer?"

Instead of intro

After opening a public access to the Q & A section of Habrahabr, a lot of questions appeared on the topic "How to become a programmer?". Undoubtedly, it is wonderful that so many people want to choose for themselves this interesting profession. Many are interested in a specific direction (web, game development) or language (PHP, Java, C #, JavaScript, Ruby). Developing a universal instruction is quite difficult, if not impossible. I would like to share with you my thoughts on this issue today.

The beginning of time

Before we start learning programming we will create a comfortable working environment.

The choice of operating system depends largely on the intended primary language. If you are impressed by C, C ++, C # and there is no firm desire to write cross-platform software , then the choice is obvious - Windows. For those who are looking at PHP, Ruby, Python, JavaScript, a simple modern Linux distribution, such as Ubuntu (Xubuntu is my choice) is more suitable. The reason is simple - these are the languages ​​of modern web development, and most of the web servers are running Linux. Using Linux on a work computer will help deal with a large number of potential server configuration issues: working with the console and SSH, the system of rights for files and directories, the installation of a web server and a database server, etc.

The main working tool of the programmer is IDE . For the C language family, the best option would be MS Visual Studio . For Java, perhaps you should pay attention to Eclipse . Various IDEs issued by JetBrains have long been popular with fans of Java, PHP, Python, Ruby around the world.
')
There are often situations when the IDE's capabilities are excessive for the current task. In this case it is worth getting a convenient code editor. My favorite at the moment is Sublime Text . For Windows, it is worth mentioning Notepad ++ , which often rescued me if necessary, urgently fix a couple of lines on a remote server.

The first steps

A language for learning programming is a multifaceted topic. It should be understood that the main task at this stage is not to study the syntax of this or that PL , but to deal with data structures and basic algorithms. In this regard, I would recommend starting with a statically typed high-level language, such as Java or C #. Dealing with the implementation of the bubble sorting algorithm , writing a program for determining a leap year or calculating factorial in such languages ​​will be no more difficult than in, say, Python, but will give a much better idea of ​​the essence of programming as such.

A good list of algorithms that you can start with can be found on the website algolist.manual.ru . For those who want a special challenge, there you will also find a large selection of olympiad tasks.

Do not forget about the books: “Algorithms and data structures” by Niklaus Wirth and “The Art of Programming” by Donald Knuth have long been classics and must be on the shelf of all programmers.

Second stage

After studying the basic algorithms, you can begin to study the syntax and design features of the preferred language. Any learning is always faster on real-life tasks, but where to get them when we have no experience? Well, You-Know-Who started with a design portfolio invented, and we start with invented tasks. Why not write a “Culinary Book” for mother and “Hockey standings” for father? Or maybe Uncle Grisha's neighbor needs a website for a modest construction company?

For a web programmer, these and similar tasks are greatly simplified by the presence of various CMS , most of which have a developed extension infrastructure. Development of extensions for the finished system is much easier than implementing the required functionality from scratch. Popular (and others are not interesting to us yet) systems have good documentation, most often with examples of ready-made code, and a large community. Studying examples of extensions will not only provide valuable ideas for your projects, but also implant certain development standards: code design style, frequently used constructions, basic design patterns . Speaking of specific names, it is worth remembering about Joomla! , Wordpress , Drupal for PHP and Radiant , Refinery for Ruby. It is with the development of various extensions for Joomla! I also began, by the way, I have absolutely no regrets. From PHP CMS "big three" only Joomla! at that time there was a MVC structure (albeit far from perfect), detailed documentation and a friendly Russian-speaking community .

Unfortunately, I cannot judge with confidence about other areas of software development, but the general approach, I think, will remain the same. Those interested in game development may look towards popular engines: Unity , OGRE or Cocos2d . Future desktop developers will be the hardest, but there is something to do here. For example, develop a plugin for a popular program, such as Total Commander or AIMP .

From the literature one should acquire, first of all, books on structuring and features of program implementation in the chosen language. PHP programmers can read: “PHP and MySQL. Bible programmer " Tim Converse and " PHP 5 " Dmitry Koterov. Recommendations for other languages, I hope, will appear in the comments.

Third attack

Having created several of our projects, stepping on hundreds of algorithmic rakes and successfully breaking through the barricades of documentation, it is time to look for the first job. The main criterion in the selection process will, of course, be not wages, but the opportunity to learn and develop professionally.

A good team is a determining factor. The “older” comrades will help you quickly fill in the gaps in knowledge, teach you how to correctly apply design patterns, and share your experience in solving unobvious problems. It is also important to gain experience in commercial development: learn to follow the agreements accepted in the teams; Learn about bug tracking systems such as Mantis or Jira Get used to using version control systems like Git and Mercurial .

Expanding the bookshelf: “Object-oriented design techniques. Design patterns ” , “ Refactoring. Improving existing code " , " Clean code: creating, analyzing and refactoring " , " Pragmatic programmer. The journey from the apprentice to the master is definitely worth the time and money spent. The techniques described in these books are universal for all PLs and will be useful to every programmer.

Fourth face

Having a fairly deep understanding of the software development process, you can move on to "serious" frameworks . They will help get rid of the limitations of CMS (or engines) and open up new opportunities for the implementation of their own ideas. Symfony 2 , my beloved Zend for PHP, cult RoR (Ruby) and Django (Python), multi-faceted Spring (Java), unusual Express for server-side JavaScript and Angular.JS for client-side lovers come to mind for web development . The world of desktop frameworks is not as extensive, but is interesting in its own way: .NET Framework , Qt , GTK + , wxWidgets .

It’s time to add your own literature to your library. For me, these were the “Domain-specific design (DDD). Structuring Complex Software Systems ”by Eric Evans and “ Corporate Application Templates ”by Martin Fowler.

An excellent source of additional information will be blogs and Twitter active members of the selected technology community. Blogs Fabien Potencier , Benjamin Eberlei , William Durand settled long ago in my bookmarks.

At this stage, I still stopped. Catch up!

Conclusion

There are so many things behind the scenes: freelancing and exchanges selling their own scripts, online courses and themed conferences. But it will be another story.

Naturally, the proposed path is far from the only one, but one of the possible. Looking back, I remember him with a smile. A pile of written sheets of notebook with the algorithm for generating dungeons for the "killer" ADOM. Dozens of cups of coffee drunk in the evenings, in an attempt to understand the features of the Win API, and many hours of disputes with the designer about the structure of the next site. And you know what I think? I am a programmer, and be quite good at it!

Source: https://habr.com/ru/post/202988/


All Articles