LINUX.ORG.RU

Python vs PHP - что изучать (для себя) в 2023-ем году?

 ,


3

2

Или нечто совершенно иное («как безнадежно устарел ваш heavy metal в наш 21-ый век…»)?

Хочется чего-то нового в жизни. Почему бы этим новым не стать программированию?

Применение?

Возможно, разработка небольших проектов «под ключ».

Может попытаюсь сделать что-то свое и для себя.

В общем, удобно расположившись на диване, читаю «A Byte of Python» https://python.swaroopch.com/

Читается легко и быстро. Что странно (помнится лет 10-15 назад начинал читать в поезде Дмитрия Котерова, но вот как-то не пошло тогда). Даже время от времени проскакивает мысль - а то ли я делаю? Не повторяю ли я «подвиг» Уильяма Генри Шмидта? В плане создания символического образа его труд, конечно, не напрасен. Но все же.. тот же Манджхи Дашратх смог сделать намного более полезную вещь.

В общем, хотелось бы послушать мысли. Любые. :)

P.S. Разумеется, всех с Новым Годом! Счастья, удачи, исполнения желаний!

Наверное до 8 пыха я бы посоветовал питон, но этот год я провел изучая пых и ts и понял, что эта связка гораздо лучше чем пистон.

Все что было на питоне у меня, я переписал на go.

Еще для души читаю и пишу на nim.

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

PHP и Python не нужно тестировать сто тысяч раз на разных устройствах…

Как уже писали, твоя информация о вебе максимум 2010 года свежести. Сейчас в вебе есть разделение на фронт и бэк. Для фронта сейчас популярны фреймворки типа react и vue. Используются готовые компоненты и фреймворки для верстки типа bootstrap. При таком подходе совместимостью с разными браузерами и адаптацией под разрешение комп/смартфон занимаются фреймворки. Если ты досконально знаешь детали рендеринга цсс - это уже уровень опытного сеньора - лида.

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

Логически верно, но не понимаю, как можно изучать алгоритмы в отрыве от языка? Ведь все равно придется использовать какой-то синтаксис, какие-то определенные конструкции.

Minimalist
() автор топика
Ответ на: комментарий от Minimalist

Логически верно, но не понимаю, как можно изучать алгоритмы в отрыве от языка? Ведь все равно придется использовать какой-то синтаксис, какие-то определенные конструкции.

Ну алгоритмы изучают как раз в отрыве от языка обычно…

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

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

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

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

И всё таки, мне кажется, что js по сложности примерно как С++, к тому же, если часть кода выполняется на устройстве пользователя, это же дает ему возможность модифицировать данные и отправить не совсем запланированные запросы. Разве нет? И я пока не понимаю, как можно писать бэкенд на js, не спорю что это возможно, но… как это вообще возможно?! Хотя да, тот же Сбербанк Онлайн, похоже работает на Node.js

Minimalist
() автор топика
Ответ на: комментарий от Minimalist

Любой язык сложен, если нужно писать сложные проекты.

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

Да, NodeJS.

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

С питоном ситуация несколько иная. По большей части, питон используют как скриптовую оболочку вокруг сишных библиотек, которые рассчитаны на анализ данных, на ML и пр. прикладные вычисления, т.е. существенная (а по деньгам почти вся) часть разработки на питоне с программированием связана мало, это скорее выполнение работ по профессии выраженная на питоне. Поэтому если ты не умеешь в анализ данных, ML и пр. вещи, то быстро упрешься в потолок. Хотя, конечно, есть Django и пр., но карьерный путь, имхо, там сильно ограничен. И как уже сказали выше, время питона для веба, по-видимому, заканчивается.

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

Если ты досконально знаешь детали рендеринга цсс - это уже уровень опытного сеньора - лида.

Если не знаешь, но изображаешь из себя верстальщика - то ты нехороший человек. А все эти «титулы» это бред.

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

js по сложности примерно как С++

Ваш пост обижает С++ разработчиков. Вся сложность js - «правильно» ходить чтобы не наступать на грабли. И знать, как правильно делаются банальные вещи. К примеру, нужно перебрать ср-ный хеш массив. php

