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

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


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

Опубликовано

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

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

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

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

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

 

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

Опубликовано

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

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

Опубликовано

 

 


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

 

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

 

 

 


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

 

После того, как новичком поставлена какая-то задача, он, конечно, начинает изучать эти самые азы программирования, но при этом лучше их воспринимает, потому что эти азы - способы решения его насущной проблемы и он начнет понимать, как они могут быть применены на практике. Вместо "А, тип переменной 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
Опубликовано

 

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

 

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

 

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

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

Опубликовано

"Самый страшный враг Знания – не его отсутствие, а иллюзия его наличия" - Стивен Хокинг.

  • Улыбнуло 1
Опубликовано

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

 

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

 

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

 

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

 

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


 

 


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

 

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

 

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

Опубликовано (изменено)

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

 

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

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

 

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

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

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

 

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

 

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

 

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

 

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

 

 

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

 

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

Изменено пользователем ACIK
  • Сомневаюсь 1
Опубликовано

 

 


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

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

 

 

 

 


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

 

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

 

 

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

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

 

 

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

 

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

 

 

 


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

 

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

Опубликовано

 

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

 

 

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

 

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

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

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

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

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

  • Согласен 1
  • Сомневаюсь 1

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

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



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

    • rupitsa
      Автор rupitsa
      Всем доброго времени! Возник вопрос по правильному хранению лицензий! Я почему то думал, что могу добавить ключ на my Kaspersky, и пока я не добавлю ни одного устройства, у меня ключ будет там в целости и сохранности, а оказалось все и на оборот, таким способом я уже потерял ключ от KSC, что очень жаль.
       Чтоб больше не возникло вопросов по их хранению, можно ли вообще их как то хранить на портале или нет?
       
    • KL FC Bot
      Автор KL FC Bot
      Даже компании со зрелой ИБ и достаточными инвестициями в это направление не застрахованы от киберинцидентов. Атакующие могут использовать уязвимости нулевого дня или скомпрометировать цепочку поставок, сотрудники могут стать жертвой сложной мошеннической схемы по проникновению в компанию, сама команда ИБ может допустить ошибку в настройках защитных инструментов или процедуре реагирования. Но каждый такой случай — повод улучшать процессы и системы, делать защиту еще эффективнее. И это не просто мотивационный афоризм, а практический подход, который вполне успешно работает в других сферах, например в авиационной безопасности.
      В авиации требования по обмену информацией для предотвращения инцидентов предъявляются ко всем участникам — от производителей самолетов до стюардесс. И речь идет не обязательно об авариях или сбоях, в этой отрасли принято сообщать и о потенциальных проблемах. Сообщения постоянно анализируются и на их основе корректируются меры безопасности. Постоянное внедрение новых мер и технологий привело к снижению числа фатальных инцидентов с 40 на миллион вылетов в 1959 году до 0,1 — в 2015-м.
      Но главное — в авиации давно поняли, что такая схема не будет работать, если ее участники боятся сообщать о нарушениях процедур, проблемах качества и других причинах инцидентов. Поэтому авиационные стандарты включают требования non-punitive reporting и just culture — то есть сообщения о проблемах и нарушениях не должны приводить к наказанию. Есть подобный принцип и у инженеров DevOps, они обычно называют это blameless culture и используют при разборе масштабных сбоев. Незаменим такой подход и в кибербезопасности.
      У каждой ошибки есть фамилия?
      Противоположностью blameless culture является принцип «у каждой ошибки есть фамилия», то есть конкретный виновник, который ее совершил. В рамках этой концепции за каждую ошибку применяют дисциплинарные взыскания вплоть до увольнения. Однако в реальности использование этого принципа вредно и не ведет к повышению защищенности.
      Сотрудники боятся ответственности и искажают факты при расследовании случившихся инцидентов, а то и уничтожают информацию, пытаясь скрыть улики. Искаженная или частично уничтоженная информация об инциденте усложняет реагирование и ухудшает общий исход, потому что ИБ не может правильно и быстро оценить масштаб инцидента. При разборе инцидентов фокус на конкретном виновнике не позволяет сосредоточиться на том, как надо изменить систему, чтобы подобные инциденты не повторялись впредь. Сотрудники боятся сообщать о нарушениях политик и практик ИТ и ИБ, поэтому компания упускает шанс устранить дефекты защиты ДО ТОГО, как они стали причиной критического инцидента. Сотрудники не мотивированы обсуждать вопросы кибербезопасности, обучать друг друга, корректировать ошибки коллег. Чтобы все в компании могли внести вклад в ее защиту, надо действовать иначе.
       
      View the full article
    • st210165
      Автор st210165
      Уважаемые Гений Касперский и вся его команда
      а есть ли у Вас разработки своего на кирилице ассемблера и Свой на русском языке язык программирования - прямо с элементарного -если так можно сказать -железа ввода в память основ алфавита и программирования
      неплохо бы его с детского сада детям давать изучать и накапливать в базы данных 
      С уважением Ваш подписчик Игорь
    • Mrak
      Автор Mrak
      Всем привет.
       
      На форуме постоянно слетают настройки лент. Образуются новые. Подскажите, как удалить лишние и сохранить одну "нормальную", чтобы туда попадали ВСЕ сообщения, КРОМЕ сообщений в разделе "уничтожение вирусов"?

      Вон сколько непрочитанного контента, а где кнопка "удалить"?
    • KL FC Bot
      Автор KL FC Bot
      Приложения для фитнеса в силу своей природы имеют доступ к большому количеству персональных данных, особенно те, которые отслеживают разнообразные активности на свежем воздухе, в первую очередь — бег. Во время трекинга они собирают массу данных: пульс и другие параметры физической активности, количество шагов, пройденную дистанцию, перепад высот и, разумеется, геолокацию, — для максимально подробного анализа тренировки.
      А люди редко занимаются бегом в каких-то случайных местах. Обычно их маршруты повторяются и расположены где-нибудь рядом с домом, работой, учебой, военной базой… То есть местом, где человек бывает часто и, скорее всего, в одно и то же время. Что будет, если эта информация попадет не в те руки?
      Последствия могут быть катастрофическими. Так, несколько лет назад опубликованная одним из беговых приложений карта выдала местоположение целого ряда секретных военных объектов. А летом 2023 года, предположительно, благодаря данным из того же приложения, наемным убийцей во время пробежки был застрелен командир российской подводной лодки Станислав Ржицкий.
      Разумеется, утечка геоданных может быть опасна не только для военных. Несложно представить сценарии, в которых она может привести к неприятностям не только для очевидных целей таргетированной атаки (например, знаменитостей, политических деятелей или топ-менеджеров какой-либо компании), но и для обычных людей.
      Зная о ваших перемещениях, злоумышленники с удовольствием используют их для шантажа и устрашения. Пресловутое «я знаю, где ты живешь и все твои передвижения» значительно повышает вероятность того, что жертва испугается и выполнит требования мошенников.
      Помимо прямых угроз, геотрекинг прекрасно дополняет данные, утекшие из других приложений или собранные при помощи доксинга, что заметно повышает успех таргетированной атаки. И не стоит думать, что уж вы-то точно не заинтересуете мошенников настолько, чтобы устраивать сложную атаку. Жертвой может стать каждый, и далеко не всегда конечной целью злоумышленников является финансовая выгода.
      Но не только геоданные собираются и анализируются приложениями для бега. Как и все фитнес-аппы, они следят за активностью и физическим состоянием, которые могут многое рассказать о здоровье человека. И эта информация также может оказаться полезной для атаки с применением социального инжиниринга. Ведь чем больше злоумышленник знает о жертве, тем изощреннее и эффективнее его действия.
      Так что к выбору приложения для трекинга бега и настройке его конфиденциальности стоит подойти максимально осознанно — и в этом вам помогут наши советы.
      Общие советы по выбору бегового приложения и настройке приватности в нем
      Первое, что делать категорически не стоит, — устанавливать подряд все трекеры бега и затем выбирать наиболее понравившийся. Таким образом вы передадите свои персональные данные всем подряд, что значительно увеличит риск их попадания в руки злоумышленников. Чем меньшим количеством приложений вы пользуетесь, тем меньше риск утечки. Но стоит помнить, что ни одна компания не может гарантировать стопроцентную сохранность данных.
      Кто-то вкладывается в безопасность своих пользователей больше, кто-то меньше, и предпочтение лучше отдавать тем, кто серьезно подходит к сохранности и анонимизации пользовательских данных. Для этого стоит внимательно изучить политику конфиденциальности (Privacy Policy) выбранного приложения. Добросовестные разработчики укажут, какие данные собирает приложение, с какой целью, какие из них могут быть переданы третьей стороне, какие права у пользователя в отношении персональных данных и так далее. Дополнительно полезно будет поискать в Сети или поинтересоваться у ИИ-ассистента, были ли случаи утечек данных у интересующего вас приложения. Для этого достаточно в поисковом запросе указать название приложения плюс data breaches или data leak. Ну и, разумеется, отзывы пользователей тоже никто не отменял.
       
      View the full article
×
×
  • Создать...