Семь вещей, которые нужно знать начинающему программисту

Original author: Kavita Iyer
  • Translation
Если вы недавно в мире профессиональных разработчиков, вы могли слышать о вещах, которым не учат в университете или на курсах.

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




Загляните под капот


Знание языка программирования — основа разработки программного обеспечения. Но не менее важно понимать, что скрывается у языка под капотом.

Пит Балл, инженер поддержки в Acquia, сказал: «Многие языки абстрагированы от того, что происходит на уровне системы, и эта абстракция полезна, поскольку позволяет разработчикам быстрее разрабатывать. Но когда вы натыкаетесь на грабли, действительно неприятный баг, нужно понять, что же происходит внутри. Совершенно необходимо тогда уметь заглянуть внутрь процесса, посмотреть системные вызовы и понять, как кусок кода взаимодействует с остальной системой».

Точно так же говорит Роберт Дуглас, вице-президент отдела удовлетворенности клиентов Platform.sh: «Когда я начинал программировать, были вещи, которые я действительно не понимал. Три примера таких вещей — файловые системы, сеть и то, как данные хранятся в памяти. Это значит, что я не обязательно понимал цели некоторых программ, с которыми сталкивался».

Знайте инструменты командной строки


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

Ветеран с двадцатилетним опытом, пожелавший остаться анонимным, сказал: «Иногда вы оказываетесь перед машиной с ограниченным набором инструментов и задачей, которую надо сделать прямо сейчас. Знайте командную строку, как пять пальцев; инструменты, такие как find, comm, diff, vi/vim, sed, awk; умейте писать небольшие скрипты прямо в командной строке, чтобы найти файл, который надо подправить прямо сейчас, потому что продакшн сломан, а Джо, который полез своими ручонками не туда, — в отпуске на Фиджи».

Балл, использовавший инструменты Microsoft, а теперь перебирающийся на Linux, соглашается: «Я узнал о командной строке и утилитах *nix все, что возможно. Я могу вспомнить код, который писал год назад, и как я проводил дни или недели, работая над тем, что решается однострочником на grep+awk».

Дебаггер — ваш друг


Как разработчик, вы проведете кучу времени, отлавливая баги. Дейв Вэйрон, биотехнолог-программист в Novartis, выделяет преимущества дебаггера, несмотря на затраты времени на его освоение.
«Учитесь пользоваться дебаггером!», — говорит он. «Потратьте день-два на его настройку. Если вы не видите ожидаемого результата, просто отладьте его: установите точки останова и аккуратно продвигайтесь по коду, особенно по коду сторонних библиотек. Это лишит вас дней разочарования, более того: вы научитесь новому, просто читая чей-то код».

Научитесь писать тесты


Некоторые разработчики уверены в критической важности модульного тестирования, которое подразумевает написание небольших тестов, проверяющих, делает ли код то, что задумал разработчик. Среди этих людей — Ричард Хэндлофф, разработчик баз данных в Strategic Power Systems. Он пишет: «Думаю, что лучший совет, который я могу дать начинающему разработчику — научиться писать хорошие тесты как можно раньше».

Планируйте самообучение


С быстрым изменением технологий меняются системы, языки и инструменты, используемые программистами.

Адам Вульф, мобильный разработчик и основатель Milestone Made, предполагает, что новые разработчики должны быть готовы к изменениям и быть на гребне волны. «Прямо сейчас я хочу сказать, что вы должны быть готовы осваивать новый стек технологий примерно каждые четыре года. Хорошие базовые знания всегда будут актуальны, но инструменты и технологии, которые вы будете использовать каждый день, будут меняться не реже, чем с названной частотой».

«Проекты больше не пишутся на одном языке и стеке технологий», сказал анонимный разработчик. «Вы никогда не ограничитесь работой только с одной технологией в одном проекте. Привыкайте к переходу из проекта в проект и от одних языков и технологий к другим».

Кооперируйтесь


Несмотря на то, что обычно разработчики работают обособленно, им приходится взаимодействовать с другими людьми. Бен Миллер, CTO Sinclair Digital Ventures, подчеркнул важность готовности к командной работе для вашей карьеры: «Большие проекты — это куча движущихся деталей, собранных вместе, и то, как они соединяются и разделяют проблемы, создаст невероятные инженерные сложности, если вы не будете осторожны», пишет он.
«Прежде чем браться за улучшение одного алгоритма, соберитесь с командой и убедитесь, что нет способа разделить проблему на всех, сделав ее проще. Разработка — командная игра!».

