Как я могу улучшить свои навыки кодирования? [закрыто]

76

Вот немного информации обо мне, прежде чем начать с вопроса.

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

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

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

Даже я не смог выйти из традиционной среды программирования, которая до некоторой степени ограничивает мое кодирование.

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

Кроме того, вы можете предложить источники для того же?

Отредактировано : источники, предлагающие развитие навыков кодирования.

ykombinator
источник
13
К вашему сведению: из моего опыта теоретические знания, безусловно, помогут вам в дальнейшей части
Gopi
6
Можете ли вы плавать, просто читая книгу «научи себя плавать в X дней»?
pramodc84
9
«Умышленная практика». Делайте что-то, что немного сложнее, чем ваш текущий уровень, решайте это, учитесь на нем, повторяйте.
7
@ pramodc84 Но, безусловно, чтение книги, связанной с плаванием и последующим прыжком в реку, безусловно, поможет, чем просто прыгнуть в реку и попытаться научиться плавать
Гопи
5
Это так в большинстве университетов. Степень не о том, чтобы быть хорошим программистом; Речь идет о знании теорий, стоящих за этим, и о том, как их применять - вы можете сказать, что быть хорошим программистом оставлено в качестве упражнения для выпускника.
конфигуратор

Ответы:

46

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

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

П Швед
источник
8
Code Complete - хорошее чтение - это книга, которую я больше всего хотел прочитать, когда я окончил колледж в качестве программиста.
Гленатрон
2
Теперь эта книга в моем must-readсписке. :) Спасибо!
екомбинатор
2
@ykombinator:(push 'code-complete must-read)
Джорджио
98

Моя любимая цитата из Конфуция:

Я слышу, я знаю. Я вижу, я помню. Я понимаю, я понимаю.

Все знания, которые я получил, были от применения одной и той же стратегии:

Всегда выбирай самый сложный путь.

Вы хотите изучать C #? Получить работу в качестве разработчика C #.

Вы хотите выучить итальянский? Идите туда со словарем английского / итальянского и говорите по-итальянски

Вы хотите научиться кодированию? Код!


источник
19
+1 за всегда выбирай самый сложный путь. В конце концов, они становятся легким путем! Хороший ответ.
Райан Хейс
3
Это, конечно, кажется сложной задачей - подготовить себя к испытаниям, но я считаю, что это дает мотивацию для успеха. Отличный ответ. Языки, которые я знаю лучше всего, - это те, которые я вначале окунул в голову без понятия и постоянно изучал с каждым проектом.
Крис
2
Я сильно изменился от большинства вызовов. Это более позитивно
2
Хорошее программирование не зрительский спорт.
Инкогнито
4
@Pierre, вы хотите выучить 1) латынь и 2) Perl. Код Perl на латыни: csse.monash.edu.au/~damian/papers/HTML/Perligata.html
21

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

JeffO
источник
1
Именно так! Это отличный момент. Наверное, у меня пока нет наставника.
екомбинатор
4
Напишите некоторый код и опубликуйте его с конкретным вопросом на StackOverflow.com, и вы получите много.
JeffO
2
Вот почему я продолжаю жаловаться на обзоры кода нашего проекта, но «времени на это нет».
MetalMikester
1
@MetalMikester - но всегда есть время сделать это.
JeffO
1
@JeffO Это именно то, что происходит сейчас. :(
MetalMikester
10

Вот презентация Дэна Норта и QCon о том, как перейти от новичка к опытному программисту, под названием «Заточка инструментов» . Ниже приведены основные предложения из презентации:

  1. Практикуйте основы: ката, код для развлечения ...
  2. Учитесь у других людей: читайте книги, блоги и т. Д., Читайте код, программируйте парами ...
  3. Понять тенденции: что сейчас происходит в отрасли
  4. Делитесь знаниями: лучший способ научиться чему-то - это понять и научить этому
  5. Поддерживайте свой инструментарий: используйте «вечные» и новые инструменты
  6. Узнайте, как учиться: понять, как работает обучение
ysolik
источник
8

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

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

Есть одна хорошая цитата из Нейта Кирби:

«Плохие программисты игнорируют детали. Плохие дизайнеры теряются в деталях».

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

Кроме того, скорость того, сколько строк кода вы можете написать в час - это не то, к чему вы должны стремиться. Мне нравится цитата Дэвида Парнаса :

«Я часто слышу, как разработчики называют кого-то, кто знает, как быстро построить большую систему». Нет смысла в быстром создании больших систем: чем быстрее вы их создадите, тем больше они получатся! "

DL
источник
5

Я реализовал либо пул ставок, либо игру «Баккара» почти на каждом языке, который я выучил.

Этот тип программного обеспечения охватывает

  • Даты и время с расчетами
  • Типы валют и вещи, которые можно конвертировать в и из валюты
  • Дискретный набор правил, который легко проверить
  • Состояния, переход между состояниями и несколькими субъектами, ответственными за переход состояний
  • Несколько пользователей с разными взглядами на одну и ту же модель
  • Несколько конечных условий

Блэкджек с несколькими игроками и покер также будут работать.

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

Сэл
источник
4
  • Выберите хорошие проекты с открытым исходным кодом и прочитайте код.
  • Возьмите для себя проект среднего размера и начните писать код
    • Если вы заинтересованы в веб-разработке, попробуйте создать существующий сайт с нуля, используя вашу любимую технологию; как насчет твиттера в Django?
    • Если вы занимаетесь разработкой приложений для настольных компьютеров, начните с блокнота и импровизируйте его для поддержки расширенных функций (поиск на основе регулярных выражений, для начала).
Amarghosh
источник
4

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

Кодирование одинаковое. Лучший способ добиться большего - это изучить то, что делают другие, понять, ПОЧЕМУ они делают это таким образом, а затем делать это самостоятельно.

Муад'Диб
источник
Да, Тайгер Вудс становится «лучшим» игроком в гольф, имея много любовников. :-) Так что он не очень хороший пример.
DL
4

