Комментарии 100
Другой вопрос в том, что разработчики пытаются все еще поддерживать IE браузеры, что абсолютно бессмысленное занятие, замедляющее прогресс. Люди, которые используют IE не используют современные веб приложения.
Для тех, кто хочет возразить, сначала посмотрите на статистику вашего веб приложения / сайта и убедитесь, что просмотры с IE не равны 0.
yarn add typescript
Проблема решается за 10 секунд
https://ru.m.wikipedia.org/wiki/Объектно-ориентированный_язык_программирования
Можете внести правку в Википедию если сможете конечно аргументировать
Это далеко не суть программирования и даже не очень важная его часть, это один из приемов который стал очень популярен из-за того что востребован в компаниях где с его помощью проще говно упаковывать в квадратно-гнездовые кирпичики.
Для сравнения смежная по назначению концепция API хороша именно обьективно — это четкий вход-выход из изолированного мирка кода решающего конкретную задачу для всех желающих
И это правда. ДжаваСкрипт не годен для ООП разработки. Как-то сахарно может и чем-то костыльно поддерживает, но не является ООП-языком. Как и Си, например.
ДжаваСкрипт умеет прикидываться функциональным языком. При должном старании программиста можно. Да только смеются функциональщики над такой сладкой поддержкой))
Недостатки Javascript. Позволяет, нет, скорее провоцирует, писать нечитаемый код. На Javascript можно писать читаемый код. Но с большой вероятностью будет написан нечитаемый, потому что в первом случае надо прилагать значительные усилия, а во втором — нет.
В языке отсутствует стандартная библиотека. Отсюда эти кошмарные npm
, сотни зависимостей даже для "Hello world", тысячи и десятки тысяч для любого нетривиального. Все это обновляется по нескольку раз в день. С изменениями в API. С конфликтами версий. С необходимостью регулярно вникать что там поломалось и почему.
Недавно я с обеда пришел и за время проведенное на обеде (1 час), какая-то зависимость сменила две версии. Я не шучу… Надо было сделать скриншот.
На мой взгляд, это кошмар.
Но вообще эту тему можно долго продолжать. Просто и так уже на несколько минусов наговорил и использовал единственную возможность что-то сказать за день.
Можете писать сайт руками на чистом JS, который будет весить в сумме как самая маленькая картинка и запускать сайт через 3 месяца.Шта? Не так уж и давно, поголовно и массово запускали сайты на чистом js все кому не лень. Примерно за неделю, максимум две. Ага, так и было. Всего то лет с десять назад. А может быть «те» люди, которые запускали все это дело на js — понимали что они делают? Ну а как иначе вы объясните сей «феномен»?)
Все это обновляется по нескольку раз в день. С изменениями в API. С конфликтами версий. С необходимостью регулярно вникать что там поломалось и почему.
npm конечно не без проблем, но вы явно перегнули. К тому же уже давно есть package-lock
1. Незнание «use strict»?
2. Классическое ООП от родоначальника Smalltalk. Гораздо шире в возможностях (динамическое наследование, множественное наследование и т.п.).
3,4. Имхо, JavaScript оказался в тени проблем npm.
Язык для вхождения в программирование должен быть кристально прост и непробиваем. Как Паскаль или Лисп в древности.
Единственный бонус от JS — он есть везде и всегда. В персоналках и мобильниках, на планшетах и вообще любых устройствах и платформах с браузером. То есть, когда незрелый юниор окрепнет умом и овладеет правильными привычками, он сам найдет этот JS-ящик Пандоры.
А я бы добавил к недостаткам/сложностям/вызовам для новичков ещё асинхронность языка. Это усложняет понимание кода. Можно конечно писать для начала и без асинхронности, но это важная часть языка.
Просто для тех задач, где он используется (UI, обработка веб-запросов в Node.js) асинхронность — это необходимость.
Нет. <Конец>
JavaScript — лучший язык программирования для начинающих. Так это или нет?
Короткий ответ — «нет», длинный — тоже «нет».
И даже думающий человек связавшись с js — 99.9% времени потратит на «покеты». И всего лишь 0.01 на js. В этом пока главный недостаток js в целом.
Порог вхождения минимален. Любой дебил может «писать» на js, замешивая «покеты вкучу». Вот только обычно у таких «писак», коих 99.9% — исключительно и только — одно говно получается. Что собственно и видно повсеместно, даже невооруженным взглядом.
Новичку единственное что нужно — это универ. Сильно, очень сильно сократит обучение ремеслу. Это кажется, что 5 лет для js не нужно. Однако, любой дебил без универа самостоятельно и внятно не поймет js и за 200 лет…
ps: как на этом прекрасном языке записать данные в файл на диск, получить список bluetooth устройств по близости или найти все собственные вектора матрицы.
Например такой:
| 3 -4 4 | | 2 3 2 | | 2 0 5 |
require('fs').writeFile(...)
2)
const bluetooth = require('node-bluetooth');
const device = new bluetooth.DeviceINQ();
device.listPairedDevices(console.log);
3) Точно так же как нa питоне.
import numpy as np
m=np.mat([[3,-4,4],[2,3,2],[2,0,5]])
w,v=np.linalg.eig(m)
python не способен найти все собственные вектора этой матрицы
Пресловутые лисповские функции которые возвращают функции в js это обыденность в лице коллбеков которые делают даже джуны.
Очевидными способами можно воспроизводить функционал макросов и эвалей.
Ну и интеграция с html/css хорошая «из коробки», особенно если добавить jQuery.
С тем-же jQuery ещё и всякий парсинг и вообще работа с нетом в целом становится простой.
Перевод: «JavaScript — это единственная альтернатива.»
Вывод: оказывается, переводчикам статей о языке JavaScript не обязательно уметь в язык русский.
Альтернатива не бывает единственной, она бывает только чему-то ещё.
Как тут не вспомнить:
let a = 1;
a.b = 2;
console.log(a.b); //undefined
В питоне такой пример вообще не пройдёт. Будет ошибка во торой строчке.
Все же это программирование это не просто кодинг, но алгоритмизация и понимание происходящих «под капотом» процессов.
Я бы рекомендовал странную, но довольно эффективную связку:
1) Начать с Python. Это язык, который менее всего отвлекает от осмысления самих алгоритмов, не сбивая новичка сложностями реализации. У него есть крупное коммьюнити, отличные мануалы и более-менее однозначный стиль написания кода. Человек научится искать ответы на вопросы (потому что будет их находить), больше времени посвящать разбору алгоритмов, перенося навык их построения на кончики пальцев и видеть результат, который легко изменять, не переписывая весь костяк своего кода.
2) Потенциальный начинающий уже не впадает в ступор перед простыми алгоритмами: он с ними экспериментировал, пробовал, ошибался, менял и «лечил» свой код. Самое время посмотреть под капот. Это C++. ООП, не прощающий ошибок. Ссылки, указатели, понимание работы с памятью на низком уровне. Типы данных и почему так важно их знать.
И на этом этапе надо взять и переписать все то, что уже писал на питоне. Это даст мощный пинок к пониманию самых азов.
А дальше — свободное плавание. Человек выходит после двухступенчатой пытки уже навыками отладки, чтения документаций и слезных просьб коммьюнити о помощи.
Почему некоторые индивиды так негодуют из-за отсутствия строгой типизации в JS? Я не понимаю что она дает такого. Кому не сложно приведите пример.
Если очень хочется иметь проверку типов, или нет возможности писать понятный код, на помощь спешит JSDoc, без всякого TypeScript и Flow, позволят описать тип переменной, и любой более-менее адекватный редактор подсветит код противоречащий этому описанию.
Столько слов сказано о том что классы в JS это лишь синтаксический сахар, а что в конечном итоге не синтаксический сахар?
nodejs конечно решает очень много проблем, но это не заслуга языка.
Сам js как был с «особенностями» так и остался.
Короче — для обучения людей худшего языка программирования придумать трудно.
Для обучения программированию PHP также не пригоден как и VBA.
Но несмотря на ужасы и кошмары PHP, C++, VBA и js они являются полными языками и при желании можно писать можно всё что угодно. Но количество усилий для выполнения одинаковых задач могут отличатся на порядки. Для своих ниш это практически монополисты. А по наличию противоречий все языки хороши.
Mocha (javascript) это тупиковая ветвь, ничего революционного в нем нет. Более того в него изначально заложены противоречия которые обязательно всплывут. А строить что-то на плавающем фундаменте можно только, очень не надолго.
* через полчаса *
— Нет, Витя, ты не можешь результат 1,5 умножить на 2 записать в эту переменную, потому что результат не целочисленный. Ну и что, что результат равен 3, это уже не целое все равно. Это же очевидно!
Отличный пример.
думаю при обучении играет немаловажную роль еще такая вещь как доступность.
Какие действия необходимо совершить, что бы начать изучать js? python?
Какие действия неоходимо совершить что бы начать изучать C#? C++?
И в целом, если подумать, цель в изучении принципов программирования, а не конкретных подходов, на конкретном ЯП, для решения конкретных задач.
Иногда, чтобы понять где и какие углы можно безболезненно срезать, нужно разобраться в сущности и причинах расположения данных углов. После этого можно будет выбирать, когда резать, когда — нет.
начинающие программисты далеко не всегда знают заранее и наперед, какой тип данных им понадобится через N строчек.
Этому они и должны учиться, если хотят стать инженерами, а не ремесленниками.
Разумеется, это очень субъективно.
Как человек, начавший с бэйсика, и перешедший к C через ассемблер, могу сказать, что прекрасно помню, как изучение С вызывало только положительные эмоции. Потому что было абсолютно понятно, какого ускорения и упрощения люди добились с его помощью.
Я считаю, что понимая низкоуровненвые вещи, значительно проще понять абстракции, выстроенные поверх них. Здесь есть принципиальная разница между «понять» и «использовать». Использовать — уровень технаря ПТУ (при всём уважении к золоторуким мастерам), понять — инженера конструктора.
У меня есть небольшой опыт обучения ребёнка (1шт.) программированию. Так вот, бэйсик и ассемблер мы, по очевидным причинам, пропустили а начали с основ устройства процессора и памяти компьютера, и С99. Не сказать, что начало было лёгким и простым. Зато, хорошенько поднатаскавшись кодить операции с основными структурами данных вручную, человек с радостью воспринял С++/ООП и его немалые удобства, затем поглядел на Java до уровня понимания, чем она отличается, чем уникальна и в чем основные подвохи, по моему совету углубился в JavaScript/Node.js (как основу сегодняшнего бизнес-веба), что-то там покрутил на Python (но в отсутствии реальных больших задач, я полагаю, не сильно больше поверхностного представления о нём получил).
Так вот теперь он стоит на распутье, полезно ли будет ему потратить 5 лет жизни на усиленный матан, дифуры, дискретку и не первой свежести знания по практическому программированию в университете, или же развиваться самостоятельно в интересных ему направлениях и достойных командах.
Вот этот выбор между реальными немалыми деньгами сегодня и 5ти-летними инвестициями не понятно во что, я Вам скажу, похлеще того, с какого же именно языка нужно было начинать.
Там будет 3.000000000000001 «как обычно».
И смысл в том, что получите вы три, или не три — большоооой вопрос…
А что делать, если оно не три?
Слушайте, тут только искренне лютого извращенца такое устроит...
Это же очевидно!
пс: При этом, математических либ никто никогда не будет юзать. А встроенных дробей нету.
Должен быть тип рационального числа вообще-то. И проблем с умножением тогда и не будет. 2 * 3/2 = 3 — ШЕДЕВРАЛЬНО!!! НЕ ТАК ЛИ?))) Слушайте, ну если вам не нужны скорости, а важна логика — то почему дробей-то нет в этом вашем js из коробка?
ппс: Уже даже в калькуляторах дроби есть, причем давно уже. А в езыках программирования нету. Замичательно живем, не правда ли?
Про ООП — и да и нет, но как видно js в эту сторону вроде как развивается.
Плохой код, как мне кажется, последствия развития и внесения новшеств в язык, хотя может я и не прав.
А громоздкость фреймворков и библиотек это не только проблема js — не буду тыкать пальцем на все похожие примеры, но для начала можно вспомнить php-шный zend
JavaScript — лучший язык программирования для начинающих. Так это или нет?