Что должен знать и уметь хороший программист? Программерия, или что нужно знать программисту Что должен знать начинающий программист.

Что каждый программист должен знать о памяти

перевод на русский Это одна из классической статей, которая проведет вас по особенностям памяти, некоторые из которых старые, некоторые новые, некоторые известные и некоторые не очень. Несмотря на управляющую роль и вездесущность, не каждый программист имеет достаточный уровень знаний о Памяти. Важность знакомства с памятью в современных системах увеличивается, если вы заняты в сфере написания высокопроизводительных приложений. Разработчики аппаратных средств придумывают более сложные модели управления памятью и методы ускорения, такие как кэш CPU, но они не могут оптимально работать без некоторой помощи со стороны программистов. Я до сих пор читаю эту статью, и не могу сказать насколько много я узнал из нее о RAM, кэше CPU, например, L1 и L2 кэш, различных видах памяти, прямом доступе к памяти, конструкции контроллера памяти, и памяти в целом. Короче говоря, must read для программистов любых уровней.

Что должен знать каждый ученый о арифметики чисел с плавающей точкой

Тема арифметики операций с плавающей точкой коварна, и непроста в освоении. Многие Java программисты даже не знают, что может пойти не так при сравнении значений типа float / double оператором == . Многие из нас часто совершают ошибки, реализуя денежные расчеты в типах float и double . Данная статья еще одна жемчужина этой серии и является must read для всех разработчиков программного обеспечения и программистов. По мере роста опыта вы должны вдаваться в тонкости общих тем, и арифметика чисел с плавающей точкой является одной из них. Как старший Java разработчик вы должны знать как выполнять денежные расчеты, когда использовать типы float , double или BigDecimal , как округлять числа с плавающей точкой и многое другое. Даже если вы обладаете твердыми знаниями в этой теме, после прочтения статьи вы сможете открыть для себя что-то новое об операциях с плавающей точкой.

Что каждый разработчик должен знать о Unicode

Кодировка символов является еще одной областью, где многие программисты испытывают трудности, и "Абсолютный минимум, который безусловно должен знать каждый разработчик программного обеспечения про Unicode и наборы символов (никаких оправданий!)" призван восполнить этот пробел. Для справки, Да, это полное название этой статьи. Ее автором является Joel Spolsky, один из основатель https://stackoverflow.com . Джоэл написал эту статью в своем блоге почти 10 лет назад, но она не потеряла своей актуальности и в современном мире. Статья объясняет что такое Unicode, что такое кодировка, как символы представлены с использованием байт и многое другое. Одной из лучших вещей в этой статье является язык и метод изложения, даже если вы ничего не знаете о Unicode, у вас не возникнет проблем с пониманием. Короче говоря, еще один must read для всех программистов, кодеров и инженеров программного обеспечения.

Что каждый программист должен знать о времени

Помимо кодировки символов, время и даты (Time and Date) являются еще одной областью, где многие программисты, включая меня, испытывают трудности. Даже старшие разработчики теряются в GMT, UTC, летним временем и високосными секундами. Честно говоря, не легко справиться с часовыми поясами, не совершая каких-либо ошибок, а использование летнего времени дополнительно усложняет задачу. Проблемы усугубляются, если вы пользуетесь метод проб и ошибок, потому что вы никогда не будете в состоянии решить вашу проблему, делая это. Существует огромное число вещей, которые могут пойти не так, и бытует такое же количество заблуждений. Такие вещи, как, содержит ли дата часовой пояс или нет могут сбить вас с толку, преобразование времени UNIX к другим временным зонам, может взбесить вас, и вы с легкостью можете забыть о синхронизации часов и задержек. Я надеюсь, что после прочтения этой статьи, многие из ваших заблуждений о времени исчезнут, и у вас выстроится полное понимание времени.

Что каждый веб-разработчик должен знать про кодировку URL

Эта статья описывает распространенные ошибочные представления о кодировании Uniform Resource Locator (URL), а затем пытается разъяснить кодирование URL для HTTP, и далее демонстрирует часто возникающие проблемы и пути их решения. Хотя эта статья не является заточенной под какой-либо язык программирования, она иллюстрирует проблемы в Java) и заканчивается объяснениями по исправлению проблемы с кодировкой URL в Java, и в веб-приложениях на нескольких уровнях. Вы узнаете основы URL грамматики, общий синтаксис URL в HTTP и других протоколах. В этой статье также рассматриваются частые подводные камни URL-адресов, например, кодировку символов, специальные символы в разных частях URL, и вопросы кодирования/декодирования URL. Если вы Java программист, то вы также узнаете о том, как правильно управляться с URL-адресами в приложении Java. Как построить URL и использование клиентской библиотеки Apache Commons HTTP. Наконец, также предлагаются лучшие примеры и варианты работы с URL-адресами, например, вы должны кодировать URL при его построении, убедиться, что ваши фильтры URL-перезаписи справляются с вашими URL корректно и многое другое. Короче говоря, must read для любого веб-разработчика и программиста.

Что каждый программист знать о веб-разработке?

Эта интересная статья из programmersStackExchange, о том, что следует обдумать каждому программисту, реализующему технические детали веб-приложения, прежде, чем открыть сайт для публики. Она включает в себя вещи из областей разработки интерфейсов и удобства использования (Interface design and User Experience), Безопасности (Security), веб-стандартов (Web standards), производительности (Performance), оптимизации для поиска (Search Engine Optimization(SEO)), используемых технологий, и некоторых важных ресурсах. Сегодняшний мир в значительной степени зависит от интернета и достаточно распространено наличие у программиста личного сайта или блога. Опыт полученный из этой статьи, будет полезен не только в вашей профессиональной деятельности, но и в собственных проектах. Вы узнаете о всех ключевых технологий, таких как, HTTP, HTML, XML, CSS, JavaScript, совместимость браузеров, советы для уменьшения времени загрузки вашего сайта, XML карты сайта, спецификаций W3C и несколько других ключевых моментов.