Подтверждая важность командных навыков, Вейрон говорит: «Если вы не можете понять самостоятельно, как работает этот интерфейс, попросите помощи. То, что вы считаете свою работу шедевром, не делает ее шедевром. Как в колледже, у других людей в комнате те же вопросы или вопросы, на которые только вы можете ответить. Разрабатывайте отношения с коллегами. Часто просто озвучивание проблемы вызывает озарение».

Анонимный источник, разделяющий мнение о важности командной игры, говорит: «Соберитесь и делайте что говорят, даже если это вас утомляет. Но осторожно: вы рискуете застрять так надолго».

Разрабатывайте для себя вне работы


Миллер дает достаточно интересный совет, который не кажется очевидным на первый взгляд. «Разработка для себя — путь к повышению», — говорит он. «Найдите простое решение проблемы, сделайте код понятным и легко модифицируемым, и вам подкинут еще больше работы. Со временем у вас даже будут просить совета» — объясняет он. «Короче говоря, стремление к спокойной безопасной работе затормозит карьеру».

Перевел: Андрей Никифоров
___

Полезные материалы для начинающих разработчиков от образовательного IT-портала GeekBrains:
Запись вебинара "Все, что вы хотели знать о профессии программиста"
Бесплатный онлайн-курс для начинающих "Основы программирования"
GeekBrains
ОБРАЗОВАТЕЛЬНАЯ ПЛАТФОРМА

