?

Log in

No account? Create an account
   Journal    Friends    Archive    Profile    Memories
 

Teach Yourself C++ in 21 days - morfizm


Aug. 13th, 2016 01:12 am Teach Yourself C++ in 21 days

(from an old collection)

Teach Yourself Cpp in 21 Days

21 comments - Leave a commentPrevious Entry Share Next Entry

Comments:

From:psilogic
Date:August 13th, 2016 09:41 am (UTC)
(Link)
Да ладно... если уже знал близкий по смыслу язык (C, Java), то не вижу проблем :)
From:archaicos
Date:August 13th, 2016 10:15 am (UTC)
(Link)
Вы шутите?
From:psilogic
Date:August 13th, 2016 10:32 am (UTC)
(Link)
С чего бы? 21 день - это чертова уйма времени, целых 3 недели.

Если уже знаешь C и имеешь опыт программирования на нем, то С++ становится просто набором удобных "фенечек", которые позволяют записать привычные вещи короче. Например, очень быстро программсты на Си приходят к ситуации, когда есть структура и куча функций, которые принимают указатель на нее как параметр. C++ - ный класс наглядным воплощением этой ситуации, сокращая количество писанины (внутри функций не надо писать this->). И так далее. Практически все, что есть в C++ - это синтаксический сахар для классических си-шных приёмов.
From:archaicos
Date:August 13th, 2016 09:27 pm (UTC)
(Link)
Вы, похоже, серьёзно. Стандарт языка на тысячу с лишним страниц тут не поможет.
From:psilogic
Date:August 13th, 2016 09:30 pm (UTC)
(Link)
Так вам шашечки или ехать - в смысле научить программировать или наизусть цитировать стандарт?
From:archaicos
Date:August 13th, 2016 09:38 pm (UTC)
(Link)
Наизусть цитировать не надо. Но вы, мне кажется, что-то пропустили и не осознаёте масштаба проблемы «программировать на C++».
From:psilogic
Date:August 13th, 2016 09:46 pm (UTC)
(Link)
бггг

Господин осознающий, вы сколько лет программируете на C++? Или просто ниасилили?
From:archaicos
Date:August 13th, 2016 11:03 pm (UTC)
(Link)
Людей, которые осилили, можно чуть ли не по пальцам рук пересчитать. А я ещё пока программирую. Думаю, перестану, как осилю.
From:morfizm
Date:August 13th, 2016 11:25 pm (UTC)
(Link)
archaicos прибедняется, он программирует не один десяток лет, в свободное от работы время допиливает новые фичи к своему pet-project компилятору C.
From:psilogic
Date:August 14th, 2016 07:58 am (UTC)
(Link)
прибедняющийся сноб, классический :)
From:morfizm
Date:August 14th, 2016 08:01 am (UTC)
(Link)
:))
From:morfizm
Date:August 13th, 2016 09:20 pm (UTC)
(Link)
Хорошо, тогда меняем картинку на всё то же самое, но "Teach Yourself C in 21 days" :)
From:psilogic
Date:August 13th, 2016 09:28 pm (UTC)
(Link)
Давайте посчитаем. Обычный курс нового языка программирования - 1 учебный год, т.е. примерно 9 месяцев. 1 лекция в неделю, 1 семинар, 1 сдвоенная лаба. Итого 4 "пары" по полтора часа в неделю, то есть 6 часов в неделю. 9 учебных месяцев - это примерно 36 недель или 216 часов, если по 6 часов в неделю.

21 день самостоятельных занятий по 10 часов - это 210 часов.

Ну, как бы... и что?
From:morfizm
Date:August 13th, 2016 11:22 pm (UTC)
(Link)
Если ваш поинт в том, что 21 день самостоятельного труда может быть эквивалентен 1 году курса языка программирования - да нет проблем, не спорю! :)

Но 1 год курса программирования совершенно не эквивалентно "уметь программировать". Даже те, кто умеют делать хоть что-нибудь после года, это те, кто вечерами хакали по куче часов. Фактически, от первого знакомства до способности писать production код, мне кажется, самое меньше это 3 года (при условии огромного объёма самостоятельных занятий), а более типичное - это лет 10 (начал в 10-12 лет и к концу универа уже трудоспособен).
From:psilogic
Date:August 14th, 2016 08:22 am (UTC)
(Link)
Тут надо было заранее договариваться о том, какой уровень владения йазыком требуется. Одно дело - уровень "гуру" с огромным опытом. Другое - уровень выпускника, которому сразу после принятия на работу УЖЕ можно давать простые практические задания, да, с обязательным code review, да с легкими пинками с требованиями типа "соптимизировать эту копипасту", "поюзать ту функцию вместо своего велосипеда с квадратными колесами, "а этот велсипед вроде ничего, но добавь коментов". Но предполагается, что этот студент уже не будет сидеть, пялясь в экран, и печально ждать помощи препода. Такой уровень за 21 день серьёзной, напряженной работы (а не чтения книжечки на сон грядущий под косячок) я считаю вполне реальным. Потом в первые же недели реальной работы знания быстро закрепятся.

И тут, конечно, еще важен background. Одно дело - студент, имеющий представление о булевой алгебре и двоичных операциях ДО ТОГО, как увидел конструкции типа x&= 3; Другое дело - бляндинка, которая всю булеву алгебру просидела в короткой юбочке на первой парте, бросая томные взбляды на препода :)