Что каждый программист должен знать о SEO

Это еще одна статья, которая будет достаточно полезна для веб-разработчиков, программистов и блогеров. SEO является слишком большим, чтобы игнорировать его, как и многим программистам так и блогерам важно знать основы поисковой оптимизации, чтобы помочь Google найти их содержимое и показать коллегам программистам. Поскольку ни одна компания не может выжить без веб-присутствия в современном взаимосвязанном мире, SEO становится еще более важным. Если у вас есть стартап по продаже любого товара, то SEO является тем, о чем следует заботиться. Все программисты, особенно веб-разработчики могут получить значительную пользу от этой статьи. Помните, поисковая оптимизация является обширным и очень динамичный моментом, а также варьируется в разных поисковых системах, например, Google, Yahoo, и других. Итак, чтобы владеть этой темой вы всегда должны обновлять свои знания.

Что каждый C программист должен знать о неопределенном поведении (Undefined Behaviour) # 1/3

Язык программирования C имеет концепцию "неопределенного поведения". Неопределенное поведение широкая тема с большим количеством нюансов, и это одна из причин, почему я люблю Java: меньшее количество неопределенного поведения, меньше путаницы, больше стабильности и больше мира. Многие, казалось бы, разумные вещи в C на самом деле имеют неопределенное поведение, и это общий источник ошибок в программах. Кроме того, любое неопределенное поведение в C дает разрешение реализациям (компилятора и среды исполнения) для генерации кода форматирующего жесткий диск, совершения абсолютно неожиданных вещей, или даже хуже. Читайте эту прекрасную статью для глубокого погружения в море непредсказуемого поведения.

Что каждый программист нужно знать о сетях

Из самой статьи "Вы программист. Вы когда-нибудь задавались вопросом, как работают многопользовательские игры? Со стороны это кажется волшебным: два или более игрока разделяют совместный опыт по сети, словно они на самом деле существуют вместе в том же виртуальном мире. Но как программисты мы знаем правду, что происходящее на самом деле довольно сильно отличается от того, что вы видите. Оказывается, что все это иллюзия ". Это очень интересную статью о сетях, написанную для программистов игр, но я думаю, что каждый программист и разработчик может извлечь выгоду из нее.

Что каждый Java разработчик должен знать о Строках (String)

Это моя статья о java.lang.String и лично я считаю, что каждый Java программист должен знать об этом. Строки очень важны в повседневном программирования на Java, и именно поэтому хорошие знания являются обязательными для любого Java разработчика. Эта статья затрагивает многие важные аспекты Строк, включая строковой пул, строковые литералы, сравнение строк с помощью == против equals() , преобразование байт в строку, то почему строка является неизменной (immutable), правильное объединение строк и многое другое. Продвинутый программист, возможно, уже знаете все эти особенности, но даже в этом случае будет неплохо повторить.

Что каждый программист должен знать о безопасности?

Этот вопрос был задан студентом программистом на StackOverflow. Равно как много мы знаем об общих понятиях программирования, таких как, операционная система, алгоритмы, структуры данных, компьютерная архитектура и другие вещи, точно также важно знать и о безопасности. Хотя тема Безопасности достаточно обширна, содержит области шифрования/дешифрования, SSL, веб-безопасности, запутывания, аутентификации, авторизации и т.д., существует базовый минимум знаний обязательный для каждого программиста. Лично я в начале своей карьеры не знал многого о безопасности, когда я начал писать Servlet/JSP на основе Java web application, я узнавал о веб-безопасности и ряде угроз безопасности таких как SQL Injection, отказ в обслуживании (Denial of Service), XML Injection, межсайтовый скриптинг (Cross site scripting) и других. Как разработчик Java, теперь я следую безопасным методам Java программирования, предоставляемых fortify, PMP и другими поставщиками статических анализаторов кода. В этой статье содержится очень хорошая подборка тем и ссылок про безопасность, и в независимости от того, программируете вы или нет, вы, несомненно, получите пользу от этого ресурса.

Показатели Задержки (Latency Numbers) которые должен знать каждый программист

Это статья является бонусной, но, тем не менее, must read для любоко программиста. Для написания высокопроизводительного приложения на любом языке программирования будь то Java или C++, вы должны знать основные значения задержек, например, сколько времени займет чтение переменной из памяти, из L1-кэша, из L2-кэша, при случайном чтении (random read) с SSD и с диска. Сколько времени необходимо, чтобы заблокировать/разблокировать мьютекс, чтобы отправить пакет данных из одного города в другой или делать проход с возвратом (roundtrip) в пределах одного центра обработки данных. Эти значения задержек не зависят от языка программирования и являются часть базовых знаний, которые разработчик должен иметь, для написания сильнонагруженных приложений с низкой задержкой (high frequency low latency). Положительный момент об этой ссылке заключается в том, что он предоставляет сравнительный анализ того, как эти значения развивались в течение многих лет. Вы можете видеть, какими были значения в 2006 году и то, что они представляют собой сейчас. Вот и все, об этом списке статей которые должен прочитать каждый программист. Читая статьи такие как Что каждый программист или разработчик должен знать, вы углубляете свои знания в конкретной теме. Честно говоря, существует слишком много вещей к изучению программистами, и изучение языка программирования, такого как Java, лишь верхушка айсберга, но разве не большинство из нас имеют страсть к обучению. Программирование - работа, требующая постоянного развития, и единственными вещами которые будут полезны любому программисту на протяжении всей карьеры являются фундаментальные знания о таких вещах как память (memory) , Unicode , вычисления с плавающей точкой (floating point numbers) , время (time) , безопасность (security) . Некоторые вещи специфичны для конкретных языков, например мой пост о строках (String) в Java и, Что каждый C программист должен знать о неопределенном поведении (Undefined Behaviour), но и они хороши к изучению для многих начинающих и разработчиков. Перевод статьи

