LINUX.ORG.RU
ФорумTalks

План по программированию (system, embedded, network)

 , ,


1

3

Необходимо хорошо освоить системное программирование, embedded-разработку, программирование сетевого софта и программирование в Unix. Цели «найти работу по программированию в кратчайшие сроки» — нет. Приоритет отдается изучению основ и необходимой теоретической базы с параллельным выполнением практических (лабораторных) задач. Приступить к реальной работе нужно приблизительно через 1.5-2 года. Оцените, пожалуйста, план по программированию (последовательность книг: с начала изучения до условного завершения).

1. Основы компьютера, алгоритмы и сети

  • Архитектура компьютера (Э. Таненбаум)
  • Современные операционные системы (Э. Таненбаум)
  • TCP/IP. Архитектура, протоколы, реализация (С. Фейт)
  • Программирование в алгоритмах (С. Окулов).


2. Программирование

  • Turbo Pascal 7.0 начальный курс (В. Фаронов)
  • Assembler для DOS, Windows и UNIX (С. Зубков)
  • Искусство программирования на C: Фундаментальные алгоритмы, структуры данных и примеры приложений (Р. Хэзфилд)
  • Язык программирования Си (Б. Керниган, Д. Ритчи)
  • UNIX. Профессиональное программирование (Р. Стивенс)
  • Ядро Linux (Д. Бовет, М. Чезати)
  • Ядро Linux. Описание процесса разработки (Р. Лав)


3. Практика и начало работы

  • Embedded: изучение стандартов С99/C11/POSIX/RTOS. Знакомство и работа с arduino, шилды, отличия VSS от VDD, gpio от spi, ИКаЗэ и УХаХа. Начать работать с железками stm8, stm32, mips, arm. Работа с FPGA. В более крупном эмбеддеде — на микро-компьютерах, где уже линукс крутится — нужно юзать lua, в том числе для написания вебморд и некоторых скриптов бекендов.
  • System: работа с драйверами - их написание и т.д., прошивками, ядром kernel:- модули, код, патчи и т.д,
  • Network: сетевые приложения unix, стандарты RFC, протоколы, сокеты, потоки данных в TCP/IP, бинарные протоколы, написание модулей ядра для работы с пакетами на низком уровне, работа с сетевыми бинарниками, научиться максимально быстро обрабатывать сетевой трафик — это кастомизация TCP-стека, вынос его из ядра, привязка к ядру процессора, c получением данных через NAPI, без хардварных прерываний на каждый пакет


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



Последнее исправление: Svobodniy (всего исправлений: 23)

Какие мысли, советы?

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

UVV ★★★★★
()

Совет - не обращай сразу внимания на требование опыта, просто отправь резюме, пройди собеседование. М.б. удастся договориться и без опыта.

А проходя этот список от начала и до конца (по крайней мере в том виде, в каком он сейчас), ты рискуешь потерять кучу времени впустую.

WRG ★★★★
()

Как и всем жаждущим приобщиться к c++ - рекомендую устроиться в нии, где пишут gui на c++/Qt, если есть готовность ужаться в бюджетах. Это похоже один из немногих способов получить опыт работы на c++(дабы резюме вообще рассматривалось хоть где то) для начинающего специалиста.

Это если речь о РФ, в/на Украине, да и в/на Белорусси[и], есть истории успеха минуя сей скользкий путь.

По плану - обязательно прочитай Таненбаума про операционные системы. И по c++ - Джосатис и Вандервуд «Шаблоны C++ справочник разработчика».

pon4ik ★★★★★
()

ИМХО

Какие мысли, советы?

Больше налегай на практику и меньше на теорию. В идеале - сразу найди себе какую-нибудь полезную в реальном мире задачу и начни её решать. Параллельно изучай теорию, которая для решения этой задачи требуется.

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

С# не нужен. Lazarus тоже. Pascal сам по себе, как язык, по смыслу похожий на C, вполне норм.

По конкретным книгам не подскажу.

P.S. Я программист-самоучка, так что моим советам можно не доверять.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

для Embedded

Можешь еще глянуть книжки: 1.Programming with MicroPython - H.Tollervey 2.Python for Microcontrollers: Getting started with MicroPython - Norris D. Еще нужны будут тебе книжки по usb, tcp/ip и т.д

