2009-02-07 4 views
4

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

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

  • сети, понимая полный IP стек и т.д.
  • протокол HTTP, является OReilly book стоит посмотреть?
  • многопоточных приложений
  • программирования низкого уровня, ассемблере в настоящее время используют этот programming from the ground up
  • структуры данных и алгоритмы.
  • Операционные системы
  • все, что вы считаете нужным в этом списке!

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

Заранее благодарю всех, кто на это отвечает.

.. Bri

ответ

0

Одна большая книга, чтобы посмотреть на это «Операционная система» Концепции по Silberschatz, Гальвина & Ганье.

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

+0

спасибо за это, я проверю это. – 2009-02-08 00:41:12

2

Вы прочитали Код Завершен? Это отличная отправная точка, поскольку она выделяет тонну дополнительного чтения по разным темам.

+0

Да, это была фантастическая помощь. Я вернусь снова и посмотрю на дополнительное чтение .... – 2009-02-07 18:44:15

3

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

What should every programmer know?

What algorithms should every developer know?

asp.net frameworks and libraries every developer should know…and use

CSS tips which every beginning developer should know about?

Questions every good .NET developer should be able to answer?

What skills should a programmer have nowadays?

Я не пытаюсь быть грубым. По крайней мере, я указываю, ПОЧЕМУ я ниспровергаю.

+0

Спасибо за ссылки. Они ценятся. Я ищу кое-что немного другое, хотя, больше по линии реальных проектов, чтобы попытаться. – 2009-02-07 18:42:53

+0

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

-2

Моя обязательно иметь знания:

  • контейнеры для инъекций Dependency
  • Модульное тестирование
  • Patterns (несколько)
  • шаблоны доменов (архетипы)
+0

Спасибо, что комментировали, почему вы проголосовали за это, я ценю это. –

0

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

Я думал, что самые основополагающие курсы CS, которые я получил в области обучения, - теория языков программирования, компьютерная организация, операционные системы и теории/дискретные математические классы.

Попробуйте использовать классический алгоритм и реализовать его на 4 разных языках. (например, попробуйте C#, LISP, Prolog и C). Добавьте игрушечную функциональность в локальную копию ядра Linux, чтобы увидеть, как она тикает. Напишите распределенную файловую систему. Это некоторые из проектов в школе, которые меня больше всего научили.

+0

спасибо за это, очень полезно – 2009-02-08 08:22:45

0

Определенно взгляните на вычислительную теорию. Пара большие книги: http://www.amazon.com/Introduction-Theory-Computation-Michael-Sipser/dp/053494728X http://www.amazon.com/Computability-Complexity-Languages-Second-Fundamentals/dp/0122063821

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

+0

Да, я это видел. Там есть что-то тяжелое, и я знаю, что вы имеете в виду под грубой силой, я помню, что думал о проблеме оттуда и придумывал ужасное решение, которое, казалось, кричало: «есть гораздо более простое решение!» – 2009-02-07 18:45:52

2

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

Я дам вам ресурс и пример проекта для каждой области:

структуры данных и алгоритмы.

  • Ресурс: каноническая книга, и один, что я до сих пор считаю лучшим, является введение в алгоритмы по Cormen и др. Это не очень легко , но он очень богат и хорошо объяснил. Резервное копирование того, что вы не можете получить , вполне понимаете отсюда с помощью wikipedia (чьи страницы DS + A вообще не ) и, возможно, словарь NIST.
  • Проект: реализовать столько, сколько вам нравится в ваших любимых алгоритмах в языке по вашему выбору. Если вы используете ITA, как указано выше, я бы порекомендовал Python только потому, что это самый близкий язык к псевдокоду, который они используют, , но не беспокойтесь о своем выборе langauge. Я повторю, что не увязнуть в выборе языка; есть много времени для узнать их все :)

Сеть.

  • Ресурс: Для того, чтобы узнать, как все это совмещается, есть несколько хороших книг. Мне нравится «Компьютерные сети» Таненбаума, но еще один хороший выбор (хотя я и не прочел его полностью), который может подойти вам лучше, это Kurose и Ross Computer Networks: A Top Down Approach Using The Internet. Эта книга может работать хорошо, поскольку вы, скорее всего, столкнетесь с концепциями, которые вы находите знакомыми на раннем этапе.

    Чтобы все это на практике, прочитайте исходный код ядра Linux или FreeBSD, чтобы узнать, как объединен сетевой стек. Есть хорошие ресурсы, будь то в печати или в сети, чтобы помочь вам в этом процессе. Кстати, я действительно не стал бы слишком беспокоиться об HTTP. Это важный протокол, но не очень интересный. TCP, IP, UDP, BGP и друзья гораздо интереснее, на мой взгляд!

  • Проект: Трудно узнать, что является работоспособным проектом. Ответьте на вопросы в конце глав книги. Научитесь программированию сокетов для пользовательского пространства, написав простую клиент-серверную программу («Hello world!» По сети не так сложно сделать!). Как только вы это сделаете, вы, вероятно, можете придумать расширение самостоятельно - возможно, вы хотите написать действительно простой веб-сервер.

Многопоточное программирование:

  • Ресурс: Это огромная тема. Если вы просто хотите понять, как многопоточные примитивы работают на вашем выбранном языке, найдите учебное пособие в сети - по крайней мере, есть нагрузки для Python, Java и C. Если вас интересует теория, найдите серию Herb Sutter в DDJ по параллельному программированию (но это может немного продвинуться для вас прямо сейчас). Herleyhy и Shavit's Art of Multiprocessor Programming - фантастическая книга о параллельном программировании с очень (очень!) Академической точки зрения на практике, хотя в первом издании требуется множество ошибок.
  • Проект: Возьмите ваш сервер из сетевого проекта и обслуживайте каждый клиент в новом потоке, чтобы вы могли принимать сразу несколько подключений. Код на решение проблемы обеденного философа :)

Операционные системы:

  • Ресурс: есть несколько хороших вводных книг. Опять же, я фанат Таненбаума Modern Operating Systems, но Сильбершац и др. и др. книга хороша также. Вы действительно хотите книгу здесь, ИМХО, так как вам нужен общий обзор того, какие варианты дизайна доступны, прежде чем изучать, как работает конкретная операционная система.

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

  • Проект: Установите дистрибутив Linux на виртуальной машине. Добавьте системный вызов к ядру и проверьте его из пользовательского пространства. Тогда ядро ​​- ваша устрица! Попробуйте взломать планировщик - начните с того, что сделаете его действительно глупым, затем медленно добавьте функции.

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

Смежные вопросы