Специфика знаний и навыков, конечно, во многом определяться областью, в которой работает человек. Одни пишут приложения на планшетные устройства, другие разрабатывают движки сайтов, третьи – игрушки и т.д. Но тем не менее есть некоторые навыки, которые пригодятся любому программисту.

Быть на «ты» с компьютером

Это самый простой и базовый навык, присущий каждому программисту. Он предусматривает живой интерес к компьютерным технологиям, который уже, в свою очередь, порождает те или иные вопросы у будущего специалиста: для начала - как поставить «винду»? Как найти и взломать модную игрушку? А что такое BIOS, хостинг, ядро системы, ООП? – и понеслось...

Затем тебя начинают дергать родственники, друзья, девушка, подружки девушки, мол, постав программу, почисть систему от вирусов, переставь Windows и т. д. Поначалу это даже нравиться: приятно же ощущать себя компетентным в той или иной области. Но потом появляется закономерный вопрос: почему бы не начать на этом зарабатывать? Конечно, брать деньги со знакомых как-то неохота, но вот продать свои знания и энтузиазм какой-то серьезной фирме – вполне реальная затея. Выбираешь тот или иной язык программирования, начинаешь учить и вновь ощущаешь себя полным нубом..

К чему все это? А к тому, что мир информационных технологий – это мир игрушек, с которыми должно хотеться играть. Именно с интереса к этим «игрушкам» все и начинается. Если его нет, нет и программиста.

Английский

Без английского не обойтись. Чтобы выучить язык программирования, продется перелопатить много литературы, видео-уроков и документации. Почти все (99%) первоисточники написаны на английском языке. Если его не знать, то спектр материалов для изучения сузиться в разы. Соответственно скорость изучения языка программирования значительно снизиться.

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

Разговорный уровень, понимание английского на слух – это дополнительные бонусы. Под словосочетанием «знать английский язык» иметься в виду знать так называемый «технический английский язык». То есть нужно понимать специализированные статьи и документацию, а это далеко не то же самое, что «живое» общение с иностранцами.

Математика

Математика – вопрос не столь однозначный, как изучение английского. Точнее будет сказать, что логическое и абстрактное мышление должны быть на довольно высоком уровне. Математика в ВУЗе или в школе развивает упомянутые навыки, поэтому математическое образование – это большой плюс. Но тем не менее есть множество программистов, которые не имеют математического образования. Есть даже такие, которые не имеют высшего образования вообще. Это говорит о том, что логику и абстрактное мышление можно выработать не только математическими конструкциями.

Есть, конечно, области программирования, где нужно знать специфические формулы, но, во-первых, так далеко не везде, во-вторых, с ними можно ознакомиться по ходу и в этом могут помочь специализированные математические программы. Физика и математика пригодиться особенно в том случае, если вы хотите создавать качественные компьютерные игры.

Общительность

Общительность – одно из ключевых свойств хорошего программиста. Дело в том, что большинство серьезных проектов пишется в команде - это и удобнее, и быстрее. Если хотите работать на более-менее серьезную «контору», с людьми нужно уметь общаться, договариваться, дискутировать и соглашаться. Также нужно будет уметь ладить с начальством, которое иногда будет разбираться в программировании лучше вас, а иногда не будет понимать в этом деле вообще ничего.

Есть некий миф, мол, отшельничество и замкнутость – это неотъемлемая часть натуры программиста. В большинстве своем программисты весьма интересные и коммуникабельные люди. А отшельничество – это некий образ присущий всем гениям независимо от профессии, будь-то программист, лингвист, доктор и т. д.

Гибкий ум

Самого ума (умение оперировать нужными знаниями) мало, нужно чтобы он был гибким. Гибкий ум предусматривает умение учиться (пополнять знания, заменять устаревшую информацию на новую). Есть люди вроде бы умные, но очень консервативные. Они владеют неплохим логическим мышлением, высказываются внятно и последовательно, но вот выучить что-то новое, увы, не могут. А есть наоборот – голова очень пытливая, всем интересуется, все нужно, но в голове каша, то есть не может связать всю накопленную информацию в целостную позицию, структурировать ее.

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

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

Построенные на теории массового обслуживания и стандарте GSM сети мобильной связи; PHP-скрипты, исполняющиеся на удаленных серверах и передающие свою выдачу через Ethernet по TCP/IP на компьютеры с NDIS-драйверами; процессоры, переупорядочивающие и спекулятивно исполняющие наборы инструкций для того, чтобы скомпенсировать вызванную ограничениями полупроводниковой электроники и скоростью света остановку роста тактовой частоты; рассчитанные на ЭВМ корпуса самолетов и автомобилей, лекарства и структуры ДНК; компьютерные игры, ради крохотного блика в которых пишутся мегабайты заполненных интегралами Френеля статей; электронные фильмы и книги; алгоритмы NLP и TreeNet, вызывающие нам из огромных баз данных поисковую выдачу - вот то, что окружает нас каждый день благодаря программистам, благодаря оригинальным подходам и фундаментальным знаниям, благодаря продуманной и отточенной десятилетиями методологии разработки и управления сложностью ПО.