1 год курса расчитан не на гениев, а на вполне нормальных студентов-середнячков (т.е. IQ 110-120). С расчетом на то, что положительный результат все-таки будет (при обычной оговорке, что студент все-таки сам захочет вникать, а не просто отделаться). И на это дается учебный год с расчетом на реальный результат - опять же, не все вузы составляют программы по принципу "на отъе#сь", многие настроены на выпуск нормальных молодых специалистов, и у них это вполне получается.

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

From:morfizm
Date:August 14th, 2016 11:48 am (UTC)
(Link)
Это всё резонно, но мне видится таки притянутым за уши очень сильно.

Production польза от свежего выпускника, конечно, возможна (хоть и с натяжкой, скорее это liability & investment, чем польза), но выпускник это таки 3-5 лет. Я никогда не видел каких-то людей, которые в супер сжатые сроки освоили за 21 программерский эквивалент того, что выпускник осваивает за 4 года.

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

Требование к способности человека потратить концентрированно 21 день на СЕРЬЁЗНУЮ напряжённую работу - это уже требование не к обычному студенту.

Про бэкграунд отличный поинт :) Будем его считать в 21 день или отдельно?

Добавим ещё тот фактор, что C++ сложный, громоздкий язык, и единственное ему оправдание - это CPU-bound performance critical задачи. Это high load в огромных системах (не в стартапах! в них high load делается просто вбухиванием бабла в железо), это OS and library development, это embedded/devices, это low latency (hedge fund trading). Всё это отрасли, в которых берут лучших, а не кого попало. Кого попало возьмут туда, где пишут на языках более высокого уровня.
From:psilogic
Date:August 14th, 2016 03:39 pm (UTC)
(Link)
За 4 года в профильном вузе преподают до хрена всего такого, что небесполезно при освоении языка. Но мы же говорим об освоении за 21 день именно Си или Си++, а не того, что рядом или около. Я рассматриваю не обучение дикаря из джунглей с нуля, а то, что бывает в реальности:
готовый программист, который уже знает пару языков, и вот ему приспичило выучить Си, причем, не на уровне гуру, а на уровне для начала работы над новым проектом.

[ C++ сложный, громоздкий язык ]

Ну, это смотря, с чем сравнивать и что делать...
From:morfizm
Date:August 14th, 2016 08:44 pm (UTC)
(Link)
Человеку, уже знающему много языков, вообще не нужно тратить ни копейки времени, чтобы быть полезным в новом языке. Т.е. можно трудоустраиваться сходу с нулевым знанием, и за несколько недель достичь уровня "я уже могу быть полезен". Да, как раз 21 день тут хорош. У меня недавно был личный пример, я же поменял работу на ту, где нужно программировать на Scala. Я вообще не видел Scala в глаза до этого.

Мне кажется, claims вроде "научись XYZ за 21 день" предполагает уровень несколько более близкий к нулю :) Поэтому смешно.

Второй момент в том, что C++ это очень специфический язык. Если уже хорошо знаешь C, знаешь какой-то объектно-ориентированный язык, и основы фунционального подхода, то да, тебе 21 день хватит. Если же ты знаешь только языки высокого уровня, то тебе не хватит и года. Потому что низкий уровень это огромный пласт знаний: архитектура компа и представление структур данных в памяти, стек, кэш процессора, битовая арифметика, поинтеры, имплементация полиморфизма (таблицы VMT), понимание регистров процессора, чтобы понимать возможность или невозможность оптимизации компилятором тех или иных вещей, знание ассемблера вообще говоря (иначе как дебаггать этот C++ в production?) и всё такое прочее. Конечно, программист на Visual Basic'е может освоить синтаксис C++ за 21 день, но он будет писать код, для переворачивания строки склеивающий std::strings в цикле, и этот код будет отвратительно неприемлем в C++ сфере, где надо оптимизировать performance (потому что: O(N^2) вместо O(N), дорогущие аллокации памяти у которых тоже нелинейная ассимптотика, игнорирование кэша процессора, и т.п.). А чтобы писать приемлемый код с такого уровня, нужны годы.
From:psilogic
Date:August 14th, 2016 09:08 pm (UTC)
(Link)
Ну, дык, поэтому и учат в любом вузе в специально продуманном порядке, чтобы от простого к сложному

Про С++ скажу такую вещь, что, хотя у многих из старого поколения уже в крови сидит привычка писать сразу оптимально - в реальности это вовсе необязательно. И когда стоит выбор - дать новичку написать неоптимально второстепенный кусок кода - или тащить в проект какой-нибудь ЯВУ, а потом трахаться с совмещением - что выберешь?
From:morfizm
Date:August 14th, 2016 09:14 pm (UTC)
(Link)
Конечно, C++. Только новичков же не будешь брать только на второстепенные куски кода? Это же расточительство зарплаты. Хочется брать такого новичка, который быстро сможет контрибьютить в сложные части.

Upd.: под "быстро" я имею в виду хотя бы за полгода. НО не за 4 года :)

Edited at 2016-08-14 09:26 pm (UTC)
From:psilogic
Date:August 14th, 2016 09:34 pm (UTC)
(Link)
Зависит от сообразительности новичка, конечно. Некоторые вещи, про которые ты говорил, можно объяснить на уровне "аксиом": "знай Вася, что выделение памяти - функция длительная, поэтому..." - если не дебил, сделает очевидные выводы насчет использования этой функции, даже не зная ни одного алгоритма аллокации.