LINUX.ORG.RU

Java вышла на первое место?


0

0

Согласно TIOBE Programming Community Index,в сентябре Java вышла на первое место по популярности среди всех языков программирования с рейтингом 22.442% , прибавив в рейтинге +6.55%. Для сравнения С = 19.160% (+2.04%)

>>> TIOBE Programming Community Index for September 2005



Проверено: Shaman007 ()

Ответ на: комментарий от anonymous

>"блокировка вычисления аргументов" применительно к яве и массивам

А хрен его знает. ;) Ну допустим функия получает один аргумент (который типа символ). Без блокировки вычислений она вызывается так:

somefunc('A')

А с блокировкой вычислений так:

somefunc(A)

>Пример, кстати, нежизненный нихрена.

Ну скачай исходники sbcl (steel bank common lisp) там примеров дохрена. И все такие жизненные.

>/me давеча начал читать Practical Common LISP.

Успеха.

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

В лиспе, вся фишка в том, что при раскрытие макроса можно использовать всю мощь самого лиспа. И второе приемущество то что программа представляет списки(по сути AST дерево), т.е. с её лекго обрабатывать, по сравнению с программой на С Джаве или другом подобном языке.

Благодоря этим особенностям макропрограммирование становиться очень простым. А уже само макропрограммирование помогает работать над более выскими абстракциями и избежать повторения кода. Можно сказать что Лисп выгодно отлечается от других языков, с поддержкой макропрограммирования , именно простой и прозрачностью макросов.

Попробуй возьми какой-нибудь пример прикладного использования макросов из того-же Practical Common Lisp. И сделай так что-бы это также компактно и элегантно смотрелось на Джаве.

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

Вот пример из PCL:

Такая конструкция:

