Изучайте программирование задом наперед или «так что я провалил тест FizzBuzz. И что теперь? »[Закрыто]


94

Немного фона

Мне сегодня 28 лет, и у меня никогда не было формального обучения по разработке программного обеспечения, но у меня есть две степени высшего образования, эквивалентные степени бакалавра по связям с общественностью и Executive MBA, ориентированных на управление проектами. Я работал на этих полях в общей сложности около 6 лет, 2,5 года назад я уволился / потерял работу и решил сменить направление.

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

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

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

В настоящее время я провожу свободное время, изучая Java для программистов (чтобы овладеть языком, который все считают трудным / требовательным), читаю выдержки из Code Complete (чтобы овладеть передовыми методами), а также Code: The Hidden Language of Computer Аппаратное и программное обеспечение (чтобы понять внутреннюю работу компьютеров).

TL; DR

Итак, моя текущая ситуация такова: я в основном способен написать любую полную систему на PHP (с помощью Google и нескольких книг), интегрировать Ajax, SQL и еще много чего, и, возможно, немного медленнее, чем ожидал бы опытный разработчик из-за всех исследований.

Но вчера я оказался в затруднении, пытаясь найти (не Google) решение для теста FizzBuzz, потому что у меня не было запомненного оператора модуля if($n1 % $n2 == 0) метода .

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

РЕДАКТИРОВАТЬ - Кажется, было некоторое замешательство о том, что я не знал, чтобы решить FizzBuzz.

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

Я взял тест для удовольствия, прочитав об этом на Coding Horror . Я просто решил, что это хорошая линия сравнения базовых показателей между мной и формально обученными разработчиками.

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


63
Когда я читаю это: I'm basically capable of writing any complete system in PHP (with the help of Google and a few books)и объединяю это с тем, что вы не знаете if($n1 % $n2 == 0), я удивляюсь тому, как вы знакомы с вещами, написанными на PHP. Я думаю, что большинство вещей, которые вы делаете, выходят за рамки простого вычисления по модулю. Не могли бы вы дать больше информации о том, что, по вашему мнению, вы можете сделать?
phant0m

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

56
Что касается stuck b/c I didn't memorize %проблемы, то стоит отметить, что есть и другие способы сделать это: (при условии, что $ n2! = 0) if (is_int ($n1 / $n2))или if (($n1 / $n2) == (int) ($n1 / $n2))Знать ключевые слова - это одно, а знание того, как выразить основные идеи в отсутствие встроенного решения, - это одно. еще один.
Grossvogel

18
@grossvogel Точно! Одна из причин, по которой людям нравится Fizzbuzz, заключается в том, что существует множество способов ее решения. Это не просто трюк, чтобы узнать, знаете ли вы оператор модуля. Одним из ключевых навыков программирования является умение переводить проблему из формы, в которой она изложена, в форму, наиболее подходящую для ваших знаний / инструментов / ресурсов / и т. Д.
2012 г.

18
Незнание оператора модуля не является причиной провала FizzBuzz. Когда вы обнаружите, что чего-то не хватает, вы должны обойти это.
Лорен Печтел

Ответы:


144

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

Практика делает совершенным

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

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

Для получения дополнительной информации: Где я могу найти головоломки и проблемы программирования?

Классические книги и справочники

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

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

Для большего:

Раздвигая границы

Кроме того, ищите царапающий голову материал, такой как:

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

Peer Systems являются мотивационными

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

  • P.SE , естественно,
  • StackOverflow ,
  • CodeGolf.SE ,
  • CodeReview.SE ,
  • или даже сумасшедшие люди в CS.SE (или специализированные, такие как Crypto.SE ),
  • или много, много других сайтов сообщества SE или не SE.

Заочное обучение

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

Благодаря первоначальным усилиям MIT OpenCourseWare , сейчас существует множество университетов, которые последовали их примеру , и вы можете найти много материалов для курсов университетского уровня бесплатно. Не всегда легко ориентироваться и читать его самостоятельно, но некоторые довольно хорошо сделаны. Чтобы начать с нуля и подняться довольно высоко, подумайте также о взгляде на Академию Хана .

