?

Log in

No account? Create an account

Теоретический минимум для программиста

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

Построенные на теории массового обслуживания и стандарте GSM сети мобильной связи; PHP-скрипты, исполняющиеся на удаленных серверах и передающие свою выдачу через Ethernet по TCP/IP на компьютеры с NDIS-драйверами; процессоры, переупорядочивающие и спекулятивно исполняющие наборы инструкций для того, чтобы скомпенсировать вызванную ограничениями полупроводниковой электроники и скоростью света остановку роста тактовой частоты; рассчитанные на ЭВМ корпуса самолетов и автомобилей, лекарства и структуры ДНК; компьютерные игры, ради крохотного блика в которых пишутся мегабайты заполненных интегралами Френеля статей; электронные фильмы и книги; алгоритмы NLP и TreeNet, вызывающие нам из огромных баз данных поисковую выдачу — вот то, что окружает нас каждый день благодаря программистам, благодаря оригинальным подходам и фундаментальным знаниям, благодаря продуманной и отточенной десятилетиями методологии разработки и управления сложностью ПО.

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

МинимумСвернуть )


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

Часто отвечаемые ответыСвернуть )

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

Некоторые полезные ссылки:
Книги, которые стоит читать в IT
Матрица Компетентности Программиста
Список Баткина
MIT OpenCourseWare
Курсы Интернет-университета


UPD2 (2011.07.04): Огромное спасибо Vissi за перевод статьи на английский язык.


UPD3 (2011.12.31):
Питер Норвиг. Научитесь программировать за десять лет
Matt Might. What every computer science major should know
От физики к программированию
Зачем нужно знать всякие низкоуровневые вещи

Ну и наконец, откуда вообще вырос этот теормин:
ACM Computer Science Curriculum

Last update: 2014/12/31

Comments

Страница 5 из 7
<<[1] [2] [3] [4] [5] [6] [7] >>

Что должен уметь дизайнер и знать программист

User delishiza referenced to your post from Что должен уметь дизайнер и знать программист saying: [...] владеть. В комментариях приветствуются исправления и дополнения. sharpc.livejournal.com/67583.html [...]
Аффтар - убей себя ап стенку мля. Херасе теоретический минимум. Давай туда ещё основы экономической теории втули, а то куле - мож пригодится когда-то на старости если будешь фрилансить бухгалтерское приложение. Токо не облажайся и не используй FPU операции для этого.
Это технический минимум, собрать список необходимых гуманитарных навыков и знаний задача не стояла.
в пункте 5 не хватает Титце и Шенка
Автор, я нисколько не сомневаюсь в пользе фундаментальных знаний, однако у Вас в списке мухи использованы как составная часть котлет. BNF и EBNF, грамматики - все это, без сомнения, нужно знать...чтобы сдать предмет, ну допустим, "Создание компиляторов с помощью Ada", или за достаточно короткое время написать простенький парсер с минимальным использованием RegExp'ов (иногда последнее играет большую роль).
Однако уклон в сторону С++ удручает. Просто если список, как у Вас, содержит и теоретические вещи и практические, то их нужно явным образом отделить и практическую часть достаточно часто обновлять. А то был у нас один профессор, для которого развитие языков программирования на Коболе завершилось - душераздирающее зрелище :) Ведь именно свободное владение теорией позволяет достаточно просто осваивать новые языки и технологии.
Но, без сомнения, такой список был бы полезен.
Для C++ никакой замены пока нет и едва ли скоро появится. Разделение на теоретические и практические вещи, полагаю, любой читатель без труда сделает сам. Обновления планируются.

(Анонимно)

ffuuuu

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

спасибо, посмеялся :-) надо же, альтруист :-)

Практическое применение

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

Re: Практическое применение

Почти все применяется практически. Есть драфт с указанием частных примеров, но он еще очень сырой, может, через год выложу :)
Еще Vector clock, Paxos, Byzantine Paxos, ..
В пункт 3 наверое, раз map-reduce там оказалось.... или выделить "Distributed computing" в отдельный пункт.

если честно, по-моему это тупой сгруппированный набор базвордов. Когда вы говорите о студенте на пример, то этот пост ну никак не относится. Эти знания более менее в целом, в общих чертах можно получить минимум 15 лет отработав программистом. И то глубоко знать ничего не получится. Так что толку мало.
Да ты что пизданулся, что ле? У меня адский Батхерт, я учусь на программиста, но встретил единицы знакомых слов!
Чувак, у тебя серьезные проблемы. Я не программист совсем, но про подовляющее большинство баззвордов мне известно, оставщиюся часть я знаю где искать, и совсем чуть-чуть мне придеться гуглить с нуля.

Ну что могу сказать? Учись, пока не поздно.

что такое хорошо и что такое плохо - 2

User skyer_404 referenced to your post from что такое хорошо и что такое плохо - 2 saying: [...] Сегодня у нас на повестке дня следующая запись - http://sharpc.livejournal.com/67583.html [...]
Наткнулся на список. Создается впечатление что его писал C++ программист, который постоянно что-то норовит заоптимизировать.
У меня, кстати, есть свое частное мнение по некоторым вещам, которое не помещается в размер ЖЖ-комментария, поэтому дам ссылку на запись - http://skyer-404.livejournal.com/104922.html . Надеюсь на помидорки. :)
Ответил по ссылке.

