Перейти к содержанию

Программирование - это практика? Правильный подход


VladimirS

Рекомендуемые сообщения

Всех приветствую!  :face:

 

Хочу обсудить с Вами следующую интересную мысль: так ли хорошо построена система образования по программированию в наших ведущих ВУЗах, как многие думают? Один мой знакомый недавно поступил в университет, и ему там предлагают факультатив "Введение в программирование". То есть теория программирования и общие понятия о нем.

 

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

 

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

 

Они понимают, что им нужен интерфейс, куда они могут вводить сумму очередной семейной покупки. Они идут на форум или открывают учебник и начинают искать там решение своей задачи, то есть ответ на вопрос: "Как и какими средствами этот интерфейс реализовывается". Находят, например, информацию о Qt, разбираются с тем, как ее устанавливать. В конце концов добиваются того, что на их форме появляется textBox.

 

Далее они понимают, что нужно как-то это значение сохранить. И изучают сведения о переменных, о потоках ввода-вывода и проч. 

 

И так далее, пока программа не будет написана. 

 

То есть обучение у таких программистов начинается "от конкретной задачи". Они не учат теорию ради знания теории, для них теория - конкретный инструмент и они ищут конкретную информацию, а не читают учебники с целью "познать основные паттерны, чтобы когда-нибудь их применить".

 

Что Вы думаете о таком подходе и насколько он, по-вашему, эффективен?

Сообщение от модератора Mark D. Pearlstone
Тема перемещена из раздела "Обсуждение компьютерных технологий"
  • Улыбнуло 1
Ссылка на комментарий
Поделиться на другие сайты

Можно вопрос? Вот что будет, если некоторого ответа вы не найдете в поиске?

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

Так же хочу сказать, что такое "программисты" часто бросают свои проекты, даже не начав его.

 

В плюс скажу еще, что можно перейти с одного языка программирования на другой без всяких проблем - 1 час плюс описание функций и знаний теории программирования.

Ссылка на комментарий
Поделиться на другие сайты

 

 


Можно вопрос? Вот что будет, если некоторого ответа вы не найдете в поиске?

 

В этом случае, если решения не будет и в учебнике, методом проб и ошибок будет найдено решение задачи. И тем быстрее оно будет найдено, чем чаще программист думал своей головой, то есть чем больше он искал решение самостоятельно, вместо того, чтобы изучать стандартные алгоритмы. Их, конечно, очень важно знать, но после того как программист сам написал вариант алгоритма, пусть даже очень плохой. Тогда он в полном объеме поймет всю силу и мощь стандартного решения... если оно таково.

 

 

 


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

 

После того, как новичком поставлена какая-то задача, он, конечно, начинает изучать эти самые азы программирования, но при этом лучше их воспринимает, потому что эти азы - способы решения его насущной проблемы и он начнет понимать, как они могут быть применены на практике. Вместо "А, тип переменной int позволяет хранить целочисленные значения...", программист думает: "Эта переменная - как раз то, что мне нужно, она позволит мне сохранить в памяти сумму последней покупки".

 

То есть теория впитывается эффективнее, когда "на душе" имеется какая-то полезная задачка.

Ссылка на комментарий
Поделиться на другие сайты

ТС, то что вы предлагаете: "практика - потом немного теории", хорошо только для решения 1 конкретной  (т.е. типовой) задачи, для того чтобы стать "гуру" нужно много читать (очень много) и естественно параллельно практиковаться (т.е. закреплять изученное) - это самое эффективное решение.

Изменено пользователем ACIK
Ссылка на комментарий
Поделиться на другие сайты

А в чем собственно вопрос?

теория vs практика?

 

Вопрос в том, стоит ли перед тем, как изучать готовые решения (теорию) выполнять следующие шаги:

  1. Придумать задачу, которая реализуется компьютерной программой (если эта задача еще не поставлена)
  2. Попытаться решить задачу, набросав несколько тестовых алгоритмов.
  3. Если алгоритмы грубы и убоги, начать искать решение в интернете/ в учебниках/ у других программистов.
  4. Найти решение, сравнить с исходными алгоритмами. При этом глубина понимания структуры найденных алгоритмов (теории) значительно усилится.

 

