Technologique
Про аннотации, как средство метапрограммирования, рефлексии, runtime директив, а также примесного проведения (mix-in behaviour) для классов и методов во фреймворках и user defined классах. https://en.wikipedia.org/wiki/Attribute-oriented_programming Аннотации…
Так думаю не только я.
Само создание, реализация и появление новых языков программирования (post-2K era), доказывает наличие этих проблем.
Такие языки как Go, Rust, Nim, Dart, Kotlin, Swift, Elixir, направленны на решение различных прикладных проблем в отрасли и экосистемах разработки.
Компании-гиганты столкнувшиеся с этими проблемами в разработке at large scale - инвестируют в специалистов для создания новых языков, осознавая что других путей и решений нет, отрасль и соответственно бизнес просто медленно стагнируют.
Экспрессия и выразительность языка для быстрой разработки (rapid application development, RAD - это не должно быть свойством среды разработки, умной IDE, это должно быть базовой концепцией языка!), удобные и простые средства многопоточного и асинхронного программирования, эффективность компилятора для быстрой компиляции высокооптимизированного машинного кода для его быстрого исполнения и более высокой производительности, поддержка разработки крупномасштабных приложений, их быстрой компиляции, сборки, разрешения зависимостей - всё это проблемы не решаемые с конца 80-х годов. Хотя решения были придуманы уже на тот момент, просто не продвигались бизнесом и компаниями, игнориррвались ими, приоритет отдавался методикам, парадигмам, software engineering практикам, но не реальным прикладным задачам и соответствующим инструментам их реализации.
Мартин Фаулер и Роберт Мартин безусловно сделали себе имена и получили известность, их работа безусловно нужна и важна, направлена на то, чтобы хоть как-то облегчить жизнь и работу разработчиков.
Но...
Если задуматься...
Их работа направлена на поддержку программистами legacy кода и архаичных технологий (типа Java, C#, C++), что только тормозит развитие отрасли, технологий и в целом программирования.
Я называю подобные практики "системами искусственного жизнеобеспечения экосистем" (как аквариум), а отрасль находится по прежнему в коме.
Как бы страшно подобная аналогия не звучала - это действительно так. Отрасль инерциальна и движется с замедлением, но мало кто об этом задумывается, "катим и славно". И это ещё более страшно.
Плодится количество вакансий требующих знание архаичных языков (Java, C#, C++), лучших практик разработки для этих языков (best practices), чтобы не вляпываться и не размазывать ненароком снова и снова, методов рефакторинга говнокода для его очистки (clean coding 👍), знание применения шаблонов проектирования (design patterns), чтобы тащить огромную наследуемую кодовую базу (legacy codebase) и при этом хоть как-то развивать и поддерживать её.
Как итог - инженеры-программисты не переходят на новые языки, технологии, не используют их в реальной разработке.
Более того это не привлекает в отрасль больше инженерных кадров с фундаментальными знаниями, что ещё более негативно влияет на развитие технологий в целом.
Само создание, реализация и появление новых языков программирования (post-2K era), доказывает наличие этих проблем.
Такие языки как Go, Rust, Nim, Dart, Kotlin, Swift, Elixir, направленны на решение различных прикладных проблем в отрасли и экосистемах разработки.
Компании-гиганты столкнувшиеся с этими проблемами в разработке at large scale - инвестируют в специалистов для создания новых языков, осознавая что других путей и решений нет, отрасль и соответственно бизнес просто медленно стагнируют.
Экспрессия и выразительность языка для быстрой разработки (rapid application development, RAD - это не должно быть свойством среды разработки, умной IDE, это должно быть базовой концепцией языка!), удобные и простые средства многопоточного и асинхронного программирования, эффективность компилятора для быстрой компиляции высокооптимизированного машинного кода для его быстрого исполнения и более высокой производительности, поддержка разработки крупномасштабных приложений, их быстрой компиляции, сборки, разрешения зависимостей - всё это проблемы не решаемые с конца 80-х годов. Хотя решения были придуманы уже на тот момент, просто не продвигались бизнесом и компаниями, игнориррвались ими, приоритет отдавался методикам, парадигмам, software engineering практикам, но не реальным прикладным задачам и соответствующим инструментам их реализации.
Мартин Фаулер и Роберт Мартин безусловно сделали себе имена и получили известность, их работа безусловно нужна и важна, направлена на то, чтобы хоть как-то облегчить жизнь и работу разработчиков.
Но...
Если задуматься...
Их работа направлена на поддержку программистами legacy кода и архаичных технологий (типа Java, C#, C++), что только тормозит развитие отрасли, технологий и в целом программирования.
Я называю подобные практики "системами искусственного жизнеобеспечения экосистем" (как аквариум), а отрасль находится по прежнему в коме.
Как бы страшно подобная аналогия не звучала - это действительно так. Отрасль инерциальна и движется с замедлением, но мало кто об этом задумывается, "катим и славно". И это ещё более страшно.
Плодится количество вакансий требующих знание архаичных языков (Java, C#, C++), лучших практик разработки для этих языков (best practices), чтобы не вляпываться и не размазывать ненароком снова и снова, методов рефакторинга говнокода для его очистки (clean coding 👍), знание применения шаблонов проектирования (design patterns), чтобы тащить огромную наследуемую кодовую базу (legacy codebase) и при этом хоть как-то развивать и поддерживать её.
Как итог - инженеры-программисты не переходят на новые языки, технологии, не используют их в реальной разработке.
Более того это не привлекает в отрасль больше инженерных кадров с фундаментальными знаниями, что ещё более негативно влияет на развитие технологий в целом.
Technologique
Так думаю не только я. Само создание, реализация и появление новых языков программирования (post-2K era), доказывает наличие этих проблем. Такие языки как Go, Rust, Nim, Dart, Kotlin, Swift, Elixir, направленны на решение различных прикладных проблем в отрасли…
Классики - Эдсгер Дейкстра, Чарльз Энтони Хоар, Никлаус Вирт, Дональд Кнут, Брайан Керниган - много раз с очень категорическим несогласием высказывались о направлении развития программирования и методик разработки софта.
Дейкстра будучи уже преподавателем в Техасском университете писал о развитии программирования не в том направлении и Software Engineering практиках, характеризуя их как простое "очковтирательство" (eyewashing), замыливание глаз и уход от реальных проблем программирования и разработки.
http://www.cs.utexas.edu/~EWD/transcriptions/EWD10xx/EWD1036.html
A number of these phenomena have been bundled under the name "Software Engineering". As economics is known as "The Miserable Science", software engineering should be known as "The Doomed Discipline", doomed because it cannot even approach its goal since its goal is self-contradictory. Software engineering, of course, presents itself as another worthy cause, but that is eyewash: if you carefully read its literature and analyse what its devotees actually do, you will discover that software engineering has accepted as its charter "How to program if you cannot".
Есть управленческие практики командной разработки - Scrum, Agile и т.д.
Есть практика автоматизации процессов коллективной разработки в команде - DevOps.
Но...
Программирование и разработка должны быть нормальной инженерной дисциплиной, но не управленческой или "шаманской" практикой!
Поэтому читайте меньше евангелистов ООП и прочих парадигм программирования - читайте классиков, а также оригинальных авторов современных языков программирования и иниструметальных технологий (compilers, language toolkits) разработки и её автоматизации, изучайте концепции языков программирования (см. ниже, #books), базовые принципы работы компьютеров, сетей, протоколов и т.д. (категорически рекомендую книги Эндрю Таненбаума).
Это позволит выработать собственную независимую точку зрения, обрести более широкий взгляд на технологический мир, даст вам больше фундаментальных знаний, которые более востребованы в реальной практике разработки и на рынке промышленной разработки софта, т.к. отрасль становится всё более сложной и умной (анализ больших данных, статистические и численные методы анализа, неалгоритмические методы анализа - нейронные сети, сети Петри), что также даст вам больше пространства для фантазии и поиска идей для собственных разработок.
https://telegram.me/technologique/96
https://telegram.me/technologique/268
https://theory.stanford.edu/~jcm/
https://theory.stanford.edu/~jcm/books.html
https://www.coursera.org/instructor/jcmitchell
http://www.williamspublishing.com/Books/Concept_Of_PL.html
Дейкстра будучи уже преподавателем в Техасском университете писал о развитии программирования не в том направлении и Software Engineering практиках, характеризуя их как простое "очковтирательство" (eyewashing), замыливание глаз и уход от реальных проблем программирования и разработки.
http://www.cs.utexas.edu/~EWD/transcriptions/EWD10xx/EWD1036.html
A number of these phenomena have been bundled under the name "Software Engineering". As economics is known as "The Miserable Science", software engineering should be known as "The Doomed Discipline", doomed because it cannot even approach its goal since its goal is self-contradictory. Software engineering, of course, presents itself as another worthy cause, but that is eyewash: if you carefully read its literature and analyse what its devotees actually do, you will discover that software engineering has accepted as its charter "How to program if you cannot".
Есть управленческие практики командной разработки - Scrum, Agile и т.д.
Есть практика автоматизации процессов коллективной разработки в команде - DevOps.
Но...
Программирование и разработка должны быть нормальной инженерной дисциплиной, но не управленческой или "шаманской" практикой!
Поэтому читайте меньше евангелистов ООП и прочих парадигм программирования - читайте классиков, а также оригинальных авторов современных языков программирования и иниструметальных технологий (compilers, language toolkits) разработки и её автоматизации, изучайте концепции языков программирования (см. ниже, #books), базовые принципы работы компьютеров, сетей, протоколов и т.д. (категорически рекомендую книги Эндрю Таненбаума).
Это позволит выработать собственную независимую точку зрения, обрести более широкий взгляд на технологический мир, даст вам больше фундаментальных знаний, которые более востребованы в реальной практике разработки и на рынке промышленной разработки софта, т.к. отрасль становится всё более сложной и умной (анализ больших данных, статистические и численные методы анализа, неалгоритмические методы анализа - нейронные сети, сети Петри), что также даст вам больше пространства для фантазии и поиска идей для собственных разработок.
https://telegram.me/technologique/96
https://telegram.me/technologique/268
https://theory.stanford.edu/~jcm/
https://theory.stanford.edu/~jcm/books.html
https://www.coursera.org/instructor/jcmitchell
http://www.williamspublishing.com/Books/Concept_Of_PL.html
Telegram
Technologique
John C. Mitchell. Concepts in Programming Languages. — Cambridge University Press, 2002. — 540 p. — ISBN 978-0-521-78098-8.
6.4. Polymorphism and overloading, p. 145-151
Пожалуй лучшее описание концепций полиморфизма в языках программирования!
6.4. Polymorphism and overloading, p. 145-151
Пожалуй лучшее описание концепций полиморфизма в языках программирования!
Forwarded from Andrew Bednoff
Себеста_Р_У_Основные_концепции_языков.djvu
9 MB
Forwarded from Andrew Bednoff
Intel Pentium P54C (0.35um) 133 MHz - on HP VECTRA VL 5/133 SERIES 4 Desktop
Мы выжимали как могли! 😆😂👍
Да, были времена... мои первые два компьютера
На таком железе ещё и работали, и учились! 🙀
Да, были времена... мои первые два компьютера
На таком железе ещё и работали, и учились! 🙀
Опубликован исходный код рендера изображений pix2pix на базе нейросетевого движка Torch для обработки исходных черно-белых набросков моделей или фотографий и превращения их в полноцветные фотореалистичные изображения
https://github.com/phillipi/pix2pix
https://github.com/phillipi/pix2pix
GitHub
GitHub - phillipi/pix2pix: Image-to-image translation with conditional adversarial nets
Image-to-image translation with conditional adversarial nets - phillipi/pix2pix
Telegram запустил новый сервис для создания медийных публикаций Telegraph и новую фишку в клиенте, instant view - возможность просмотра прямо в клиенте предварительно кэшированных постов из Telegraph, сервиса блогов Medium.com и некоторых других ресурсов.
http://telegra.ph
https://telegram.org/blog/instant-view
http://telegra.ph
https://telegram.org/blog/instant-view
Telegram
Instant View, Telegraph, and Other Goodies
Meet Instant View, a elegant way to view articles with zero pageload time. To try it out, use Telegram version 3.14 to share a link to a Medium post or a TechCrunch article. This will get you an Instant View button that immediately shows a native page, saving…
Сегодня запускаем официально ставшую уже традиционной на канале рубрику с тегом #сложновато 😄👍
Будут сложные вопросы и по мере возможности простые и ясные ответы на них
Будут сложные вопросы и по мере возможности простые и ясные ответы на них
Forwarded from Brodetskyi. Tech, VC, Startups
Очень интересно: разработчики нейросетевого переводчика Google обнаружили, что он может переводить предложения между парами языков, переводить которые его не обучали (!).
Они взяли три языка - английский, японский и корейский, и показали алгоритму примеры перевода в парах "английский-японский" и "английский-корейский" (в обе стороны). И - о чудо - алгоритм смог переводить предложения с корейского на японский и наоборот, хотя его этому не обучали.
В общем, выглядит так, будто нейросеть нашла какой-то универсальный промежуточный язык для описания слов на других языках. Только представьте себе это!
https://research.googleblog.com/2016/11/zero-shot-translation-with-googles.html
по-русски: http://apparat.cc/news/google-translate-ai-secret-internal-language/
Они взяли три языка - английский, японский и корейский, и показали алгоритму примеры перевода в парах "английский-японский" и "английский-корейский" (в обе стороны). И - о чудо - алгоритм смог переводить предложения с корейского на японский и наоборот, хотя его этому не обучали.
В общем, выглядит так, будто нейросеть нашла какой-то универсальный промежуточный язык для описания слов на других языках. Только представьте себе это!
https://research.googleblog.com/2016/11/zero-shot-translation-with-googles.html
по-русски: http://apparat.cc/news/google-translate-ai-secret-internal-language/
research.google
Zero-Shot Translation with Google’s Multilingual Neural Machine Translation Syst
Posted by Mike Schuster (Google Brain Team), Melvin Johnson (Google Translate) and Nikhil Thorat (Google Brain Team)In the last 10 years, Google Tr...
Brodetskyi. Tech, VC, Startups
Очень интересно: разработчики нейросетевого переводчика Google обнаружили, что он может переводить предложения между парами языков, переводить которые его не обучали (!). Они взяли три языка - английский, японский и корейский, и показали алгоритму примеры…
Для меня это доказательство существования универсальной грамматики, предсказанной лингвистом Ноамом Хомски, того самого промежуточного когнитивного языка, которым от рождения наделён каждый ребёнок, метаязыка, дающего ребёнку постичь практически любой человеческий язык в раннем возрасте.
Главную задачу лингвистики Хомский видел в формальном описании универсальной грамматики, для этой цели им была предложена трансформационная порождающая грамматика, опирающаяся в первую очередь на синтаксис.
Хомский утверждает, что многие свойства порождающей грамматики производны от универсальной грамматики.
https://ru.wikipedia.org/wiki/Универсальная_грамматика
https://ru.wikipedia.org/wiki/Порождающая_грамматика
До настоящего времени ни один из тезисов универсальной грамматики не был подтвержден.
И возможно достигнутый результат обучения нейросети для Google Translate - это доказательство существования концепции (proof of concept) универсальной грамматики, универсального метаязыка, который вероятно изначально заложен и существует в одном из огромного множества вариантов конфигурации нейросети, её архитектуры, карты связей нейронов-тензоров, к которому пришли в Google в результате обучения на больших наборах данных (возможно поисковых), и этот вариант конфигурации нейросети с изначально заложенным в него когнитивным пониманием метаязыка существует не только в искусственно образованной архитектуре нейросети, но и в естественной, в развивающейся нейросети головного мозга ребёнка например, что является определяющим фактором нашей способности к использованию языка и общению для передачи информации.
Это как раз самый эффективный из нейросетевых методов для решения задач NLP (natural language processing).
Те же задачи обработки естественного языка решает библиотека NLTK для Python, используя символьные и статистические методы, которые, теперь уже очевидно, менее эффективные, чем нейросетевые неалгоритмические методы.
И вот кстати интересный вопрос, заданный мне недавно при прохождении собеседования и претендуя на новомодную (на самом деле мода просто возвращается) специализацию deep machine learning data scientist (Lua/Torch, Python/TensorFlow) в компанию, которая давно занимается торговыми платформами для бирж (в том числе криптовалютных) и создаёт трейдинговых ботов - почему неалгоритмические нейросетевые методы эффективнее при решении подобного класса задач, для обработки естественных языков (NLP) и вообще когнитивных задач постижения чего либо либо, вместо их алгоритмической автоматизации?
И почему нейросетевые методы - неалгоритмические?
...
Главную задачу лингвистики Хомский видел в формальном описании универсальной грамматики, для этой цели им была предложена трансформационная порождающая грамматика, опирающаяся в первую очередь на синтаксис.
Хомский утверждает, что многие свойства порождающей грамматики производны от универсальной грамматики.
https://ru.wikipedia.org/wiki/Универсальная_грамматика
https://ru.wikipedia.org/wiki/Порождающая_грамматика
До настоящего времени ни один из тезисов универсальной грамматики не был подтвержден.
И возможно достигнутый результат обучения нейросети для Google Translate - это доказательство существования концепции (proof of concept) универсальной грамматики, универсального метаязыка, который вероятно изначально заложен и существует в одном из огромного множества вариантов конфигурации нейросети, её архитектуры, карты связей нейронов-тензоров, к которому пришли в Google в результате обучения на больших наборах данных (возможно поисковых), и этот вариант конфигурации нейросети с изначально заложенным в него когнитивным пониманием метаязыка существует не только в искусственно образованной архитектуре нейросети, но и в естественной, в развивающейся нейросети головного мозга ребёнка например, что является определяющим фактором нашей способности к использованию языка и общению для передачи информации.
Это как раз самый эффективный из нейросетевых методов для решения задач NLP (natural language processing).
Те же задачи обработки естественного языка решает библиотека NLTK для Python, используя символьные и статистические методы, которые, теперь уже очевидно, менее эффективные, чем нейросетевые неалгоритмические методы.
И вот кстати интересный вопрос, заданный мне недавно при прохождении собеседования и претендуя на новомодную (на самом деле мода просто возвращается) специализацию deep machine learning data scientist (Lua/Torch, Python/TensorFlow) в компанию, которая давно занимается торговыми платформами для бирж (в том числе криптовалютных) и создаёт трейдинговых ботов - почему неалгоритмические нейросетевые методы эффективнее при решении подобного класса задач, для обработки естественных языков (NLP) и вообще когнитивных задач постижения чего либо либо, вместо их алгоритмической автоматизации?
И почему нейросетевые методы - неалгоритмические?
...
Wikipedia
Универсальная грамматика
Универсальная грамматика — термин, которым в ряде лингвистических теорий обозначается предполагаемый набор правил или принципов, присущих каждому человеческому языку. Подобные правила не определяют язык полностью: они допускают значительную вариантность,…
Technologique
Правила разработки надежного отказоустойчивого кода на Си для mission critical real-time task operating systems for on-board embedded devices - от лаборатории реактивного движения JPL NASA. В целом эти правила должен знать и применять каждый программист без…
Интересная статья о Маргарет Хэмильтон, женщине и инженере, разработавшей вместе с командой MIT бортовое навигационное ПО для программы Аполлон и принципы надёжного кода, которые используются в лаборатории реактивного движения (JPL) NASA и поныне.
http://blog.engineerbabu.com/2016/11/margaret-hamilton/
http://blog.engineerbabu.com/2016/11/margaret-hamilton/
EngineerBabu
The Lady Software Engineer Margaret Hamilton | EngineerBabu
Amazing Things that you Probably don’t know about Margaret Hamilton. In this article, I am going to shed some light on her past life.
Отличное приложение 👍
Позволяет читать и тестировать данные бесконтактных карт (Visa PayWave, MasterCard PayPass, American Express ExpressPay) в режиме pos-терминала через NFC в смартфоне
https://play.google.com/store/apps/details?id=com.github.devnied.emvnfccard
https://play.google.com/store/apps/details?id=com.github.devnied.emvnfccard.pro
Tips:
UnionPay QuickPass does not operate on a trust-based system, but rather as a stored-value card.
PS: Проверил на картах Демир банка - пока это единственный банк, выпускающий карты Visa с поддержкой технологии бесконтактной оплаты Visa PayWave, когда не нужно отдавать карту кому-то в руки для оплаты и беспокоится об утечке CVС кода с обратной стороны карты, хотя при поддержке банком OTP/2FA технологии Visa 3D Secure и это уже не столь критично, но бесконтактных карты всё же удобнее в использовании.
Позволяет читать и тестировать данные бесконтактных карт (Visa PayWave, MasterCard PayPass, American Express ExpressPay) в режиме pos-терминала через NFC в смартфоне
https://play.google.com/store/apps/details?id=com.github.devnied.emvnfccard
https://play.google.com/store/apps/details?id=com.github.devnied.emvnfccard.pro
Tips:
UnionPay QuickPass does not operate on a trust-based system, but rather as a stored-value card.
PS: Проверил на картах Демир банка - пока это единственный банк, выпускающий карты Visa с поддержкой технологии бесконтактной оплаты Visa PayWave, когда не нужно отдавать карту кому-то в руки для оплаты и беспокоится об утечке CVС кода с обратной стороны карты, хотя при поддержке банком OTP/2FA технологии Visa 3D Secure и это уже не столь критично, но бесконтактных карты всё же удобнее в использовании.
Google Play
Credit Card Reader NFC (EMV) - Apps on Google Play
Read and extract public data on an Contactless banking card (VISA, MasterCard ..