sqq
()

Добавь пункт:
4. Пенсия

Kroz ★★★★★
()
Ответ на: комментарий от pon4ik

Как и всем жаждущим приобщиться к c++ - рекомендую устроиться в нии, где пишут gui на c++/Qt, если есть готовность ужаться в бюджетах. Это похоже один из немногих способов получить опыт работы на c++(дабы резюме вообще рассматривалось хоть где то) для начинающего специалиста.

ХЗ, есть шанс не вырасти из junior'a в таком месте. Хотя может от человека зависит.

UVV ★★★★★
()

Пару слов скажу о личном опыте.

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

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

Нужны алгоритмы. Но упаси тебя боже смотреть в сторону Кнута =)

Нужна дискретка. Вообще, вышка желательна. Мне пришлось припоминать матрицы пару месяцев назад.

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

ИМХО, конкретные авторы не столь важны, как важна полнота изложения материала. Я бы рекомендовал Стивенса.

Ещё одно ИМХО. На чём именно ты будешь оттачивать системное программирование, не столь важно. Хоть на голом ДОС'е. Важно понять общие принципы, а там нарастишь мясо очень быстро.

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

Deleted
()

Звонить в организации с вакансиями по C++ и голосом (!) просить взять на джуна.

Если цель - стать крестовиком, совершенно непонятно, как в этом поможет шарп. Только несколько лет зря потеряешь.

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от Deleted

еще нужен cracking the code interview и полирование до блеска тех вещей, котоыре спрашивают на собеседованиях.

н-р есть целое идиотское направление знаний про рисование алгоритмов на графах маркером по доске. Совершенно бессмысленное и бесполезное, но шансы попасть в Гугл без него резко сокращаются

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

Что значит «потеряешь» — можно подумать ЯП один раз на всю жизнь выбирают. Саперы, блин :) Не «потеряешь», а «диверсифицируешь» или «хеджируешь». Слыхал что бывает с «монокультурами» в сельском хозяйстве?

slackwarrior ★★★★★
()
Ответ на: комментарий от sqq

Pascal и Lazarus зачем? Embedded далеко не всегда х86

Уточнение вопроса странное. FPC далеко не один x86*.

atrus ★★★★★
()
Ответ на: комментарий от slackwarrior

конечно, можно диверсифицировать языки! Между С++, Rust, Assembler. Такой-то выбор!

а диверсифицировать между областями - разве получится? Вот у тебя получилось?

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

stevejobs ★★★★☆
()
Ответ на: комментарий от slackwarrior

а вот если бы в детстве кто-то мне подсказал, как правильно изучать матчасть, как ботанить, как ботанить в ВУЗе, как использовать любой курсач и диплом для движения вперед, то может быть и догнал бы