Или же придерживаться другого варианта изучения теории:

  1. Прочитать книжку/пройти курсы по программированию. Порешать типовые задачки.
  2. Получить на работе задание по программированию.
  3. Начать вспоминать и припоминать уже изученное, пытаясь в дебрях своей памяти разыскать эту информацию.
  4. Если не вспомнится и не припомнится, опять искать решение в интернете/в учебниках/у других программистов.
  5. Реализовать готовое решение, не имея под рукой "плохое решение", с которым можно было бы его сравнить и понять тонкости готового алгоритма.
Ссылка на комментарий
Поделиться на другие сайты

без въедливого изучения Кнута - общественность обычно считает "вон из профессии".

с администрированием то же самое - я тоже была молодая и глупая, и думала что на теорию можно забить. потом пришлось судорожно эту самую теорию вспоминать и читать.

 

а примеров как не надо - полно. например http://govnokod.ru/

  • Согласен 3
Ссылка на комментарий
Поделиться на другие сайты

 

 


потом пришлось судорожно эту самую теорию вспоминать и читать.

 

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

Ссылка на комментарий
Поделиться на другие сайты

В принципе, я уже ответил выше: "параллельно" (т.е. одновременно).

 

Возьмите любую нормальную книгу (учебник) по программированию, там всегда материал дается постепенно и описывается на конкретных примерах, в конце главы закрепляется контрольными вопросами, иногда предлагается выполнить самостоятельную работу.

 

На сегодня это самая эффективная и универсальная методика. Книгу можно заменить/дополнить аудио или видео (т.е. мультимедийными средствами), но суть от этого не изменится.

 

Мудрость приходит только с годами.

 


и понять тонкости готового алгоритма.

 

А кто вам гарантирует, что вы поймете "алгоритм" не зная элементарной теории?

 

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

http://doc.crossplatform.ru/qt/4.5.0/how-to-learn-qt.html

 

Говоря простым языком: "нельзя решить интеграл, не понимая, что такое цифры"...

 

P.S. Исключение - люди с нестандартным мышлением (но их "единицы").

 

Добавлю еще несколько риторических вопросов в противовес вашему предложению:

- в какое место здесь можно вклинить понятие "эффективность"?

- сколько времени потребуется для решения задачи?

- является ли ваше решение оптимальным?

- какие инструменты вы будете использовать (почему именно Qt), кто проведет вариантный анализ?

- какой стиль программирования вы используете (смогут ли ваш код понять другие)?

- ...

- главное: зачем писать планировщик изобретать велосипед, если ими (в т. ч. бесплатными и с открытым кодом) уже весь интернет завален?

Изменено пользователем ACIK
Ссылка на комментарий
Поделиться на другие сайты

 

потом пришлось судорожно эту самую теорию вспоминать и читать.

 

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

 

я имела на руках проблему, на которую ни одна поисковая система не имела ответа. и только разбор по полочкам на остове "фундаментальщины" помог найти причину проблемы.

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

Ссылка на комментарий
Поделиться на другие сайты

ACIK, более всего интересен Ваш ответ на вопрос: как изучать бесплатный открытый код?

 

Далеко не ко всем алгоритмам имеются учебники с контрольными вопросами, упражнениями и самостоятельной работой.

 

Далеко не все алгоритмы описаны в учебниках с контрольными вопросами, упражнениями и самостоятельной работой. Как такой алгоритм изучить и понять? Нередко он дан де-факто, без подробнейших пояснений и описаний. А может быть его вообще не нужно понимать, а взять да сделать "Copy-Paste"?

 

Я предположил один из способов: сначала написать собственный алгоритм, затем сверить с эталонным, или общепризнанным. И посредством этого сравнения понять суть.

 

P.S. Изучение фундаментальной (самой-самой базовой) теории таким способом, конечно, неэффективно  :mmm:  Признаю.


 

 


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

 

Сначала написать убогую программу, а потом, изучая готовое решение, сделать ее правильной.

 

Вот в чем я пытаюсь разобраться: стоит ли сначала писать убогую программу, а уже затем изучать правильное решение (познавать эффективность алгоритма в сравнении), или же достаточно взять правильное решение, изучить его по шагам, а потом уже готовым блоком применять в своем проекте.