Как и в любой другой человеческой деятельности, лучший способ улучшить свои навыки - это практиковать свои знания, но для этого вам нужны упражнения. Дейв Томас , один из авторов книги «Прагматичный программист», представил концепцию Code Katas , аналогичную концепции kata в боевых искусствах.

Вы можете посмотреть там: http://codekata.pragprog.com/

jmservera
источник
4

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

Я только что закончил колледж пару месяцев назад, где я изучал Java. Как и вы, я понятия не имел, как правильно кодировать. Около месяца назад я хотел создать веб-приложение на PHP. Я не знал, что я делал, но просто пошел на это. Сначала это было пугающе и ошеломляюще, но с практикой это становится естественным. Я даже написал приложение много раз, каждый раз упрощая его еще больше. Сейчас я работаю над приложением с нуля, но на этот раз я выясняю, как сделать его объектно-ориентированным и использовать PEAR и его модуль quickform, что является еще одним препятствием, которое я должен преодолеть, но, тем не менее, определенно и взволнован.

Так что практикуйтесь. Прыгай в воду! Удачи :)

Джонатан
источник
3

Я предлагаю изучить весь синтаксис вашего любимого языка. Понять, как использовать виртуальные функции, наследование, лямбда, если они существуют. и т.д. Одна вещь, которую я сделал, - это взять большую страшную библиотеку (я сделал это с boost и STL для C ++) и посмотреть, имеет ли смысл каждая строка и каждое ключевое слово.

Или же вы можете прочитать справочник по синтаксису языка, если есть хороший, который охватывает самую последнюю версию. В качестве примера здесь приведена ссылка на C # (не версия вверху. Я сделал ошибку, посмотрев на более популярную более старую версию, в которой не было синтаксиса, который я искал)


источник
3

Общее согласие: «Пиши больше кода», с чем я согласен, но я добавлю к этому совету, что тебе следует писать много разных видов кода. Java хороша в том, что касается языков, но вам определенно следует писать код, как вверх, так и вниз по спектру мощности. В дополнение к Java, я бы предложил сделать несколько небольших проектов на языке более низкого уровня (C - хороший вариант для этого), язык сценариев (я предпочитаю Perl, но Python также хороший выбор), функциональный язык ( lisp - это общая рекомендация, но OCaml и Haskell также являются хорошим выбором), и, по крайней мере, научиться читать на ассемблере.

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

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

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

Cercerilla
источник
2

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

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

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

glenatron
источник
2

Мои предложения

  • Найдите проект для питомца и напишите его на другом языке (lyke python / c #), который вы знаете. Это научит вас больше, чем вы можете себе представить. Посмотрите на другие проекты, которые похожи, и попробуйте получить паритет функций с ними. С этим можно идти медленнее и ставить скромные цели, неуклонно повышая уровень сложности с помощью новых функций. Это также становится вашим шоу, когда вы идете на собеседование.
  • Найдите применение в своем проекте для соответствующих технологий, таких как веб-сервисы, javascript, ajax, геокодирование и в основном все, что делает успехи в мире программного обеспечения.
  • Играйте с другими операционными системами, такими как Linux / freebsd. Чем больше вы знакомитесь с различными типами систем, тем больше вы будете понимать, как их преследует мышление, и почему они действовали так, как они.
  • Когда вы закончите с частями своего кода, вернитесь к нему и постарайтесь постоянно его улучшать. Найдите неэффективность, добавьте больше комментариев, когда необходимо, попытайтесь усовершенствовать это.
  • Покопайтесь на c2.com. Есть много хороших методов кодирования. Изучите их и попробуйте применить их в своем собственном проекте.
  • Читайте книги, такие как прагматичный программист и полный код, они дадут вам знания в области боевого программирования.
  • Это может показаться не связанным, но найдите другое техническое хобби, если у вас его еще нет, например, гоночные радиоуправляемые машины, игра на музыкальном инструменте или изучение иностранного языка. Чем больше частей вашего мозга используется, тем лучше, и вам нужно время от времени расслабляться, потому что программирование может принести слишком много.
Tjaart
источник
2

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

missingfaktor
источник
1

«Практика!» Это клише.

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

Мин-Tang
источник
1

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

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

Да, и если вы не уверены, что означает NP-полная, или если нотация big-O вас пугает, то вам, вероятно, стоит воспользоваться некоторой теорией вычислений и классами алгоритмов.

Дима
источник
1

Я бы сказал, что вам следует ознакомиться с шаблонами проектирования, такими как Builder, Factory, Composite и, в конечном итоге, Observer, Mediator и Flyweight. Шаблоны проектирования не являются конечной целью решений для кодирования, но они демонстрируют, как реализовать теоретические концепции объектно-ориентированного программирования.

Тим Класон
источник
1

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

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

Свежая кровь
источник