Перевод

Сделал перевод материала на английский, http://vissi.su/translations/programmer-teormin.php , на случай, если возникнет желание поделиться материалом с нерусскоговорящими коллегами.
Последние абзацы скоро будут добавлены.

Re: Перевод

Отлично, спасибо! Некоторые правки:

особенно обучающиеся в провинциальных вузах
especially those, who study in colleges (?)

invented by other developers based
who based?

Queues and GSM-based mobile networks
Queuing theory

NDIS-powered network interface cards
network cards with NDIS interface

semiconductor electronics limitations on clock rate
and light speed

computer-controlled cars and planes
computer-calculated|-designed|-engineered (далее drugs and DNA)

на основании собеседований (вряд ли стоит пропускать)

Джосаттис/Вандервуд
Первая книга по STL, вторая по шаблонам

virtual function implementation, virtual inheritance, exceptions, RTTI, switch, function and method pointers
implementation of ...

compilator defines and environments
defines of ...

dining philosophers
problem

CAS или LL/SC
or :)

macros
macro instruction?

stack and heap failure
overflow

memory architectures
memory

self-applicapability problems
Кажется, они не выделяют ее, возможно, стоит описать, о чем это

building virtual machines
VM implementation

Kirchoff
Kirchhoff

heap
binary heap

ideal hash
perfect hash

diff-algorithm
diff algorithms

Runge-Kutta method
Runge-Kutta methods (у меня та же ошибка)

Newton-Cotes formula
formulas

Haar cascade
Haar-like features

kohonen nets
Kohonen self-organizing map

метод отжига
simulated annealing

cryptographic durability
cryptographically strong systems

Zorich/Winberg
возможно, стоит добавить Rudin (Real and complex analysis, not Principles)/Lang, чтобы не расслаблялись :)

Kirchoff rules
Kirchhoff

silicon chemistry
chemistry of Si?

code documentation
documentation generators

make systems
build systems

slot-signal concept
signals and slots construct

tcp/ip stack and front-end web servers
network stack and high-load servers

generics
generic programming

Shor algorithm
Shor's algorithm

abstract data types
algebraic data types

lazy/greedy evaluation
lazy/eager

This list is criticized
rightly

and occasional neighbourhood
SUDDEN (мем)

of the specified subjects
mentioned?

did not even think that Duff's device
that someone would decide that

Sacred Standard
Holy Standard (мем)

and our list contains lots of great sources
and some parts of our list (for example C++)

you would understand everything
you would meet everything?

ordinary developer would hardly use it
would not

knowledge for a software developer is not NBNS packet format
exact

distinguishes man from google
human (отличный mistranslation :))

like cg physics
game physics

java crm development
java bullshit development :)

they will not be able to apply their knowledge
and will forget/lose it

but mastering it in 5 years
so mastering

others can be studied by answering questions
can be used

because they consider making money more important than making the world better
consider that programming is only for making money

I am educated well enough
I get paid without such education

Sudden loss of ability to write code
Slow loss

caused by lack of analysis-synthesis activity
accompanied by

working actively after 45
in old age

TopCoder
http://topcoder.com/tc (хитрая навигация)


Плюс следует добавить новые изменения:
VID/PID -> VID/PID, FPGA
Verilog/VHDL/SystemC -> Verilog/VHDL/SystemC, SISAL
память в мультипроцессорных системах -> память в мультипроцессорных системах (SMP/NUMA)
симметричная, асимметричная, Диффи-Хеллман, RSA, DES, AES -> симметричная (DES, AES), асимметричная (RSA), алгоритм Диффи-Хеллмана
отладчики (VS/Olly/WinDbg/kdb/gdb) и трейсеры (strace/ltrace) -> отладчики (VS/Olly/WinDbg/kdb/gdb) и трейсеры (strace/ltrace), DWARF2 debug information format
CORBA -> CORBA, D-Bus
OSI -> OSI model/Internet model
роутинг -> роутинг/BGP/OSPF
вопросы безопасности: XSS, SQL injection, CSRF, highload, SWIG -> вопросы безопасности (XSS, SQL injection, CSRF), highload, SWIG


Ссылки на русские источники можно дать на гуглотранслейт. Ну и картинку хорошо бы вернуть :) Взорвем slashdot? :))

(Анонимно)

Пробежал по диагонали.
Общее впечатление - автор получал CS образование где-то в ПТУ году в 70-м, после чего работал кодирующей обезьянкой и ничем, совершенно ничем, в сфере CS не интересовался. А тут просто вспомнил умные слова, которыми его пичкали в альма-матер, без понимания смысла этого действа.

Вообще, подобные "откровения" можно прекращать читать после слов "С++", это как лакмусовая бумажка. Знающие люди поймут о чем я.
Ну вы ведь поделитесь знаниями? Или названиями не-ПТУ, хотя бы.

Теоретический минимум для программиста

Необходимые пояснения

User brat_luber referenced to your post from Необходимые пояснения saying: [...] под заголовком “Теоретический минимум для программиста [...]
Страница 5 из 7
<<[1] [2] [3] [4] [5] [6] [7] >>