Ссылка на комментарий
Поделиться на другие сайты

как изучать бесплатный открытый код?

 

Это еще сложнее, чем проприетарный... :)

Это уже, так скажем, уровень ближе к "гуру".

 

Отвечу словами одного довольно хорошего unix-админа...

Когда нужно было накрутить элементарный скрипт (не будем вдаваться в подробности), решили мы обратиться к нему за помощью, ну, мол подскажи... В ответ было получено:

"Я на поиск решения данной задачи потратил целый год, зато сейчас с ней справлюсь за пару минут. Теперь ваша очередь пройти этот путь"...

 

Вот вам пожалуйста "бесплатный" софт!

 

В то время, как при использовании "платного" софта, вам предлагается техподдержка, семинары, обучение, методики... но за деньги.

 

Далеко не ко всем алгоритмам имеются учебники с контрольными вопросами

 

А вы ищите книгу с ответами на все вопросы? Тогда встречный вопрос, что в вашем понимании "правильное решение" (эталонный алгоритм)? И какова ваша "конечная истинная" цель (знания, прибыль, слава...)?

 

 

Вот в чем я пытаюсь разобраться

 

Зависит от конечной цели.

Изменено пользователем ACIK
  • Сомневаюсь 1
Ссылка на комментарий
Поделиться на другие сайты

 

 


Это еще сложнее, чем проприетарный... Это уже, так скажем, уровень ближе к "гуру".

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

 

 

 

 


"Я на поиск решения данной задачи потратил целый год, зато сейчас с ней справлюсь за пару минут. Теперь ваша очередь пройти этот путь"...

 

Он имел в виду: "Если хотите понять смысл скрипта, изучите его самостоятельно"?

 

 

А вы ищите книгу с ответами на все вопросы?

В том то и дело, я понимаю, что такой книги быть не может. И что большую часть времени нужно изучать "голый" открытый код или придумывать ответы самому.

 

 

что в вашем понимании "правильное решение" (эталонный алгоритм)?

 

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

 

 

 


И какова ваша "конечная истинная" цель (знания, прибыль, слава...)?

 

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

Ссылка на комментарий
Поделиться на другие сайты

 

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

 

 

Быстро научиться писать правильный код в любом случае не получится, так как приходит это исключительно с опытом. Тем более что термин "правильный" изначально является неправильным :) Правильный с какой точки зрения ? Проиллюстрирую на примере из реальной практики - делалась много лет назад одна задача, предполагающая использование большой и сложной БД. Ее сделали правильно (соблюдены правила Кодда, БД  приведена к 3-й нормальной форме и т.п.), в общем ее хоть в качестве образца в учебники. И код был написан правильно, и отлажен - но на реальных условиях задача не работала вообще, поскольку "сшивка" по ключам десятков огромных таблиц на каждый чих отнимало очень много ресурсов, критически важные расчеты в итоге шли в лучшем случае часами, индексация и прочие классические методики не помогали. В итоге БД была денормализована, многие вещи сделаны совершенно неправильно, но скорость работы в итоге возросла на 6 порядков ! (т.е. то, что работало часами - стало работать секундами). А почувствовать такие тонкости можно только набив шишки, причем как в теории, так  и в практике.

 

По поводу преподавания - с ним много вопросов и проблем, начиная с того, что многие преподаватели теоретики :) т.е. теорию то они знают, но в разработке больших реальных проектов не участвовали. В таком случае любая их лекция будет доносить до студентов теорию, а не практические тонкости (которые часто диаметрально противоположны теории). В идеале порядок изложения материала такой:

- теория алгоритмов. Без умения четко представить решение задачи, разбить ее на подзадачи и т.п. программу написать нереально. И наблюдая за своими дипломниками я нередко вижу, что они не могут четко себе представить, как будет работать их программа (или устройство - не важно).

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

- практика. Базовая практика должна идти параллельно с теорией, как закрепление изучаемого материала. А потом серьезная практика в виде как минимум курсовой работы, на которой нужно самостоятельно разработать некую программу, желательно такую, которую невозможно содрать из Интернет :)

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

  • Согласен 1
  • Сомневаюсь 1
