Dmitry Belyavsky (beldmit) wrote,
Dmitry Belyavsky
beldmit

Category:

Много ли ученику языков программирования надо?

 

Саша Соболев тут написал большой текст в контексте обсуждения пользы обучения программированию на примере C++. Текст правильный, но содержит много тезисов, и поэтому отвечать я буду на него примерно потезисно.


Дима, давай я тут отдельно объясню свою позицию, хотя я помню время, когда это не потребовалось бы. 


Я тоже помню (хотя и не застал) время, когда программирование было программирование вообще. Ну так Сайрес Смит в голове держал примерно всю практическую инженерию, и он был последним, кому это вообще удалось.


Если ты хочешь стать программистом, ты должен понимать в том, как устроен дивайс, который ты программируешь. Не потому, что ты будешь потом на ассемблере собирать SQL-запросы и не потому, что придется самому ваять менеджер памяти. А что бы понимать что происходит. 


Я в принципе согласен, но адекватный уровень понимания для каждого языка и предметной области разный. Если ты пишешь на JavaScript/CSS, то до железа ты не доберёшься близко к совсем, и тебе не актуальны процессорные кеши, но крайне актуально знание размеров экрана и то, как в какой системе отображаются твои виджеты. А на C, да ещё выжимая каждую операцию досуха ради быстродействия, тебе надо знать, например, про векторные инструкции процессоров.

Ты написал "в школе будут учить С++". Вот если учить, тем более в школе, то есть нубов, то конечно С++ - хороший вариант. Не единственный. На плюсах сейчас работает людей меньше, чем раньше, и если кто решит быть программистом, то это будет, конечно, не единственный язык. 


Я тут понял, что единственное, для чего C++ хорош в образовательных целях — это для объяснения про классы, темплейты, контейнеры и алгоритмы. Что у нас бывают разные способы хранить кучу плюс-минус однородных данных, и где-то мы за это заплатим неудобством поиска, где-то проблемами со вставкой, где-то чем-то ещё. Но это примерно C++ 2003. Ну то есть это не C++, это C с классами и немного STL. И я не уверен, что C++ — методически самый лучший для этого язык.


Но толку от обучения в школе Erlang с моей точки зрения сильно меньше. Гораздо. Программист, который не в курсе устройства компьютера, который не понимает базовых вещей (а без знания низкоуровневых языков, только по лекциям этого не получишь), будет где-то хорош, пока не найдет свои грабли. И грабель этих о с шансами вообще не заметит.


Вот тут и согласен, и не согласен. Не компетентен судить про Erlang, но по другим языкам — часть граблей программист не заметит, но ими прилетит. 


 Течет память - либа тухлая, другую возьмем! Медленно работает - надо апгрейдиться! Ну а чего вы хотите - оно вот так работает! Скомпилить шаред библиотеку и подключить к своему проекту на Erlang/R/Python? Не ко мне 🙂 Ну хоть понять, что это можно реализовать как полагается на низкоуровневом языке и попросить того, кто умеет! Но это уже детали даже.

Это вполне релевантные детали в целом. А в частности всё сложно. Утечки памяти в современном языке с garbage collector надо очень стараться, чтобы организовать. Критичные по времени места уже реализованы на низкоуровневом языке и оптимизированы. Другой вопрос, что их можно неправильно использовать и править надо именно алгоритм. А для этого ещё и профайлить, о чём и профессионалы не всегда думают. А когда думают, часто получают неожиданный результат в том, где на самом деле находится узкое по времени место.

Самое серьёзное ускорение, которое мне довелось привнести, было в проекте на C++. Там товарищ делал обрезал начальные пробелы в строке, проходя с начала, и для каждого пробела двигал всю строку (довольно большую) на этот пробел влево.


С/С++/Pascal - отличные языки для изучения в школе. А над программерами, которые не считают нужным их знать, позволь мне посмеяться. Я не со зла, просто это действительно смешно.


Я не уверен, что тут надо знать именно языки, а не концепции. O-нотацию, например. А из этой тройки я бы сейчас оставил Паскаль, и сильно концептуально ограниченные подмножества.


This entry was originally posted at https://beldmit.dreamwidth.org/924021.html. Your comment? (comment count unavailable comments)
Tags: мысли, программирование
Subscribe

  • Новый этикет: начало

    Как известно, рукопожатие пошло от демонстрации того, что в данный момент ты не вооружён. Сегодня на прогулках наблюдаю (и участвую) в демонстрации…

  • Придумалось

    "Сомы грам и нету драм" сменилось на "интернета гигабит - сын не вырастет бандит" This entry was originally posted at…

  • Про учителей

    Воспоминания об учителе-небожителе, которое идёт из детства у хороших мальчиков и девочек, и немного от предков, у которых учитель был одним из…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 40 comments

  • Новый этикет: начало

    Как известно, рукопожатие пошло от демонстрации того, что в данный момент ты не вооружён. Сегодня на прогулках наблюдаю (и участвую) в демонстрации…

  • Придумалось

    "Сомы грам и нету драм" сменилось на "интернета гигабит - сын не вырастет бандит" This entry was originally posted at…

  • Про учителей

    Воспоминания об учителе-небожителе, которое идёт из детства у хороших мальчиков и девочек, и немного от предков, у которых учитель был одним из…