Вивчіть програмування назад, або «значить, я не вдався до тесту 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) методу .

Що б ви запропонували як хороший спосіб вирішити цю дилему? Які предмети / книги я повинен вивчати, які б змусили мене вирішувати проблеми швидше, а може, і більше "по-програмістському"?

EDIT - Здається, була певна плутанина з приводу того, що я не знав, щоб вирішити FizzBuzz.

Можливо, я не висловив себе правильно: я знав кроки, необхідні для вирішення проблеми. Те, що я не запам'ятав, - це оператор модуля. Проблема полягала в перенесенні основної математики на програму, а не в знанні основної математики.

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

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


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 років, все в Інтернеті, весь час .. тоді ще не було уроків з веб-розробки ... я думаю, що є якась користь для навчання самостійно. Ви дійсно хочете дізнатися про основні принципи ОО та схеми дизайну. вони допоможуть вам багато, маючи їх у задній частині голови при нападі на проблеми. Як правило, я вважаю, що у мене завжди немає голосового запасу, який мають інші, але якщо вам подобається кодування, і вам подобається писати елегантні рішення, то врешті-решт ви Я зможу
кодувати

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, є те, що існує так багато способів вирішити це. Це не просто фокус, щоб дізнатися, чи знаєте ви оператора модуля. Одним із ключових навичок програмування є можливість перекладати задачу з тієї форми, в якій вона вказана, у форму, найкращу для ваших знань / інструменти / ресурси / тощо
жовтень

18
Незнання оператора модуля не є причиною виходу з ладу FizzBuzz. Коли ви знайдете щось, чого не вистачає, ви повинні мати можливість обійтися.
Лорен Печтел

Відповіді:


144

У вашому випадку, як ви самоучка і вже маєте те, що здається хорошим, здоровим і непридатним до підходу до навчання. Ще кілька пропозицій ...

Практика робить ідеальною

Я думаю, що вам слід зануритися у такі вправи, як:

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

Докладніше: Де я можу знайти головоломки та завдання програмування?

Класичні книги та довідники

Ми також можемо порекомендувати дуже довгий список дивовижних книг , але я б сказав, що відповідь Дзен полягає в тому, що не існує єдиного правильного шляху до Просвітництва.

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

Для більш:

Натискання меж

Також шукайте матеріал, що чухає голову, наприклад:

Не обов’язково брати за приклад речі, які потрібно робити сьогодні, але варто спробувати з’ясувати, що там, до біса, відбувається.

Системи однорангової роботи є мотиваційними

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

  • P.SE , природно,
  • StackOverflow ,
  • CodeGolf.SE ,
  • CodeReview.SE ,
  • або навіть шалені люди на CS.SE (або спеціалізовані, такі як Crypto.SE ),
  • або багато, багато інших сайтів спільноти SE або інших країн.

Заочне навчання

Якщо у вас немає часу або мотивації пройти ще 4-річний курс чи щось подібне (що, можливо, навіть не буде необхідним або корисним і дорогим), ви можете розглянути можливість викладання навчального матеріалу в Інтернеті. Звичайно, це не обмежується лише інформатикою.

Завдяки оригінальним зусиллям MIT OpenCourseWare , зараз існує багато тонн університетів, які слідують відповідності , і ви можете знайти безліч навчальних матеріалів на рівні університету безкоштовно. Навіть орієнтуватися та читати по ньому не завжди легко, але деякі з них досить добре виконані. Щоб почати з нуля і піднятися досить високо вгору, подумайте також про те, щоб подивитися на ханську академію .

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

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

Якщо ви хочете чогось, що забезпечує більш близький досвід до "справжнього" університету, ви можете розглянути віддалені університети, які також дозволяють працювати неповний робочий день, але вимагати дотримуватися темпів, а також мати самооцінки та кінець річні іспити (іноді на місці), як у OpenUniversity та його міжнародних варіантах.

Пристрасть тримає тебе

  • Знайдіть проект для домашніх тварин: створіть свій власний або приєднайтеся до одного або декількох існуючих програмних програм та внесіть свій внесок.
  • Код, код, код. А потім ще кодуйте.