Ссылка на комментарий
Поделиться на другие сайты

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
  • Похожий контент

    • rupitsa
      От rupitsa
      Всем доброго времени! Возник вопрос по правильному хранению лицензий! Я почему то думал, что могу добавить ключ на my Kaspersky, и пока я не добавлю ни одного устройства, у меня ключ будет там в целости и сохранности, а оказалось все и на оборот, таким способом я уже потерял ключ от KSC, что очень жаль.
       Чтоб больше не возникло вопросов по их хранению, можно ли вообще их как то хранить на портале или нет?
       
    • Sandynist
      От Sandynist
      Добрый вечер! Давно хотел написать о проблеме, но всё руки не доходили. 
       
      Немного истории: с большими усилиями компании удалось выкупить региональный домен https://www.kaspersky.kz/
      Можете погуглить, история мутная, какой-то предприимчивый делец зарегистрировал это имя себе и запросил много бабла с компании. 
       
      Но вот теперь казалось бы всё должно наладится, и сайт должен заработать корректно, но ничего подобного.
      Если у нас попытаться открыть ссылку в виде:
      https://www.kaspersky.ru/about/press-releases/zhertvami-novoj-versii-troyanca-necro-mogli-stat-milliony-vladelcev-android-ustrojstv
      то происходит автоматический редирект на наш региональный домен:
      https://www.kaspersky.kz/about/press-releases/zhertvami-novoj-versii-troyanca-necro-mogli-stat-milliony-vladelcev-android-ustrojstv
      на котором никакой статьи не наблюдается. 
       

       
      Так всё это не работает уже более года, а может даже и двух. Хотел традиционно задать этот вопрос Евгению Валентиновичу, но он заметно нервничает, когда его начинают спрашивать по технической части. А я в свою очередь не знаю куда и кому адресовать жалобу, это же не антивирусный продукт.
      Написал письмо на адрес info@kaspersky.com , но очень сомневаюсь, что будет хоть какой-то результат.
       
      P.S. Раньше тут появлялись технические специалисты компании, которым напрямую можно было написать про такие проблемы, как сейчас с этим обстоят дела?
    • KL FC Bot
      От KL FC Bot
      Приложения для фитнеса в силу своей природы имеют доступ к большому количеству персональных данных, особенно те, которые отслеживают разнообразные активности на свежем воздухе, в первую очередь — бег. Во время трекинга они собирают массу данных: пульс и другие параметры физической активности, количество шагов, пройденную дистанцию, перепад высот и, разумеется, геолокацию, — для максимально подробного анализа тренировки.
      А люди редко занимаются бегом в каких-то случайных местах. Обычно их маршруты повторяются и расположены где-нибудь рядом с домом, работой, учебой, военной базой… То есть местом, где человек бывает часто и, скорее всего, в одно и то же время. Что будет, если эта информация попадет не в те руки?
      Последствия могут быть катастрофическими. Так, несколько лет назад опубликованная одним из беговых приложений карта выдала местоположение целого ряда секретных военных объектов. А летом 2023 года, предположительно, благодаря данным из того же приложения, наемным убийцей во время пробежки был застрелен командир российской подводной лодки Станислав Ржицкий.
      Разумеется, утечка геоданных может быть опасна не только для военных. Несложно представить сценарии, в которых она может привести к неприятностям не только для очевидных целей таргетированной атаки (например, знаменитостей, политических деятелей или топ-менеджеров какой-либо компании), но и для обычных людей.
      Зная о ваших перемещениях, злоумышленники с удовольствием используют их для шантажа и устрашения. Пресловутое «я знаю, где ты живешь и все твои передвижения» значительно повышает вероятность того, что жертва испугается и выполнит требования мошенников.
      Помимо прямых угроз, геотрекинг прекрасно дополняет данные, утекшие из других приложений или собранные при помощи доксинга, что заметно повышает успех таргетированной атаки. И не стоит думать, что уж вы-то точно не заинтересуете мошенников настолько, чтобы устраивать сложную атаку. Жертвой может стать каждый, и далеко не всегда конечной целью злоумышленников является финансовая выгода.
      Но не только геоданные собираются и анализируются приложениями для бега. Как и все фитнес-аппы, они следят за активностью и физическим состоянием, которые могут многое рассказать о здоровье человека. И эта информация также может оказаться полезной для атаки с применением социального инжиниринга. Ведь чем больше злоумышленник знает о жертве, тем изощреннее и эффективнее его действия.
      Так что к выбору приложения для трекинга бега и настройке его конфиденциальности стоит подойти максимально осознанно — и в этом вам помогут наши советы.
      Общие советы по выбору бегового приложения и настройке приватности в нем
      Первое, что делать категорически не стоит, — устанавливать подряд все трекеры бега и затем выбирать наиболее понравившийся. Таким образом вы передадите свои персональные данные всем подряд, что значительно увеличит риск их попадания в руки злоумышленников. Чем меньшим количеством приложений вы пользуетесь, тем меньше риск утечки. Но стоит помнить, что ни одна компания не может гарантировать стопроцентную сохранность данных.
      Кто-то вкладывается в безопасность своих пользователей больше, кто-то меньше, и предпочтение лучше отдавать тем, кто серьезно подходит к сохранности и анонимизации пользовательских данных. Для этого стоит внимательно изучить политику конфиденциальности (Privacy Policy) выбранного приложения. Добросовестные разработчики укажут, какие данные собирает приложение, с какой целью, какие из них могут быть переданы третьей стороне, какие права у пользователя в отношении персональных данных и так далее. Дополнительно полезно будет поискать в Сети или поинтересоваться у ИИ-ассистента, были ли случаи утечек данных у интересующего вас приложения. Для этого достаточно в поисковом запросе указать название приложения плюс data breaches или data leak. Ну и, разумеется, отзывы пользователей тоже никто не отменял.
       
      View the full article
    • KL FC Bot
      От KL FC Bot
      Спросите первого встречного о том, как защитить свою конфиденциальность в Интернете — и скорее всего, вы услышите про приватный режим браузера. Режим этот есть во всех популярных браузерах, хотя называется по-разному: в Chrome — Incognito, в Edge — InPrivate, в Firefox — Private Window/Tab, в Safari — Private Browsing. Все эти названия создают чувство защищенности, даже невидимости — кажется, что можно бродить по Интернету безопасно и анонимно. Увы, на практике этот режим далеко не «инкогнито», хотя все равно полезен, если понимать его особенности и дополнить защитой с антишпионскими функциями.
      Как работает режим инкогнито
      В приватном режиме браузер не сохраняет историю посещенных сайтов, не запоминает информацию, вводимую на сайтах в веб-формах, не сохраняет на диске компьютера графику и код посещаемых веб-страниц в браузерном кэше. Маленькие текстовые файлы куки (cookie), в которых сайты сохраняют настройки и предпочтения пользователя, хранятся до тех пор, пока открыто окно в режиме инкогнито, и удаляются при его закрытии. Таким образом, на компьютере пользователя не остается следов от посещения сайтов.
      Но действия пользователя по-прежнему видны извне. За ними могут следить: посещаемые сайты, сам браузер пользователя и браузерные дополнения, провайдер пользователя, системный администратор в офисе или учебном заведении, а также разнообразные системы рекламы и аналитики — например, принадлежащие Google.
      Некоторые браузеры — в частности, Firefox — в приватном режиме включают дополнительные меры защиты: отключение браузерных дополнений, блокировку известных сайтов аналитики, отслеживающих пользователей, и сторонних куки, установленных не тем сайтом, на который вы заходите. Все это, впрочем, тоже не дает полной «невидимости».
       
      Посмотреть статью полностью
    • st210165
      От st210165
      Уважаемые Гений Касперский и вся его команда
      а есть ли у Вас разработки своего на кирилице ассемблера и Свой на русском языке язык программирования - прямо с элементарного -если так можно сказать -железа ввода в память основ алфавита и программирования
      неплохо бы его с детского сада детям давать изучать и накапливать в базы данных 
      С уважением Ваш подписчик Игорь
×
×
  • Создать...