Those wings... I want them too.
АнглийскийIn the first approximation, programming is essentially based on algorithms. A program is a declaration of the steps that lead to desired result through execution of commands, conditions, loops, subprograms etc. However, modern software development is much more complex and complicated process that involves a lot of skills, competencies, stages and actions. There is no surprise that the question "Does a programmer really need knowledge of classical algorithms?" arises from time to time, along with those "Does a programmer need math knowledge?" and "Does a programmer need higher education?". And, in my opinion, the answer to all the three is "not necessary". Really, the design skills can be more useful for a web-developer, and the drivers programmer can benefit from electronics and circuit knowledge more. I do not like people from big software companies who claim that the ability to algorithmize is the most important one and that a person who can algorithmize is able to adapt to any project and cope with any IT-task. I suspect that such programmers participated in informatics olympiads when being young, that can be an indicator of access to high-quality education and prosperous life in the whole. And that is something that can lead to career success by itself.
However, though I do not consider the algorithmic skills as the most important ones, I find them significant. According to my feelings, them form a special type of thinking and problem-solving ability, that are invisibly useful in everyday programmer's life. I'm disappointed that in my university we almost did not learn the algorithmic theory and insufficiently practiced, especially considering the amount of hours spent on physics, economics, draftsmanship etc.
I've bought this book after the diploma:

I liked it and managed to read the first three parts (from the total seven), but had to lay it aside as there were many other more practical things to learn. The book is quite hard, especially when solving exercises, so my reading speed was low. And yeah, I didn't even consider studying the classical multi-volume Knuth's work ever.
As now I'm working at improval of my fundamental basis, I've returned to Kormen and moved a little bit further. I've mastered the part about graph algorithms. (Without solving exercises, however. They are too deeply mathematical, I don't think they are necessary).It seems to me that I've come across graph algorithms in the area of machine learning, in the clusterization topic, in social graphs analysis, etc. And in general, I see examples where grapth theory can be useful in real tasks, for instance, in maps services or in Yandex Metro. So, I spent a lot of time learning graphs in September, and I finished this part only recently. The list of chapters for further study is ready, but I'm going to postpone it till the next iteration. There are more beneficial activities, as my main goal is data science now, not the computer science. If I had enough time, I would rather prefer practicing on such resources:
HakerRank
Project Euler
CheckiO
TProger ru
... but I haven't enought time.
And again, I'm not sure that it is so practically useful. Even Yandex, that loves to conduct algorithmic challenges and give algorithmic tasks on interviews, cannot clearly show why are they so important: https://habr.com/company/yandex/blog/420305/
Creating their own data structure, using specific non-classical algorithm, customizing standard library structures... And being much more free in choosing input data and form of the output, in stating the problem and desired outcome, in adherence to time frames, in making several iterations to improve, etc. That's different to what is happening in code contests, in my opinion.
In another article Mail.ru explains algorithmic interviews puzzles, but again, gives no notion, how they helps in everyday work. So, I think it's good practice to train your brain from time to time, but not the aim to aspire to.
Machine learning contests seems to be much more closer to the real life problems, but even them are often considered by industry experts as not reflecting the main part of the work of data scientist. And that's interesting that the "Algorithms" hub on the Habr contains machine learning algorithms and many other types of algorithms, not only classical computer science ones: https://habr.com/hub/algorithms/
So, now I'm returning to Data Science in my educational activity. The next step I'm going to overcome is free ML courses by OpenDataScience, that starts on October, the 1st:

However, though I do not consider the algorithmic skills as the most important ones, I find them significant. According to my feelings, them form a special type of thinking and problem-solving ability, that are invisibly useful in everyday programmer's life. I'm disappointed that in my university we almost did not learn the algorithmic theory and insufficiently practiced, especially considering the amount of hours spent on physics, economics, draftsmanship etc.
I've bought this book after the diploma:

I liked it and managed to read the first three parts (from the total seven), but had to lay it aside as there were many other more practical things to learn. The book is quite hard, especially when solving exercises, so my reading speed was low. And yeah, I didn't even consider studying the classical multi-volume Knuth's work ever.
As now I'm working at improval of my fundamental basis, I've returned to Kormen and moved a little bit further. I've mastered the part about graph algorithms. (Without solving exercises, however. They are too deeply mathematical, I don't think they are necessary).It seems to me that I've come across graph algorithms in the area of machine learning, in the clusterization topic, in social graphs analysis, etc. And in general, I see examples where grapth theory can be useful in real tasks, for instance, in maps services or in Yandex Metro. So, I spent a lot of time learning graphs in September, and I finished this part only recently. The list of chapters for further study is ready, but I'm going to postpone it till the next iteration. There are more beneficial activities, as my main goal is data science now, not the computer science. If I had enough time, I would rather prefer practicing on such resources:
HakerRank
Project Euler
CheckiO
TProger ru
... but I haven't enought time.
And again, I'm not sure that it is so practically useful. Even Yandex, that loves to conduct algorithmic challenges and give algorithmic tasks on interviews, cannot clearly show why are they so important: https://habr.com/company/yandex/blog/420305/
Creating their own data structure, using specific non-classical algorithm, customizing standard library structures... And being much more free in choosing input data and form of the output, in stating the problem and desired outcome, in adherence to time frames, in making several iterations to improve, etc. That's different to what is happening in code contests, in my opinion.
In another article Mail.ru explains algorithmic interviews puzzles, but again, gives no notion, how they helps in everyday work. So, I think it's good practice to train your brain from time to time, but not the aim to aspire to.
Machine learning contests seems to be much more closer to the real life problems, but even them are often considered by industry experts as not reflecting the main part of the work of data scientist. And that's interesting that the "Algorithms" hub on the Habr contains machine learning algorithms and many other types of algorithms, not only classical computer science ones: https://habr.com/hub/algorithms/
So, now I'm returning to Data Science in my educational activity. The next step I'm going to overcome is free ML courses by OpenDataScience, that starts on October, the 1st:

@темы: Программирование, english writing skills, Data Science, Machine Learning