грустные мысли(

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

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

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

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

Deleted
()
Последнее исправление: rht (всего исправлений: 1)

Необходимо хорошо освоить системное программирование, embedded-разработку, программирование сетевого софта и программирование в Unix.

1. Алгоритмы, логика, математика

ѧковебратеебилежѧ, за каким лешим тебе это всё?!

2. Основы компьютера и сети

Ни чего не могу сказать про Гаврилова и его чтиво. А вот творчество гражданина Таненбаума реально не повредит.

3. Программирование

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

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

erfea ★★★★★
()

сей побольше, пачкалей поменьше

mittorn ★★★★★
()

Слишком... да просто слишком. Таланты фигачат код, а этот путь боюсь приведет к карго культу.

Aber ★★★★★
()
Ответ на: комментарий от UVV

Тут только самообразование (за очень редкими исключениями).

pon4ik ★★★★★
()
Ответ на: комментарий от Svobodniy

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

Aber ★★★★★
()
Ответ на: комментарий от Aber

Параллельно с изучением теории можно практикой заняться, реализацией небольших проектов-задач. Вот только каких-то идей по поводу практики нет. Ну, только различный софт сетевой, да ковыряние ядра linux. А вот на счет драйверов, embedded и более крупного с C++? Вот что-то не придумать так сходу.. Может глянуть где?

Svobodniy
() автор топика
Ответ на: комментарий от sqq

Смотря что понимать под драйвером. Допустим библиотеку, использующую libusb в user space, тоже можно назвать драйвером. Ну и в Windows дрова тоже пишут на плюсах.

UVV ★★★★★
()
Последнее исправление: UVV (всего исправлений: 1)
Ответ на: комментарий от Svobodniy

Тебе нужно в сишную кодерскую контору попасть, там у тебя будет резкий буст получения знаний до уровня общей массы разрабов в конторе. Скорость получения знаний и навыков в конторе намного выше чем у одиночки. Дальше ты либо остановишься и станешь одним из... либо перерастешь массу. Но чтоб попасть туда, нужно пройти интервью, а для этого нужно знать хорошо язык, по этому начинай с книжек по языку. А если хочешь стать хорошим программистом просто фигач код, много когда, загугли «10 000 часов» узнаешь главное правило.

Aber ★★★★★
()
Ответ на: комментарий от Svobodniy

Асм и С однозначно основные языки для тебя.

sqq
()

В заголовке стоит embeded, а в плане ни одного занятия по отличиям VSS от VDD, gpio от spi, ИКаЗэ и УХаХа. Или вы за рафинированный ембедет. Пришел слесарь по электронам воткнул вам jtag и уарт железяку, а вы дальше только кнопки нажимаете?

yax123 ★★★★★
()
Ответ на: комментарий от Svobodniy

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

sqq
()
Ответ на: комментарий от Svobodniy

А там уже будешь сам понимать что тебе нужно будет почитать.

sqq
()
Ответ на: комментарий от sqq

Основы же, зачем сразу пугать человека?

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

ну да ладно. захочет разберется.

yax123 ★★★★★
()
Ответ на: комментарий от yax123

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

sqq
()
Ответ на: комментарий от stevejobs

а диверсифицировать между областями - разве получится? Вот у тебя получилось?

А как думаешь, между FoxPro 2.6, на которой жили люди в 2002-м, в последствии — разнообразными RDBMS на SQL, кресто-кроссплатформой общего назначения для Win/Lin/Mac OS, сначала на Qt/boost, а потом без костылей, которая без проблем заводится на мобилках с минимальными допилками по сборке (после чего с сабжевыми навыками нет проблем писать хоть HFT-серваки для бирж (с оптимизациями под конкретное железо и оптимизацией моска под «теханализ», если хочется совсем понять «глубину стакана»), хоть 3D движки для игрулек, для писюков и мобилок сразу — не говоря уж чтоб освоить сторонние, и внезапная встреча со «странным зверьком» salesforce не будет откровением, в котором свое все в облаке, и минимально нужен только браузер и понять разницу между SQL и SOQL (и побороть дежавю с FoxPro), а по их «дереву технологий» можно развиваться хоть в Web-ку с ES6, хоть в BigData, хоть в IoT, хоть в VR на Unity (немного усидчивости — и можно смотреть на облачные данные через очки дополненной реальности) - норм диверсификация? :)

А случалось и на .Net WCF/rest-распределенку писать, морды с аналитикой для SPLUNK, и модули для ganglia, и с халтурками на стороне под STM32 (GPS/GPRS) проблем не было — и все в пределах 15 лет примерно (еще «два потерянных года в армии», плак-плак :))

slackwarrior ★★★★★
()

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

Meyer ★★★★★
()
Ответ на: комментарий от grimwaken

разрабатывают компилятор и VM в Java OpenJDK и .NET Core.

stevejobs ★★★★☆
()
Ответ на: комментарий от slackwarrior

еще «два потерянных года в армии», плак-плак :)

Это случайно не твоя былинная история была на хабре, как человек на боевых дежурствах, чтобы не спятить от безделья, написал на единственном доступном на рабочем месте средстве разработки - Microsoft Office + VBA - сначала пару игрушек, а потом и вполне серьёзный комплекс программ для автоматизации своей деятельности?

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

У меня хабр в рид-онли в лучшем случае. Но этого чувака я понимаю: на VBA скрипты пишутся влёт после второго дежурства в наряде по дивизии — и подбивания бесконечных экселек «в реале», «для начальников» скока где человеков (иначе придется все дежурство сводить эти две бухгалтерии — потому что не за свой один полк отдуваться, а за всех :)).

slackwarrior ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.