Comments 97

    +47
    Правило, которое выучил я (навеяло заглавной картинкой):
    Никогда не ставьте кофе так близко от рабочего ноутбука, любая чашка однажды опрокинется. Минимум на расстоянии вытянутой руки. Лучше, на другом столе.
      0
      И желательно, чтобы он был без сахара — когда вы его таки разольёте — будет проще отмывать.
        +12
        Ваш совет реально полезнее всего, что написано в посте.
          +3
          Вы когда-нибудь пили кофе по 20 000 рублей за чашку? И я пил. Ваш совет крайне полезен.
            0
            Буквально пару дней назад как менял клавиатуру на ноутбуке по этой причине.
              0
              Это был худший розыгрыш себя самого на первое апреля.
                0
                И перед собой тоже не стоит ставить — очень легко задеть рукой. Когда-то я у меня была такая привычка, но после нескольких инцидентов я научился ставить чашку далеко в стороне :)
                  0
                  Если уж очень хочется кофе или чая, то можно взять большую чашку с широким основанием. Я использую чашку объемом 800 миллилитров. Даже при поперечном ударе в верхнюю кромку она не переворачивется, в отличие от обычных чашек.
                  +10
                  Семь вещей, которые нужно знать начинающему программисту:

                  1. Двоичная система счисления
                  2. Типы переменных
                  3. Логические операции
                  4. Блок-схемы
                  5. Циклы
                  6. Функции
                  7. Рекурсия
                    0
                    Двоичная система счисления

                    а можно узнать почему?

                    не программист, но со всем остальным согласен
                      –4
                      Не обязательно двоичная, но ту, которую использует процессор под который разрабатываешь — знать обязательно. От этого зависит длина слова, от неё зависит определение сложности алгоритма.
                        +8
                        если вы про Low-level типа ассемблера, то да.
                        а как работает интегральная схема процессора или трансформатор в блоке питания надо знать?

                        п.с. я не спорю, просто интересно знать более конкретное обоснование
                          +3
                          Ещё есть поля с флагами и операции над ними (установка, проверка, снятие)
                            0
                            А ещё знание двоичной системы нужно, чтобы понимать, почему 0.1 * 10 не равно единице.
                              –1
                              Я про тот low level, который доходит до самого верха. Предположим что у нас есть алгоритм сортировки. Хороший алгоритм, все знают что у него логарифмическая сложность. Но есть один нюанс — эта сложность будет только если у нас переменная меньше либо равна разрядности процессора. Если же мы возьмём и воспользуемся в алгоритме 128 битными переменными, то в лучшем случае всё ухудшится в 4 раза, а скорее всего выползет квадрат. А теперь вопрос — как программист без знаний низкого уровня будет оптимизировать приложение когда упрётся в боттлнэк? Он может поставить больше серверов, но там вылезают эта же двоичная система, но приминительно к сетям. Ровно в тот момент когда для программиста заканчивается вся магия низкого уровня — приходит понимание. Что оптимизации, что хайлоада. Я бы не сказал что это ненужные знания, я соглашусь что они могут не пригождаться очень долго, возможно даже — никогда, но вот ровно до того момента пока есть запас производительности.
                                +1
                                Если же мы возьмём и воспользуемся в алгоритме 128 битными переменными, то в лучшем случае всё ухудшится в 4 раза

                                То есть сложность не изменится :)
                                  0
                                  Так «в лучшем» же :)
                                  Константа резко поплывёт. Обычно одна инструкция за такт (+\-, иногда могут несколько уместиться), а тут резко все действия становятся медленнее. И нам ещё повезло что современный процессор похож на многоленточную машину тьюринга, во времена одноленточной задавшему вопрос рассмеялись бы в лицо!
                              0
                              Новое слово в компьютерной науке!
                              +2
                              Это азы работы компютера и, как по мне, их стоит знать как и историю своей страны (не из-за пользы). Так же, знание бинарки сильно позволяет экономить ресурсы. Ибо обычный человек думает, что в 3-х bool переменных можно хранить 3 единицы информации, а программист должен знать, что это 8 единиц информации.

                              Ну, и плюс, моё, личное — я не люблю поверхностную информацию. Она очень часто ведёт к неправильным выводам. Поэтому знание бинарки, как и базового устройства железа считаю обязательными.
                                +1
                                в 3-х bool переменных можно хранить 3 единицы информации, а программист должен знать, что это 8 единиц информации.

                                это конкретно bool, про что уже говорит пункт №2
                                  +1
                                  Пункт №2 заставит понимать, что это за тип. А не концепцию хранения и сортировки массивов из него.

                                  Также мне кажется что нельзя до конца понять логические операции не зная бинарки… Поэтому и написал на первом месте — она мать всего (утрирую)
                                • UFO just landed and posted this here
                                    0
                                    Извиняюсь. Разумеется это ошибка в используемых мной названиях.
                                      +2
                                      Архиватор сделать не проблема, проблема сделать разархиватор.
                                        0
                                        >> А то ведь можно было бы сделать прикольный архиватор, который сжимает любые данные до 1-го бита

                                        Так сразу в /dev/null, чего мелочиться :)
                                          +1
                                          А то ведь можно было бы сделать прикольный архиватор, который сжимает любые данные до 1-го бита. ;)

                                          Так ведь уже три года назад.

                                            –1
                                            Но по факту, все равно один bool занимает 8 бит в памяти. И три bool можно уместить в 8 бит минимум, и то через битовые маски. Так что в некотором роде комментатор прав.
                                              0
                                              Но по факту, все равно один bool занимает 8 бит в памяти.

                                              Не факт. Зависит от компилятора.
                                                +3
                                                Фиг там, в современных языках логическая переменная занимает одно машинное слово — используется тип INTEGER. С чем это связано? А банально с производительностью… современному процессору сложнее оперировать байтами — для этого ему нужно из кеша/памяти извлечь слово и отсечь всё лишнее — а это дополнительные операции и соответственно замедление работы. Ещё хуже — использовать для этого отдельные биты.
                                                Но для ХРАНЕНИЯ данных на внешних носителях экономичней всего хранить логические переменные именно в БИТАХ, но этим как правило брезгуют — лишняя морока ради экономии 128 байт на логических переменных из сотен килобайт сопутствующих данных. Шевелится начинают когда выигрыш более 50% или объём данных находится на грани, чтобы уложится в размер определённого слота и т.д.
                                                • UFO just landed and posted this here
                                                0
                                                Несколько не так, переменная типа BOOL это на самом деле INTEGER, который равен машинному слову используемой системы. т.е. нынче это 32/64 бита. Мало кто работает с BOOL как с отдельными битами т.к. из-за этого сильно страдает производительность и имеет смысл только для долговременного хранения состояния и в случае массовой обработки бинарных состояний(маски прозрачности изображений?). В целом, работать с битами процессору очень накладно, он умеет эффективно работать только группами бит по 32-64 за раз. А некоторые системы работают большими порциями — например по 1024 бита за раз(привет видеокартам и аналогичным числовым ускорителям) и им крайне накладно работать с одиночными битами.
                                                  +1
                                                  Как-то я вас не понимаю. Операция по установке бита занимает от силы 3-4 такта процессора, для снятия 4-5. Слишком накладно для процессора это с fload/double работать, вместо fractional
                                                  И потом, следуя Вашей логике выходит, что и в степень двойку возводить лучше умножением чем сдвигом?
                                                  У Вас в профиле указано, что работа связана с МК и ассемблером… но почему-то мне страшно представить код после Вашей оптимизации.

                                                  Sorry за оффтопик. Если по теме, то я считаю, что обязательно нужно знать операции с фиксированной точкой.
                                                    0
                                                    Вы не учитываете что при этом если переменная не находится в кеше L1 нужно подтянуть её из оперативки, а это может занять уже до сотни тактов и очень неочевидно. И при этом процессор хоть из кеша хоть из оперативки вынужден читать словами, т.е. если надо где-то изменить один бит он читает 64/128 бит меняет их и ложит обратно. При этом операции с кешем могут затрагивать блоки гораздо большего размера — например страницу кеша в 64 байта… т.к. процессор/чипсет не умеет извлекать одиночные байты/слова и вынужден при операциях с данными оперировать объёмами кратными размеру страницы кэша, что в итоге выливается в очень много тактов простоя из-за таких простых операций, зато в отличие от бит он УЖЕ способен работать с числами с плавающей запятой гораздо быстрее — результат вычисления над числами с плавающей запятой появляется уже через 2..10 тактов. А в некоторых системах умножение матриц чисел 8x8 занимает 2..3 такта. По сравнению с этим, операции с битами выглядят крайне неэффективными.
                                                    В любом случае, работать с битами проще всего только в регистрах что и практикуется, но одиночное использование логической переменной очень не оптимально.
                                                0
                                                Основная форма представления данных в самых распространенных, на сегодняшний день, ВС. Сильно поможет «заглянуть под капот».
                                                  +1
                                                  Она тесно связана с элементарными логическими операциями.
                                                  К тому же, понимание двоичной системы счисления даёт обьяснение таким странным магическим числам как 1024, 32768, 65535 и многим другим непонятным ограничениям(ограничение размера файла в 4Гб на FAT32, 32Гб на размер винчестера в старых системах...).
                                                  Так же, приноси понимание почему математическая операция 10.0/10.0 = 1.0 не имеет смысла и очень часто даёт ложный результат, почему к примеру не всегда получится прибавить 1 к числу вроде 1E+37. Всё это завязано на двоичную систему счисления чуть более чем полностью.
                                                  0
                                                  0. Конечные автоматы
                                                    +9
                                                    Правильно так:

                                                    10 вещей, которые нужно знать начинающему программисту:

                                                    0. Двоичная система счисления
                                                    1. Еще FF всяких полезных вещей
                                                      +7
                                                      >>> 0bFF
                                                        File "<stdin>", line 1
                                                          0bFF
                                                           ^
                                                      SyntaxError: invalid token
                                                      
                                                      0
                                                      Можешь посоветовать книгу начинающему?
                                                      Что прочесть в первую очередь?
                                                        –3
                                                        Вам для начала стоит определиться каким программированием вы хотите заняться. На вскидку могу определить три области, железячники, которые начинают с ардуино и продолжают на микроконтроллерах, системные программисты, которые пишут прикладные программы и веб разработчики, которые строят сайт. Это все очень грубые упрощения.
                                                          0
                                                          Вы описали очень интересные области. Если судить так, то вот вопрос: Что можете посоветовать для начинающего в области программирования, ну т.е. написание системных программ?
                                                            +3
                                                            Начинающий в области программирования не будет писать системных программ.
                                                              0
                                                              Могу порекомендовать классику: Брайан Керниган, Деннис Ритчи. Язык программирования C.
                                                              Особенно полезно будет, если программировать под *nix.
                                                                0
                                                                Спасибо за совет.
                                                              +3
                                                              системные программисты, которые пишут прикладные программы

                                                              Это уж слишком грубое упрощение.
                                                                +2
                                                                Системы программисты пишут, как ни странно, системные программы, а прикладные программы, включая веб, пишут прикладные программисты.
                                                                0
                                                                Я не знаю в какой сфере вы хотите писать (может вы и сам еще не определились), но вкупе с литературой вашего направления рекомендую Стива Макконнелла — Совершенный код.
                                                                Сразу учитесь структурировать и оформлять свои мысли, а параллельно сразу учитесь писать тесты.
                                                                  0
                                                                  Для начала советуют изучить PHP. Но как я понял не мало важны и знания аппаратного обеспечения. Я хочу стать хорошим специалистом. Буду читать книги. Большое спасибо.
                                                                  0
                                                                  Ч.Петцольд — Код. Тайный язык информатики. Идеально для начинающего. Проверил лично.
                                                                    0
                                                                    Спасибо. Куплю.
                                                                  +3
                                                                  Причем рекурсию надо знать, что бы потом бежать от нее подальше. Она хороша при обучении, алгоритмы с рекурсией красивы и как правило занимают немного строк кода. Но когда выясняется, что например алгоритм обхода графа падает при обходе реального графа с десятками тысяч параметров, приходит понимание, что алгоритмы из учебника в реальном мире спотыкаются о такие ограничения операционной системы, как размер стека.
                                                                    0
                                                                    К сожалению, об этом часто не задумываются даже очень опытные программисты. Как пример — недавняя проблема в компиляторе андроид, использовавшемся в миллионах телефонов по всему миру:

                                                                    https://android.googlesource.com/platform/art/+/e5f01223ae03b89767dc7881d75dca061121ee36%5E!/

                                                                    Обход графа был реализован рекурсивным алгоритмом и вызвал то самое переполненение стека.
                                                                      0
                                                                      Не всегда это так.
                                                                      В функциональных языках многие вычисления естественно выражать в виде рекурсивных функций.
                                                                      Т.к. транслятор может заменять хвостовую рекурсию на итерацию.
                                                                        +1

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


                                                                        pure ulong factorial(uint n)
                                                                        {
                                                                            return n <= 1 ? 1 : n * factorial(n - 1);
                                                                        }

                                                                        Чтобы рекурсию сделать хвостовой, надо уже городить вложенную функцию или нечто иное.

                                                                          0
                                                                          А если ничего не городить и написать вот так
                                                                          factorial(x, fac) {
                                                                          if (x == 1)
                                                                          return fac;
                                                                          else
                                                                          return factorial(x-1, x*fac);
                                                                          }
                                                                            0
                                                                            Прошу прощение за форматирование
                                                                            • UFO just landed and posted this here
                                                                                0
                                                                                «Огласите весь список, пжлста»(ц)
                                                                                Вам нужна функция с одним параметром? Нет проблем:

                                                                                tail_fac(N) -> tail_fac(N,1).

                                                                                tail_fac(0,Acc) -> Acc;
                                                                                tail_fac(N,Acc) when N > 0 -> tail_fac(N-1,N*Acc).

                                                                                Теперь не подойдёт из-за наличия 2-х функций?

                                                                                Тогда возьмите язык, в котором есть возможность задавать значения по-умолчанию для аргументов функции.
                                                                                • UFO just landed and posted this here
                                                                                    0
                                                                                    Мы с Вами едины в непонимании))
                                                                                    «Чтобы рекурсию сделать хвостовой, надо уже городить вложенную функцию...» — показал, как можно обойтись без вложенной функции
                                                                                    "… факториал по определению функция с одним параметром, а у вас два..." — привел пример с одним параметром и без вложенной функции
                                                                                    И всё равно мимо кассы.
                                                                                    Поэтому и попросил огласить весь список требований, а то создается впечатление(мозгами понимаю, что скорее всего ложное), что требования выдумываются на ходу.
                                                                                    • UFO just landed and posted this here
                                                                                        0
                                                                                        > Не совсем понял, где тут были требования.
                                                                                        Если один, другой варианты не подходят это означает, что существуют требования из-за которых варианты не подходят. Верно?

                                                                                        > Ваши оба примера как раз подходят под «нечто иное»
                                                                                        Согласен. Оба примера подходят под «нечто иное». Но, если последовать такому подходу, то нерекурсивное решение попадает тоже в категорию «нечто иное».

                                                                                        > Представьте себе, что вам нужна функция sin(x)…
                                                                                        Введите в область видимости функцию-обертку с нужным количеством аргументов.

                                                                                        > Единственный момент, с которым я не могу согласиться — «Тогда возьмите язык, в котором»
                                                                                        Подумайте, зачем придумали такое количество языков? И может ли это быть связано с тем, что некоторые языки не предназначены для решения некоторых задач?))

                                                                                        P.S. кстати, требований по поводу языка никто не предъявлял
                                                                                        • UFO just landed and posted this here
                                                                                            0
                                                                                            > Верно. Они не подходят под ваше утверждение «А если ничего не городить».
                                                                                            > Определение «городить» было дано выше.

                                                                                            Подходят, по причине того, что дополнительные условия появлялись уже после приводимых решений.
                                                                                            Кстати, могли бы Вы процитировать определение «городить» во избежании путаницы?

                                                                                            > «Чтобы рекурсию сделать хвостовой» означает, что нерекурсивное решение не
                                                                                            > подходит вообще. Т.е. задача стояла сделать из общей рекурсии хвостовую.
                                                                                            > Избавление от рекурсии не решает задачу переделки ее в хвостовую. Но решает
                                                                                            > задачу «посчитать факториал». Которая уже была решена.

                                                                                            Простите, позднее время суток и самочувствие не дают понять «кто на ком стоял». Вы уж не серчайте))

                                                                                            > Я всего лишь хотел сказать, что заставлять пользователя давать функции
                                                                                            > непонятные константые аргументы несколько странно.

                                                                                            Замечательно)) Не хотите заставлять — не надо заставлять. Мы ведь совсем не об этом говорим, не так ли?

                                                                                            > А если ваша задача включат в себя множество подзадач, каждая их которых
                                                                                            > решается лучше всего на своем, отдельном языке?

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

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

                                                                                            А давайте немного не так? Представим, что надо посчитать не факториал, а что-то «иное», что составляет львиную долю всего проекта. И тут оказывается, что при рекурсии экономятся ресурсы, а язык уже выбран.

                                                                                            > И никто не говорил, что у вас неудачный выбор языка.

                                                                                            Я снова обращаю внимание, что изначально не было требований к языку, но появились потом и уже с учетом новых требований оценивался предложенный мной вариант.
                                                                                            • UFO just landed and posted this here
                                                                          +1
                                                                          Такая штука, как TCO поможет не упасть рекурсивному алгоритму.
                                                                          –11
                                                                          Я дико извиняюсь, но:
                                                                          1. Что за двоичная система «счисления»? Если вы про булевую математику, но вроде как используется только в вентильной системе, до которой вас не допустят. И на секунду, процессор оперирует командами вроде как.
                                                                          2. Может быть типы данных? А еще лучше разобрать разницу между статичной типизацией и динамической?
                                                                          3. Логические операции… Это вообще что значит? Паттерны?
                                                                          4. Другими словами UML.
                                                                          5. Почему циклы? а почему не массивы?)
                                                                          6. Какие функции? или вы имели ввиду методы? ну тогда это ведь зависит от фреймворка и парадигмы программирования.
                                                                            +3
                                                                            А вы программист?
                                                                              0
                                                                              Чисто для интереса — а вы на чем пишете?
                                                                                0

                                                                                Это язык, в котором нет двоичной системы счисления, нет "if" и нет функций. Зато есть паттерны, методы и фреймворки.

                                                                                  +2
                                                                                  Ассемблер для машины Сетунь что ли?
                                                                                    0

                                                                                    Там много фреймворков, да

                                                                                      0
                                                                                      Вот тут я не уверен X) Вероятно, название не совсем подходит, но остальное — нет двоичной системы, нет функций или if, наверняка есть какие-то шаблоны-паттерны…
                                                                              +2

                                                                              Семь вещей, которые нужно знать начинающему программисту:


                                                                              1. Двоичная система счисления
                                                                              2. Типы переменных
                                                                              3. Логические операции
                                                                              4. Блок-схемы
                                                                              5. Циклы
                                                                              6. Функции
                                                                              7. Семь вещей, которые нужно знать начинающему программисту
                                                                                –2
                                                                                блок-схемы не нужны, для этого используется мозг
                                                                                  0
                                                                                  Только в очень простых случаях. Из-за эффекта «дверного проёма» есть огромные шансы упустить важные детали и по этой причине очень быстро закопаться в многочисленных недоработках, недодумках и банальной забывчивости.
                                                                                    0

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

                                                                                  0
                                                                                  del
                                                                                • UFO just landed and posted this here
                                                                                    +22
                                                                                    Честно говоря, я очень плохо отношусь к статьям подобного рода: «21 способ похудеть, лёжа на диване» или «35 мест, где должен побывать турист». То же касается программирования. Тут один совет: у человека должна быть голова на отведённом ею эволюцией месте, а конкретный способ организации своей деятельности он сам определит, исходя из конкретных условий работы и задач, которые нужно решать.

                                                                                    Вот смотрите сами: «научитесь писать тесты». Что это за совет вообще? Давайте я попробую давать подобные советы: «научитесь программировать без ошибок», «научитесь решать задачи», «научитесь писать код», «научитесь читать код». Ну вот! Теперь Вы на 100500 шагов впереди тех, кто этих советов не знает…
                                                                                      +10
                                                                                      Я всё-таки попробую улучшить статью. Восьмой совет.

                                                                                      Научитесь решать задачи

                                                                                      Некоторые разработчики уверены в критической важности умения решать задачи, которое подразумевают написание кода, делающего то, что задумал разработчик. Среди этих людей — Васька Фёдоров, мой сосед, разработчик баз данных в Seventh April Systems. Он пишет: «Думаю, что лучший совет, который я могу дать начинающему разработчику — научиться решать задачи как можно раньше».
                                                                                      • UFO just landed and posted this here
                                                                                        +2
                                                                                        Нужна статья — 45 вещей о которых не нужно писать)
                                                                                        +4
                                                                                        Как-то преподаватель в университете озвучил мне 2 закона.
                                                                                        1. Написанный код с первого раза запустится с ошибкой.
                                                                                        2. Если он запустился без ошибки, значит он работает не правильно.
                                                                                          +2
                                                                                          Пережитки времен императивщины и слабой типизации :)
                                                                                          +2

                                                                                          Научитесь думать абстрактно.
                                                                                          Учитесь проектировать Системы.
                                                                                          Учитесь управлять зависимостями.
                                                                                          Учитесь декомпозировать.
                                                                                          Учитесь писать читаемый код.
                                                                                          Изучите основные алгоритмы.
                                                                                          Учитесь упрощать все и везде, насколько это возможно.
                                                                                          Учитесь писать гибкий расширяемый код.
                                                                                          Познайте среду исполнения с ее возможностями и ограничениями.
                                                                                          Ну и авторитетная цитата: "Учиться, учиться и еще раз учиться!" В. И. Ленин.

                                                                                            0
                                                                                            Вот с этим, пожалуй, соглашусь полностью.
                                                                                            0
                                                                                            deleted
                                                                                              0
                                                                                              У вас последний абзац переведен неправильно. Там смысл такой — что пишИте хороший код, который можно отдать другим на поддержку. И люди к вам потянутся. И работа будет. А если держаться за свое место и подминать под себя неподдерживаемый другими код — то перестанешь расти как профессионал.
                                                                                                0
                                                                                                Как-то уже давно, лет 8-10 назад, ко мне на работу устроился студент-отличник (в зачетке все пятерки). Он успорял, что много знает и что умеет программировать. На первый же вопрос, который я обычно задаю всем новичкам, он ответил (со знаком «минус»). Вопрос был таков: «Как наиболее просто узнать значение заданного бита в 16-разрядном слове?» Он написал функцию на ассемблере в >100 строчек кода, применив, наверное, весь знакомый математический аппарат — и это только для выделения заданного бита. На слово мне он не хотел верить, что я все это могу уместить в «одну строчку» кода на том же ассемблере)))))))))) Пришлось доказать))))) Работал он не долго — сами догадаетесь почему))) Потом он устроился в банк, в кредитный отдел… вскорости банк «лопнул» (и тут я закончил линию логических умозаключений))))))

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

                                                                                                З.Ы.
                                                                                                Сейчас у меня работает девушка наподобие описанного студента… Зачатки навыка алгоритмизации у нее появились, когда я ей стал давать задачи на GO))) (комплимент этому ЯП)
                                                                                                  +1
                                                                                                  Передавайте привет девушке)))))
                                                                                                    0
                                                                                                    промахнулся
                                                                                                    +1
                                                                                                    Девушку не Катя зовут?
                                                                                                      0
                                                                                                      Нет) и криповалюты своей у меня нет) и Кати… и слава Богу)
                                                                                                    0
                                                                                                    Чтобы «заглянуть под капот», и понять как работают ЯП — нужно не только посмотреть исходники какого-нибудь языка, но и попробовать написать свой. Не обязательно на ассемблере и по хардкору, не обязательно супер производительный, не обязательно какой-то инновационный и с уникальными фичами — а просто Тьюринг-полный язык. Да хоть компилятор к брейнфаку. И во время разработки откроется и осознается очень много интересных и сложных вещей.

                                                                                                    Only users with full accounts can post comments. Log in, please.