Подтвердить что ты не робот

Как продвигаться дальше как программист?

За последний, хмм, 6 месяцев, которые я читал в Программе на C, я получил K & Rv2, руководство по сокетам BEEJ, программированию Expert C, Linux Systems Programming, спецификации ISO/IEC 9899: 1999 (реальный, а не черновик). Получив их от Amazon, я установил Linux и добрался до него.

Я закончил с K & R, примерно на полпути через программирование программистов на С, но все еще чувствую себя слабым как программист, я уверен, что для того, чтобы стать по-настоящему искусным, требуется гораздо больше, чем 6 месяцев чтения, но мой вопрос в том,

Я выполнил все упражнения в K & Rv2 (в главе 1), а некоторые в других главах, большинство из которых, как правило, очень скучно. Как я могу снять свои навыки и стать по-настоящему великими? Я вложил деньги, время и общий образ жизни для чего-то, чего я действительно желаю, но я не уверен, как именно его достичь.

Может ли кто-нибудь объяснить мне, возможно, если мне нужно постоянно писать код, что именно я должен кодировать? Я уверен, кодирование привет, мировые программы не собираются учить меня больше, чем я уже что-то знаю.

Один из моих друзей сказал "читать" (с акцентом на чтение) страницу с человеком в день, но чтение - это все, что я делаю, я хочу сделать, но я не уверен, что! Я заинтересован в безопасности, но я не уверен, как новичок, что бы кодировать, что будет считаться достаточно.

А, надеюсь, вы не удалите этот вопрос:)

Спасибо

4b9b3361

Ответ 2

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

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

Ответ 3

большинство из них, как правило, действительно скучны

Узнайте, что вы найдете интересным, тогда все остальное встанет на свои места.

Ответ 5

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

  • Алгоритмический калькулятор. Введите "sin (2) + 5! * 3 ^ (1/2)", и вы получите 208.755394335 в качестве выхода.
  • Текстовый редактор с синтаксисом с высоким разрешением.
  • Записать PNG (или любой другой формат изображения или звука) кодер/декодер с нуля.
  • Записать редактор изображений (например, заливка залива не является полностью тривиальной)
  • ...

Ответ 6

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

Напишите клиент NNTP или SMTP-сервер или клиент и используйте его для отправки вашей почты. Многие из этих интернет-протоколов достаточно просты, чтобы их не было очень сложно реализовать (большинство текстовых протоколов), но достаточно тонкие, чтобы быть интересными, и у них есть связь с реальным миром, что делает его более удовлетворительным, чем "привет" мировой ".

Или как насчет написания модуля ядра Linux? Их не так уж сложно написать, есть лишь немного препятствия для входа (много, чтобы узнать, прежде чем вы сможете получить свой "черный треугольник" ). Создайте персональное устройство, которое возвращает бесконечный поток последнего байта, который вы ему написали (назовите его/dev/сорок два, если хотите). Затем убедитесь, что он будет работать, когда два процесса будут использовать его одновременно.

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

Ответ 7

"читать" и практиковать то, что вы читаете, это лучший способ.

Ответ 8

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

Ты работаешь над книго-умным разработчиком. Сделайте что-то реальное и станьте умным!

Ответ 9

Code Golf и Project Euler хороши - но они больше касаются решения проблем и математики, чем программирования.

Найдите проект Opensource (возможно, не ядро ​​Linux), который вас интересует, загрузите источник и попробуйте его использовать. Идеально то, что является библиотекой, а не приложением, поэтому вам нужно научиться читать ее, чтобы использовать ее со своими собственными вещами.

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

Ответ 10

Перейдите к работе. Серьезно найдите задание для новичков и позвольте кому-то с большим руководством по знаниям вы (если вам повезет) или проверьте кодовую базу для полезных подсказок (если у вас меньше удачи).

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

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

Ah, и btw. - читать книги (CC2, некоторые книги шаблонов моделей, "Чистый код" - это хорошее место для начала и отличные справочники на всю карьеру) и блоги (You Я это узнаю, когда увижу это).

Ответ 11

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

Кроме того, Code Golf - это хороший способ найти интересные программы для покупок.

Ответ 12

Код Hello World, затем код Hello World, распределенный по сети, или в 3d, или с использованием базы данных. Не думайте, что вещи слишком тривиальны, пока вы их не сделали. Внедрите алгоритмы, чтобы убедиться, что вы знаете, как это сделать. Код, который вы считаете забавным.

Ответ 13

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

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

Если вы больше ориентируетесь на веб-проекты или серверные проекты, держите свои знания языка в актуальном состоянии и достаточно маленькими, чтобы хорошо знать язык. По моему опыту, если вы хорошо знаете язык на основе Algol, например C, вы, возможно, изучите другой похожий язык, такой как С++, Java или Perl. C - замечательный язык, но если вы не планируете писать ядро ​​Linux, специализированный встроенный код или код расширения Python, я бы предложил изучить Scala или Clojure и, возможно, Ruby в дополнение к Javascript и PHP.

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

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

Ответ 14

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

Ответ 15

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

Веб-программирование может отличаться от системного программирования многими способами, но оба имеют множество проблем безопасности.

Ответ 16

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

То, что работает для одного человека, не всегда работает для другого. Code golf может работать для вас, или вам может показаться утомительным, например. Лично мне нравится делать то, что имеет истинную ценность, но это я. Немного экспериментируйте с различными типами проектов кодирования, возможно, с кодом гольфа, возможно с открытым исходным кодом, созданием игры и т.д. Иногда просто пытается понять, как отвечать на вопросы других людей. В конце концов вы найдете то, что работает для вас. Просто помните, что обучения недостаточно, вы должны применить эти исследования.

Ответ 17

Некоторые идеи проекта:

  • Проекты с малой базой данных: список контактов, коллекция DVD и т.д. Подчеркивает ввод/вывод файлов, поисковые структуры данных и т.д.
  • Простой калькулятор: акцентирует интерактивный ввод-вывод, синтаксический анализ, древовидные структуры и т.д.
  • Простой пользовательский интерфейс NNTP (Usenet) или чат: работа в сети и протоколы

Ответ 18

Вы можете изучать язык только при его использовании. Простые примеры или упражнения никогда не дадут вам глубокого понимания языка. Я лично также нашел упражнения в конце главы, скучной и неземной, поэтому я их не делал. Как и другое государство, вы можете найти интересующий вас проект. Это может быть что угодно, начиная с простой настольной игры и заканчивая системой видеорекламы. Если вы узнали, что будет интересно для вас, посмотрите, как вы можете это сделать. Вам нужно будет использовать некоторые библиотеки помощи, для пользовательского интерфейса, а также для бэкэнд. А потом приступайте к работе! (Конечно, проект должен быть выполнимым для вас, поэтому не ставьте целью "писать лучший текстовый процессор, чем Winword".)

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

Ответ 19

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

Ответ 20

Вы можете найти, что прочитайте Code Complete 2 полезным. Это хорошая книга о практиках программирования.

.

Ответ 21

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

Подпишитесь на рассылку/новостную рассылку/журнал/подкасты для программистов в своей области: http://www.drdobbs.com/cpp/;jsessionid=XVZEO0SKOCRRBQE1GHPCKH4ATMY32JVN

Посетите StackOverflow.com и периодически пытайтесь решать проблемы, чтобы решить свои проблемы и помочь другим.