foreach($array as $key=>$value) {

Питон

for key, value in a_dict.items():

js

for (let [key, value] of Object.entries(yourobject)) {

* для ES6, для более старых нужен этот WTF код

for (let key in yourobject) {
   if (yourobject.hasOwnProperty(key)) {
      let value = yourobject[key];

И читать целую статью, как перебирать хеш массив) https://stackoverflow.com/questions/14379274/how-to-iterate-over-a-javascript-object

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

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

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

Вся сложность js - «правильно» ходить чтобы не наступать на грабли. И знать, как правильно делаются банальные вещи.

Это на начальном уровне (или уже на среднем?). Дальше нужно уметь, кмк, делать привычные для других языков вещи через то, что есть в JS, т.е. по большей части через замыкания. Т.е. делать ООП, Функциональщину, паттерны и все пр., а еще и видеть в чужом коде все это…

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

Тут в теме понимания процесса (или ближе к истине, хрен его знает) я заметил slackwarrior. Неудачный пример, у него были лучше высказывания (про небо и даже Аллах), но на безрыбье (я не умею в поиск) - Как научиться программировать? (комментарий) или Сколько зарабатывает Pascal программист? (комментарий)

Когда я стал глубже вникать в программирование, то все эти алгоритмы, оторванные от контекста - говно! Best practice - говно.

Выбрать ЯП с большим сообществом и батарейками, хорошую поддержку в тылу/быту и самое главное для программирования - желание и физическая возможность. Чтобы пёрло! А то все раз - и в преподаватели )))

Как научиться программировать? (комментарий)

Roy-Batty
()
Ответ на: комментарий от Minimalist

Какая основная причина была?

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

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

делать ООП, Функциональщину, паттерны и все пр., а еще и видеть в чужом коде все это…

Ну да, правильно делать декомпозицию в ООП, паттерны проектирования, это понадобится пораньше, чем «алгоритмы», которые тоже советовали в треде) Но оно как бы очень схоже и для других ЯП, это не то чтобы особенность/сложность JS по сравнению с другими.

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

Вот это вот все эти map() filter() reduce() every()? Ха-ха, в JS нету нормальных операторов, чтобы обходить массивы и хеши, поэтому там эта тема так развита) Ну, выходит не плохо) Но это не настоящий ФП, так как это просто чейнинг, а не композиция функций.

goingUp ★★★★★
()

Вспомнился старый анекдот:

Оптимисты изучают английский. Пессимисты изучают китайский. Реалисты изучают автомат Калашникова.

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

for (let [key, value] of Object.entries(yourobject)) {

Так делают только нубы. Нормальные люди пишут

for (const [key, value] of yourMap.entries()) {...}

для ES6, для более старых

Найди в живой природе хоть один «более старый».

no-such-file ★★★★★
()
Ответ на: комментарий от Minimalist

хороший учебник по PHP

Лучший учебник всех времён и народов

Можешь найти на торрентах более старое издание, тебе для начала не особо принципиально.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 2)
Ответ на: комментарий от mjdtdw

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

caryoscelus
()

Не слушай апологетов PHP, это последние судороги мертворожденного языка. Даже если на PHP написано огромное количество кода (не знаю, как в целом оценить, но уверен, что на Python написано в разы больше) - тебе придётся работать с плохо продуманным языком, на котором в разы больше плохого кода, и придётся в лучшем случае работать с седым legacy, которое с самого начала было построено по архитектуре Big Ball of Mud и код которого уже никому не понятен.

PHP - был создан человеком, который открыто говорил, что он не программист и ничего не понимает в программировании. Да, поверх ужасной архитектуры первых версий наложили десятки слоев новых версий в попытке приблизить PHP неизвестно к чему (к Java?), но это как строить новый дом на гнилом фундаменте - всё равно по стенам постоянно трещины идут.

Просто возьми и пролистай код известных проектов на PHP, и известных проектов на Python. Код того же WordPress vs Wagtail, например.

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

Индустрия тоже сделала выбор. Сильно сомневаюсь, что хоть кто-то сейчас начинает делать новые проекты на PHP - смысла нет никакого.

emorozov
()
Ответ на: комментарий от sol13

Еще для души читаю и пишу на nim.

