Tagged: java

[Перевод] Пол Грэм: Парадокс Питона (The Python Paradox)

Автор: Пол Грэм, August 2004
Python + Java
В недавней беседе я сказал то, что расстроило большое количество людей: «Вы можете найти более сообразительных программистов для работы над проектом на Python’е, чем для работы над Java проектом».

Я не имел в виду, что программисты на Java тупые. Я имел в виду, что программисты на Python’е сообразительнее. Ведь это огромная работа выучить новый язык программирования. Люди учат Python не потому, что он даст им возможность получить работу. Эти люди учат новый язык, потому что они искренне любят программировать и не удовлетворены теми языками, которые уже знают.

Это делает их как раз теми, кого компании по разработке ПО следует хотеть нанять. Именно поэтому, из-за отсутствия лучшего названия, я назову это «парадоксом Python’а»: если компания хочет написать своё ПО на относительно эзотерическом языке, то она наймет лучших программистов, потому что она привлечёт только тех, кто позаботился выучить его. Для программистов парадокс можно перефразировать так: язык, который нужно выучить, чтобы получить хорошую работу, это тот язык, который люди учат не только чтобы получить работу.

Не много компаний достаточно мудры, чтобы осознать это. Но и здесь происходить выбор: это как раз те компании, в которых программисты захотят работать. Например, Google. Когда они нанимают java программистов, они также хотят увидеть опыт программирования на Python.

Мой друг, который знает большинство распространенных языков, использует Python для большинства своих проектов. Он говорит, что основная причина, это то как выглядит исходный код. Это может показаться несерьезной причиной выбора языка. Но это намного вачнее, чем кажется: когда ты пишешь программу, ты тратишь больше времени на чтение, чем на написание кода. Ты добавляешь куски исходного кода также, как скульптор добавляет куски глины. Язык, который делает исходный код уродливым, сводит с ума придирчивого программиста, как глина с комьями скульптора.

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

До сих пор, не смотря ни на что, оба языка являются «движущимися мишенями». Тем не менее их объединяет с Ruby (и Icon, и J, и Lisp, и Smalltalk) тот факт, что они создавались и использовались людьми, которые действительно интересуются программированием. И тот велик, кто делает это хорошо.

Оригинал (англ.) The Python Paradox
Статья хоть старая но до сих пор актуальная. Перевод не мой, я просто делаю репост чтобы не потерялся текст.
И кстати да, не дайте себе запудрить мозги, Ява лучше 😉
joseph-ducreux-meme-disregard-python-acquire-java-080b2b

Код Java в bat-файле

Маленькая забавность о том, как использовать все возможности Java в обычных bat-скриптах. Или сделать скриптовый язык из Java.

Далее рассказан простой способ скомпилировать и запустить Java код, который находится внутри bat-файла.

Навеяно статьёй Код С# в bat-файле. Я реализовал тоже самое для Java. Только я не стал делать поиск папки в которую установлен JDK, т.е. в переменной %PATH% должен быть указан путь к %JDK_HOME%/bin

Не буду долго томить, вот код bat файла Test.bat:

/*
copy %0 .\%~n0.java
javac %~n0.java
cls
java %~n0
del %~n0.class
del %~n0.java
exit
*/

public class Test {
 public static void main(String[] args) throws Exception {
  System.out.println("Hello world from Java!");
  System.out.println("Press Enter to exit");
  System.in.read();
 }
}

Выполнив полученный батник увидим:

Работает это так:

  1. Сначала работает bat-интерпретатор. Первую строчку скрипта (комментарий Java /*) он не понимает и выдает ошибку. Но не страшно, это чисто визуальное неудобство.
  2. Затем мы копируем бат файл в файл с таким же именем но уже с расширением *.java, иначе компилятор javac откажется его компилировать. Выражение %~n0 вернёт имя файла без расширения: параметр 0 всегда имя файла а квалификатор n только имя файла. Следите за названием файла, поскольку имя *.java файла должно соответствовать имени класса внутри него.
  3. Далее компилируем консольным компилятором javac который в качестве аргумента принимает путь к файлу с исходником. В нашем случае исходник находится в теле bat-файла (строки 10–18). Текст bat-команд игнорируется, как комментарий (строки 1 и 9).
  4. После работы компилятора, получаем class файл, который запускаем (предварительно подчистив экран командой cls) и удаляем после завершения его работы.
  5. Работа bat-интерпретатора заканчивается на 8 строке (exit).

Если есть трудности с синтаксисом bat скриптов могу посоветовать хорошую статью.

Это был пример, я использую ещё немного улучшенный вариант bat файла. В случае ошибок компиляции он их выведет. Ещё также он добавит в CLASSPATH все *.jar файлы которые он найдёт рядом.

/*
@echo off
copy %0 .\%~n0.java
cls
javac -classpath CLASSPATH=.\*.jar;.\lib\*.jar  %~n0.java
if %ERRORLEVEL% equ 0 (
 cls
 java %~n0
 del %~n0.class
)
del %~n0.java
exit
*/

public class Test {
 public static void main(String[] args) throws Exception {
  System.out.println("Hello world from Java!");
  System.out.println("Press Enter to exit...");
  System.in.read();
 }
}

Целесообразность, скорее just for fun. Но иногда бывает удобнее выслать новичку один файл, уже с прописанной строчкой компиляции, который нужно просто выполнить.

UPD

Узнал о библиотеке Launch4j которая может превратить ваш jar файл в обычный запускаемый exe