Я и мои единомышленники взяли на себя труд составить теоретический минимум для программиста на основании наиболее ярких отраслей IT, вошедших даже в программы нормальных университетов, на основании собеседований и постоянно пригождающихся на практике знаний. Часть из пунктов этого минимума можно изучить за 5 минут по википедии, часть же потребует серьезного труда на протяжении нескольких месяцев, но это именно то, что обязательно следует знать и чем следует свободно владеть. В комментариях приветствуются исправления и дополнения.


  1. C++ , стандарт, Comeau, 1TBS, Страустрап/D&E/Джосаттис/Вандервуд, Дьюхэрст/Мейерс/Саттер, RAII/copy-and-swap/exception-safety, правило пяти, Александреску/Абрахамс-Гуртовой, type erasure, CRTP, NVI, SFINAE, Koenig lookup, Duff"s device, Boost, Сик-Ламсдейн/Карлссон, TR on C++ performance, тест Степанова, forwarding problem/move semantics, SPECS
  2. Компиляторы , особенности реализации стандарта, ограничения реализации, интринсики, отличия стандартных библиотек (контейнеры, rand), ABI, реализация виртуальных функций, виртуального наследования, исключений, RTTI, switch, указателей на функции и методы; оптимизации, copy elision (RVO, NRVO), sizeof на различных платформах, дефайны компилятора и среды, __declspec, ключи компилятора, empty-base optimization, статическая и динамическая линковка, манглинг, распределенная компиляция, precompiled header, single compilation unit, (strict) aliasing/restrict, inline/_forceinline, volatile
  3. Мультитредность , обедающие философы, deadlock/livelock/race condition/starvation, атомарность, lock инструкции процессора, memory model/barrier/ordering, CAS или LL/SC, wait/lock/obstruction-free, ABA problem, написание lock-free контейнеров, spin-lock, TLS/per-thread data, закон Амдала, OpenMP, MPI, map-reduce, critical section/mutex/semaphore/condition variable, WaitForSingleObject/WaitForMultipleObjec ts, green thread/coroutine, pthreads, future/deferred/promise, модель акторов
  4. Язык ассемблера , Зубков/Хайд/Дреппер/Касперски/Фог/Абраш, x86, FPU/MMX/SSEn/AVX, AT&T и Intel-синтаксис, masm32, макросы, стек, куча/менеджеры кучи, соглашения вызова, hex-коды, машинное представление данных, IEEE754, little/big endian, SIMD, аппаратные исключения, прерывания, виртуальная память, реверсинг, срыв стека и кучи, return oriented programming, alphanumeric shellcode, L1/L2/RAM/page fault и их тайминг, язык ассемблера ARM
  5. Аппаратное обеспечение , Хоровиц-Хилл/Титце-Шенк/От физики к Си от panchul , полупроводниковая электроника/спинтроника/фотоника, транзистор, триггер, схемотехника, микрокод, технология создания процессоров, logic synthesis, static timing analysis, FPGA, Verilog/VHDL/SystemC, SISAL, Arduino, устройства памяти (ROM → EEPROM, RAM, SSD, HDD, DVD), RISC/CISC, Flynn"s taxonomy (ID), принстонский и гарвардский подход, архитектуры процессоров, архитектуры x86, VID/PID
  6. Процессоры , конвейеризация, hyper-threading, out-of-order execution, спекулятивное исполнение, static/dynamic branch prediction, префетчинг, множественный ассоциативный кэш, кэш-линия/кэш-промах, такты, кольца защиты, память в мультипроцессорных системах (SMP/NUMA), тайминг памяти
  7. Дискретная математика , K2, теорема Поста, схемы, конечные автоматы (ДКА и НДКА), автомат Калашникова, клеточные автоматы
  8. Вычислимость , машина Тьюринга, нормальные алгоритмы Маркова, машина Поста, диофантовы уравнения Матиясевича, лямбда-функции Черча, частично рекурсивные функции Клини, комбинаторное программирование Шейнфинкеля, Brainfuck, эквивалентность тьюринговых трясин, проблема останова и самоприменимости, счетность множества вычислимых функций, RAM-машина, алгоритм Тарского, SAT/SMT-солверы, теория формальных систем
  9. Языки программирования , грамматики, иерархия Хомского, теорема Майхилла-Нероуда, лемма о накачке и лемма Огдена, алгебра Клини, НДКА → ДКА, алгоритмически неразрешимые задачи в формальных языках, Драгонбук, Фридл, регекспы и их сложность, PCRE, БНФ, Boost.Spirit + Karma + Qi/Ragel, LL, LR/SLR/LALR/GLR, PEG/packrat, yacc/bison/flex/antlr, статический анализ кода, компиляция/декомпиляция/обфускация/деобф ускация, Clang/LLVM/XMLVM/Emscripten, GCCXML, OpenC++, построение виртуальных машин, JiT/AoT/GC, DSL/DSEL
  10. Алгоритмы и комбинаторная оптимизация , Кормен/Скиена/Седжвик/Кнут/Ахо-Хопкрофт-У льман/Пападимитриу/Шрайвер-Голдберг/Преп арата-Шеймос/e-maxx.ru, структуры данных, алгоритмы, сложность, символика Ландау, теорема Акра-Баззи, time-space tradeoff, классы сложности, NP-полные задачи, КМП, графы и деревья, потоки в сетях, матрица Кирхгофа, деревья поиска (особенно RB-дерево и B-дерево), occlusion detection, куча, хэш-таблицы и идеальный хэш, сети Петри, алгоритм русского крестьянина, метод Карацубы и матричное умножение Винограда-Штрассена, сортировки, жадные алгоритмы и матроиды, динамическое программирование, линейное программирование, diff-алгоритмы, рандомизированные алгоритмы и алгоритмы нечеткого поиска, псевдослучайные числа, нечеткая логика
  11. Численные методы , дихотомия/метод Ньютона, интер- и экстраполяция, сплайны, метод Гаусса/Якоби/Зейделя, QR и LU-декомпозиция, SVD, МНК, методы Рунге-Кутты, метод Адамса, формулы Ньютона-Котеса, метод Ритца, метод Бубнова-Галеркина, метод конечных разностей/элементов, FFT/STFT, сходимость и устойчивость
  12. Машинное обучение , Рассел-Норвиг/Bishop, подходы к моделированию AI, переобучение/кроссвалидация, байесовские сети, нейросети, сети Кохонена, Restricted Boltzmann machine, градиентный спуск/hill climbing, стохастическая оптимизация (метод Монте-Карло, метод отжига, генетические алгоритмы, муравьиные алгоритмы), SVM, gradient boosting, кластерный анализ, метод главных компонент, LSH, обучение с подкреплением, MDP, information retrieval/data mining/natural language processing, машинное зрение, Szeliski, OpenCV, image processing, OCR, фильтры Собеля, каскад Хаара, Viola-Jones framework, SURF, введение в психофизиологию зрения, IPython/pandas/scikit-learn
  13. Теория информации , сжатие, Хаффман, RLE, BWT, LZ, коды коррекции ошибок, сжатие с потерями (изображения, аудио, видео), информационная энтропия, формула Шеннона, сложность Колмогорова
  14. Криптография , Шнайер/Ященко, Принцип Керкгоффса, симметричная (DES, AES), асимметричная (RSA), качество ГПСЧ, алгоритм Диффи-Хеллмана, эллиптические кривые, хэширование (MD5, SHA, CRCn), DHT, криптостойкость, криптоатаки (атака гроссмейстера), WEP/WPA/WPA2 и атаки на них, цифровая подпись и сертификаты, PKI, HTTPS/SSL, доказательство с нулевым разглашением, пороговая схема
  15. Математика , Кнут-Грэхем-Паташник/Зорич/Винберг, Spivak/Dummit-Foote, матан, линал, комплан, функан, диффгем, теория чисел, дифуры/интуры/урчпы/вариационное исчисление/оптимальное управление, производящие функции, ряды, комбинаторика, теорвер/матстат/слупы/теория массового обслуживания, цепи Маркова, интегральные преобразования (Фурье, Лаплас, вейвлет), NZQRCHOS, матпакеты (Mathematica, Maple)
  16. Физика , правила Кирхгофа, закон Джоуля-Ленца, комплексное сопротивление, скорость и частота света, уравнения Максвелла, лагранжиан и гамильтониан
  17. Химия , стехиометрия, химия кремния:)
  18. Архитектура и стиль кода , Макконнелл/Фаулер/Лебланк/Гамма/Александ реску-Саттер/Буч, защитное программирование, паттерны, SOLID/GRASP/KISS DRY SPOT/YAGNI, UML, OOP (Smalltalk), OOD/OOA, метрики кода
  19. Методологии разработки , Waterfall/RUP/Agile/Scrum/Kanban/XP, TDD/BDD, CASE
  20. Тестирование , юнит-тесты, функциональное, нагрузочное, интеграционное тестирование, тестирование UI
  21. Инструментальные средства разработки , IDE, IntelliSense, отладчики (VS/Olly/WinDbg/kdb/gdb) и трейсеры (strace/ltrace), DWARF debug information format, дизассемблеры и декомпиляторы (IDA/HexRays/Reflector), системы контроля версий (SVN, GIT), merge/branch/trunk, системы именования файлов и бранчей, continuous integration, ant, code coverage, статический анализ (lint, cppcheck), динамический анализ (valgrind, фаззинг), верификация и валидация ПО (Frama-C, RAISE (RSL), Coq), профайлинг, багтрекеры, документирование кода, системы сборки (CMake), пакетные менеджеры (NuGet)
  22. Фреймворки , Qt, moc и метаинформация, концепция слот-сигнал, Саммерфилд-Бланшет/Шлее, PoCo, промышленные библиотеки: GMP, i18n, lapack, fftw, pcre
  23. Операционные системы , Silberschatz/Рихтер/Соломон-Руссинович/Р обачевский/Вахалия/Стивенс/Love/Linux Kernel Internals, менеджер памяти, менеджер кучи и ее устройство (LAL/LFH/slab), менеджер устройств, менеджер процессов, context switch, реальный и защищенный режим, исполнимые файлы (PE/ELF/Mach), объекты ядра, отладочные механизмы (strace/ptrace/dtrace/pydbg, Debug API) и минидампы, bash, сетевой стек и высокопроизводительные сервера, netgraph, CR0, IPC, оконная подсистема, система безопасности: ACE/ACL и права доступа, технологии виртуализации, RTOS (QNX), программирование драйверов, IRQL, IRP, файловые системы, BigTable, NDIS/miniport/FS drivers/filter driver, Mm-, Io-, Ldr-функции, DKOM и руткиты, GDT/IDT/SDT, ядра Windows/Linux/BSD, POSIX
  24. Компонентно-ориентированные модели , Роджерсон/Таварес, COM/OLE/ActiveX/COM+/DCOM RPC, ATL, апартменты, моникеры, MIDL, XPCOM, CORBA, TAO, D-Bus
  25. Сеть , Стивенс, OSI model/Internet model, Ethernet, TCP/IP, TCP window, алгоритм Нейгла, сокеты, Protocol buffers/Thrift/Avro/ASN.1, AMQP, ICMP, роутинг/BGP/OSPF, ARP, атака Митника, syn flood, HTTP/FTP, P2P/DHT, DHCP, SMB/NBNS, IRC/XMPP, POP3/SMTP/ESMTP/IMAP, DNS, WiFi/WiMax/GSM/CDMA/EDGE/Bluetooth/GPS, ACE, Wireshark
  26. Графика и GPGPU , алгоритм Брезенхема, цветовые модели, трассировка лучей vs полигональная графика, OpenGL/GLSL/Open Inventor, DirectX/DirectShow/DirectAudio/HLSL, stencil/depth/alpha-test, графический конвейер в DirectX 11, шейдеры, модели освещения (Фонг), пропускная способность, fillrate, OpenCL/CUDA/AMP, ландшафты, лоды, тени, deferred shading, текстурирование и фильтрация, антиалиасинг, HDR, tone mapping, virtual/augmented reality
  27. Форматы , XML/XSLT/XPath/XMLStarlet/DOM/SAX, RTF/ODF, JSON/BSON/bencode, YAML, JPEG/PNG/WebP, AVI/MPEG/RIFF/WAV/MP3/OGG/WebM, SVG, Unicode, кодировки однобайтные/UTF-8/UTF-16/UCS-2/UTF-32, проблемы длины и сравнения Unicode-строк
  28. Базы данных , Грубер/Дейт, ANSI SQL, T-SQL, ODBC, MySQL/PostgreSQL/MS SQL/BDB/SQLite/Sphinx, хранимые процедуры, триггеры, алгебра Кодда/А, Tutorial D, нормальные формы, оптимизация и выполнение запросов, структуры данных индексов, транзакции и ACID, CAP-теорема Брюера, NoSQL, key-value storage, шардинг, ORM (C++ ODB), ERD, OLAP, семантическая сеть, triplestore, RDF/Turtle, SPARQL, OWL, Semanticscience Integrated Ontology, reasoner, DBpedia
  29. Прикладное программирование , C#/F#, Шилдт/Троелсен/Рихтер, генерики, yield, linq/plinq, рефлексия, AST, WCF, WinForms/WPF/Silverlight, AOP, фреймворки логгирования, .NET assembly, Scala, Хорстманн/Одерски, pattern matching, макросы/квазицитаты
  30. Квантовые вычисления , алгоритм Шора, квантовая криптография
  31. Функциональное программирование , Haskell/Ocaml/Scheme/Alice или Oz, SICP/TaPL/YAHT/Purely Functional Data Structures/Харрисон-Филд, HOF (map/fold/filter), система типов Хиндли-Милнера, монады, тайпклассы, АТД, dependent types, ленивость/энергичность, логическое программирование (Prolog или Mercury), конкурентное программирование (Erlang или Oz)
  32. Веб-программирование и скриптовые языки , Фланаган/Zend PHP5 Certification Course + Study Guide, Apache/nginx, CGI/FastCGI, PHP/Zend Framework/ReactPHP/Zend Engine/Doctrine или Propel/CodeIgniter или Symphony или Yii, Python/Django/Twisted, Ruby/RoR, ASP.NET MVC, JavaScript/jQuery/React/Google Closure/ExtJS/node.js, ООП в JavaScript, HTML5, CSS3/табличная и блочная верстка, RSS, canvas/WebGL, Ajax/WebSockets, вопросы безопасности (XSS, SQL injection, CSRF), highload, C10k problem, SWIG
  33. Проектирование GUI и представление информации , Раскин/Тафти, юзабилити, основы дизайна и типографики, закон Фиттса, основы верстки, LaTeX