(і отримуйте достатню кількість очних яблук, дивлячись на ваш код, щоб критикувати вас і робити різні точки зору)

Французи кажуть:

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

Продовжуйте робити те, що ви робите, і з часом ви будете експертом. Займає час і робота.

Дивіться також " Я маю проблеми з навчанням" для отримання додаткових пропозицій.


PS: Хоча це дуже суперечливий інструмент для співбесіди і не допомагає визначити хороших кандидатів, я часто використовую FizzBuzz, щоб принаймні вилучити неймовірно "поганих". Отож, придумай цю практику! :)


3
C'est super ça! :) Дякую за список. Проект Ейлера та пазли здаються дуже приємними. І я вже використовую деякі інші сайти SE. Зануриться в нього.
moraleida

@moraleida: Радий, що вам сподобалась відповідь. Ласкаво просимо.
хайлем

Про ваш ПС: Я зараз не дуже переживаю інтерв'ю, оскільки я справді не хочу повертатися до того, щоб бути співробітником. Я взяв тест для задоволення, прочитавши про нього на програмі Кодування жахів. Я щойно вирішив, що це хороша база порівняння між мною та формально навченими дияволами. :)
moraleida

4
+1 лише тому, чому FizzBuzz використовується в кінці кінців ... Занадто часто я бачу коментарі тут або в блогах про людей, які його критикують, оскільки вони припускають, що компанії використовують його для ідентифікації суперкодерів. (Тим компаніям: ти робиш це неправильно!)
Ізката

1
Це вказано на деяких посиланнях, але я вважаю, що це вимагає виклику: я також оглянув rosettacode.org . Він має велику кількість різних проблем, вирішених у великій кількості мов програмування. Це хороша практика читання коду, що так само важливо, як і його написання, а також чудовий спосіб побачити безліч різних підходів до вирішення однієї і тієї ж проблеми. І якщо ви знайдете проблему, яка ще не вирішена на мові, яку ви знаєте або хочете вивчити, це завдання програмування для вас саме там.
Марк Рід

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

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

Як я повинен запам'ятати, яку техніку інтеграції використовувати для кожної проблеми?

Я не запам'ятовував, чи слід додавати чи помножувати ймовірності, чи використовувати "n select k" чи використовувати факториали.

Почекай хвилинку! Ви сказали, що х вчора дорівнювало 2! Тепер це дорівнює нулю ?!

Гаразд, останній був, мабуть, трохи суворим ... але справа, яку я намагаюся зробити, це те, що вирішення проблеми - це не запам'ятовування . Якби це було, то якийсь геній міг запрограмувати комп’ютер, щоб вирішити кожну проблему, і нікому з нас ніколи не довелося б замислюватися знову (який пекельний світ, який би був ...).

Тепер, правда, будь-яке інтелектуальне починання складається хоча б із трохи запам’ятовування. Зокрема, якщо ви збираєтесь кодувати в PHP, то вам слід зрозуміти основні типи даних (числа, рядки, масиви), основні речі, які ви можете зробити з ними (для чисел: додавання, віднімання, множення, ділення та модуль; для рядків: конкатенація, підрядки, заміна та принаймні деяке знання регулярних виразів; для масивів: конкатенація, позначення елементів, сплайсинг елементів, циклічне підрахунок елементів, тощо) та основні логічні структури, які можна використовувати (if / then / else твердження, цикли foreach, while циклів тощо).