Некоторые идут немного дальше и предлагают реальные онлайн-курсы бесплатно, где у вас также есть доступ к материалам курса, но где они также предоставляют лекции и регулярные самооценки. Например, посетите Coursera или Udacity .

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

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

Страсть заставляет вас идти

  • Найдите любимый проект: создайте свой собственный или присоединитесь к одному или нескольким существующим программным проектам и внесите свой вклад.
  • Код, код, код. А затем закодируйте еще немного.

(и получите достаточно глазного яблока, смотрящего на ваш код, чтобы критиковать вас и рассматривать различные перспективы)

Французы говорят:

C'est en forgeant que l'on devient forgeron.

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

Смотрите также У меня проблемы обучения для получения дополнительных предложений.


PS: Хотя это очень спорный инструмент для интервью и не помогает определить хороших кандидатов, я часто использую FizzBuzz, чтобы, по крайней мере, отсеять невероятно «плохих». Так что давай провернем эту практикующую вещь! :)


3
C'est супер ça! :) Спасибо за список. Проект Эйлера и головоломки кажутся очень милыми. И я уже использую некоторые другие сайты SE. Окунусь в это.
Моралейда

@moraleida: Рад, что вам понравился ответ. Пожалуйста.
Хайлем

О вашем PS: я не очень беспокоюсь об интервью прямо сейчас, так как я действительно не хочу возвращаться к тому, чтобы быть сотрудником. Я взял тест для удовольствия, прочитав об этом на Coding Horror. Я просто решил, что это хорошая линия сравнения базовых показателей между мной и формально обученными разработчиками. :)
Моралейда