UPD: Некоторые комментарии повторяются довольно часто, и разумно было бы попробовать ответить на них в апдейте поста.


Этот теормин вполне справедливо критикуется за отсутствие системности изложения и ВНЕЗАПНЫЕ соседства различных как по глубине, так и по содержанию топиков. Это не бага, это фича. Системное изложение программы по практически любому из пунктов заняло бы места не меньше, чем оглавления пухлых талмудов, поэтому лучше как раз названия этих талмудов и приводить. Как же тогда работать с этим списком? Следует брать хорошие книжки по тематике и читать их до тех пор, пока все упомянутые слова не встретятся в процессе чтения. Авторы и в страшном сне не могли предположить, что кто-то решит, что устройство Даффа посчитают по глубине и объему чем-то равным полуторатысячестраничному Священному Стандарту. Однако этот критерий вполне рабочий - можно перечитать сотню книг по C++ для начинающих, и ни разу не встретить упоминания о нем, но если читать действительно полезные книги и статьи (для тем, подобных C++, такие книги существуют и перечислены), то все слова довольно быстро встречаются. Смысл программы, обусловленный ее размером, именно в том, чтобы дать возможность оценить, достаточное ли количество книг по теме прочитано.

Весьма значительное количество критики теормин встречает и со стороны людей, считающих себя программистами, которые полагают, что все это знать невозможно , изучать слишком долго, а в некоторой абстрактной узкой практике большая часть не используется. Эти люди, к сожалению, просто не понимают, в чем разница между эрудицией/памятью и знаниями. Ценность для программиста имеет не запоминание точного формата какого-нибудь из пакетов NBNS, а овладение подходами, которые использовались при разработке, другими словами не способность воспроизвести, а способность воссоздать или опознать, в том числе в другой области. Именно способность человека к анализу и синтезу (которая все же не берется из ниоткуда, а достигается активным познавательным трудом) отличает его от гугла, который даже в очень отдаленной перспективе не научится решать даже div2 250. Именно на развитие этой способности и направлен теоретический минимум, который в процессе работы обязательно придется дополнять domain-specific знаниями, будь то особенности игровой физики, разработка оперденей на Java или создание реальных микросхем.

