вівторок, 31 березня 2020 р.

Java vs Python

Так склалось, що останнім часом багато працюю з аналізом даних на Python. Попередньо опробував Matlab та R, після яких перейти на Python не склало взагалі ніяких проблем. Проте досвіду в програмуванні у мене все таки більше на Java, тому тут опишу Python з точки зору Java програміста. Нічим не хочу образити Python програмістів, просто погляд з під дещо іншим фокусом. Python потужна, просто освоювана мова програмування, з деякими недоліками, які втім не заважають конкурувати з іншими мовами програмування і з Java зокрема.

Динамічна типізація - жах Java програміста:-). Перше, що  впадає в очі це динамічне перетворення типів і відсутність контролю за типами змінних, що передаються у функції. В java  ти явно маєш вказувати тип і приведення до інших типів даних (крім деяких винятків). Крім того в Java при передачі змінної у функцію(метод) автоматично іде перевірка на відповідність типу змінної сигнатурі методу ще на етапі компіляції. В Java, щоправда, існує можливість написати універсальний метод, який прийматиме будь-який тип або ж якусь групу типів, але це необхідно явно вказати при оголошенні методу. Pyhon старається все робити автоматично і у функцію можна передати будь-який тип. Тому часто різноманітні функції з популярних модулів для аналізу даних Python "матюкаються" на те, що вони не можуть працювати з певним типом даних під час виконання програми (інколи з тієї інформації, що видає функція не завжди і зрозуміло в чому причина помилки). Методом проб і помилок приходиться здійснювати перетворення у відповідний тип власноруч.

Можливість писати слабоструктуровані програми або світ без ООП. Хоча ООП (об'єктно орієнтоване програмування) в python існує, проте програми в python можна писати без нього і взагалі навіть не оголошуючи функції. Написання такого коду в одному файлі приводить до того, що код python швидко може перетворитися в "гамнокод". Особливий бардак виходить в Jypyter notebook, спеціальному засобі, що працює у веб-браузері і дозволяє запускати код шматками в окремих комірках. Так що хочеш не хочеш, а щоб навести якийсь лад приходиться вдаватися до якоїсь структуризації і створювати модулі із власними функціями. В Java в цьому плані більш кращий підхід там навіть найпростішу програму ти пишеш у класі як мінімум з одним методом (те ж що і функція тільки в термінології ООП) під назвою main(). В Java, звичайно, теж можна втулити весь код програми в один метод, але все ж сам підхід створення програм на Java вимагає, щоб з самого початку програміст думав термінами класів та їх методів і структуризував відповідно програму. З іншого боку саме можливість писати програми без вникання в цілу теорію ООП і робить python популярним і зручним для початківців.

IDE. На Python можна програмувати в будь-чому як і на Java, щоправда використання простого текстового редактора як то блокнот не дуже хороше рішеннтя. Jypyter notebook взагалі шикарний засіб для тестування простого невеликого коду на Python. Більш просунуті програмісти можуть використовувати як звичний для Java програмістів Eclipse так і PyCharm, що зроблений на основі  Intellij IDEA (що також використовують широко Java програмісти). Щоправда безкоштовна версія PyCharm аж занадто обрізана(.

Сфера аналізу даних. В цілому Python дуже зручна мова і за легкістю програмування нагадав мені дещо PHP. Дуже потужна підтримка сфери аналізу даних та машинного навчання з великою кількістю форумів, статей та обговорень робить Python просто гравцем номер 1 у цій сфері. Python посунув на другий план такі, також безкоштовні, продукти як R та Weka. В Java також існують свої фреймворки для аналізу даних та машинного навчання, не гірші Python, проте їх використання вимагає певного досвіду програмування в Java і розуміння ООП підходу. В той час як на Python ти по суті мало що знаючи в програмуванні можеш починати використовувати доволі складні моделі машинного навчання на своїх даних почитавши одну-дві статті. Хоча як показують мої спостереження далеко без хорошого знання програмування ти не заїдеш, хоча б через те, що потрібно розуміти помилки, які видають ті чи інші функції, мати навички налагодження програм, розумітися на структурах даних і вміти структуризувати програми.

На захист Java скажу, що на мою думку якісь складні, комплексні продукти на Java все таки легше створювати і підтримувати саме завдяки кращій структоризації коду. В Java в цьому плані своя ніша.

Немає коментарів:

Дописати коментар