4
+1 только для того, почему FizzBuzz используется в самом конце ... Слишком часто я вижу здесь или в блогах комментарии о людях, критикующих его, потому что они предполагают, что компании используют его для идентификации супер-кодеров. (
Этим

1
Это перечислено в некоторых ссылках, но я чувствую, что это требует вызова: я также осмотрю rosettacode.org . Он имеет большое количество различных проблем, решаемых в большом количестве языков программирования. Это хорошая практика в чтении кода, который так же важен, как и его написание, а также отличный способ увидеть множество разных подходов к решению одной и той же проблемы. И если вы обнаружите проблему, которая еще не решена на языке, который вы знаете или хотите изучать, это вызов для вас.
Марк Рид

60
I didn't have the if($n1 % $n2 == 0) method memorized.

Я не очень долго программировал (начал учить себя SQL около 27 месяцев назад и начал программировать на Perl около 20 месяцев назад), но приведенная выше цитата звучит как то, что я слышал от бывших студентов:

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

Я не запомнил, должен ли я добавлять или умножать вероятности, или использовать «n выбирать k» или использовать факториалы.

Подождите минуту! Вы сказали, что вчера х равнялся 2! Теперь он равен нулю ?!

Хорошо, последний был, вероятно, немного грубоват ... но я пытаюсь подчеркнуть, что решение проблем - это не запоминание . Если бы это было так, то какой-нибудь гений мог бы запрограммировать компьютер для решения любой проблемы, и никому из нас не пришлось бы снова думать (что это за адский мир ...).

Теперь это правда, что любое интеллектуальное усилие состоит, по крайней мере, из небольшого запоминания. В частности, если вы собираетесь писать код на PHP, вы должны понимать основные типы данных (числа, строки, массивы), основные вещи, которые вы можете делать с ними (для чисел: сложение, вычитание, умножение, деление и модуль: для строк: конкатенация, подстроки, замена и, по крайней мере, некоторые знания регулярных выражений, для массивов: конкатенация, привязка к элементам, объединение элементов, циклы, подсчет элементов и т. д.) и основные логические структуры, которые можно использовать (операторы if / then / else, циклы foreach, циклы while и т. д.).

Затем, когда вы столкнетесь с проблемой, используйте проблему, чтобы предоставить контекст для того, какие инструменты вам нужны. Для FizzBuzz вы должны указать, когда число делится на 3, 5 или 15. Итак, мы имеем дело с числами ... Какие основные инструменты позволяют нам определить, когда одно целое число делится на другое? Ну, оператор модуля. Итак, используйте это. (Конечно, если у вас есть номер $n, вам может показаться, что последняя цифра $n0 или 5 и / или цифры $nскладываются в нечто, кратное 3, но я отвлекся ...) Вам нужно делайте это для каждого числа от 1 до 100, поэтому, чтобы избежать туннеля, используйте foreachпетлю.

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

Прекратите оправдываться и изучите основы.


6
Я не запоминаю, я метаболизирую и делаю эти вещи частью моей интуиции. Всегда стремитесь расширить это.
ncmathsadist

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

для записи вам не нужно умножать число на 3, а затем добавлять цифры, чтобы увидеть, делится ли оно на 3, вы можете просто добавить числа. например, 864, 8 + 6 + 4 = 18, который делится на 3, а также 864
Озтако

@ leaf68 - Дух! [шлепает по лбу] ты абсолютно прав ... дай редактировать!

27

Вы можете подумать, что FizzBuzz - проблема с игрушками; когда мне когда-нибудь понадобится использовать оператор модуля в реальной программе. Но на самом деле вы используете это все время. Три распространенных примера:

  1. Вы отображаете таблицу, и вы хотите чередовать цвета фона для разных строк. Вы проверяете, является ли строка четным ( row_number % 2 == 0), и отображаете один цвет для четных строк и один для нечетных.
  2. У вас есть коллекция объектов, которые вы просматриваете в цикле, и вы хотите распечатать таблицу с N объектами в строке; тогда критерием, когда нужно добавить разрыв строки, является (item_number% N == 0). На самом деле у меня был такой вопрос об этом точном поведении, хотя на этом языке шаблонов условие if item_number % N == 0было записано как эквивалент ( if item_number|divisbleby: N).
  3. Вы делаете несколько операций, которые хотите сгруппировать в транзакцию, которая фиксируется только тогда, когда группа достигает определенного размера по соображениям эффективности. Возможно, вы используете API данных Google и вам не нужны заголовки HTTP / накладные расходы на аутентификацию для создания новой транзакции для каждой операции, поэтому вы объединяете их в группы по 50 операций. Или вы сохраняете записи в своей базе данных и хотите зафиксировать транзакцию, когда ее размер разумный. Нечто подобное if cur_item_number % 50 == 0 then commit_data.

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

div_by_3_rem = 0
div_by_5_rem = 0
for(i = 0; i< 50; i++) {
    if(div_by_3_rem == 0 && div_by_5_rem == 0) {
       print "FizzBuzz"
    } elif(div_by_3_rem == 0) {
       print "Fizz"
    } elif(div_by_5_rem == 0) {
       print "Buzz"
    } else {
       print i
    }
    div_by_3_rem += 1
    div_by_5_rem += 1
    if(div_by_3_rem == 3) {
       div_by_3_rem = 0
    }
    if(div_by_5_rem == 5) {
       div_by_5_rem = 0
    }
}

В заключение, если вы хотите когда-нибудь стать великим программистом, не спешите изучать книги по языку. Да, в книге по PHP / Java вы получите ответы от google / stackoverflow и наполовину работающих программ гораздо быстрее, чем что-либо еще. Но для того, чтобы на самом деле знать, как писать программы с оптимальным качеством и думать, как программист, вам нужно познакомиться с настоящими книгами по CS.

Начните с книги по CS, которая знакомит с языком программирования и основами CS, со знаменитым примером Структуры и Интерпретации компьютерных программ (который научит Scheme - диалект Lisp) или, возможно, с чем-то еще, например, Think Python Как думать, как компьютер Ученый (которого я не читал). Оба из них бесплатны онлайн.

В конечном итоге вам нужно прочитать хорошую книгу по алгоритмам, лучшим из которых является Алгоритмы CLRS (не бесплатно), хотя эта бесплатная онлайн- книга по алгоритмамможет быть недорогой заменой (хотя, если вы можете просто купить CLRS). Книга по алгоритмам научит вас, как решать проблемы с компьютером, и познакомит вас с различными структурами данных (массивы / связанные списки / кучи / двоичные деревья / B-деревья / HashTables) и важными алгоритмами, которые вам необходимо знать, как оптимально использовать , Вам не нужно запоминать каждое доказательство или знать, как идеально написать каждый алгоритм (кто когда-либо использовал кучу Фибоначчи); но вы должны интуитивно знать, что два вложенных цикла for это O (N ^ 2); сортировки сравнения в лучшем случае O (N lg N), бинарный поиск - O (lg N), можно найти медиану в O (N), почему базы данных на жестких дисках используют B-деревья и т. д.). Как минимум, глубокие знания книги по алгоритмам помогут вам в технических интервью по программированию для Google / Facebook. При чтении книг по программированию не просто читайте / читайте; вы'