В отдельный абзац стоит выделить вопрос от тех, кто сомневается в своих способностях освоить теормин, либо полагает, что способность его применять будет редко востребована и ослабнет. В целом, теорминимум в большинстве пунктов несколько уступает учебным программам факультетов CS нормальных университетов, так что за 5 лет его освоить вполне возможно, даже совмещая с работой. Конкретно в геймдеве активно используются (по разным подсчетам в обсуждениях) от 1/3 до 2/3 перечисленных пунктов. Недостающую активность можно восполнять, к примеру, консультируя других на Stack Overflow .

Отдельную категорию людей, высказывающуюся в стиле «я такого не знаю, я такое запрещаю» составляют те, кто полагает, что цель программиста заключается не в улучшении мира, а в зарабатывании денег . Им этот теоретический минимум действительно не нужен, а следует поискать самоучители по тому, как правильно и со знанием всех тонкостей воровать, обманывать и заставлять работать вместо себя других.

«Нас и тут неплохо кормят» . Этот аргумент встречает свое опровержение во втором по активности обсуждении статьи у metaclass :
Все, что должен знать программист, чтобы его после 40 лет не выбросили на Помойку, Где Бомжи.
Действительно, в возрасте около 45 лет начинает активно проявляться деградация мозга, приводящая к существенным проблемам в понимании и способности оперировать кодом с обычной цикломатической сложностью. Потеря способности писать код в сочетании с неспособностью из-за отсутствия тренировок к анализу/синтезу - гарантированный путь именно туда. Некоторые люди сохраняют способность оперировать нормальной цикломатической сложностью и в старости, однако лишь за счет превышающих норму показателей в молодости. Проверить, входите ли вы в зону риска, можно на TopCoder
От физики к программированию
Зачем нужно знать всякие низкоуровневые вещи