Он же, вроде, по синтаксису очень схож с Python? Может пробовали его применять, чтобы ускорить код на Python?

Вообще, сама идея писать узкие места на чем-то более производительном имеет право на жизнь или это дурной тон?

И еще вопрос - как часто на практике приходилось сталкиваться с необходимостью подобного ускорения?

Minimalist
() автор топика
Ответ на: комментарий от emorozov

Слушайте, так ведь и Python пытаются поставить на ту же полку.

Если все обобщить, то вырисовывается картина вроде «Переписать бы всё это с нуля, но ведь такое количество библиотек…»

Minimalist
() автор топика
Ответ на: комментарий от Minimalist

Слушайте, так ведь и Python пытаются поставить на ту же полку.

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

Новые проекты на Python появляются. Как новые библиотеки, фреймворки, так и новые корпоративные проекты.

Если все обобщить, то вырисовывается картина вроде «Переписать бы всё это с нуля, но ведь такое количество библиотек…»

Для Python количество этих библиотек на порядки превосходит количество библиотек для PHP, т.к. PHP долгое время не годился ни для чего, кроме веб (например, не было никакого управления памятью, даже сборщика мусора, т.к. предполагалось, что каждый скрипт быстро отрабатывает HTTP запрос и умирает вместе с интерпретатором).

Да и сейчас мне почти незнакомы применения PHP за пределами веб. На Python же, помимо веб и сетевых библиотек, существует не меньше различных математических data science библиотек, GUI-библиотек и приложений, и т.д. Python также нередко используется в качестве языка для скриптования приложенй (хотя и реже, чем lua, но однозначно ни разу не видел использования PHP в таком качестве).

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

emorozov
()

Решил спросить у железяки


Нет, лучше расскажи как мне настроить среду для того, чтобы написать мое первое «Привет мир!» на языке C. Если что, система Debian Linux. Какие пакеты поставить? И что настроить?

Чтобы настроить среду для разработки на языке C в системе Debian Linux, вам нужно будет установить компилятор C. В Debian это можно сделать, выполнив следующую команду:


sudo apt-get install gcc



Эта команда установит компилятор GCC (GNU Compiler Collection), который поддерживает язык C и другие языки программирования.

После установки компилятора вы можете написать программу на языке C в текстовом редакторе (например, nano, vi или emacs) и сохранить ее в файл с расширением .c. Например, вы можете сохранить файл как hello.c. После этого вы можете компилировать программу, выполнив следующую команду:


gcc hello.c -o hello



Эта команда скомпилирует вашу программу и создаст исполняемый файл с именем hello. Чтобы запустить программу, выполните следующую команду:


./hello



Если все сделано правильно, то вы увидите сообщение «Привет мир!» на экране.

А как мне увидеть мое «Привет мир!» в браузере?

Чтобы увидеть «Привет мир!» в браузере, вам нужно будет написать серверное приложение на языке C, которое будет обрабатывать HTTP-запросы и отправлять обратно ответы в виде HTML-страниц. Для этого вам нужно будет использовать некоторые библиотеки для работы с сетью и веб-протоколами, такие как libcurl или libmicrohttpd.

Однако, разработка серверных приложений на языке C требует большего опыта и знаний, чем написание простой консольной программы «Привет мир!». Если у вас нет опыта с сетевыми приложениями и веб-протоколами, то разработка веб-сервера на языке C может быть сложной и трудоемкой задачей. В таком случае рекомендуется изучить другие языки программирования, которые более подходят для разработки веб-приложений, такие как Python, Ruby,

Нет, я хочу написать «Привет мир!» именно на языке С, может быть на каком-нибудь фреймворке С. И увидеть это в браузере. Как мне это сделать? Нужен ли мне Apache? И как я буду работать с базой данных MariaDB?

Для разработки веб-приложений на языке C существует несколько фреймворков, которые могут помочь вам со структурированием кода и упрощением работы с HTTP и базами данных. Одним из таких фреймворков является libonion.

Чтобы установить libonion, вам нужно будет сначала установить некоторые зависимости, такие как pkg-config и libcurl. Это можно сделать, выполнив следующую команду:


sudo apt-get install pkg-config libcurl4-openssl-dev