Я также рекомендовал бы книгу по разработке программного обеспечения (либо Code Complete, либо Pragmatic Programmer) после того, как вы пройдете книгу по CS и алгоритмам, которая научит лучшим методам написания хорошего кода, который можно поддерживать (чистые имена; комментируйте только при необходимости). сохраняйте код вместе, выполняйте рефакторинг при необходимости, используйте контроль версий и т. д.).


4
Лучший комментарий еще; в то время как я вижу, что многие люди говорят, что тренируются, тренируются, тренируются, это не тот путь. Говорят, что практика совершенствует, но это только усиливает плохое поведение. Для ОП: познакомьтесь с другими концепциями, узнайте, почему быстрая сортировка предпочтительнее пузырьковой сортировки. Только совершенная практика делает совершенным. Получить этот курс CS.
Питер Б

2
Спасибо за размещение этого примера кода, я уже думал, что мне придется сделать это самому. - Мы можем построить любую сложную логическую схему, используя только вентили NAND; у нас есть языки с очень небольшим количеством простых операций, которые завершаются по Тьюрингу; нам не нужны эти причудливые операторы для решения проблем. Решение проблемы - это не просто знание правильных инструментов, умение работать над проблемой, поиск решения, которое работает на ваши собственные знания - вот что делает программист.
тыкай

22

Но вчера я оказался в затруднении, пытаясь найти (не в Google) решение для теста FizzBuzz, потому что у меня не было запомненного метода if ($ n1% $ n2 == 0).

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

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

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

Ява - один из самых простых и худших из существующих языков. У него есть только одно: ручное наследование, собираемое мусором. Если ваши друзья или советники говорят, что Java сложна, найдите новых друзей. C ++ является сложным языком , который включает в себя много понятий, и что никто не будет оспаривать. Вы также можете сделать C #, который, по крайней мере, имеет несколько обобщений и лямбд.

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


14
@moraleida: Нет ничего постыдного в поиске синтаксиса оператора, которого у вас не было причин использовать.
DeadMG

2
@ Moraleida: в этом случае я согласен, что нет реальной проблемы. Я не думаю, что какой-либо профессионал, интервьюер или кто-либо другой должен возражать, если вы не можете точно определить синтаксис для другого языка, если вы можете четко выразить свое намерение.
Хайлем

5
Согласны по большинству пунктов, но почему вы считаете Java «худшим языком из когда-либо созданных»? Я не большой поклонник Java, но это звучит очень самоуверенно.
Кейси Кубалл

7
-1 для использования вопроса в качестве предлога для коленного толчка PHP, когда он имеет нулевое отношение к тому, что было задано.
StasM

1
@Darthfett: я мог бы написать эссе об этом. Приходите в чат SO C ++ и вы можете прочитать его: P
DeadMG