Ну и наконец, откуда вообще вырос этот теормин:
ACM Computer Science Curriculum

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

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

На сегодняшний день на многих факультетах высших учебных заведений не только подробно объясняют что нужно, чтобы стать программистом, но и сразу же готовят специалистов с необходимыми базовыми навыками в сфере математики и физики. Однако многие разработчики утверждают, что высшее образование в данной сфере - не главное. Важнее здесь уметь находить нестандартные и удачные решения в процессе работы над задачами.

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

Люди, которые задумываются о том, должны понять, что основных знаний самого языка будет не совсем достаточно. Для получения хорошей работы и достойной оплаты необходимо разбираться в ООП, которое используется в написании популярных фреймворков и CMS. Работы с - следующий этап того, что нужно знать программисту PHP.

В настоящее время будет достаточно ознакомиться с работой самой распространенной из баз данных - MySQL. Настоящий специалист также вряд ли сможет обойтись без языков верстки HTML и CSS. Несмотря на то, что PHP - это язык сервера, он связан именно со сборкой веб-старниц, написанных на HTML. Также понадобится и знание синтаксиса JavaScript и понимание работы распространенных фреймворков - JQuery или ExtJS. Сейчас несложно осваивать все эти современные инструменты с помощью многочисленных блогов и онлайн-курсов.

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

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

Разновидности

В программировании на первое место ставятся не только практические навыки, но и идеи специалиста. Программистов можно условно разделить на три категории в зависимости от специализации:

  1. Прикладные программисты занимаются в основном разработкой программного обеспечения прикладного характера — игры‚ бухгалтерские программы‚ редакторы‚ мессенджеры и т.п. К области их работы также можно отнести создание программного обеспечения для систем видео- и аудио-наблюдения‚ СКД‚ систем пожаротушения или пожарной сигнализации и т.п. Также в их обязанности входит адаптация уже существующих программ под нужды отдельно взятой организации или пользователя.
  2. Системные программисты разрабатывают операционные системы, работают с сетями, пишут интерфейсы к различным распределенным базам данных. Специалисты этой категории относятся к числу самых редких и высокооплачиваемых. Их задача состоит в том‚ чтобы разработать системы программного обеспечения (сервисы)‚ которые‚ в свою очередь‚ управляют вычислительной системой (куда входит процессор‚ коммуникационные и периферийные устройства). Также в список задач входит обеспечение функционирования и работы созданных систем (драйвера устройств‚ загрузчики и т.д.).
  3. Web-программисты также работают с сетями, но, в большинстве случаев, с глобальными - Интернет. Они пишут программную составляющую сайтов, создают динамические веб-страницы, web-интерфейсы для работы с базами данных.

Особенности профессии

На основе анализа математических моделей и алгоритмов решения научно-технических и производственных задач программист разрабатывает программы выполнения вычислительных работ. Составляет вычислительную схему метода решения задач, переводит алгоритмы решения на формализованный машинный язык. Определяет вводимую в машину информацию, ее объем, методы контроля производимых машиной операций, форму и содержание исходных документов и результатов вычислений. Разрабатывает макеты и схемы ввода, обработки, хранения и выдачи информации, проводит камеральную проверку программ.

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

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

Плюсы и минусы профессии

Плюсы:

  • высокая заработная плата;
  • сравнительно высокий спрос на специалистов;
  • иногда можно получить работу не имея высшего образования;
  • по преимуществу является творческой профессией.

Минусы:

  • приходится часто и много объяснять одно и то же, так как то, что понятно и очевидно программисту, совсем не всегда понятно и очевидно пользователю;
  • работа в режиме аврала (иногда) в стрессовой ситуации;
  • профессия накладывает специфический отпечаток на характер, который нравится далеко не всем окружающим.

Место работы

  • IT-компании и web-студии;
  • научно-исследовательские центры;
  • организации, которые подразумевают в своей структуре штатную единицу или отделы программистов.

Важные качества

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

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

Обучение на программиста

Компьютерная Академия ШАГ - IT-образование, каким оно должно быть. С 1999 года они , дизайнеров и системных инженеров, которых нельзя заменить искусственным интеллектом. Для этого, кроме глубоких профильных знаний, учат понимать задачи, мыслить готовыми проектами и работать в команде. И делают всё, чтобы выпускников Академии ШАГ принимали на работу сразу после защиты дипломов.

На этом курсе вы можете получить профессию программиста дистанционно за 1-3 месяца. Диплом о профессиональной переподготовке установленного государством образца. Обучение в полностью дистанционном формате. Крупнейшее образовательное учреждение дополнительного проф. образования в России.

Занятия ведут практикующие Веб-разработчики с профильным образованием и стажем работы по специальности от 5 лет. . 10 лет на рынке образования, 4 миллиона пользователей. Все курсы можно купить с беспроцентной рассрочкой на год. Также можно получить IT-специальность в Geek University, а оплатить учебу через год после ее начала.

За 115 часов можно научиться создавать сайты и интернет-магазины, зарабатывать на этом 120 тысяч рублей в месяц. После прохождения обучения - гарантированное трудоустройство. Преимущества: доступ к курсу навсегда, 3 специализации на выходе, гибкий и свободный график занятий, работа с личным наставником, трудоустройство гарантировано документарно.

Вузы

Оплата труда