После этого вы можете установить libonion, выполнив следующую команду:


sudo apt-get install libonion-dev



После установки libonion вы можете написать ваше первое веб-приложение на языке C с помощью этого фреймворка. Для этого вам нужно будет написать код, который будет обрабатывать HTTP-запросы и отправлять обратно ответы в виде HTML-страниц. В libonion есть несколько функций и макросов, которые помогут вам в этом. Например, вы можете использовать функцию onion_response_write для отправки строки в качестве ответа на HTTP-запрос. Например:




#include <onion/onion.h>



int main() {

 onion *o = onion_new(O_POOL);

 onion_set_root_handler(o, onion_handler_new((void*)onion_handler_string, "Привет мир!", "text/html"));

 onion_listen(o);

 onion_free(o);

 return 0;

}



Этот код создаст новый сервер, который будет обрабатывать все запросы и отправлять обратно строку «Привет мир!» в качестве HTML-страницы.

Чтобы работать с базой данных MariaDB в своем веб-приложении, вам нужно будет установить библиотеку MariaDB Connector/C. Это можно сделать, выполнив следующую команду:


sudo apt-get install libmariadb-dev





После установки MariaDB Connector/C вы можете использовать функции из этой библиотеки для соединения с базой данных, выполнения SQL-запросов и обработки результатов.

Однако, непосредственно в libonion нет встроенных средств для работы с базами данных. Вам нужно будет реализовать эту функциональность самостоятельно, используя MariaDB Connector/C и другие библиотеки для работы с базами данных.

Чтобы развернуть ваше веб-приложение на сервере с Apache, вам нужно будет установить Apache и сконфигурировать его так, чтобы он запускал ваше приложение при получении HTTP-запросов.

Чтобы установить Apache, выполните следующую команду:


sudo apt-get install apache2



Для того, чтобы сконфигурировать Apache для запуска вашего веб-приложения при получении HTTP-запросов, вам нужно будет создать файл с настройками виртуального хоста. Этот файл должен быть размещен в директории /etc/apache2/sites-available/.

В этом файле вы можете указать, что Apache должен запускать ваше приложение при получении HTTP-запросов. Например, вы можете указать, что приложение должно запускаться с помощью команды «./myapp» при получении HTTP-запросов.

Ниже приведен пример файла с настройками виртуального хоста:




Copy code

<VirtualHost *:80>

 ServerName myapp.com

 DocumentRoot /var/www/myapp

 <Directory /var/www/myapp>

  AllowOverride All

 </Directory>

 ErrorLog ${APACHE_LOG_DIR}/error.log

 CustomLog ${APACHE_LOG_DIR}/access.log combined

 <IfModule mpm_itk_module>

  AssignUserId user group

 </IfModule>

</VirtualHost>



В приведенном выше примере файла с настройками виртуального хоста указано, что при получении HTTP-запросов на сервер с именем «myapp.com» должен запускаться скрипт, находящийся в директории /var/www/myapp/.

Minimalist
() автор топика

Чтобы сконфигурировать Apache для запуска вашего веб-приложения, вы можете добавить в этот файл следующую строку:


 ServerScript "/path/to/myapp -p 8080"



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

Чтобы запустить ваше веб-приложение, вы можете использовать следующую команду:


./myapp -p 8080



После того, как вы сконфигурируете Apache и запустите ваше веб-приложение, вы сможете увидеть «Привет мир!» в браузере, открыв в браузере страницу с адресом «http://myapp.com/».

Обратите внимание, что в этом примере я использую фреймворк libonion для разработки веб-приложения на языке С. С помощью этого фреймворка вы можете разрабатывать веб-приложения, используя стандартные технологии, такие как HTTP, HTTPS, куки и т.д.

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

Чтобы установить клиент базы данных MariaDB, выполните следующую команду:




sudo apt-get install mariadb-client



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


mysql -h hostname -u username -p



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

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




CREATE TABLE users (id INTEGER PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255), age INTEGER);

INSERT INTO users (name, age) VALUES ('John', 35);

INSERT INTO users (name, age) VALUES ('Jane', 28);



Чтобы выбрать данные из таблицы, вы можете использовать следующий запрос:




SELECT * FROM users;