11

Я думаю, вы должны внимательно посмотреть, почему вы оказались в затруднительном положении, пытаясь выяснить FizzBuzz. Итак, предположим, вы вспомнили, что есть оператор, который $nсообщает вам, делится ли он на число. И вам не повезло забыть, что это такое. Хорошо, почему бы вам не попытаться сделать это каким-либо другим способом? Если вы знаете что-нибудь о коде, вы сможете найти дюжину других способов сделать это. Некоторые из них могут выглядеть странно - как, например, помещать каждое кратное 5 в массив, а затем проверять, есть ли $nсреди них - и это плохое решение, но оно все равно будет решением. Тем не менее, вы говорите, что у вас их не было, вы просто застряли. Это может быть симптомом более серьезной проблемы.

В программировании нужно учиться двум вещам.

  1. Сумка с хитростями. Как читать файл в PHP, как анализировать XML в Java, как подключиться к базе данных в Python. Некоторые люди запоминают это, но на самом деле эти вещи стоит запомнить, только если вы используете их каждый день. В противном случае, вы просто идете в документы и ищите это. Эти вещи не имеют никакого смысла, кроме их буквальной формы - вам просто нужно знать, как звучит конкретное магическое заклинание и каков будет результат.
  2. Настрой. Это самая важная вещь. Это то, как вы программируете, и это не имеет ничего общего с запоминанием. Вы должны понимать, как объяснить, что вы хотите сделать с компьютером, какие способы сделать это и какие из них использовать в каждом конкретном случае. Теперь, учитывая современные инструменты и современную документацию, вполне вероятно, что можно написать целую CMS на PHP, используя подход «мешок трюков», но как только вы столкнетесь с задачей, у которой нет готового решения, вы «застряли».

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


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

Я бы полностью согласился на мышление. Как только вы поймете мышление и концепции, изучение базовых языковых конструкций станет намного проще, и вы начнете думать об альтернативных способах делать вещи как нечто само собой разумеющееся. (Например, для fizzbuzz, все числа, делимые на 5, заканчиваются либо на 5, либо на 0, поэтому нет необходимости в операнде модуля в этой части)
JohnP

9

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

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


1
Этот код ката тоже кажется классным!
Моралейда

8

... потому что я не запомнил метод if ($ n1% $ n2 == 0).

Я понимаю, что это означает, что вы не знали и / или не помнили оператор модуля. Если это так, то для начала нужно изучить языковые конструкции на языке, который вы используете. Просмотрите все, что вы не знаете «холодно», и узнайте все, что вы просто не знаете.


4
+1. В то время как другие ответы говорят о том, как стать лучшим мастером, возможно, еще важнее знать, какие инструменты действительно существуют. Вы когда-нибудь пытались удалить сломанный винт без легкого выхода ? Есть и другие способы сделать это, но это удар в лоб, когда вы, наконец, изучите инструмент, который для этого создан. Я бы сказал, что ОП давно должен был просмотреть любой список операторов PHP и поиграть с теми, которые были незнакомы.
Тим Ленер

5

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

Просто продолжайте писать код, придумывать идеи проекта и исследовать.


4

Могу ли я рекомендовать изучение JavaScript до Java, C ++? Причины для вас:

  1. Используется во внешнем дизайне (jQuery, некоторые из ваших плагинов WordPress, каналы Twitter, загрузка баз данных в ваш браузер через JSON с минимальной или нулевой серверной работой, проверка формы и т. Д.)
  2. Может использоваться на стороне сервера через Node.js
  3. Может использоваться для создания гибридных приложений для iOS, Android, Win8 и т. Д.
  4. Изучение JS поможет вам лучше понять производительность веб-страниц в разных браузерах и устройствах.
  5. JS был разработан, чтобы быть более дружелюбным к новичку
  6. Вы уже знаете HTML & CSS (я надеюсь;), так что это помогает с JS

Бесплатные ресурсы для новичков