Программист - одна из самых востребованных и высокооплачиваемых профессий в России. Даже не самый продвинутый специалист может найти работу в соответствии со своим уровнем знаний, а затем постепенно учиться и набираться опыта. Зарплата стажера — около $1000. Штатный программист в компании среднего уровня (не IT) получает до $1500-1800, чуть больше — в организации, связанной с массовой разработкой ПО. Зарплата ведущего программиста — $2500—3000. Следующая ступень — руководитель IT-отдела. К необходимым знаниям добавляется обязательный опыт работы, владение иностранным языком, навыки управления персоналом и др., а заработок может достигать $4000. Хороший программист может стать руководителем крупного проекта по разработке ПО, и тут уровень доходов достигает $5000 и выше.

Зарплата на 05.02.2020

Россия 30000—150000 ₽

Москва 70000—200000 ₽

Ступеньки карьеры и перспективы

Хорошим стартом карьеры может стать присоединение к группе программистов при разработке какого-либо проекта. Крупные проекты часто привлекают внимание западных компаний, которые «перекупают» российских программистов. К примеру, когда-то группа наших молодых ученых разрабатывала процессор «Эльбрус» для Минобороны, а в итоге их всех перекупила корпорация Intel, и теперь наши ученые и программисты работают за рубежом, а сам проект «Эльбрус» потихоньку закрылся. Проблема «утечки мозгов» в этой профессии — одна из самых острых.

Программист может сделать карьеру до руководителя группы программистов (тим-лидер), IT-директора предприятия, менеджера IT-проекта и т.п. В ходе работы программист может перемещаться в рамках своей специальности, совершенствуясь профессионально.

Знаменитые и великие программисты

  • Кнут Дональд Эрвин
  • Мацумото Юкихиро
  • Таненбаум Эндрю
  • Рэймонд Эрик Стивен
  • Фаулер Мартин
  • Хоппер Грейс
  • Столлман Ричард Мэттью
  • Кей Алан
  • Мейер Сид
  • Страуструп Бьёрн

Возникновение программирования как рода занятий и, особенно, как профессиональной деятельности трудно датировать однозначно.

Часто первым программируемым устройством принято считать жаккардовый ткацкий станок, построенный в 1804 году Жозефом Мари Жаккаром, который произвёл революцию в ткацкой промышленности, предоставив возможность программировать узоры на тканях при помощи перфокарт.

Первое программируемое вычислительное устройство, Аналитическую машину, разработал Чарлз Бэббидж (но не смог её построить). 19 июля 1843 года графиня Ада Августа Лавлейс, дочка великого английского поэта Джорджа Байрона, как принято считать, написала первую в истории человечества программу для Аналитической машины. Эта программа решала уравнение Бернулли, выражающее закон сохранения энергии движущейся жидкости.

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

Однако ни одна из программ написанных Адой Лавлейс никогда так и не была запущена.

Аду Августу, графиню Лавлейс, принято считать почётным первым программистом (хотя, конечно, написание одной программы по современным меркам не может считаться родом занятий или профессиональной деятельностью). История сохранила её имя в названии универсального языка программирования «Ада».

Первый работающий программируемый компьютер (1941 год), первые программы для него, а также (с определёнными оговорками) первый язык программирования высокого уровня Планкалкюль создал немецкий инженер Конрад Цузе.

Имена людей, впервые начавших профессионально выполнять работу собственно по программированию (в отрыве от наладки аппаратуры компьютера), история не сохранила, так как поначалу программирование рассматривалось как второстепенная наладочная операция.

Законы Мерфи для программистов

1. Ничто не работает так, как планировалось запрограммировать.

2. Ничто не программируется так, как должно работать.

3. Хороший программист характеризуется умением доказать почему задачу невозможно выполнить, когда ему просто лень её выполнять.

4. На решение проблемы уходит в три раза меньше времени, чем на обсуждение всех "за" и "против" её решения.

5. Обещанный срок сдачи - это аккуратно рассчитанная дата окончания проекта плюс шесть месяцев.

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

7. Настоящие программисты любят Windows — все ошибки, сделанные по собственной тупости, можно свалить на Microsoft.

8. Следствие — 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.

9. В приступе злости все почему-то молотят по невинному монитору, вместо системного блока.

10. В случае голодовки настоящий программист ещё месяц сможет питаться едой, выковырянной из-под кнопок клавиатуры.

11. Настоящий программист уже как минимум поменял три залитых пивом клавиатуры.

12. Все, кто испытывает проблемы с настройкой кодировки, автоматически считаются неандертальцами.

13. Дилетантские разговоры о компьютерах вызывают резкую тошноту вплоть до приступов рвоты. Вопрос о том как поменять "обои" в Windows вызывает желание перерезать горло вопрошающему.

14. У большинства людей, нуждающихся в твоей помощи, причина ошибки в работе программы чисто генетическая.

15. HTML, HTTP, FTP, SMTP, TCP/IP, RTFM и т.д. - это слова, а не аббревиатуры.

16. Словосочетание "мышка-норушка" не несёт никакого смысла.

17. Самые мистические проблемы, широко раздуваемые и афишируемые, в конце концов оказываются твоими глупейшими ошибками.

18. Следствие - если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое.

19. Самое плохое ощущение для программиста - когда вокруг тебя стоят десять человек и все пытаются найти причину проблемы в твоей программе, а ты уже понял, в чём проблема, но боишься сказать, потому что это что-то вопиюще глупое...

20. Решение всех жизненных проблем находится в интернете. Надо только уметь хорошо искать.

21. Конфликт логических указаний в жизни вызывает фатальную ошибку в работе мозга программиста - возможно повышение температуры и сильное головокружение вплоть до рвоты или потери сознания.

22. Тех, кто презирает программистов, программисты презирают сильнее, чем те, кто презирает программистов, презирают программистов, которые презирают тех, кто их презирает.

23. Если ты понял предыдущее — то ты программист.

На этом свете 10 типов людей - те, кто понимает двоичную систему счисления, и те, кто не понимает ее.

Видео: ты ж программист