Потім, коли ви зіткнулися з проблемою, використовуйте проблему, щоб вказати контекст для необхідних інструментів. Для FizzBuzz вам потрібно сказати, коли число ділиться на 3, 5 або 15. Добре, ми маємо справу з числами .... які основні інструменти дозволяють нам сказати, коли одне ціле число ділиться на інше? Ну, оператор модуля. Отже, використовуйте це. (Звичайно, якщо ваше число є $n, ви можете уявити собі і побачити, чи остання цифра $nдорівнює 0 або 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.

Впевнені, що є інші способи вчинити всі ці речі. Але ви можете робити fizz buzz, не використовуючи оператор модуля або порівнюючи поділ з поплавком на ціле ділення. Наприклад, для 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, із відомого прикладу « Структура та інтерпретація комп’ютерних програм» (який навчатиме схему - діалект Ліспа) або, можливо, ще чогось, як Think Python How to Think Like a Computer Вчений (якого я не читав). І те, і інше безкоштовно в Інтернеті.

Зрештою, вам потрібно прочитати хорошу книгу алгоритмів, найкраще - це Алгоритми CLRS (не безкоштовні), хоча ця безкоштовна книга онлайн- алгоритмівможе бути недорогою заміною (хоча якщо ви просто можете придбати CLRS). Книга алгоритмів навчить вас мислити вирішення комп'ютерних проблем та ознайомить вас із різноманітними структурами даних (масиви / пов'язані списки / купи / бінарні дерева / B-дерева / HashTables) та важливими алгоритмами, які потрібно знати, як оптимально використовувати . Вам не потрібно запам'ятовувати будь-які докази або знати, як ідеально написати кожен алгоритм (хто коли-небудь використовує кучу Фібоначчі); але ви повинні інтуїтивно знати два вкладених для циклу O (N ^ 2); сортування порівняння - у кращому випадку O (N lg N), двійковий пошук - O (lg N), можна знайти медіану в O (N), чому в базах даних жорсткого диска використовується B-Trees тощо). Як мінімум, глибоке знання книги алгоритмів допоможе вам провести інтерв'ю з технічного програмування різноманітності google / facebook. Читаючи книги програмування, не просто знімайте / читайте; ви'

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


4
Кращий коментар поки; в той час як я бачу, як багато людей говорять, практикують, практикують, це не шлях. Практика робить їх ідеальними, але це лише нав'язує погану поведінку. До ОП: Розкрийте себе іншими поняттями, дізнайтеся, чому хизуватиметься кращим козирком. Тільки досконала практика робить ідеальною. Отримайте цей курс CS.
Пітер Б

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

22

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

Ніхто цього не пам’ятає . Ви повинні придумати це самостійно. Якщо ви знаєте оператора модуля і знаєте, що він робить, то це тривіально чудово підходить до проблеми FizzBuzz.

Я збираюся вийти на кінцівку тут і взагалі припускаю, що проблема - PHP. Мені подобається сказати, що Java - це найгірша мова, яку коли-небудь розробляли, а PHP - найгірша мова коли-небудь , тому що навіть її творці визнають, що вона ніколи не розроблялася. Важко навчитися хорошим практичним розробкам програмного забезпечення, коли ваше оточення - це практично визначення того, як цього не робити. І залежно від рамки для того, щоб все зробити, це не говорить багато.

Зараз я витрачаю вільний час на вивчення Java для програмістів (влаштувати мову, яку всі кажуть, є складною / вимогливою)

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

Як ви збираєтеся навчитися кодувати, коли ваші мови були розроблені та впроваджені людьми, які не вміють кодувати, а ви залежите від рамок для всього, що ви робите?


14
@moraleida: Не соромно шукати синтаксис оператора, у якого ти не мав причин використовувати.
DeadMG

2
@moraleida: в такому випадку я погоджуюся, що немає реальної проблеми. Я не думаю, що жоден професіонал, інтерв'юер чи інше не повинен заперечувати, якщо ви не можете поставити палець на точний синтаксис для іншої мови, доки ви зможете чітко висловити, який ваш намір є.
haylem

5
Погоджено з більшості пунктів, але чому ви вважаєте Яву найгіршою мовою, яку коли-небудь розробляли? Я не великий фанат 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
Цей ката-код теж здається дивним!
moraleida

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

Ви можете знайти та допомогти іншим, наприклад, введення коду (розкриття: мій сайт) або Кодексу для Америки чи будь-чого іншого. Це відмінний спосіб отримати більше впливу на проблеми, що створюються веб-сторінками, які не є PHP, і почувати себе добре.

Коли у вас є проблема вирішити - або допомогти вирішити, або просто зрозуміти - збирання коду відбувається природно по дорозі. Мати мету - найкращий спосіб чогось навчитися.


1
Дивовижно! Це дійсно приємний спосіб навчання!
moraleida

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.