http://www.codecademy.com/tracks/code-year
https://stackoverflow.com/tags/javascript/info У
меня было еще около 10 ссылок, но SE не позволит мне публиковать их, пока я не достигну 10 повторений.

Изучение C ++, Java и т. Д. Также полезно, но не IMHO не оказывает общего влияния на веб-программирование, как JS, так как вы можете использовать его как на переднем, так и на заднем плане. Веселиться!


tutsplus.com/course/30-days-to-learn-jquery ### Продвинутое и бесплатное глубокое обучение thinkvitamin.com/code/tips-on-learning-javascript netmagazine.com/tag/javascript?ct=tutorial blog.boyet .com / blog / javascriptlessons nczonline.net/blog/tag/javascript javascriptweekly.com jsperf.com/popular Я уверен, что вы знаете о SitePoint и т. д. ### Платите, чтобы узнать shop.oreilly.com/product/0636920023982.do " JavaScript для разработчиков PHP ";) teamtreehouse.com/library/search?q=javascript
tomByrer

1
и когда вы будете готовы устроиться на работу: jobety.com
imns

3

Вы можете найти и помочь другим, например, предоставив .code (раскрытие: мой сайт) или Code for America или что-то еще. Это отличный способ получить больше информации о проблемах, связанных с созданием веб-страниц, не связанных с PHP, и чувствовать себя хорошо.

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


1
Потрясающие! Это действительно хороший способ учиться!
Моралейда

0

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

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


(Это должно было звучать воодушевляюще. Не уверен, что мне это удалось. Lol.)
Ник Шпрайцер

0

Я не думаю, что я бы отказался рекомендовать кого-то на работу, потому что они не знали, что это был оператор модуля при условии, что:

  1. Они знали, что это какой-то оператор.
  2. Они могли сказать мне, что такое «модуль», когда я им подсказал.

Это не всегда (хотя обычно)%, а некоторые языки странные. И, черт возьми, после десятилетия я не могу честно сказать, что я знаю все операторы Perl (и что делает космический корабль еще раз?), И при этом я не могу всегда точно вспомнить побитовые операторы. Прошло несколько лет с тех пор, как я делал все, что даже требовало этого.

Что могло бы заставить меня не решиться рекомендовать кого-то, так это то, что это вызвало у него приступ паники из-за пропуска этого вопроса / теста. Это может создать у меня впечатление, что они были слишком зелеными (если только это не была позиция начального уровня). Никому не нужен кто-то, кто (или чувствует необходимость) запомнить эти вещи. Вам нужен кто-то, кто понимает гораздо более широкие концепции. Никто не будет заботиться, если вы посмотрите это на Google, но вы должны быть уверены в интервью, что зная% не было ничего особенного, а также что вы знаете, как использовать «оператор» в качестве ключевого слова, когда вы делаете быстрый Google поиск.

Кроме того, это всего лишь идея ... но если в вашем местном колледже есть программа compsci, все ваши кредиты будут переведены, и вам, вероятно, понадобится всего около 20 кредитов для 2-летней степени. Может почти закончить это в семестре. Они предложат вам пройти курс структур данных, а также, надеюсь, алгоритмы ... могут сделать вас немного сильнее.


-1

Вот пример курса: http://www.ox.ac.uk/admissions/undergraduate_courses/courses/computer_science/computer_science_.html

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

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

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

Просто скачайте PDF-файл, который интуитивно объясняет эти понятия, и вы уже в пути.

На некоторых курсах по компьютерным наукам, по крайней мере на моем, первый год - это введение во все области машиностроения, такие как механика, электротехника, гражданское дело и т. Д. Заметьте, что существует множество сложных математических программ, которые опять-таки могут быть или не иметь отношения к делу. для большинства программистов приложений сегодня. Итак, многие из сегодняшних инженеров на самом деле имеют всего 3 года реального компьютерного образования (надеюсь, это заставит вас чувствовать себя лучше :)

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


-3

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

мир

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.