LINUX.ORG.RU

php или node.js?

 , , , ,


0

2

Привет. У меня есть вопрос.

Я начал интересоваться программированием с 14 лет, сейчас мне 19. За это время я попробовал практически все известные языки. Но у меня есть одна проблема: я не могу надолго остановиться на чём-то одном. Постоянно метаюсь между технологиями — то ухожу в Node.js, то в Java, то в C#. Сначала хочется строгой статической типизации, потом тянет попробовать что-то другое, это моя очень плохая черта. В итоге получилось так, что больше всего опыта у меня накопилось именно с Node.js (NestJS, Express). Вообще программирование мне искренне нравится. Даже если бы мне дали миллион долларов и сказали, что можно больше никогда не работать, я всё равно продолжал бы заниматься программированием просто потому что мне это интересно. Но сейчас встаёт другой вопрос - заработок. Когда я начал смотреть вакансии на hh, заметил, что предложений по Node.js не так много. Конечно, есть позиции full-stack разработчиков, и я готов двигаться в этом направлении, но всё равно вакансий заметно меньше чем, например, на PHP с Laravel - даже если смотреть именно full-stack.

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

Я живу на Кавказе, где IT-сфера практически не развита. В своём городе я нашёл только одну веб-студию. У них используется стек Flutter, React, а на бэкенде допускаются разные языки: го питон, нода, пхп. Я думаю попробовать устроиться туда хотя бы для получения первого опыта и записи в трудовой. А уже позже рассматривать переезд в Питер или Москву.

И вот мой главный вопрос:стоит ли мне продолжать развиваться исключительно в JavaScript/Node.js, или, пока есть свободное время, лучше подтянуть пхп? Судя по количеству вакансий, язык всё ещё долго будет востребован.

хз зачем, но вот гитхаб: https://github.com/csablk?tab=repositories



Последнее исправление: csablk (всего исправлений: 2)
Ответ на: комментарий от amm

Ты с ума сошёл? Зачем мне ссылки на коллбэки, где нужны кучи переменных? Что я с ними буду делать? Так-то на каждый pandas, конечно, найдётся свой dask с ленивым обработчиком, но в реальности обычно тот же scraping в питоне лаконичнее, информативные и без магии делается пулом тредов, чем бегать с асинхронным потоком от асинхронных get (ладно, просто в питоновом REPL всё синхронно и ему от aiohttp плохо - но в любом случае придётся всё в асмнхрон тащить и ну нафиг, когда треды в питоне отличные).

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 3)
Ответ на: комментарий от Shadow

Зачем мне ссылки на коллбэки, где нужны кучи переменных

Какие коллбеки? В питоне же есть async/await. Я уж было подумал, что ты бизнес-программист на 1с или абап :)

когда треды в питоне отличные

Как такое может быть, если gil только недавно убрали и не все библиотеки ещё это поддерживают?

amm ★★
()
Последнее исправление: amm (всего исправлений: 1)
Ответ на: комментарий от Shadow

Я уже начал сомневаться :) Что в питоновских потоках такого особенного, чем они отличаются от потоков в других интерпретируемых языках? То что ты про асинхронность имеешь посредственное представление, я уже понял, давай хоть про потоки расскажи :)

amm ★★
()
Ответ на: комментарий от amm

Везде потоки одинаковые. Особенного ничего нет, обычные не-ядерные 1:n. GIL имеет значение только при натягивании совы на глобус на ядерные, когда поток может «уйти» из общего контекста на другое ядро, и в 99% случаев для пользователя питона это не имеет значения (пользователь привык уже вместо циклов матрицы из numpy использовать, поэтому обработка у него «вне»).

Но почему-то широкие массы трактуют GIL как лок всего ядра на выполнение вообще всего процесса питона, пока не отработает логика треда (что не так, всё питоновые треды выполняются по-очереди в смысле операций, а не тредов целиком).

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от Shadow

Ну и? Что в этом особенное? Большинство языков, в которых есть интерпретатор, так с тредами работают. Я уж было подумал, что в питоне что-то особенное сделали. То что убрали gil это хорошо, но сколько времени должно пройти, чтобы отсутствие gil стало мейнстримом?

amm ★★
()
Ответ на: комментарий от amm

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

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от Shadow

нормальные треды во многих случаях лучше асинхронного кода

Они вообще для разных задач предназначены. Так сложно понять различие между cpu-bound и io-bound?

Но GIL к этому не имеет вообще никакого прямого отношения

Как не имеет? Сложно назвать треды, у которых такой механизм управления, нормальными. И кстати, почему нормальные? Пару сообщений назад были отличные :)

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

Ну так они фактически и не выполняются параллельно :)

amm ★★
()
Ответ на: комментарий от amm

Ну так они фактически и не выполняются параллельно :)

Но и не блокируются

И кстати, почему нормальные? Пару сообщений назад были отличные :)

Ладно, отличные, очень удобно использовать

различие между cpu-bound и io-bound?

Какая разница, если часто это варианты «интерфейса» к программисту, на тех же тредах можно накодить event loop.

Shadow ★★★★★
()
Ответ на: комментарий от Shadow

Но и не блокируются

И на этом спасибо :)

Ладно, отличные, очень удобно использовать

Может тогда расскажешь, как удобно снять поток, который висит на синхронном вызове?

Какая разница, если часто это варианты «интерфейса» к программисту

Хорошо, не буду тебя переубеждать :)

amm ★★
()
Ответ на: комментарий от amm

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

Shadow ★★★★★
()
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария