Причем тут хабы «программирование» и «python»? Про программирование нет ничего, а про питон… И про питон, ничего!
Замените программирование на «сборщик мебели», а питон на «корпусную мебель»… Мне кажется смысл особо не поменяется.
«Почему вы решили поменять профессию и стать программистом?»— этот?
Желаю вам удачи!
Да всё достаточно стандартно — подготовил резюме, начал откликаться на вакансии, ходить по собеседованиям. Параллельно старался углублять свои знания и навыки в языке, фреймворках и смежных технологиях.
Кроме питона на собеседовании мне задавали вопросы на общее понимание того, как работает интернет, спросили, как бы я реализовал в БД хранение иерархического каталога и неориентированного графа, какие я знаю веб-фреймворки и ORM, задали пару вопросов по js и css.
Претензии например:
1) Быстродействие. Вижу разницу в два порядка даже с Явой, многие задачи на нем из-за этого невозможны в принципе.
2) Значимые whitespaces. Финиш полный, пришлось настроить перед каждым запуском автозамену табуляторов на пробелы, чтобы не ругался.
3) Куцый язык с велосипедным синтаксисом (отсутствие ++ и --, нормального for цикла, запрет пустых блоков и
т.д.)
4) Еще более куцая стандартная библиотека. Понадобилась обычная TreeMap — вперед шерстить сеть на предмет чьих-то third-party.
5) Какая-то каша с кодировками и строками, постоянные encode/decode
6) Еще больший финиш с ООП/функциями/классами: self явным параметром, приватные функции через имя…
Полное ощущение, что имею дело с каким-то игрушечным языком двадцатилетней давности.
Я встречал в своей практике, что медленная скорость разработки на компилируемых языках очень сильно вредила старту проекта. Да и мало написать — надо постоянно реагировать на запросы пользователей.
А так — да, компилируемые языки работают быстрее, кто ж спорит то?
Написал один очень маленький и очень тупой сервис на коленке за два вечера, попутно выбирая и и изучая имеющиеся фреймворки для этих сервисов, ибо раньше я этого не делал ни разу. На хаскеле, да. Дольше инит-скрипты писал, честное слово.
На скриптовых языках в аналогичных условиях точно быстрее бы было?
Ну, читабельность — вопрос привычки скорее, ИМХО, но куда уж короче? Там и так-то логики с гулькин нос.
Потом манной небесной показался Perl. Более ёмкий, но и более запутанный. Читаемость чужого кода стремилась к нулю.
Пробывал Java, но волею судеб там не было встроенной поддержки HTTP 1.1 (читай, нельзя было на одном IP делать несколько сервисов\сайтов). Ну и эта дурацкая тема — всё объект — ужасно.
Пробежавшись по всяким ASP и Coldfusion перешёл к PHP, в основном потому что легко было настроить всю связку Апач+mod_php+MySQL. Как язык, PHP может и не лучший, но средство разработки — вполне приемлемое. Читаемость — лучше, чем у Перла.
Но когда я перешёл в 2008 году на Python\Django — слезы радости текли по моей щетине. Компактный, читаемый, гибкий, мощный, продуманный и достаточно быстрый. Туча библиотек в комплекте. Лучшая документация! (чего тогда не хватало Руби и Рельсам)
Конечно, можно привыкнуть к любому синтаксису, но я выбираю тот язык, что более читаем. На текущий момент для меня это Python.
Я видел код на питоне, но на мой взгляд, сильнотипизированные языки вроде хаскеля таки читабельнее и «поддерживабельнее».
Как бы аналогичный код выглядел на питоне?
Помогает обойти то, что в новой версии lastfm api (которая была выкачена пару лет назад, да) нет никаких средств получить фоточки исполнителя. Соответственно, получает запрос, говорит клиенту, какую страницу надо выкачать, клиент её выкачивает и отправляет обратно сервису, сервис выдирает ссылки на фотографии и возвращает список.
Если бы дропбокс начал бы с Go изначально, он бы никогда бы не «взлетел».
Этому есть какие-то другие причины кроме той, что язык Go начал разрабатываться примерно в том же году, что «зарелизился» Dropbox?
а что такого выдающегося все внезапно нашли в Питоне?
Python позиционируется как простой и понятный язык и, вероятно, хорош для обучения (как первый язык).
Согласен, это вполне возможно. Для абсолютного новичка он будет понятнее и легче в освоении. Но копнуть в глубину и начинается… Жаловался профессионально работающим с SciPy/NumPy, ответ был: главное при работе с Питоном — это как можно больше вынести в C++ :)
главное при работе с Питоном — это как можно больше вынести в C++ :)
Это справедливо для многих языков, если область применения — жадные до гигафлопс расчёты.
Не нужно забивать гвозди микроскопом. Если вам нужно получить абсолютный максимум производительности — не смотрите ни на питон, ни на джаву, ни на пхп, ни на джаваскрипт. Ваши языки — C и может быть C++/Rust. Однако, если ваша задача — внести интерактивность в web-страницу — Javascript (да, есть возможность писать на других языках и транслировать в JS, но ...). Python? Если твоя задача получить результат быстро (не в смысле быстрых рассчётов, а в смысле "на вчера", то Python здесь со своей экосистемой даст возможность этого достичь в кратчайшие сроки, а на C/C++ будете изобретать велосипед, в сотый раз изобретать пакетный менеджер/систему сборки/и прочие базовые утилиты). У большинства инструментов, которыми пользуется больше двух человек есть своя ниша, где они решают задачи эффективнее (быстрее/производительнее/безопаснее/...)
-1? Вот интересно, кому мой комментарий мог не понравиться?
Я, проггер с 21-летним стажем, тоже ныне, как и автор статьи, сорока лет отроду. Начинал с бэйсика на Корветах ещё в 1993 году. До 2005 года неплохо владел asm x86 и при работе с языками типа (Object) Pascal регулярно для критичных по времени исполнения рутин делал вставки на асме. Потом «забил».
Да, Python (который мне лично очень нравится и по которому имею два сертификата), является интерпретатором. Да, он медленнее компиляторов. И что?.. Зато он проще в освоении. Понятнее в сопровождении чужих исходников и весьма продуктивен в плане скорости разработки.
Автору статьи уважение за смелость, удачи и усидчивости! Главное, чтобы было желание продолжать учиться и работать над собой.
К сожалению многие в нашем возрасте уже обленились вконец и ничего не хотят менять…
Непонятно, как язык без статической типизации может быть понятнее в сопровождении чужих исходников.
Меньше кода читать )
APL и его производные, наверное, в таком случае идеальны?
Хотя, если сейчас преподавание азов переходит с паскаля на питон, то тут ура.
если сейчас преподавание азов переходит с паскаля на питон, то тут ура
Ошибаетесь.
Никлаус Вирт создавал своя ЯП с определенной целью — учить студентов программированию. Поэтому Паскаль так хорош для азов.
Ну, а на практике всё зависит от преследуемой цели.
Начиная учиться с Паскаль — человек научится программировать.
Начиная учиться с Питон — человек научится писать программы на Питон.
Небольшая, но разница есть.
Можно научиться программировать на примере Питона, а можно научиться писать программы на Паскале, но не научиться программировать.
Например, матчить строку вручную. Потому что у него изначально есть регэкспы и прочее.
Скажите, что оно ему и не нужно? Отчасти соглашусь. Но на собеседованиях в дев-компании для тех кто претендует на зп $2-3K очень любят давать классические задачки по поиску соответствий в строках, по сортировке и т.п. И не принимают решения с учётом особенностей языка… Как-то так.
Но это, конечно не помешает заколачивать деньгу на джанге.
PS если кто не знает: Питон вообще-то тьюринг-полный.
@VolCh: можно научиться писать программы на Паскале, но не научиться программировать
Чё за чушь?! Паскаль тоже является тьюринг-полным, а следовательно умение писать программы на Паскале является умением программировать.
Программировать вообще можно на любом тьюринг-полном языке. Просто, некоторые языки лучше подходят для обучения, а другие хуже. Например, на Лого — можно учиться функциональному программированию, а вот ун-Лямбда, хоть и тоже является функциональным, для обучения не намного лучше брейн-фака.
умение писать программы на Паскале является умением программировать.
Не все считают умение писать программы на каком-то языке равноценным умению программировать вообще. В частности я считаю, что в умение программировать входит умение алгоритмизировать решения задач, а писать программы можно и без этого, по готовым алгоритмам.
И в каком месте «научится писать программы на Питон» не является «научится программировать»?
Я попытался комментарием выше свою мысль пояснить.
Фишки языка расслабляют, научишься писать проги на чём-нибудь, а что у него под капотом и знать не будешь. Оно может и не надо, но иногда знание лишним не бывает.
И этот язык уж точно для обучения новичков не годится (для сравнения Лого позволяет обучать ФП даже детей).
Для тех, кто не интересовался, классический пример.
Программа на языке Brainfuck, печатающая «Hello World!»:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++
.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.
------.--------.>+.>.
http://ru.wikipedia.org/wiki/Brainfuck
P.S. Для обучения язык ТОЧНО не годится. Он, и по названию даже судя, скорее, для любителей эээ… головоломок, если прилично говорить.
`r```````````.H.e.l.l.o. .w.o.r.l.di
А вот программа, которая выводит числа Фиббоначи, выглядит вот так:
```s``s``sii`ki
`k.*``s``s`ks
``s`k`s`ks``s``s`ks``s`k`s`kr``s`k`sikk
`k``s`ksk
Ну, для обучения тому, как работает машина Тьюринга, Brainfuck вполне сойдёт. Несмотря на свою эзотеричность, это не самый бесполезный ЯП.
Как научился в 1994, так и продолжаю писать на Pascal (правда уже лет 18, как перешёл на Object Pascal).
И «студенческость» Паскаля не сильно мешала мне в одиночку реализовывать части в весьма сложных коммерческих проектах. И не помешала мне освоить и использовать при надобности другие языки (asm x86, VB, C/C++, Java, Python, PHP и прочие).
Что за дискриминация языков? ;)
>>> Паскаль тоже является тьюринг-полным, а следовательно умение писать программы на Паскале является умением программировать.
Именно.
И, порой, это даже дело вкуса. Вот не нравился мне никогда Си-подобный синтаксис, поэтому не перешёл на Java или C#. А Python, кстати, понравился именно синтаксисом. ;)
Когда я вижу человека пишущего C/C++ в контексте освоенных языков, то могу смело, с 95 достоверностью, предполагать, что он не знает ни си, ни плюсов.
Я уже писал в этой теме про "совместимость". Они не являются обратно-совместимыми ни в одну сторону, это два разных языка.
Боюсь, что мы просто сильно по разному понимаем что такое "изучать язык".
В моём представлении от "иметь представление о базовом синтаксисе" и "быть способным читать и писать простой код" до "более-менее изучить язык" лежит ещё долгая дорога в несколько лет минимум с регулярной практикой на это языке с использованием соответствующей инфраструктуры, подходов и библиотек. Т. е. если человек 10 лет пишет на Си с классами, то к C++ он отношения почти не имеет.
Это извечный философский вопрос: Что значит "изучил язык"?
Вопрос этот не ограничивается языками программирования… и для естественных языков придумали такое понятие как уровень владения. И по факту с годами это почти не коррелирует. Точнее, очевидно, что для освоения языка на уровне С2 требуется несколько лет. Но обратное не верно, т.е. можно десятилетиями активно и успешно пользоваться языком, но не владеть им на уровне C2. Более того, практическая ценность такого уровня владения весьма спорна.
То же справедливо и для ЯП, изучить язык на уровне B2 достаточно для решения более 90% практических задач, вне зависимости от чьих-то представлений.
Проблема в том, что ощущаемая достаточность знания языка наступает существенно раньше, чем практическая достаточность. И в случае C++ это особенно выражено.
не нравился мне никогда Си-подобный синтаксис, поэтому не перешёл на Java или C#
А мне наоборот синтаксис C очень понравился (а ещё больше понравился APL — жаль на нём не довелось писать).
Если человек может в своей работе использовать тот «инструментарий», который ему нравится, то и работа будет более комфортной, имхо.
На Python пишут в университетах. Поэтому на нем масса библиотек по математике, разным наукам, по ML. Масса отличнейших библиотек. Пишут эти библиотеки люди со степенями и мозгами. Как раньше в 80ые писали на том же Фортране. Поэтому среднее качество кода выше среднего по Джаве и СиШарпу, есно за пределами .NET библиотек.
Кроме того у него замечательные примитивы по работе с коллекциями. Вроде просто, но результат ощущается быстро и практически везде.
По поводу скорости. Везде (?), где она нужна, есть библиотеки, скомпилированные на С.
Минусы тоже есть. Меня достает то, что всегда надо выбирать 2 или 3 версию надо/можно использовать :)
Похоже те библиотеки пишут всё-таки на C++ (а то и вообще это всё делается на основе какого-нибудь BLAS), а в Python просто прикручивают интерфейс — для популяризации, так сказать.
Откуда вы это взяли? Вы заглядывали в исходники исходники, например, netlib-blas, openblas, atlas? Там, если что, используются C, Fortran и чуток asm.
- Быстродействие. Не могли бы Вы поделиться списком задач, которые "на нем из-за этого невозможны в принципе".
2,3 — без комментариев. - Чем Вам не подошёл обычный dict? Хорошо, а OrderedMap?
- Тут ладно, есть нюансы детских болезней и разницы веток 2.х и 3.х
- Как это обычно бывает, у Вас просто сложилось своё определенное понимание ООП. Причём существование иных толкований Вы не принимаете. Откройте для себя толкование ООП от Алана Кея, будете сильно удивлены.
Ну и Вам, очевидно, Python кажется не удобным с точки зрения программиста на Java. Python/Java/Clojure/whatever — не плохой, он просто другой, со своими парадигмами и идиомами.
2) dict же не упорядоченный? Мне нужна была map с порядком на ней. По OrderedMap для Питона у меня поиск ничего не находит, уточните пожалуйста.
3) Да нет, иные толкования меня вполне устраивают. Их воплощение смущает, неудобно же.
>>Ну и Вам, очевидно, Python кажется не удобным с точки зрения программиста на Java.
Вряд ли, мне доводилось писать на языках от Бэйсика и Пролога до С++ и Матлаба. Просто Ява сейчас удобна тем, что соединяет достаточную скорость с мощной стандартной библиотекой. А так я за языки не держусь совершенно.
Ещё, в python 3.6 стандартный dict хранит порядок.
А можно ссылочку на источник?
Пример в документации https://docs.python.org/3.6/library/stdtypes.html#dict говорит об обратном.
The dict type now uses a “compact” representation based on a proposal by Raymond Hettinger which was first implemented by PyPy. The memory usage of the new dict() is between 20% and 25% smaller compared to Python 3.5.
The order-preserving aspect of this new implementation is considered an implementation detail and should not be relied upon (this may change in the future, but it is desired to have this new dict implementation in the language for a few releases before changing the language spec to mandate order-preserving semantics for all current and future Python implementations; this also helps preserve backwards-compatibility with older versions of the language where random iteration order is still in effect, e.g. Python 3.5).
+ Самая интересная возможность упорядоченных коллекций — работа со срезами и индексацией не реализовывалась, так что преимуществ у такого сохранения порядка не так много.
The order-preserving aspect of this new implementation is considered an implementation detail and should not be relied upon
Аспект сохранения порядка в новой реализации рассматривается как деталь реализации и на него не следует полагаться.
так что преимуществ у такого сохранения порядка не так много.Они не делали намеренно сохранение порядка, это побочный эффект при переходе на новый алгоритм. Но как профит — можно юзать стандартный dict вместо OrderedDict (помимо более оптимальной работы самого dict)
Гарантий порядка нет потому что если вы запустите программу в 3.5 или более старых версиях (совместимость 3.x), то будет работать не так.
Его я видел, но там не натуральный порядок элементов, а порядок добавления, что совсем из другой оперы. В итоге я использовал sorteddict отсюда http://www.grantjenks.com/docs/sortedcontainers/
Для 3К строк это заняло на Питоне около 5 минут. Для 10K даже начинать не стал, перевел на Яву, сделало за секунды.
Код покажите? Интересно.
Если конкретизировать — подозреваю что у вас вышло так что при выполнении вашего кода происходило огромное количество ненужных аллокаций памяти. К примеру если вы в цикле, после проверки каждого символа каждой строки, использовали что-то вроде
new_line = old_line[1:]
что на каждый символ заново аллоцировало еще один участок под почти всю строку.Собственно для прочесывания строк и/или массивов байтов — стоит использовать memoryview (https://docs.python.org/3/library/stdtypes.html#memoryview) над нужным вам контейнером. Оно, используя все тот же синтаксис
new_line = old_lint[1:]
— не будет делать новых аллокаций, и является неким аналогом адресной арифметики из C/C++.Ну и кроме того, в язык встроены другие специальные средства быстрой потоковой обработки данных (в основном взятые из функционального программирования). Они используются вместо циклов и ускоряют обработку несколько раз (бывает что и на порядок). Опять же это требует не самых базовых знаний языка (т.е. надо приложить хоть какие-то усилия и: или книжку почитать, или документацию посмотреть, или же курсы пару-месячные по начальному владению языком пройти).
4. У питона весьма богатая библиотека в тех сферах, где он популярен. Возможно, вы просто пытаетесь использовать его не по назначению? Да, далеко не всё интересное входит в стандартную библиотеку, но никто не видит в этом проблемы. Возможно, ваша проблема просто в том, что в питон-сообществе принято другое отношение к использованию сторонних библиотек, а вы пытаетесь судить по меркам джава-сообщества? Сильно подозреваю, что в сообществе питонистов просто сильнее развита культура открытости и обмена наработками. Поэтому у создателей языка просто не было необходимости раздувать стандартную библиотеку.
5. К третьему питону уже никакого encode-decode не осталось, вместо множества кодировок — один юникод.
2, 3, 6 — претензии к форматированию, синтаксису, реализации ООП, функций и классов — это в значительной степени вкусовщина и дело привычки. У меня, например, синтаксис джавы вызывает отторжение из-за чего я в своё время не стал её заниматься, хотя и считал, что она весьма перспективна в плане карьеры. Но при этом я с пониманием отношусь к людям, которым джава нравится. Среди моих хороших друзей есть джависты, и я уважаю их выбор.
Тоже алгоритмическая задача, те же самые два порядка разницы к C++/Java (исходный код прилагается). Хм…
4. Отсутствие одной из основных структур данных в стандартной библиотеке меня действительно удивило (и заставило потерять часа два на поиски, сравнение и установку стороннего кода). Культура открытости — дело хорошее, разумеется.
Что касается синтаксиса, форматирования и пр. — дело тут не во вкусовщине. Мне все равно, ставить скобочки или двоеточие, писать else if или elif. Дело в неудобствах — например, отлаживая алгоритм, я часто комментарю/вытаскиваю обратно строки. Но Питон почему-то не дает оставить пустой блок. То есть мне нужно дополнительно вписывать туда каждый раз «pass», дурная работа же. Почему нет инкрементов, чье отсутствие размножает строки вида a+=1? Это ведь простейшие вещи, самые основы, на которые приходится наталкиваться постоянно и которые крадут время.
У питона весьма богатая библиотека в тех сферах, где он популярен. Возможно, вы просто пытаетесь использовать его не по назначению? Да, далеко не всё интересное входит в стандартную библиотеку, но никто не видит в этом проблемы. Возможно, ваша проблема просто в том, что в питон-сообществе принято другое отношение к использованию сторонних библиотек, а вы пытаетесь судить по меркам джава-сообщества? Сильно подозреваю, что в сообществе питонистов просто сильнее развита культура открытости и обмена наработками. Поэтому у создателей языка просто не было необходимости раздувать стандартную библиотеку.
Спасибо, рыдаю. Стандартная библиотека python'а, как многие отмечали, это место куда слоныбиблиотеки приходят умирать. Там есть огромное нагромождение кода, который будет жить там вечно ради совместимости, хотя для python'а это не такая священная корова, как для java.
Но вообще в python std странностей выше крыши. Например, есть парсер для json'а, но он не умеет парсить в потоке (т. е. json.read(file_like)
внутри сделает просто json.reads(file_like.read())
). Или есть работа с датами, но она не работает с датами до 1900 года в 2.7, но работает в 3.2+.
С точки зрения использования внешних зависимостей я бы не рекомендовал обобщать java-мир. Он очень разный. Кто-то ради IOUtils.closeQuietly
притащит commons-io
в проект, кто-то завендорит jackson/netty/resteasy/weld/whatever целиком.
к п.2: Например, я не вижу аналога метода TreeMap.floorEntry(key) в Python'е. Класса OrderedMap вообще не нашёл, а OrderedDict — это по-видимому аналог java.util.LinkedHashMap, а не TreeMap.
1) Быстродействие. Вижу разницу в два порядка даже с Явой, многие задачи на нем из-за этого невозможны в принципе.И для java многие задачи невозможны*. «Инструмент под задачу» ©.
А скорость разработки, в среднем, гораздо ниже чем с питоном, например веб-сервисов. Да и по быстродействию может проиграть питону если для этой задачи в нем использовать либу на С/С++.
А ещё, помню, java проиграл питону по скорости выполнения чуть ли не на порядки из-за медленного старта.
Или я что-то не так понял?
например, на питоне реализуемы весьма заковыристые задачи контентного анализа в реальном времени (жёсткий код на C или плюсах, обвязка полегче на питоне)
питон *хреново* декомпилируется; уверяю, это плюс гораздо чаще, чем может показаться (с радостью окажусь неправ, но дайте ссылок на нормальный декомпилятор)
я пробовал много языков, мне питон приглянулся (хотя это эмоциональное утверждение), однако уже более лет 10 погоду делает не язык, а библиотеки и компоненты;)
Это называется «каша из топора» :) Если код на C/C++, то обвязку на чем угодно сделать можно. Для математики в Matlab удобно, например.
>> питон *хреново* декомпилируется; уверяю, это плюс гораздо чаще, чем может показаться
Серьезно есть потребность в декомпиляторе питона? Если да, и еще не существует, то можно написать,- пару месяцев как-нибудь получится выделить. Но очень сомнительно…
У меня, например, задачи всплывают из очень разных областей: и обработка теста, и графики, и тяжелые числодробилки, и математика. И везде Python оказывается, если не лучшим вариантом(в учетом самописных и обёрнутых библиотек), то по крайней мере более чем удобным. И позволяет не учить другие инструменты на каждый случай(таких как R, matlab, которые почему-то не пошли от слова совсем), даже Mathematica в некоторых не сложных случаях можно заменить.
обвязку на чем угодно сделать можно
поверьте, в той задаче, о которой я здесь не расскажу, не на чём угодно:) питон доказал отличную переносимость по платформам, работу в реальном времени и очень неудобную реверсную инженерию; для задачи это оказалось очень важно
можно написать,- пару месяцев как-нибудь получится выделить
провокационное заявление; хотя нет ничего невозможного, но восстановить исходный код (как в Java или .NET) вряд ли удастся
При этом, на мой взгляд, нарушается главный принцип питона — явное лучше неявного.
Мнение основано на попытке портировать более-менее крупный проект с питона на .NET, при переносе любого метода приходится разворачивать всю цепочку вызовов чтобы понять что за объект передавал автор оригинальной библиотеки.
Да, в новой версии можно указать типы, но кто из питонистов будет это делать?
А в качестве скриптового языка для разовых задач он прекрасен, это да.
C PHP проще будет перейти на C#, если на PHP писал в современном стиле, а не в стиле 90-х. Субъективно, конечно же.
C# с нуля проще учить, он гораздо более последовательный (т.е. содержит меньшее кол-во WTF? в стандартной библиотеке). А от Python у новичка останется каша в голове, без чёткого понимания что зачем и почему так.
Удивительно, но сегодня я увидел ВК рекламу "Как выучить программирование после 40". И тоже Python. Это наводит на странные мысли о связи этих статей.
Трудно понять мотивацию к.т.н., директора, претендующего на уровень junior'a.
работу программиста через двадцать лет я скорее всего найду, а вот работу инженера-конструктора — вряд ли!
Хороший инженер может быть настолько не уверен в своих способностях?
У автора хочется поинтересоваться — как успехи? Обычно считается, что чтобы стать профессионалом в какой-либо области, требуется 10 лет в сфере. Вы готовы потратить 10 лет, чтобы выйти на уровень даже ниже вашего текущего?
работу программиста через двадцать лет я скорее всего найду, а вот работу инженера-конструктора — вряд ли!
Хороший инженер может быть настолько не уверен в своих способностях?
Мне кажется, там речь скорее о неуверенности в перспективах развития отрасли… Посмотрите, для примера, как за предыдущие 30 лет полностью развалили лёгкую промышленность, сколько закрыли НИИ, фабрик и т.д.
Да, именно "правило 10000 часов" я и имел в виду.
P.S. Автору всяческие мои пожелания двигаться вперед и не бояться радикальных перемен. Как минимум, это новый жизненный опыт, который вряд ли будет бесполезен.
Хороший инженер может быть настолько не уверен в своих способностях?
Если ты узкоспециализированный инженер, то не в способностях дело а в отсутствии спроса на твою профессию.
У меня сходная проблема, выслужился из простого монтера до инженера высшей категории, и толку? Если ты специалист в узкой отрасли которая к тому же умирает? Куда идти? Через 10 лет она точно загнется, и куда идти уже в 50 лет? В 40 лет есть хоть шанс вписаться в струю.
Автор правильно написал, сейчас нет профи, все имеют средний уровень, по причине того что технологии очень быстро развиваются, и если ты был в чем то профи 10 лет назад, то сейчас ты один среди многих, так как за 10 лет успело появится много нового и даже успеть отмереть.
сейчас нет профи, все имеют средний уровень, по причине того что технологии очень быстро развиваются
Профи есть. Это те, кто за определённое время успевают столкнуться с разными технологиями (которые, возможно, отмирают), изучить разные области computer science, и они отличаются от не-профи тем, что могут грамотно выбрать технологию для проекта, или успешно применить некоторые принципы из совершенно другой области. Естественно, для этого нужно изучать новое.
Из-за быстрого развития и отмирания технологий ИТ-специалисты больше развиваются "в ширину", а не "в глубину". Это не значит, что хороших спецов вообще нет.
Рассмотрим финансовый вопрос. Да, при смене работы я существенно потеряю в деньгахИнтересно, что по этому поводу думает семья?
Junior питон разработчик столько получает? Если да, и жена получается столько же — то прекрасно. Если жена получает больше, то вообще замечательно — можно даже никуда и не устраиваться — рисковать и уходить во фриланс.
А если жена не работает или получает 50 000 р? Тогда все эти светлые мечты о программировании разбиваются о быт…
PS Просто наболело :)
то на семью из трех человек, чтобы жить более-менее (ипотека/съем квартиры, хватало на еду, шмотки средние, отдых пару раз в год, образование ребенку), то надо 200 000 р
Есть подозрение, что уж квартирный вопрос у автора решён. И вообще ваше "более-менее" — это уровень заметно выше среднего.
В Москве многие живут более-менее и с двумя детьми, далеко не у всех доход 200к+ на семью.
Уровень безработицы понизится, вопрос с тем, куда лишних людей девать по мере автоматизации, не поднимется, одни плюсы!
Ваша ситуация, уважаемый shutovds, лично мне очень понятна, поскольку нахожусь в похожем положении. Поэтому поддерживаю Ваше решение обеими руками и желаю удачи. У Вас всё получится. А программировать — это такой кайф…
Машин лёрнинг это не питон, это суровый матан, к тому же на питоне там прямо никто не сидит и не пишет, там опять же нужен хороший си и вообще нужно как говорят «шарить в матане», читать статьи (в день по 2 статьи это норма).
Я бы на самом деле попробовал, да, вы попробуйте поработайте программистом, может и поймёте, что авиация это не плохо на самом деле.
Просили мнение — вот оно.
Другое дело, что потолок где-то в стратосфере.
выбор неразумный, Python никогда не будет хорошим первым языком
Яндекс и Mail.ru запилили на одном известном сайте бесплатные курсы по плюсам, уровень такой, что умственно-отсталые школьники справятся, инженер и подавно
по сям круто поможет стенфордский курс «programming paradigms» (есть на их youtube канале)
было бы желание
p.s. авиастроение в России устроено так, что его нет
а можно ссыль на курсы? Помоложе чем автор, да и не авиаконструктор,
но все же примерно в схожей с ним ситуации.Задумываюсь, что лучше
учить.
Был бы признателен за ссыль
начинать с c++, возможно, будет тяжело, но зарядившись компилятором и терпением, можно превозмочь
если вообще не имеете представления о программировании, попробуйте посмотреть на Ruby, мне он показался очень простым и наглядным (хотя это очень субъективно, могло повлиять то, что я уже немного знал Perl, которым вдохновлялся автор Ruby), кроме того многие современные языки (например Swift от Apple) вдохновлялись Ruby, и будет несложно перейти
обязательно попробуйте SoloLearn: Learn to Code (там можно быстренько пройти курс молодого бойца по разным языкам и сравнить)
С другой стороны, как я понимаю, оба этих ЯП по сравнению с С++ и тем более с С дают новичку возможность очень быстро научиться собирать свой первый конструктор — это как Лего против советских металлических :) А в дальнейшем всё равно лучше изучить C++. Но интегрировать Python и C++ вроде как легче, чем Ruby и C++, тем самым быстрый старт верхом на питоне и дальнейшая интеграция его с С++ даст большую эффективность, чем бег по «рельсам» за этим локомотивом в лице С++:) Если я где-то заблуждаюсь, то срубите одну из этих трёх сосен :)
SoloLearn установил, спасибо, буду пробовать.
В Ruby действительно всё является объектом, и вот такие штуки: 13.to_s.length.nil? помогают быстрее разобраться с ООП.
В Ruby изящно реализовано метапрограммирование (смогут все).
С точки зрения же C/C++ практической разницы между Python и Ruby нет.
Вы и моя любознательность заставили меня прошерстить документацию для того, чтобы понять, что же значит 13.to_s.length.nil?. Как я понял, to_s превращает 13 в строку, и всё это предназначено для выяснения, не нулевая ли (nil) длина (length) у 13, на что Ruby ответит False. В Python же за это отвечает
if len(13) == 0:
print('the list is empty')
. Если всё верно, то синтаксис Python мне почему-то кажется более понятным. Безусловно, если разобраться, то всё будет понятным, но я-то как раз не разбираюсь и это типа взгляд со стороны.
Господин Бешеная гиена (думаю, поймёте правильно с таким ником :)), я ни в коем случае не спорю — мне интересно говорить об этом, но не с кем) Вообще Хабр читаю уже лет 5, аккаунту уже 4 с лишним года, но мой первый комментарий — вам :)
Судя по всему, под выраженностью ООП в данном примере имеется ввиду видимая структурированность 13.to_s.length.nil?, где, если я не ошибаюсь, 13 — это объект, to_s — метод, который отнесет объект к классу строк, length и nil — методы. Поправьте, если что не так.
Но вот осознать преимущество этого над тем же Python мне пока не дано :) Может, если только код так более читабелен и понятен?
Вообще, такие вот разговоры очень сильно мотивируют и подталкивают к изучению)
1. в Ruby всё является объектом
2. каждый стейтмент что-то «возвращает» в результате своей работы
сложив всё вместе получим: 13 — это объект типа int и у него нет метода length, но последний есть, например, у string. метод to_s объекта типа int вернет совершенно новый объект типа string, чей метод length вернет нам снова int, у которого есть метод nil? (который есть вообще у всего в Ruby). преимущество становится очевидным, когда вы делаете сортировку в обратном порядке в Ruby с помощью array.sort!.reverse!, а в другом языке по-другому
Пожалуйста, прекратите позорить Ruby своими примерами… Никто в здравом уме не будет так делать сортировку в обратном порядке.
Для демонстрации цепочек вызовов прекрасно подходят ActiveRecord, Ransack и т.д., проще говоря, те случаи, где уместен паттерн Fluent Interface.
что не так с этой сортировкой? только будьте добры, придумайте что-то стоящее, а не чушь в духе «два прохода медленнее одного на 0.00001 секунды».
Пфф, а что с ней так? Зачем делать то, что будет медленнее, когда сделать нормально не составляет никакого труда:
array.sort! {|a, b| b <=> a}
Зачем писать белиберду "13.to_s.length.nil?" в качестве примера? Или Вы поставили себе задачу показать, как не надо писать на Ruby?
Ruby — неплохой вариант для начинающих. Тут я не спорю.
Однако, примеры Ваши даже программистам не понять… Потому что они нелогичны! Посмотрите, в какой ступор Вы вогнали бедного Eudokimoff своим "13.to_s.length.nil?".
Я уверен, что любой пример должен делать что-то осмысленное, ну например ASCII-табличку печатать:
puts (32..127).map(&:chr).each_slice(16).map(&:join)
или
puts (32..127).map(&:chr).join.scan(/.{16}/)
!"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{|}~
Это он сможет переписать на Python и сравнить… А код, напрочь лишённый смысла, нельзя сравнить с кодом на другом языке.
print('\n'.join([''.join([chr(x) for x in range(x, x+16)]) for x in range(32, 128, 16)]))
Ну, это Вы немного схитрили… заранее подготовив range.
Аналог второго варианта на Ruby выглядит на Python так:
import re
print '\n'.join(re.findall('.{16}', ''.join(map(lambda x: chr(x), range(32, 128)))))
А первый вариант, емнип, стандартной библиотекой Python не решается, придётся свою функцию писать для разбиения массива на чанки.
P.S. В любом случае, однострочники на Python лучше даже не пытаться писать, это ни разу не его сильная сторона. Получается довольно страшненько и практически нечитаемо.
import re
print '\n'.join(re.findall('.{16}', ''.join(map(chr, range(32, 128)))))
получится менее страшно
И рекомендациям pep8 по длине строки соответствует.
Спасибо, отличное уточнение. Буду знать, что в Python тоже так можно сокращать.
''.join(map(lambda x: chr(x), range(32, 128)))
а не
''.join([chr(x] for x in range(32, 128)])
Я на Python не программирую, чисто на уровне чтения читабельного кода с ним знаком, поэтому просто взял вариант ближе к классическому набору map/filter/reduce. Хотя генераторы в Python пользуются большой популярностью, подозреваю, что они там тупо быстрее работают :-)
подозреваю, что они там тупо быстрее работают :-)
Ваш пример с регэкспом замена map на list comprehension ускорит примерно на 25%. )
P.S. В любом случае, однострочники на Python лучше даже не пытаться писатьПомнится Гвидо в одном выступлении сказал про это, что питон это не перл, и читаемость тут важнее.
Ну, строго говоря, хорошо читаемый язык от плохо читаемого отличает в том числе и читабельность однострочников. Другими словами, write-only однострочник можно на чём угодно написать… А вот такой однострочник, который читался бы не хуже чем verbose-вариант, очень мало языков позволяют писать… и Python, к сожалению, к ним не относится. В основном, тому виной плохо согласованная стандартная библиотека, которая так и не определилась процедурная она или объектно-ориентированная, в каком порядке должны следовать аргументы и т.д. В принципе, такие же проблемы есть и в PHP, поэтому с PHP на Python можно легко перейти… Но перейти с того же Ruby на Python крайне сложно, т.к. к хорошему быстро привыкаешь :-)
Замечу, что помимо Ruby есть ещё много языков с прекрасно продуманной стандартной библиотекой, например C#, Haskell, Elixir.
Ну так-то да, особенно если не ASCII, но просили пример попроще, чтобы новичку легко читалось…
Кстати, для демонстрации возможностей можно ещё и по символам range использовать:
puts (' '..'~').each_slice(16).map(&:join)
13.to_s.length.nil?
— это абсолютно бессмысленный код… видимо, с целью показать, что методы можно объединять в цепочки.
2. компилер за 5 минут не написать. и за 5 часов тоже.
3.
if len(13) == 0:
print('the list is empty')
код работать не должен, насколько я понимаю, откуда у int len? и вам придётся делать второй if, вложенный в первый
4. под капотом python тоже превращает len(13) в 13.len (или 13._len_, или 13.__len__, я точно не помню), но скрывает это от кодера, Python в первую (но только в первую) очередь подразумевает copy-and-paste «единственно верной реализации» из документации, а не понимание того, как она работает на самом деле
3. Код нашел на стаковерфлоу, плюс смотрел документацию, не знаю насчет работы с int (утром я ещё не знал, что это), но с абстрактной переменной 'a' работать должен.
4. Да, я видел развернутую версию этого метода. Т.е. получается, что отчасти Python — это такой скрипт-кидди ЯП, когда копипастишь, всё работает, но ты не знаешь, как? :) Я утрирую, конечно, и понимаю, что это сделано наверняка для того, чтобы язык был более простым.
5. За коммент выше и упрощение в объяснении спасибо, помогло.
Я чувствую, что меня скоро с такими дилетантскими познаниями совсем заминусуют, судя по комментам выше, да и вас отвлекать более не хочется. Спасибо, я многое узнал, доверюсь и буду учить Ruby.
оба этих ЯП по сравнению с С++ и тем более с С дают новичку возможность очень быстро научиться собирать свой первый конструктор
У вас тут инверсия затесалась. Си проще плюсов.
Но интегрировать Python и C++ вроде как легче, чем Ruby и C++, тем самым быстрый старт верхом на питоне и дальнейшая интеграция его с С++ даст большую эффективность, чем бег по «рельсам» за этим локомотивом в лице С++:)
С плюсовыми интерфейсами интегрироваться и там, и там мрак. Другое дело с сишными: более-менее удобно и там, и там. На ruby несколько удобнее, меньше boilerplate'а, см http://guides.rubygems.org/gems-with-extensions/ и https://docs.python.org/3/extending/extending.html. Хотя многие сейчас используют libffi
и не жужжат, если производительность устраивает.
как раз наоборот, очень простая для входа тема.
ещё вариационка, но она не страшна ни пол раза
Это дейта сайенс, когда from scipy import svn
.
Я бы не сказал, что, например, http://pub.ist.ac.at/~chl/papers/pentina-alt2015.pdf или http://pub.ist.ac.at/~chl/papers/pentina-nips2015.pdf столь уж тривиальны.
Плюс, на днях попадалась статья с довольно суровым топологическим подходом, просто как пример.
безусловно, есть области, где понимание статистики очень не помешает. Правда, опять же, в реальных задачах (скажем, не обработка радио сигнала), где мало данных, не по законам физике все, часто одинаково сработают и достаточно попсовые и более интуитивные методы. Приведенная статья первая про lifelong обучение SVM, судя по заголовку. Ну это… м… ну просто взять и пересчитать SVM с примесью новых данных. Можно даже с псевдо-разметкой. И это будет работать понятно. И в реальной жизни в реальной компании скажут спасибо за именно простое решение, т.к. а) оно работает б) его понимают другие участники команды в) времени меньше на отладку г) мы тут не грант на исследование дали, а работу сделать. ))))
Да, самое забавное, что довольно часто простое решение работает достаточно хорошо и можно и не тратить время на несущественное улучшение. Другое дело, что для того чтобы понять, что оно уже достаточно хорошо часто надо поэкспериментировать с большим ансамблем решений ,)
@0xd34df00d, ещё не упомянули классическое развлечение с ошибками в статьях и в приведенном коде (когда он вообще есть).
Про что я и говорю.
Ну это… м… ну просто взять и пересчитать SVM с примесью новых данных.
Нет, не просто, там вычислительная сложность принципиально другая получается.
Есть две разных области, одна — все эти диплёрнинги и SVM применять в продакшене, другая — всё это разрабатывать. Для первого сегодня, вероятно, существенного матана вообще не надо, даже частные производные считать не надо, tensorflow всё посчитает.
в разработке СУБД
Какую базу писали? В связи с упоминанием PHP рядом складывается впечатление, что это просто некорректно сформулированная фраза.
Т. е. всякие PL/SQL и прочие радости. У меня это скорее ассоциируется с DBA и разработчиками систем на базе соответствующей РСУБД.
Автор я вам искренне рекомендую обратить внимание на язык Go. Сам стал активно изучать этот язык, до этого программировал на Java. Зачем изучать другой язык, когда большинство в энтерпрайзе сидят на Java 1.6, и всем все хорошо. Я ушел из энтерпрайза (из банка), потому что чувствовал то же что и вы описали. К сожалению в мире программирования, не все так гладко. Прежде чем стать программистом, я работал в одной нефтяной компании, сис. админом. Так вот там чтоб стать менеджером, человек должен был сначала поработать на буровых лет пять как минимум. Но те кто отработали свои пять лет, как правило не хотели становиться менеджерами и продолжали работать на буровых. Менеджеры в этой компании были в основном люди за 50, с огромным опытом в своей сфере. В сфере же программирования (сужу по своему опыту из банка), люди руководящие (или пытающиеся это делать) программистами, как правило не имеют никакого отношения к программированию, а порой просто случайные люди. Такие "менеджеры" просто мешают программистам делать свою работу, потому что их Эго не дает им покоя. Я желаю вам не отступать раз уж решили стать программистом, и быть снисходительней и терпеливей если на вашем пути попадутся такие "менеджеры".
Отдаю свой голос за Go. Достаточно легкий в освоении. Очень производительный. Хорошие перспективы в корпоративной разработке. Несколько раз встречал вакансии, где готовы были брать практически с нулевым опытом.
Мне к сожалению попадались вакансии, где хотели (выяснялось на собеседовании) чтоб человек хорошо знал PHP, и немного Go (видимо чтоб переделывать что-то из PHP на Go). Хотя в заголовках было написано требуется Go разработчик и не слова про PHP ;) Так что я понял одного Go на данный момент пока не достаточно. Найти вакансию чисто на Go, сложнее.
Питон — язык интересный. Но, положа руку на сердце, нужно отметить, что если подходить к делу серьёзно, то надёжнее было бы выбрать более корпоративную платформу.
Но он несколько более такой ремесленный что-ли. Много тяжёлой, ответственной и даже немного нудной работы.
1. Проектирование БД.
2. Программирование БД (разработчик БД).
3. Администрирование БД.
1. Проектирование — смыкается с системным анализом. Это разработка структуры БД. А структура БД, как правило, отражает структуру данных предметной области.
2. Программирование — написание кода для создания базы данных и, если нужно, программирование триггеров и хранимых процедур. Это по сути тот же программист, только на языке SQL (если БД реляционная) и внутренних языках серверов БД.
3. Администрирование — скорее ближе к профессии системного администратора. Предполагает администрирование сервера базы данных. Но помимо установки, конфигурирования и поддержки работы сервера, часто требует оптимизации его работы, анализа планов выполнения запросов на предмет скорости (вместе с разработчиком БД) да и просто «ковыряния» в данных, если с БД что-то произошло.
В современных проектах проектирование БД в виде таблиц часто скрыто различными системами мапирования, когда проектируется объектная модель предметной области и она автоматически превращается в структуру БД. В этом случае разработчик модели данных автоматически создаёт структуры базы данных.
Так что тут также нужно точнее определяться к чему лежит душа.
рынок программного обеспечения неуклонно растет, а значит растет спрос и на специалистов, а вот производство оборудования в РФ непрерывно сокращается.С рынком ПО тоже не везде плавно.
Жил в деревне то ли под Псковом, то ли под Тверью тракторист. Отслужил армию. Вернулся домой и задумался, а чем дальше заниматься, и поехал в Питер. Устроился на работу в спецхозяйство по уборке улиц и поселился в общежитие на койко-место.
Вместе с ним жили два программиста, которые по вечерам обсуждали сво нелегкие рабочие проблемы, и наш герой мало-помалу стал вникать в их проблемы и получать некие навыки программирования.
Кончилось тем. что он устроился в питерскую фирм программистом, где и работает по настоящее время, находясь на хорошем счету у руководства.
Мораль — жизнь достаточно длинна, что непредсказуема, но всем успехов, тем более, в сфере разработки толкания локтями не наблюдается.
…
Пусть «плугами» зовут нас городские чуваки,
Нам на это наплевать, они сами дураки,
Мы все механизаторы и нам живется очень даже клево.
… (с)
Но это не уникальный случай — в ходе своей долгой профессиональной деятельности я часто встречал молодежь схватывающую все на лету, даже без высшего образования.
Тем более, имея большой вузовский опыт по информационным технологиям, могу сказать, что в вузах технологиям разработки не учат
Хотя конечно без высшей математики ряд сфер обработки будет недоступен по отсутствию нужных знаний.
Также в словах «мало-помалу» содержится то, что он не краем уха получал знания, а начал общаться с ними (программистами), задавая интересующие его вопросы
А если вы мне не верите, то смысл в чем писать комментарий
А своего героя я просто знаю.
Кстати в истории не было, что он получил знания лежа в постели.
Вспомнилось мне, как коллега, программист на С++, жаловался, что вот есть у него родственник, тракторист (вот ведь совпадение), человек без высшего образования, все время выигрывает у него в шахматы. Программист наш уже и учебник себе купил по шахматам и время на обучение потратил, но вот, проигрывал. При этом родственник, тракторист, не ходил в шахматные школы. Талант был, походу, у тракториста, к шахматам.
Но знания одного языка программирования недостаточно для профессиональной разработки.
Ознакомьтесь с компетенциями профессиональной разработки ПО — http://it-check-list.asvoip.com/
и подпишитесь на курс
http://gitlab.asvoip.com/
Глупо не воспользоваться этой ситуацией!
Выбор языка поддерживаю. Но все же в дальнейшем рекомендовал бы вам попробовать Java. Это более серьезный язык, задачи шире и ответственнее (мобильная разработка, корпоративные бэкэнды).
В С/C++ не лезьте. Ниша стремительно сужается, работы мало, а язык довольно сложный и неудобный.
Успехов вам!
В С/C++ не лезьте. Ниша стремительно сужается, работы мало, а язык довольно сложный и неудобный.
Два языка. Если про C++ соглашусь, что язык сложный и обилие legacy, то в случае C язык сам по себе не очень сложен.
Начнём с того, что C и C++ — два разных языка.
Если и сужается, то относительный вес ниши тех же плюсов по сравнению со всякими новомодными вещами. Да и на современных плюсах писать одно удовольствие, на самом деле. Хотя язык сложный, конечно, но уже не неудобный.
Да, почти строгое надмножество, но, тем не менее, языки разные.
После C99 сказать, что надмножество тоже не получится, а тем более если сравнивать с C11. Те же VLA на стеке (в C++14 ввели или нет — хз, но они обещали быть иными чем в C11), разная семантика присваивания, _Generic
, инициализаторы вида { .b = ... }
, bitfields (если правильно помню).
Можно сказать, что C++ надмножество какого-нибудь C89/C90, но и то не факт.
Поэтому я и сказал, что «почти».
А VLA в плюсах нет и вряд ли будет (это, по факту, в случае плюсов с их темплейтами добавляет в систему типов элемент undecidability). bitfields есть вот зато. Ну а так ещё можно вспомнить про тип 'a'
— int или char, и так далее.
Разве что микроконтроллеры мелкие, да и то нужно поискать, где нет С++ компилятора. То есть ниша вакансий pure C на hh.ru еще уже.
С++ прежде всего неудобен непрактичностью в современном мире. На нем вы не напишите сайт, приложение для смартфона, скрипт для machine learning. А десктопные программы сейчас мало кому нужны.
C и С++ хоть и 2 языка, но скажите мне, что сейчас пишут на С?
Ядра, дрова, embedded, криптография, компиляторы (иногда, сейчас скорее исключение), базовые библиотеки, интепретаторы/VM скриптовых языков (cpython, mri ruby, lua), расширения для них. В общем, системное и низкоуровневое — по прежнему ниша Си.
С++ прежде всего неудобен непрактичностью в современном мире. На нем вы не напишите сайт, приложение для смартфона, скрипт для machine learning. А десктопные программы сейчас мало кому нужны.
Какой нахрен сайт на C++? Софт для android-смартфонов, если это не webview к сайту довольно часто использует NDK и C++.
Если говорить за ML, то одна из базовых библиотек, столь любимая многими, — numpy всё основную работу делает в сишном и фортрановском коде (фортран — если используется netlib blas/openblas без оптимизаций). Intel TBB, MKL, DAAL — всё C + asm.
Кстати, про embedded я уже написал.
Какой нахрен сайт на C++? Софт для android-смартфонов, если это не webview к сайту довольно часто использует NDK и C++.
Часто это когда? Оправдано, только если нужно делать сложный обсчет или 3Д игру.
Если говорить за ML
Библиотеки написаны на чем угодно. Но почему-то очень часто работают с ними на Python.
Я говорю о количестве вакансий. Много ли их в вашем городе (не Москве) на «Ядра, дрова, embedded, криптография, компиляторы»?
Вы спрашивали "что сейчас пишут на С", а не про количество вакансий. Тем более в противоречивом "моём городе (не Москве)", когда я нахожусь в MSK.
Почему в этих вакансиях обязательно нужно писать на C, а не C++?
Зависит от конкретного случая. С большой вероятностью это будет зависеть от того, на чём проект написан. В случае ядра, если оно написано на Си (Linux, как самый распространенный вариант) на C++ не пишут, как правило. Иногда это невозможно (читай нерационально).
Для низкоуровневых библиотек, даже если используют плюсы, делают внешний сишный интерфейс, т. к. interop.
Часто это когда? Оправдано, только если нужно делать сложный обсчет или 3Д игру.
А также при использовании низкоуровневых вещей (iptables, криптография как частные примеры), аудио/видео кодеков.
Библиотеки написаны на чем угодно. Но почему-то очень часто работают с ними на Python.
Это пока хватает производительности и/или памяти. Потом начинаются torch/tf/whatever, C/C++, cilkplus, icc.
С++ прежде всего неудобен непрактичностью в современном мире. На нем вы не напишите сайт, приложение для смартфона, скрипт для machine learning. А десктопные программы сейчас мало кому нужны.
Пишу, помимо прочего, machine learning на С++. Не все задачи решаются полутора строками дёрганья готовых библиотек, к сожалению к счастью.
Ну и есть огромный рынок бекенда и всякого околосерверного ПО, которое на плюсах писать вполне себе можно и приятно.
Особенно понравилось, что вместо невнятного вороха функций с префиксами str_, array_ и т.п. используются понятные и логичные методы объекта соответствующего типа и это все выстраивается в четкую и логичную систему.
Кмк, учиться программированию лучше вообще без привязки к конкретному ЯП.
И хорошо, если первым языком окажется Pascal
Довольно непопулярное, но верное замечание! )
На первом курсе пришлось перейти с Си на Паскаль, и это было неприятно. При том что опыт был небольшим, и Си был уже не первым языком. Поэтому не соглашусь, хотя явно мой опыт не говорит о выборе первого языка.
PS в принципе, знаком с C#, с Прологом, с Джава-скрипатами и ещё кучей языков, но на них я серьёзно не писал.
И хорошо, если первым языком окажется Pascal, Java, C# да хоть C++
C++ как первый язык выглядит сложным и опасным вариантом. А pascal, java, scheme — вполне удачны. За C# не скажу, на нём никогда не писал.
Начинал с js, перешел на c# и не нарадуюсь. От строгой типизации просто восторг. Очень продуманный и лаконичный язык.
Почему бы не выбрать работу, смежную с вашей теперешней, но связанную с программированием? Например писать прошивки для измерительной аппаратуры, контроллеров и т. д.
Я вот недавно получил свою первую работу программистом в возрасте 31 года. Искал с конца октября по начало февраля.
Но как бы мне ни хотелось найти работу побыстрее, на собеседованиях не врал. И сейчас совсем не жалею. У меня теперь замечательный начальник, которому на собеседовании было интересно только что я умею и как быстро могу научиться новому. А не то, насколько моя история соответствует стереотипам о том, какой бэкграунд подходит для программиста.
В других городах, действительно, может быть сильно посложнее. Но всё равно я считаю, что врать на собеседованиях — не всегда хорошая идея :)
вспоминая нашумевшую статью про первый язык Python, мне кажеться работу будет найти тяжеловато в городах не миллионерах
Посмотрел в своём родном городе (с населением более миллиона): свыше тридцати вакансий по Питону — есть из чего выбирать! => Питон явно полезно знать!
Я вот недавно получил свою первую работу программистом в возрасте 31 года. Искал с конца октября по начало февраля
А до этого чем занимались?
подтверждаю.
количество вакансий джавистов почти в 100 раз больше.
больше половины из них живые а не висят по пол года и более
а количество с з/п выше 100-120 явно не 2-3%.
а ту одну вакансию что была на микроконтроллерщика с хорошей з/п — я сам профукал — сам виноват, разволновался и затупил — единственная за год вакансия где "от 100тр" а не до "80 тр".
так что шансы что будет вакансия и повезёт — близки к ничтожным.
Как я понял, человек ищет именно что-то интересное, а не просто самое хлебное из того, что есть. Для хлебного-то можно выучить Java или PHP, правда задачи не особенно там интересные.
руководитель отдела перспективных разработок одной IT компании — прямо сказал: "… я вас не понимаю, вы претендуете на позицию, которая явно ниже вашей и по уровню оклада, и по должности, да в общем и не такая интересная, как ваша работа сегодня..."
Конечно вас не поняли и скорее всего что вы их еще и напугали, ведь что можно ожидать от человека у которого есть такая роскошь. Смена карьерного направления в таком возрасте может себе позволить далеко не каждый. Даже если у вас способность обучаемости выше чем у всех остальных, нет гарантии что вы опять не передумаете.
Мое мнение, что имея такую роскошь в жизни, вы не знаете как ей распорядиться, и первое что вы сделали — это испугали руководителя отдела на собеседовании)
Этим вы мне напомнили обезьяну с гранатой, с одной стороны вы всегда достигаете высот — защитили кандидатскую, были руководителем отдела и директором, а сдругой показывая, что могу несмотря на накопленный опыт начать с чистого листа.
Какбы скомкать весь опыт и выкинуть в мусор, потому что мне стало скучно, а смотреть на вытянутые лица рекрутеров на собеседованиях намного забавнее. Не часто они встречают кандидатов наук и бывших руководителей, которые претендуют на роль начинающего программиста.
Если любите изменения, так меняйтесь себе на здоровье, но так чтоб вас поняли другие и в первую очередь — вы сами себя.
Написав в названии статьи Питон, хотя сама статья о вашем выборе и никак не связана с этим языком, вы притягиваете к статье питонистов или тех кто им интересуется, разьве будут в таком случае комментарии объективны?
Вы приводите примеры в пользу вашего выбора и заголовком статьи выбираете подходящую аудиторию, в итоге получаете собой же запрограмированный результат. Не думаю, что смена профессии принесет вам ожидаемую пользу.
Вы приводите примеры в пользу вашего выбора и заголовком статьи выбираете подходящую аудиторию, в итоге получаете собой же запрограмированный результат.
Абсолютно согласен. По факту, действительно подтянулись фанаты языка и подтвердили что язык замечателен. Язык то может в чём-то и неплох, но совокупное мнение получилось сильно искажённым.
… желательно на русском.
Выбросите это из головы.
Если в багаже уже есть опыт программирования, то быстро «въехать» в особенности языка питон поможет вот эта компиляция http://docs.python-guide.org/en/latest/
Там английский на уровне начальной школы.
Если всё-таки на русском, то ищите перевод «Dive Into Python» Пилгрима, хоть и устарело, но понятие об языке даст.
А всё-самое свежее здесь https://docs.python.org/3/
…
да в общем и не такая интересная, как ваша работа сегодня..."
Интерес меняется, возможно через какое-то время и он по-другому на это посмотрит.
Так что мужик молодец, решил — сделал! )
"Можно продолжать ходить на работу и попытаться реализовать себя в каком-нибудь хобби и пять раз в неделю, вставая по утрам, осознавать, что сегодня будет навсегда потерян еще один день — мрачноватая перспектива!"
Работаю программистом более десяти лет, ныне в известной кампании, зарплата устраивает. Но пять раз в неделю, вставая по утрам, осознаю, что сегодня будет навсегда потерян ещё один день… Не путайте хобби с ежедневной работой. И у программистов бывает тяжёлая и скучная работа. Вам нравится программирование? Пусть это будет Вашим хобби! Мне нравится подводная охота и радиоэлектроника. Но делать это своей основной работой? Увольте!
С таким багажом
поработал и инженером, и ведущим инженером, и руководителем технического отдела, и исполнительным директором, немножко побыл соучредителем нового бизнеса
КМК, перспективы в менеджерской сфере были бы гораздо лучше.
А Python в этом случае оставить на «свободное от работы время», «для души».
Мне очень не хочется Вас разочаровывать, и то, что я напишу ниже — это мое личное мнение, пусть для Вас оно будет просто еще одно мнение, не более.
я считаю, что на сегодняшний день авиастроение не может рассматриваться в отрыве от науки и технологии. Это материаловедение (металлургия и химия, композитные материалы), математика и численные методы, физика и электроника и много чего еще. Если у нас нет современных технологий во всех этих областях — мы не можем производить современные самолеты. Посмотрите на пассажирскую и транспортную авиацию — это зарубежные машины и это значит, что деньги в нашу авиапромышленность не поступают, а значит нет ресурса для развития.
Если говорить о собственной разработке и собственном производстве (не софта, а каких-либо машин или оборудования) — то это очень дорогое удовольствие! У меня таких денег нет.
Я могу немного помочь будущим, молодым и начинающим ИТ специалистам.
У меня интересная работа ведущего программиста в компании,
разрабатывающей программное обеспечение на заказ для зарубежных и отечественных клиентов.
За долгие годы путем обучения, проб, ошибок, дошел до уровня,
когда мне доверяют начинать разработку проектов и доводить их с командой в роли тим лидера до продакшена.
ПОЧЕМУ...?
Я задумался, почему несмотря на множество людей с горящими глазами, изучающими или знающими какой-либо язык программирования,
остается острая нехватка программистов (например, в нашей и других компаниях дают бонус за успешную рекомендацию кандидата)?
Почему, несмотря на большой объем информации в интернете, сложно понять,
что требуется для того, чтобы тебя приняли на работу в компанию, разрабатывающей программное обеспечение?
Почему сейчас, когда компании лояльно относятся к сотрудникам (в нашей компании десяток человек работают удаленно),
которые находятся за сотни километров в маленьких городках
и успешно работают на ключевых позициях, остается кадровый голод?
ЕСТЬ ОТВЕТ
К сожалению, проблема студентов, молодых и начинающим специалистов известна — компании не хотят рисковать и брать на работу людей без опыта, без нужных компетенций.
А без работы невозможно (а точнее очень трудно) получить необходимый опыт.
Злосчастный круг замыкается и его сложно разорвать.
Одного знания языка программирования недостаточно, чтобы вести профессиональную командную разработку программного обеспечения.
Нужны еще ряд компетенций — знаний, методик, навыков владения инструментами,
которые позволят сделать значимые огромные шаги к профессиональной разработке программного обеспечения.
У меня эти шаги заняли годы, ты пройдешь их за месяцы — но придется приложить большие усилия.
СТРЕМИСЬ К ЛУЧШЕМУ
Если тебя интересует программирование, и находишься в начале профессионального пути
— стремись привести свою жизнь к лучшему!
Будет сложно, нужно будет многое изучить и освоить, но оно того стоит.
Выше я опубликовал ссылку на БЕСПЛАТНЫЙ курс, на который я потратил полгода личного времени
и N00$ (сервер + по мелочам). И несколько человек мне помогают :0
Профессионалы не найдут там ничего нового. Но если захотите принять участие в качестве наставника — пишите.
Истины, личный опыт, ничего особенно — краткие собственные статьи, ссылки на статьи программистов и на книги, которые желательно прочесть разработчику. Системно — но по минимуму.
И курс формируется на GitLab, а потому там еще…
P.S. я также не люблю рекламу и то, что моя карма в минусе — нормально, не впервой :)
Кратко о себе — программирую с детства, но в профессиональную разработку пришел после 30.
Как я понимаю, в этой области, как и во многих ей подобных, проблема в высокой производительности труда и концентрации технологий — если Rolls Royce и ещё пара ей подобных фирм умеет производить хорошие двигатели и разрабатывать что-то новое в этой области, и при этом может полностью удовлетворить сущствующий спрос, то другие производители какбы и не нужны, даже если они не хуже.
Например, не говорите, что сейчас зарплата выше. Да, врать не хорошо, но в ситуации когда правда никому особо не интересна (на интервью не любят долгих рассказов), нужный короткий складный рассказ. Второе — скажите, что ваша нынешняя работа отчасти связана с питоном. Питон универсальный язык, его можно применить даже в прачечной. Это можно рассказать убедительно.Удачи Вам! Если Вы точно решили и готовы на всё, то у Вас получится!
Мне этот пост напоминает какую-то веру в чудеса, я сам таким же был. И комментаторы тоже радуют — "все получится", ведь я уже сверстал первый сайт на вордпрессе, теперь я программист, я решил уникальную задачу. Это кодинг, а не программирование. За два года вы научитесь более менее верстать сайты (если с этого начнете), настраивать готовые движки (покликать мышкой в админке и прописать конфиг. О какой зарплате на уровне можно говорить? Как то странно видеть такой наивный подход в 40 лет. И да молодые будут все схватывать и понимать намного быстрее вас, это факт. Но если упорство есть, то все получится, только розовые очки снимите.
Будь проще детка)), не беспокойся я каждые 2 года переписываю продукт. Если для тебя вносить багфиксы так важно, значит ты просто скорее всего программируешь плохо, либо это не твое. В общем добра тебе.
ты просто скорее всего программируешь плохо, либо это не твое
куда мне до вас:
не беспокойся я каждые 2 года переписываю продукт
Я то не беспокоюсь, а вот вам бы следовало
Я конечно не знаю на какой вы уровень ориентируетесь, может на мамочек в декрете, так и там находятся довольно неглупые люди :)
Сейчас разбираюсь с интернет автоматизацией процессов. Все там легко и просто как 5 копеек. Было бы желание работать, а не по форумам шарится.
Веб-стек только кажется простым, а потом начинается React/Angular, Redux, Gulp, Less, SASS и пошло поехало.
Неужели есть что-то такое притически сложно в изучение того же React/Redux? Это вполне себе стройные концепции с прекрасной документацией, кучей примеров. Я тупой 1с программист пишу на React/Redux и проблем не знаю.
Раньше даже не маскировались как сейчас, указывали возрастные планки прямо в объявлениях.
И вообще, давайте мутить профсоюз! Это дело сулит большую удачу, с каждым годом нас будет всё больше и больше!
В общем если чем-то не понравился, то найдут причину чтобы отказать или даже если возьмут на работу, то потом создадут плохие условия, что всё равно уйдёшь на другую работу.
Настоящая причина отказа — это то, что не хотят много платить. Капитализм же всё таки.
Диалектика!
Пытаются хантить, пишут в линкедин и тд
да в текущем коллективе я внезапно оказался самым старым, но работе как бы ни разу не мешает, моему графику изучения технологий и дальнейшему росту это не разу не мешает
единственное отличие от 20летнего, это в 35 ты обрастаешь детьми, недвижкой и необходимостью тратить время на решения множества бытовых проблем, но имхо компенсирует опытом при решении задач
со всеми вытекающими последствиями,
особенно не в юношеском возрасте,
способен далеко не каждый.
И решающим фактором в этом стремлении
являются не сложившиеся условия и возможности,
а мужество Человека.
Такое стремление можно только приветствовать.
Могу добавить и не побояться сказать-
такими людьми можно только восхищаться.
Почему в сорок лет я решил поменять профессию и стать программистом Python