Этот запрос вернет все строки из таблицы «users».

Чтобы выбрать только определенные столбцы, вы можете использовать следующий запрос:




SELECT name, age FROM users;



Чтобы указать условие для выборки, вы можете использовать оператор «WHERE»:




SELECT * FROM users WHERE age > 30;



Этот запрос вернет все строки из таблицы «users», у которых значение в столбце «age» больше 30.

Чтобы работать с базой данных из вашего веб-приложения, вы можете использовать функции MariaDB клиента для выполнения SQL-запросов из кода на языке С. Например, вы можете использовать функцию mysql_query(), чтобы выполнить запрос и получить результат.

Следующий пример кода демонстрирует, как выполнить запрос выборки из таблицы «users» и вывести результат на экран:


#include <stdio.h>

#include <stdlib.h>

#include <mysql/mysql.h>



int main(int argc, char** argv)

{

  MYSQL *conn;

  MYSQL_RES *res;

  MYSQL_ROW row;

  char *server = "localhost";

  char *user = "root";

  char *password = "root";

  char *database = "mydatabase";



  conn = mysql_init(NULL);



  /* Connect to database */

  if (!mysql_real_connect(conn, server,

               user, password, database, 0, NULL, 0)) {

    fprintf(stderr, "%s\n", mysql_error(conn));

    exit(1);

  }



  /* send SQL query */

  if (mysql_query(conn, "SELECT * FROM users")) {

    fprintf(stderr, "%s\n", mysql_error(conn));

    exit(1);

  }



  res = mysql_use_result(conn);



  /* output table name */

  printf("MySQL Tables in mysql database:\n");

  while ((row = mysql_fetch_row(res)) != NULL)

    printf("%s %s\n", row[0





здесь обрыв сообщения



продолжи

Да, конечно. Продолжая ответ:

В приведенном выше примере кода мы используем функцию mysql_query() для выполнения запроса SELECT * FROM users. Затем мы используем функцию mysql_use_result() для получения результата запроса и функцию mysql_fetch_row() для перебора строк результата. В каждой итерации цикла while мы выводим значения столбцов в строке на экран.

Обратите внимание, что в приведенном примере мы используем функции MySQL без обработки ошибок. В реальном приложении вам нужно будет обрабатывать ошибки.

Чтобы вывести «Привет мир!» на экране браузера, вы можете написать простую HTML-страницу с помощью языка С. Например, следующий код на языке С выводит «Привет мир!» в браузере:




#include <stdio.h>



int main(int argc, char** argv)

{

  printf("Content-Type: text/html\n\n");

  printf("<html>\n");

  printf("<head>\n");

  printf("<title>Привет мир!</title>\n");

  printf("</head>\n");

  printf("<body>\n");

  printf("<h1>Привет мир!</h1>\n");

  printf("</body>\n");

  printf("</html>\n");

  return 0;

}





Чтобы выполнить этот код, вы можете скомпилировать его с помощью GCC и запустить на веб-сервере, таком как Apache. Затем вы можете открыть страницу в браузере, чтобы увидеть результат.

Minimalist
() автор топика

Вот всё было хорошо, пока не увидел как выглядит код вывода простой страницы.

Или это GPT зачем то усложняет и можно было сделать как-то так?

#include <stdio.h>



int main(int argc, char** argv)

{

  printf("Content-Type: text/html\n\n");

  printf("<html><head><title>Привет мир!</title></head><body><h1>Привет мир!</h1></body></html>");

  return 0;

}

В любом случае, стало понятно, что C для Web - совсем не вариант. :)

Minimalist
() автор топика

Тред не читал. Вставлю своё ИМХО.

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

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

Он же, вроде, по синтаксису очень схож с Python? Может пробовали его применять, чтобы ускорить код на Python?

Да. Причем очень близок и переход на него более простой. + компилится

sol13 ★★★★★
()
Ответ на: комментарий от no-such-file

yourMap.entries()

Uncaught TypeError: yourMap.entries is not a function

Найди в живой природе хоть один «более старый».

Айфон 6) Partial support до 9. Но babel конечно поможет.

goingUp ★★★★★
()
Последнее исправление: goingUp (всего исправлений: 2)