как вывести скрипт в html
JavaScript — вывод информации
Здравствуйте, в прошлой статье мы рассматривали синтаксис языка JavaScript. Мы узнали что такое циклы, переменные, массивы, логические операторы, функции и так далее.
Все эти операции проходят внутри страницы и никак не отображаются. Сегодня же мы научимся выводить необходимые данные на экран. Выводить будем обычную числовую переменную с помощью ActionScript, самыми разными способами.
Для того чтобы использовать все способы, которые будут указаны ниже, нам необходимо обращаться к объекту document. Это отдельный элемент языка JavaScript, который предназначен для работы с веб-сайтами.
Первый способ: функция writeln
Для вывода переменной таким образом нам необходимо её создать. Напишем такую строку: var message = «Hello World!».
Теперь поговорим о функции writeln. Её лучше всего использовать только при загрузке исходного варианта страницы, так внутренний контент будет изменен.
С помощью таких функций как writeln можно создать страницу, полностью написанную на JavaScript. Кроме этого, данная функция может быть полезна в том случае, когда необходимо уменьшить количество запросов с сервера.
Для того чтобы воспользоваться данной функцией, записываем команду document.writeln, в скобках записываем название нашей переменной, которое затем будет показано на экране.
Обратите внимание! Большинство инструкций для работы с веб-страницей являются составляющими пространства имен document, поэтому его необходимо вписывать перед самой функцией, через точку.
Второй способ: функция alert
Она не входит в пространство имен document, как writeln, поэтому его вписывать не нужно. Alert может отлично подойти для отладки кода веб-страницы. Его можно использовать и для взаимодействия с пользователем, но делать это не рекомендуется.
Alert имеет стандартный синтаксис любой JavaScript функции. Сначала записываем команду alert, в скобках записываем значение или переменной.
После этого в верхней части страницы всплывет окно с сообщением для пользователя, которое содержит кнопку «OK».
Данная функция может иметь множество применений, но не стоит злоупотреблять ей при работе с веб-сайтом, так как всплывающие окна могут вывести пользователя из себя. Кроме того, некоторые плагины блокируют функции типа alert.
Третий способ: функция getElementById
Это самый сложный и наиболее популярный способ вывода информации на экран. С его помощью вы сможете изменять текстовый контент вашей HTML страницы.
Как мы знаем — все HTML теги могут иметь идентификаторы. Именно к ним и обращается наша функция. GetElementById находит элемент по его ID, изменяет содержимое тега по желанию, при этом остальной контент остается без изменений.
Данная функция входит в пространство имен document, что требует указывать его перед самой функцией.
Как вы могли заметить, кроме getElementById присутствует непонятная команда innerHTML, после него идет знак равенства и текстовая строка. Так вот, эта команда, вместе со знаком равенства, находит определенный тег и «приравнивает» его содержимое строке в кавычках.
Данный метод лучше всего подходит для вставки текста через JavaScript, поскольку он имеет целый ряд преимуществ:
Заключение
В этой статье мы поговорили с вами о том, как выводить информацию на экран. Это можно сделать с помощью сообщений, а также меняя внутренний контент веб-страницы. Мы лишь немного затронули пространство имен document, которое имеет целый ряд функция для работы с веб-страницей. В следующих уроках мы ознакомимся с ними детально.
Можете самостоятельно экспериментировать с вышеописанными функциями, либо же скачивайте наши исходники. Удачи в изучении!
2 комментариев для “ JavaScript — вывод информации ”
Производитель:
Модель:
Выполненные работы: ремонт
А если вставка идет через переменную
h2 >Описание:
то ни чего не происходит, тоесть код php не работает, отображается только текст, без php. Помогите чайнику, может это по определению не должно работать, а может просто я тормоз. Заранее благодарю.
HTML JavaScript
В современном мире верстальщику, который не знает хотя бы основ JavaScript, будет очень сложно. Совершенно не обязательно быть гуру JavaScript, но основами данного языка владеть необходимо.
JavaScript — клиентский язык программирования (выполняется не на сервере, а непосредственно в браузере пользователя на его локальном компьютере).
JavaScript используется для создания веб-приложений и динамических сайтов способных взаимодействовать с пользователем. В этом уроке вы получите лишь общее представление об этом мощном инструменте веб-дизайна, т.к. изучение JavaScript не входит в начальный курс обучения HTML.
Прежде всего нужно запомнить, что JavaScript является регистрозависимым языком. По этой причине следует запоминать не только названия свойств, методов или ключевых слов JavaScript, но и заглавными или строчными буквами они пишутся.
Код JavaScript может быть написан либо непосредственно в самом HTML-документе, либо в отдельном файле.
Для записи JavaScript-кода в HTML-документе используется тег
В следующем примере код JavaScript написан непосредственно в самом HTML-документе. При загрузке страницы данный код сработает и вызовет всплывающее сообщение:
Запуск скрипта
В предыдущем примере скрипт запустился во время загрузки HTML-документа. Но что делать если вы не хотите, чтобы скрипт запускался автоматически? Вы легко можете сделать так, чтобы запуск скрипта осуществлялся только в том случае, если пользователь делает что-то на странице (например, перемещает курсор мыши или кликае ссылку).
Эти действия называются внутренними событиями (события, для краткости). Есть множество предопределенных внутренних событий, которые осуществляют запуск скрипта. Вы можете использовать обработчики событий, чтобы сообщить браузеру, какое событие должно вызвать тот или иной сценарий. События определяются как атрибуты внутри HTML-тега.
Допустим, вы хотите, чтобы появлялось сообщение после того, когда пользователь нажимает кнопку. Вы можете использовать обработчик событий onclick() для выполнения действий. В следующем примере будет отображено окно предупреждения JavaScript, содержащее сообщение:
Подключение внешнего скрипта
Для подключения JS-файлов также используется тег
Внешние скрипты, порядок исполнения
Материал на этой странице устарел, поэтому скрыт из оглавления сайта.
Более новая информация по этой теме находится на странице https://learn.javascript.ru/script-async-defer.
Если JavaScript-кода много – его выносят в отдельный файл, который подключается в HTML:
Здесь /path/to/script.js – это абсолютный путь к файлу, содержащему скрипт (из корня сайта).
Браузер сам скачает скрипт и выполнит.
Можно указать и полный URL, например:
Вы также можете использовать путь относительно текущей страницы. Например, src=»https://learn.javascript.ru/lodash.js» обозначает файл из текущей директории.
Чтобы подключить несколько скриптов, используйте несколько тегов:
Как правило, в HTML пишут только самые простые скрипты, а сложные выносят в отдельный файл.
Браузер скачает его только первый раз и в дальнейшем, при правильной настройке сервера, будет брать из своего кеша.
Благодаря этому один и тот же большой скрипт, содержащий, к примеру, библиотеку функций, может использоваться на разных страницах без полной перезагрузки с сервера.
В одном теге SCRIPT нельзя одновременно подключить внешний скрипт и указать код.
Вот так не сработает:
Асинхронные скрипты: defer/async
Браузер загружает и отображает HTML постепенно. Особенно это заметно при медленном интернет-соединении: браузер не ждёт, пока страница загрузится целиком, а показывает ту часть, которую успел загрузить.
Фундаментальная уязвимость HTML при встраивании скриптов
Чтобы описать суть проблемы, мне нужно рассказать, как вообще устроен HTML. Вы наверняка в общих чертах представляли себе, но я все равно коротко пробегусь по основным моментам, которые понадобятся для понимания. Если кому-то не терпится, сразу переходите к сути.
HTML — это язык гипертекстовой разметки. Чтобы говорить на этом языке, нужно соблюдать его формат, иначе тот, кто читает написанное, не сможет вас понять. Например, в HTML у тегов есть атрибуты:
Если это не то, чего вы ожидали, вам нужно как-то изменить значение атрибута, чтобы в нем не встречалась кавычка. Самое простое, что можно придумать — просто вырезать кавычки.
Чтобы вы могли указать в качестве значения любую строку, формат языка HTML предлагает возможность экранировать значения атрибутов. Вместо кавычки в строке значения вы можете записать последовательность символов [«] и парсер поймет, что в этом месте в исходной строке, которую вы хотите использовать в качестве значения атрибута, была кавычка. Такие последовательности называются HTML entities.
Получается, что преобразование из исходной строки в ту, которую мы запишем между двумя символами кавычек, является однозначным и обратимым. Благодаря этим преобразованиям можно записать и прочитать любую строку в качестве атрибута HTML-тега, не вдаваясь в суть её содержимого. Вы просто соблюдаете формат, и все работает.
Собственно, так работает большинство форматов, с которыми мы сталкиваемся: есть синтаксис, есть способ экранирования контента от этого синтаксиса и способ экранирования символов экранирования, если вдруг такая последовательность встречается в исходной строке. Большинство, но не…
Что тут должно происходить: переменной s должна присваиваться безобидная строка.
Получается парадоксальная ситуация: после встраивания валидного Javascript в валидный документ HTML абсолютно валидными средствами мы можем получить невалидный результат.
На мой взгляд это и является уязвимостью разметки HTML, приводящей к уязвимостям в реальных приложениях.
Как эксплуатируется уязвимость
Конечно, когда вы просто пишете какой-то код, трудно представить, что вы напишете в строке и не заметите проблем. Как минимум, подсветка синтаксиса даст вам знать, что тег закрылся раньше времени, как максимум, написанный вами код не запустится и вы будете долго искать, что произошло. Но это не является основной проблемой с этой уязвимостью. Проблема возникает там, где вы вставляете какой-то контент в Javascript, когда генерируете HTML. Вот частый кусок кода приложений на реакте с серверным рендерингом:
В initialState может появиться в любом месте, где данные поступают от пользователя или из других систем. JSON.stringify не будет менять такие строки при сериализации, потому что они полностью соответствуют формату JSON и Javascript, поэтому они просто попадут на страницу и позволят злоумышленнику выполнить произвольный Javascript в браузере пользователя.
Но на закрывающем теге приколы не заканчиваются. Опасность представляет и открывающий тег
Что видит здоровый человек и большинство подсветок синтаксиса в этом коде? Два тега ниже, хе-хе). Если вы до этого не сталкивались с подобным, то можете подумать, что я сейчас шучу. К сожалению, нет. Вот скриншот DOM-дерева примера выше:
А вы точно спецификация?
Спецификация HTML, помимо того, что запрещает использование легальных последовательностей символов внутри тега «‘; console.log(script.outerHTML); >>> «
Как видите, строка с сериализованным элементом не будет распаршена в элемент, аналогичный исходному. Преобразование DOM-дерево → HTML-текст в общем случает не является однозначным и обратимым. Некоторые DOM-деревья просто нельзя представить в виде исходного HTML-текста.
Как избежать проблем?
Как вы уже поняли, способа безопасно вставить Javascript в HTML нет. Но есть способы сделать Javascript безопасным для вставки в HTML (почувствуйте разницу). Правда для этого нужно быть предельно внимательным всё время, пока вы пишете что-то внутри тега
Точно так же можно экранировать и отдельные строки.
Другой совет — не встраивайте в тег «>
Но, по-хорошему, конечно, если вы хотите нормально разрабатывать приложения, а не аккуратно ходить по минному полю, нужен надежный способ встраивания скриптов в HTML. Поэтому правильным решением считаю вообще отказаться от тега
Код внутри выглядит ужасно и непривычно. Но это код, который попадет в сам HTML. В шаблонизаторе, который вы используете, можно сделать простой фильтр, который будет вставлять тег и экранировать все его содержимое. Вот так может выглядеть код в шаблонизаторе Django:
Пособие по запуску JavaScript: консоль, букмарклеты и прочее с примерами
Запускать JavaScript (или JS) код в браузере — обычный навык.
Если когда-то хотели апробировать свой первый JS-код, но боялись, этот пост для вас.
Цель поста для читателей — мочь самостоятельно запускать нужный код.
Цель моя — написать пособие, чтобы на будущее давать на него ссылку + давать готовый код, когда друзьям нужно установить какой букмарклет или мини-форму для какой небольшой автоматизации.
Друзья, которые читают. Если вы это видите, вероятно, вы только что получили код и конкретный пункт из этого пособия. Перечитайте пункт и установите скрипт по аналогии самостоятельно!
ПОМНИТЕ: не устанавливайте JS-код из сомнительных источников и когда не понимаете, что код делает!
§ I. ГДЕ запускать JavaScript код?
I.1. Через консоль браузера.
Чтобы открыть консоль нужно нажать ctrl+shfit+K или ctrl+shift+L.
Вставляете код, нажимаете enter, он сработает.
I.2. Через адресную строку браузера.
Это строка, где написан адрес сайта.
Стираете адрес сайта, вместо вставляете код, нажимаете enter, он сработает.
I.3. Через bookmarklet, или букмарклет, или «закладурку».
Это закладка браузера, в которой вместо сайта стоит JS-код.
Создаёте любую новую закладку. Затем находите закладку и исправляете её: вместо адреса сайта, который должен открываться, вставьте JS-код и сохраните.
Нажимаете на эту вкладку, срабатывает JS-код.
ПРИМЕЧАНИЕ: это один из удобнейших «многоразовых» способов запускать JS-код, в том числе в браузере смартфона!
I.4. Через обычный блокнот, сохранённый как HTML.
Открываете новый блокнот (notepad).
Вставляете туда нужный HTML с JS.
Нажимаете «Сохранить как», откроется меню. Тип файла — меняете «Текстовые документы (*.txt)» на «Все файлы (*.*)». Имя файла — мойкод.html. Его и открывать в браузере.
ПРИМЕЧАНИЕ: удобный «многоразовый» способ запускать JS-код на компьютере (без Интернета).
СПРАВОЧНО: HTML — это язык гипертекстовой разметки.
Любая открытая web-страница в браузере в общем случае — HTML.
I.5. Через блокнот в браузере (внося изменения в web-страницу).
Преимущества (многоразовое использование и не требуется Интернет), а также подход похожи на [I.4].
Открываете блокнот в браузере в качестве новой вкладки:
Затем в консоли находите элементы (HTML-код): открываете консоль (ctrl+shift+K или ctrl+shift+L), переходите в Elements.
Изменяете HTML-код, вставляя туда нужный HTML с JS.
Сохраняете страницу, закрываете её.
После сохранения её и открывать в браузере.
ПРИМЕЧАНИЕ: кстати, сам упомянутый браузерный блокнот удобен для своих заметок, которые можно потом сохранять в специальной папке (ctrl+s).
I.6. Через онлайн компилятор/интерпретатор.
Вставляете HTML и JavaScript в соответствующие поля, нажимаете «Save» для сохранения страницы с уникальным адресом (или «Run» для предпросмотра).
Для демонстрации сохранённого можно вставить в конец адреса «/show», будет видна просто страница:
ПРИМЕЧАНИЕ: удобнейший «многоразовый» способ запускать JS-код (когда есть Интернет).
I.7. Через специально установленные расширения (addon) браузера.
Вставляете код, сохраняйте. На соответствующих страницах должно работать.
ПРИМЕЧАНИЕ: удобно автоматически запускать JS-код сразу после загрузки (например, на конкретных сайтах с помощью @match).
§ II. ОСНОВНЫЕ ВИДЫ запуска JavaScrpt-кода?
Здесь речь будет идти о простейшем коде, запускающем окошко с текстом.
В будущем вместо него вам может быть нужно запускать какой-то другой код (но подход, описанный ниже, останется).
Применение: [I.1] консоль.
II.2. Протокол: немедленно вызываемая функция (или IIFE) объявляется и запускается.
Применение: [I.2] адресная строка браузера;
II.3. Userscript для Tampermonkey / Greasemonkey.
Применение: [I.7] специальные аддоны Tampermonkey / Greasemonkey.
II.5. Протокол: немедленно вызываемая функция, добавляющая на страницу код и кнопку, с помощью которой его можно запускать.
II.5.1. Протокол: немедленно вызываемая функция, добавляющая на страницу код и кнопку, с помощью которой его можно запускать: код на странице.
var scr1 = document.createElement(‘script’);
scr1.setAttribute(‘type’,’text/javascript’);
scr1.textContent=»var func1=function()
document.documentElement.getElementsByTagName(‘*’)[0].appendChild(scr1);
var btnDiv1 = document.createElement(‘div’);
btnDiv1.id = ‘btnDivId1’;
btnDiv1.style.position = ‘relative’;
btnDiv1.style.zIndex = 99999;
var btn1 = document.createElement(‘button’);
btn1.innerHTML = ‘Click’;
btn1.id = ‘btnId1’;
btn1.setAttribute(«onclick», «javascript:func1();»);
II.5.2. Протокол: немедленно вызываемая функция, добавляющая на страницу код и кнопку, с помощью которой его можно запускать: код по ссылке.
var scr1 = document.createElement(‘script’);
scr1.setAttribute(‘type’,’text/javascript’);
scr1.setAttribute(‘src’,’http://codepad.org/2NJ2YB3V/raw.txt’);
document.documentElement.getElementsByTagName(‘*’)[0].appendChild(scr1);
var btnDiv1 = document.createElement(‘div’);
btnDiv1.id = ‘btnDivId1’;
btnDiv1.style.position = ‘relative’;
btnDiv1.style.zIndex = 99999;
var btn1 = document.createElement(‘button’);
btn1.innerHTML = ‘Click’;
btn1.id = ‘btnId1’;
btn1.setAttribute(«onclick», «javascript:func1();»);
§ III. ОСНОВНЫЕ ТИПЫ запускаемых Javascript-кодов?
Разумеется, типов множество, но некоторые мы разобрали.
а) запускаемый сразу;
б) запускаемый после загрузки страницы;
в) запускаемый по кнопке;
г) запускаемый каждые N секунд — изучите самостоятельно!
Первые три вы знаете и видели.
Четвёртый нужно изучить самостоятельно, сделав по аналогии. И, если не выходит, пользуясь поиском в google. Или задавая вопросы на профильных сайтах, например, на stackoverflow или в соответствующих чатах.
Задание-1: чтобы закрепить знания, совет — проверить, «пощупать» каждый кусок кода, который приведён выше и удостовериться, что он работает.
Задание-2: измените КАЖДЫЙ приведённый выше кусок кода и удостоверьтесь, что он работает так, чтобы код запускался каждые 3 секунды.
Если обобщить, то измените в каждом куске
Как вы поняли, [II.1] уже сделан. Попробуйте сделать остальные.
Если у вас не получилась практика / иные причины, возможно, «маякните» в комментариях на предмет того, нужны ли «спойлеры» / ответы (хотя это несложно).
[Доп.советы, чуть более углублённые мелочи]
IV.1. О том, где может храниться JavaScript.
Он может быть как внутри самого файла HTML, так и быть внешним (ссылкой на код).
Во втором случае, то есть для хранения внешних, использовался сайт codepad.org, хотя есть и аналоги [но некоторые аналоги могут на уровне не давать возможность его подгружать в браузер, давая ошибку «CORS»; сейчас неважно, но просто учтите].
Там вставлялся код, выбирался «Plain Text», нажимался «Submit». После сохранения правой кнопкой мыши копировался адрес ссылки «Raw Code». Он-то и является ссылкой (использовалась в [II.4.2], [II.4.4], [II.5.2]).
На этом достаточно исчерпывающее пособие по запуску JavaScript подходит к концу.
Лицензия на текст, код и скрины: CC0.
UPD: ВНИМАНИЕ: В связи с закрытием сайта codepad.org просьба учитывать изменения, описанные в комментарии #comment_199553464
Найдены дубликаты
В связи с тем, что сайт codepad.org более не работает, соответствующие изменения:
В коде ссылку » http://codepad.org/AXduOuGF/raw.txt » заменить (считать заменённой) на
В коде ссылку » http://codepad.org/2NJ2YB3V/raw.txt » заменить (считать заменённой) на
В коде ссылку » http://codepad.org/2NJ2YB3V/raw.txt » заменить (считать заменённой) на
Фразу «использовался сайт codepad.org » заменить (считать заменённой) на
«но некоторые аналоги могут на уровне не давать возможность» —
удалить слова «на уровне «.
Весь абзац «Там вставлялся код, выбирался «Plain Text», нажимался «Submit». После сохранения правой кнопкой мыши копировался адрес ссылки «Raw Code». Он-то и является ссылкой (использовалась в [II.4.2], [II.4.4], [II.5.2]).» заменить (считать заменённым) на
«Там вставлялся код, выбирался «Text», нажимался «Run». После сохранения правой кнопкой мыши копировался адрес ссылки «Скачать». Он-то и является ссылкой (использовалась в [II.4.2], [II.4.4], [II.5.2]).»
Заменить (считать заменённой) на новую (прилагается).
Заменить (считать заменённой) на новую (прилагается).
В связи с настоящим форс-мажором — месяц назад закрылся сайт codepad.org (и вновь не открылся, кто бы мог подумать, он работал с 2008 года!) — часть предлагаемого типового кода, зависящая от сайта, перестала работать.
В связи с этим большая просьба, если это только возможно, внести небольшие коррективы, описанные в комментарии выше: #comment_199553464.
Код теперь дважды «зарезервирован», так что другие исправления в будущем, если внести изменения, не понадобятся. Ну не новый же пост создавать.
Но, наверное, было бы замечательно, если бы возможно было произвести коррекцию пунктов. Кнопки самостоятельного «редактировать» нет. А так пост будет максимально актуален и почти вечен.
Было желание опубликовать пост в Лига программистов, но там ограничение по карме, хотя там ему, мне кажется, самое место.
Возможно / разумно ли как-то попросить перенести?
Яндекс погода
Никогда особо не парился по поводу памяти в телефоне, но тут решил посмотреть список приложений с фильтрацией по размеру.
Секрет тяжести молота Тора:
Отзыв на Гитхаб
Чего ожидать от поста: очень личное мнение с точки зрения интервьюера топ IT-компании о том, что не так с быстрыми IT-курсами и о пробелах в знаниях их выпускников; советы в общих чертах, как же всё-таки войти в это самое АйТи. Пост ограничен профессией разработчика ПО ввиду жизненного опыта автора.
Что значит «войти в АйТи»?
Чего работодатели ждут от кандидатов?
Для осознания минимального необходимого набора навыков давайте посмотрим, что ожидается от кандидата на стажировку (оплачиваемую, и временами весьма неплохо):
* Умение более-менее свободно общаться на английском;
* Понимание организации сетей, сетевых протоколов;
* Понимание параллелльного программирования и многопоточности;
* Принципы трансляции программного кода в исполняемый код;
* Понимание концепций и синтаксиса какого-нибудь популярного языка программирования и умение применять их для решения учебной задачи;
* Владение терминами информатики и адекватное их применение в процессе решения задачи;
* Понимание принципов тестирования и их разумное применение к поставленной задаче;
* Знание принципов объектно-ориентированного программирования;
* Умение внятно превращать мысли в слова.
От стажёров не требуется опыт работы по специальности, но желательно иметь несколько небольших проектов: учебные проекты и курсовые, pet-projects, участие в опен-сорсе.
Junior-разработчик, помимо означенных выше качеств, должен также:
* Иметь опыт разработки на стажировке в крупной компании и/или в качестве разработчика в небольшой или не широко известной компании;
* Быть способным реализовать поставленную хорошо очерченную задачу без постоянного надсмотра со стороны более старших разработчиков (часто при наличии готового плана реализации, разработанного старшими товарищами);
* Уметь разбить небольшую систему на компоненты, спроектировать интерфесы между ними, облегчая тестирование, поддержку кода, расширение системы.
Отметим также, что это список на «общее программирование». Нишевые области, такие как геймдев, машинное обучение, мобильная разработка и т.д. добавят своих требований в общую кучу.
Учат ли этому «вайтишные» курсы?
После прочтения списка сверху в вас уже должны были зародиться сомнения в правдивости рекламы, обещающей освоение профессии за несколько месяцев, смотря лекции пару часов в неделю и тратя ещё пару часов на домашние задания.
Так что как бы ни хотелось поверить молодым-активным-хипстеровато-выглядящим парням, завлекающих рассказами об очередях хэдхантеров к выпускникам их контор, увы, это такой же нонсенс, как и заявление, что к работе хирурга в элитной клинике можно подготовиться, зарезав пару кур в деревне.
Что же там тогда происходит?
Я посмотрела один широко рекламируемый курс по Java и попыталась систематизировать увиденное. Систематизировать оказалось немного. Плакала только горько, вина бутылку выпила.
И вот что я там увидела:
2. Сложно о простом. Чтобы объяснить условные операторы, совсем не нужно заводить программу на 100 строк, которая не влезает на экран и где сам лектор путается в логике. Зачем? Или это ещё один приём, чтобы вызвать у ученика ощущение себя как бесполезной воши, неспособной ничего достичь без богоподобного лектора курса?
3. Отсутствие внятных практических заданий. В задании обычно даётся готовый код, где нужно поменять пару строк. Ученику не даются задания, которые действительно заставят его думать и осознанно применять новые концепции, чтобы решить задачу с нуля.
4. Даются разрозненные, бессистемные знания синтаксиса языка, но никаких объяснений принятых практик программирования, организации мысли, разбиения задачи на подзадачи, хорошего тона для определения границ классов и методов. Грубо говоря, научили, как писать буквы, а про грамматику, пунктуацию, и орфографию забыли, не говоря уже об изложении мысли и структурированию текстов.
5. Лектор читает уставшим, скучающим тоном. Всем своим видом он показывает, как низко он опускается, передавая светоч знаний всяким идиотам. Я не знаю, даёт ли этот курс возможность общаться с преподавателями, но лично мне было бы крайне стрёмно задавать вопросы из страха вызвать своей никчёмной глупостью пренебрежительное закатывание глаз или смешки. Фактически, новичка отталкивают от идеи общаться о программировании с коллегами и просить помощи у более опытных товарищах, что является самым важным навыком любого программиста, особенно новичков!
К чему это приводит?
Вы скажете: «Да рядовому программисту это всё не нужно! За мои over 9000 лет в разработке мне никогда не приходилось писать сортировку самому!» Это может быть правдой.
Во-первых, без этих знаний в настоящее время новичок банально не пройдёт собеседование в более-менее приличной конторе, так что какая разница, что вам там приходилось или не приходилось.
Наконец, если человек не обладает банальной профессиональной грамотностью, мы не можем ожидать, что он будет эффективен, когда нужно будет вынуть мозг через ухо и решить что-то нестандартное, что не вкладывается в типовые трафареты очередного фреймворка-однодневки.
Если не курсы, тогда что?
Моё профессиональное мнение состоит в том, что нацеленную программу образования превзойти практически невозможно. Адекватный факультет/кафедра пройдутся ровно по списку навыков, обозначенному выше, но мякотка даже не в этом, а в том что у топ-факультетов имеются связи в хороших компаниях, благодаря чему они могут рекомендовать вас на стажировки (которые, кстати, обычно тоже предлагаются только студентам, а не любым новичкам).
Значит ли это, что тёплого местечка в Гугле вам не видать, не просидев предварительно 4-6 лет за партой в пыльном универе? Отнюдь нет.
Индустрия жадна до (высококлассных) специалистов, и никому нет дела, каким образом навык был достигнут. Но навык при этом должен быть. Самостоятельно достичь его можно, но, интуитивно, это будет сложнее, дольше, и потребует гораздо большей дисциплины и самоотдачи, чем обучение на кафедре.
И это не говоря уже о том, что при самообучении у вас не будет доступа к опытным специалистам, которым можно задавать разные дурацкие вопросы, а так же к связям кафедры, так что придётся позиции искать самостоятельно и без рекомендательных писем, что на практике часто означает, что рекрутер просто выбросит ваше резюме, если в нём нет строчки об обучении по специальности в адекватном вузе.
Как промежуточный вариант между самообразованием и полноценной вышкой существуют «школы курсов». Они не дают официальных дипломов об образовании, но они полностью бесплатны, преподают в них (да, снова связи. ) лучшие преподаватели вузов (знаю некоторых лично, потому что они и в СПбГУ преподают) и инженеры приличных компаний (Яндекс, JetBrains), а часть обучения составляют обязательные практические проекты.
В чём подвох? Чтобы поступить, нужно сдать экзамен на математику уровня примерно второго курса столичного вуза.
Я в курсе двух таких школ, которые к тому же сотрудничают между собой: Школа Анализа Данных (упор на машинное обучение) и Computer Science Center (более широкий спектр предметов). Готовьтесь потратить 2-3 года на обучение в любой из них (сравните с 4 годами полноценного бакалавриата, которые включают в себя также и математику, требуемую обеими школами на входе).
Можно! Вместить в один пост всю информацию о том, как освоить профессию, да ещё и требующую глубоких теоретических и приладных знаний, заведомо невозможно. Если вам пришлась по душе эта статья, вас могут заинтересовать следующие темы:
* Разделы математики, полезные разработчику ПО (со списком литературы);
* Темы информатики, с которыми должен быть знаком любой программист (со списком литературы);
* Список алгоритмов и структур данных, наиболее полезных на интервью и в разработке;
* Как выглядит типичный процесс собеседования на программиста в топ западные компании;
* Составляем резюме грамотно;
* Один день из жизни разработчика ПО, или что вы не знали о профессии программиста.