(define-tagged-binary-class id3v2.3-frame ()
  ((id                (frame-id :length 4))
   (size              u4)
   (flags             u2)
   (decompressed-size (optional :type 'u4 :if (frame-compressed-p flags)))
   (encryption-scheme (optional :type 'u1 :if (frame-encrypted-p flags)))
   (grouping-identity (optional :type 'u1 :if (frame-grouped-p flags))))
  (:dispatch (find-frame-class id)))

Раскрывается в:
(progn
  (eval-when (:compile-toplevel :load-toplevel :execute)
    (setf (get 'id3v2.3-frame 'slots)
	  '(id size flags decompressed-size encryption-scheme
	    grouping-identity))
    (setf (get 'id3v2.3-frame 'superclasses) 'nil))
  (defclass id3v2.3-frame
      nil
    ((id :initarg :id :accessor id) (size :initarg :size :accessor size)
     (flags :initarg :flags :accessor flags)
     (decompressed-size :initarg :decompressed-size :accessor
			decompressed-size)
     (encryption-scheme :initarg :encryption-scheme :accessor
			encryption-scheme)
     (grouping-identity :initarg :grouping-identity :accessor
			grouping-identity)))
  (defmethod read-value
      ((#:typevar (eql 'id3v2.3-frame)) #:streamvar &key)
    (let* ((id (read-value 'frame-id #:streamvar :length 4))
	   (size (read-value 'u4 #:streamvar))
	   (flags (read-value 'u2 #:streamvar))
	   (decompressed-size
	    (read-value 'optional
			#:streamvar
			:type
			'u4
			:if
			(frame-compressed-p flags)))
	   (encryption-scheme
	    (read-value 'optional
			#:streamvar
			:type
			'u1
			:if
			(frame-encrypted-p flags)))
	   (grouping-identity
	    (read-value 'optional
			#:streamvar
			:type
			'u1
			:if
			(frame-grouped-p flags))))
      (let ((#:objectvar
	     (make-instance (find-frame-class id)
			    :id
			    id
			    :size
			    size
			    :flags
			    flags
			    :decompressed-size
			    decompressed-size
			    :encryption-scheme
			    encryption-scheme
			    :grouping-identity
			    grouping-identity)))
	(read-object #:objectvar #:streamvar)
	#:objectvar)))
  (defmethod write-object
      progn
    ((#:objectvar id3v2.3-frame) #:streamvar)
    (declare (ignorable #:streamvar))
    (with-slots
	  (id size flags decompressed-size encryption-scheme
              grouping-identity)
	#:objectvar
      (write-value 'frame-id #:streamvar id :length 4)
      (write-value 'u4 #:streamvar size)
      (write-value 'u2 #:streamvar flags)
      (write-value 'optional
		   #:streamvar
		   decompressed-size
		   :type
		   'u4
		   :if
		   (frame-compressed-p flags))
      (write-value 'optional
		   #:streamvar
		   encryption-scheme
		   :type
		   'u1
		   :if
		   (frame-encrypted-p flags))
      (write-value 'optional
		   #:streamvar
		   grouping-identity
		   :type
		   'u1
		   :if
		   (frame-grouped-p flags)))))

Чуете разницу?:)

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

>"блокировка вычисления аргументов" применительно к яве и массивам

> А хрен его знает. ;) Ну допустим функия получает один аргумент (который типа символ). Без блокировки вычислений она вызывается так:

> somefunc('A')

> А с блокировкой вычислений так:

> somefunc(A)

Ну в чисто статическом языке без REPL (в Яве, в смысле) не очень понятно, зачем оно нужно.

Собственно, довольно странно требовать от явы гибкости CL - она специально сделана в стиле order and bondage. Дабы "быдлокодеры" не накодили чего лишнего.

Зато, чует мое сердце, на макрах можно такого наобфускейтить, что мало не покажется... Перловка нервно курит в сторонке.

/me продолжает читать Practical CL.

anonymous
()
Ответ на: комментарий от Fedor

>Ok, пусть они не сырые и грамотно написаны, но чем плохи, например, gtk-шные биндинги для того же lisp'а?

Сколько у этих биндингов лэйаут менеджеров aka менеджеров компоновки? В Swing есть минимум 4: GridLayout, Box Layout, Grid Bag Layout, Spring Layout

>А где в java RAD? Нет там его.

Она вся сама - RAD

>Может быть в такой ситуации лучше использовать язык с явным выделением/сборкой памяти?

А все наверное дураки, потому что не используют?

>>Как она их экономит? 10-е правило помним? Какое же тут время...

>Кстати насчёт Гринспуна.

Что за правила вообще такие? Где вы их выкопали?

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

> Сколько у этих биндингов лэйаут менеджеров aka менеджеров компоновки?

От оно как - "лэйаут менеджеры" придумали жабееры и нигде их больше нет. А вот Б. Гейтс придумал ... молчу-молчу.

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

>Собственно, довольно странно требовать от явы гибкости CL

А я этого и нетребую. (Что я дурак что ли? Знаю же что это не возможно). Я требую, чтобы The Anonymous держал ответ за свои слова. Либо извинился перед сообществом, за то что вводил его в заблуждение.

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

>Что за правила вообще такие? Где вы их выкопали?

Десятое правило Гринспуна гласит: функциональность любой достаточно большой программы содержит половину функционала лиспа. Причём реализованного крайне погано.

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

> map { $_ + 7} (1,2,3) (excuse my Perl ;-) довольно сложно выразить на Java вообще.

если принять, что список соответствует java массиву, то можно сделать примерно так:

abstract class Mapper { public int[] map(int[] list) { for (int i = 0; i<list.length; i++) list[i] = transform(list[i]); }

abstract int transformation(int i); } ...

new Mapper() { int transform(int i) { return i + 7; } }.map(new int[] = ( 1, 2, 3);

это просто пример конкретной реализации аналога map из perl. с использованием шаблонов можно уйти от жeсткой привязки к int. если хочется получить совсем уж макрос, нужен препроцессор, который будет генерить примитивный for-loop без Mapper и transform.

берем antlr и делаем нужный препроцессор. если будет интересно "протестировать" меня на способность написать такой препроцессор, дайте знать.

не люблю повторяться, но, при наличии необходимости и желания, с некоторыми исключениями, конечно (хотя бы то, что java, к примеру, строго-типизированный язык), можно реализовать любую конструкцию любого языка, чем, ксати, интерпретатор lisp или perl и занимаются. возможность включения препроцессора в процесс компиляции, надеюсь, ни у кого не вызывает сомнений. то есть, писать:

map { $ + 7} (1,2,3)

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

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

извините за кучу ошибок и форматирование -- торопился.

abstract class Mapper {
  public int[] map(int[] list) {
    for (int i = 0; i<list.length; i++)
      list[i] = transform(list[i]);
    return list;
  }

  abstract int transformation(int i);
}

new Mapper() {
  int transform(int i) {
    return i + 7;
  }
}.map(new int[] { 1, 2, 3});

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

> abstract class Mapper { public int[] map(int[] list) { for (int i = 0; i<list.length; i++) list[i] = transform(list[i]); return list; } abstract int transformation(int i); }

Ого, крута. А на асме для x86 такое могёшь?

anonymous
()

Народ! Так много запросов в поисковиках только потому что 13-14 летние писюны ищут новые Ыгрушки для своих мотороллеров :))

anonymous
()
Ответ на: комментарий от pitekantrop

Ок, не всё хорошо с биндингами
Но я имел в виду, что на SWT свет клином не сошёлся
Не единственный это способ GUI писать

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

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

anonymous
()

Коллеги! Приятно посмотреть на обсуждение - уже и исходники в ход пошли! :-) А если серьёзно, то, конечно, все рейтинги относительны. И все мы пишем на разных языках - и должны знать разные языки, чтобы применять инструмент сообразно обстоятельствам. (Лично мне к душе вообще Perl.) По делу хочу сказать, что на Джаве за бугром ДЕЙСТВИТЕЛЬНО делается МНОГО серьёзных проектов для банков, больших корпораций и правительств (в основном, силами IBM и Oracle). Так что дело не только в мобильниках. Я сам к Джаве относился с подозрением, пока не разобрался с ней получше. А сейчас пишу на ней - и не без удовольствия. В этом году в отпуске [для общего развития] познакомился с .NET и попробовал писАть на C#. Считаю, что это лучший Майкрософтовский проект. Но до Джавы как платформы они пока "не дотянули" - в J2SE/EE/ME всё более продуманно. Важно не кто на 1-м месте, а то, что есть много хороших языков!

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

>В этом году в отпуске [для общего развития] познакомился с .NET и попробовал писАть на C#.
давить их надо, пока маленькие, затаптывать, чтоб не разгорелось...

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

> abstract class Mapper

[skip]

Ну это-то понятно. Кстати, более вменяемым, имхо, было бы использовать список+итератор. Еще, кстати, можно сравнить объем кода ;) Еще, кстати, написанный код неверен, ибо map в данном случае не модифицирует исходный список, а возвращает новый. Мораль сей сказки - frst class functions - это хорошо. И шаблоны типа Action и Visotor их не заменяют.

С лиспячей макрой вышеприведенное тягаться не может - нет той самой "блокировки вычисления". Перловка, кстати, тоже без напильника в виде eval("code") такое не умеет. Зато в ней из этого самого eval можно высунуть closure, и будет нам счастье ;)

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

Дело в том, что более-менее нетривиальной программе на разных уровнях удобно использовать разные парадигмы. Т.е. снаружи у нас процедурное "прочитали конфиг-прочитали данные-застроили гуй-работаем-выходим", гуй - на объектах с signal-slot, а сама "работа", т.е. то, что у нас спрашивает пользователь - функциональщина.

Можно, конечно, писать C-шный main(), гуй на плюсах с Qt и вычисления на Haskell - но возникают накладные расходы по увязыванию всего этого зоопарка. Можно писать все на Яве - но тогда каждая часть будет громоздкой и неэлегантной, по сравнению с предыдущим вариантом.

Пока, продолжая читать Practical CL, я нахожу ровно один недостаток - на этом нельзя писать ни в чем, кроме как в емаксе...

anonymous
()
Ответ на: комментарий от The_Anonimous

Ну, ёлки--палки! ;( Теперь я понимаю почему Антихрист постоянно ругается. Я для кого писал?

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

The_Anonimous, ты что не понимаешь чем макрос отличается от функции (пусть даже они и решают одну задачу)?

>берем antlr и делаем нужный препроцессор. если будет интересно "протестировать" меня на способность написать такой препроцессор, дайте знать.

Даю знать. Очень интересно. Тем более что тебе это будет не сложно. Ты сам говорил что это делается на 1-2-3.

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

>плохо документирована

А что есть документация на порнуху? Дай почитать.

>сложна

Реализуй функцию оценивающую эрогенность порнофотографии. Героем станешь! ;)

>избыточна?

В принцыпе да.

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

Об одном тебя прошу, The_Anonimous. Не показывай этот код беременным женщинам. В расеи и так проблемы с демографией.

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

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

> Пока, продолжая читать Practical CL, я нахожу ровно один недостаток - на этом нельзя писать ни в чем, кроме как в емаксе...

FYI, многие лисп-системы включают в себя встроенный редактор с неплохой функциональностью. Например, редактор системы LispWorks умеет автоматически делать отступы, проверять баланс скобок и много что еще, сразу все и не упомнить.

--

SVK

anonymous
()
Ответ на: комментарий от Anonymous

>давить их надо, пока маленькие, затаптывать, чтоб не разгорелось...

Точно. Чем и занимаемся. Чем больше народу поймет, что жаба безвоздмездда то есть даром, а Microsoft хочет бабла, тем больше будет free-java tools

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

> Пока, продолжая читать Practical CL, я нахожу ровно один недостаток - на этом нельзя писать ни в чем, кроме как в емаксе...

> FYI, многие лисп-системы включают в себя встроенный редактор с неплохой функциональностью. Например, редактор системы LispWorks умеет автоматически делать отступы, проверять баланс скобок и много что еще, сразу все и не упомнить.

Ну это тоже "вырожденный случай емакса", ;) т.е. специалиированный редактор только для этого языка. И что, если я пишу мультиязычный проект на CL+C+Java - мне каждый исходник в своем редакторе править?

Мне не то чтобы конкретно не нравился емакс, плохо то, что в "обычном" редакторе крайне неудобно. Тот же недостаток, кстати, если и у Java - огромная стандартная библиотека и стиль программирования, поощряющий создание большого количества небольших файлов, ведут к тому, что без специализированной IDE довольно тяжело жить.

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

>Тот же недостаток, кстати, если и у Java - огромная стандартная библиотека и стиль программирования, поощряющий создание большого количества небольших файлов, ведут к тому, что без специализированной IDE довольно тяжело жить.

Дык эта. Ты альтернативу-то предложил или как? Типа давайте длиннючие файлы на Цэ писать? И не использовать чужих и стандартных библиотек, так чтоли?

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

Ещё, говорять, в vi есть режим для лиспа. Сам я vi не пользуюусь но на лоре в скриншотах пробегало.

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

> И что, если я пишу мультиязычный проект на CL+C+Java - мне каждый исходник в своем редакторе править?

Нет. Все исходники правь в емаксе.

>что в "обычном" редакторе крайне неудобно

На Земле есть только два редактора: vi и emacs. vi --- не нужен, а про emacs я сказал выше. ;)

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

> Дык эта. Ты альтернативу-то предложил или как? Типа давайте длиннючие
> файлы на Цэ писать? И не использовать чужих и стандартных библиотек, 
> так чтоли?

Ну например, писание на перле в VIm у меня трудностей не вызывает. На C - тоже.

А на яве очень много тривиальных мегакоротких файлов - каждый класс в 
свой файл, а бывает очень много "одинаковых". И я не очень понял, как 
c этим борются, кроме как перекладывая бюрократию на IDE.

Иерархия типа

class AbstractSomething {
  abstract void initialize();

  ISomething doTheWorkAndReturnResult() {
   // здесь какие-то б-м универсальные для всех типов действия
  }
}

и куча классов 

class FirstThing extends AbstractSomething {
  void initialize() {
    //custom initialization code
  }
}

и т.д., штук 15 разных. 

Я уж не говорю об использовании EJB2 entity beans, когда на каждую 
табличку БД (которых самих по себе десятки и сотни в средних размеров 
проектах) получается по 5..9 классов+кусок XML.

А емакс я не знаю и не нравится он мне. В текстовом режиме 
малоюзабелен, гуй по дефолту отстойный (Xaw3D - едва ли не наиболее отвратительно выглядящий тулкит, имхо. Даже мотиф получше будет). 

И вообще он ужасно не вписывается в юникс. Лучше б он помер с вместе с лисп-машинами.

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

> А на яве очень много тривиальных мегакоротких файлов - каждый класс в свой файл, а бывает очень много "одинаковых". И я не очень понял, как c этим борются, кроме как перекладывая бюрократию на IDE.

Что значит "бывает"? Ты имеешь ввиду: "я пишу очень много одинаковых"?

А то что каждый класс в своем файле, IMHO, очень правильно и удобно, особенно с практикой Java разбиения на пакеты.

> Я уж не говорю об использовании EJB2 entity beans, когда на каждую табличку БД (которых самих по себе десятки и сотни в средних размеров проектах) получается по 5..9 классов+кусок XML.

Посмотри XDoclet. Entity EJB версии < 3 - в топку, посмотри Hibernate.

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

> ринспуна гласит: функциональность любой достаточно большой программы содержит половину функционала лиспа. Причём реализованного крайне погано.

Точнее кривенно реализованный полулисп.

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

>>В этом году в отпуске [для общего развития] познакомился с .NET и попробовал писАть на C#. >давить их надо, пока маленькие, затаптывать, чтоб не разгорелось...

Учитывая что этим занимаются такие парни как Luca Cardelli - Нихрена из этого не выйдет. В смысле задавть не выйдет. Уж очень они крутых спецов туда прикормили.

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

> Что значит "бывает"? Ты имеешь ввиду: "я пишу очень много одинаковых"?

Пример: некий гуй. Есть N сущностей, которые пользователь может 
редактировать. Есть общий фреймворк "показать форму-проверить 
валидность-сохранить изменения". При этом каждой сущности соотвествует 
своя формочка (набор полей, layout, и т.д.) и проверялка заполненности 
формочки. Ну это ладно, эти классы разные.

Но потом мы начинаем делать Actions для SWT/JFace, которые имеют вид

class EditFooAction extends AbstractAddAction {
  private IEntityForm getForm() {return new FooForm();}
  private IFormChecker getChecker() {return new FooChecker();}
}

Нет, я знаю, что я слажал, и эти классы излишни ;) Но не всегда получается подобные грабли обойти. 

> Посмотри XDoclet. 

Если бы не они - не видать бы мне диплома ;)

> Entity EJB версии < 3 - в топку, посмотри Hibernate.

Это я уже понял. Но я вообще больше никогда не хочу видеть Java ;-) Не нравится она мне.

anonymous
()
Ответ на: комментарий от r

А на Javу работает Брюс Тэйт. А кто такой этот Корделли вообще? Чем он знаменит? Базы данных ресёчил или драйверы для модемов разрабатывал? Может он отец Лиспа?

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

И я не хочу видеть жабу. Мне тоже больше Верка Земанова нравится, чем Java. Ты альтернативу-то предлагай. На QT ваять будешь или размахивать флагом Лиспа?

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

>А емакс я не знаю и не нравится он мне.

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

>гуй по дефолту

Вот кто бы мне объяснил зачем Гуй *текстовому* редактору? Перед девчёнками понтоваться? Так не ведутся они на это. ;(

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

> >А емакс я не знаю и не нравится он мне.

> Ты сам себе противоречешь. Откуда ты знаешь что емакс тебе не нравится, если ты его не знаешь?

Я пробовал (чуть-чуть) им пользоваться - мне не понравилось. Chordes suxx ;)

На том же уровне, что Vim, я его не знаю.

>>гуй по дефолту

> Вот кто бы мне объяснил зачем Гуй *текстовому* редактору? Перед девчёнками понтоваться? Так не ведутся они на это. ;(

Во-во. А без иксов он (емакс) какой-то не такой. К этому-то у меня и претензии - я GVIM не запускаю никогда, konsole+vim. Емаксу так что-то никто при мне не использовал.

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

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

> И я не хочу видеть жабу. Мне тоже больше Верка Земанова нравится, чем Java. Ты альтернативу-то предлагай. На QT ваять будешь или размахивать флагом Лиспа?

Я буду (и уже это делаю) работать в таких местах, где программить на жаве не требуется. Притом что ничего не умею, собственно, против нее - кроме того, что лично для меня она не фан.

А таки шо ви имеете против Qt? ;-) Или, если уж на то пошло, gtk(mm)? При некоторой дисциплине и правильных тулзах плюсы - вполне жизнеспособное решение.

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

>Я пробовал (чуть-чуть) им пользоваться - мне не понравилось.

Я пробовал (чуть-чуть) играть на скрипке Страдивари --- мне не понравилось, звук ваще отстойный был ;)

>максу так что-то никто при мне не использовал.

xterm + emacs -nw

Это случайно не то, что ты хочешь?

>Кстати, гуй текстовому редактору понятно зачем - для доступа к редко используемым (но все же нужным) вещам через меню

Не знаю у кого как, но в emacs'е есть меню и в текстовом режиме. Доступно по F10.

>фолдинга

а что это?

>16 цветов не всегда хватает

В каких случаях тебе их не хватало? Ни разу не сталкивался с такой проблемой и очень удивлён. Предупреди меня, пожалуйста, чтоб я знал на будущее.

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

> > фолдинга

> а что это?

Гы-гы.

vim

:help folding

anonymous
()
Ответ на: комментарий от chinpunkanpun

>Чем популярнее язык - тем больше codebase, шире инструментарий, больше, кажем так, накопленного опыта

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

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

Ты думаешь, люди которые пишут на Foxpro или Clipper или Ruby получают в среднем в 5 раз больше, чем люди которые пишут на Java?

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

> Я буду (и уже это делаю) работать в таких местах, где программить на жаве не требуется. Притом что ничего не умею

Очепятка по Фрейду, да?

MAPA3MATuK
()
Ответ на: комментарий от jackill

Тогда самая большая зарплата будет у программиста на Intercal-е. И ещё молоко за вредность давать будут. Может, переквалифицироваться, пока не поздно?

MAPA3MATuK
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.