В комментариях к прошлым статьям мне посоветовали позаниматься репетиторством со студентами, тк возможно это положительно повлияет на мою психику. Поначалу это казалось таким нереальным, что я не воспринял совет всерьез. Но однажды мне просто подвернулась “студентка”, крайне заинтересованная в позиции junior PHP backend developer, тк процессы верстки ее крайне утомляют. Уровень ее знаний: почти полное непонимание процессов инициализации и модификации в циклах, полное непонимание арреев, в плане алгоритмов - непреодолимые трудности с алгоритмами сложнее пузырьковой сортировки. Уровень ее ожиданий: позиция PHP junior после 3 месяцев регулярных тренировок.
Вряд ли опытный разработчик извлечет что полезное из этой статьи, разве что кому-то будет приятно поправить ошибки или вспомнить свою молодость. Примеры в статье рассчитаны на совершенных новичков, планирующих выйти на позицию junior в обозримом будущем. Уровень моих познаний: какая разница что не знать? В том плане, что я могу разобрать студенческую задачку на любом не эзотерическом языке программирования. Поэтому заранее предупреждаю о качестве кода: профи от него захочется плакать кровавыми слезами.
Беседа о позиции PHP junior:
В принципе, студентка адекватнее некоторых выпускников вузов, сразу после вуза претендующих на позиции software architect - тк “на зарплату джуниора не прожить”, оценивает свои способности и готова к незначительному падению уровня своих доходов на первых порах - как это случалось со всеми моими знакомыми, идущими в новую профессию. Ее позиция: вначале выучусь - а там посмотрим. Вспоминая гипотезу Данинга-Крюгера: она считает, что основы уже почти выучила и уже занята вопросом: а дальше что?
А дальше нужен будет ментор или ведущих программист, спрашиваю:
Допустим ты написала резюме в приличную контору, где джуниора будут чему-нибудь учить … ты понимаешь, что таких резюме будет штук 20 и кого тогда выберет ведущий программист?
Того у кого больше опыта?
Как сравнить у кого больше опыта: у меня, тебя, твоего брата? …
Думаю у джуна 20 с небольшим лет, с ИТ образованием шансов будет много больше.
И что тогда делать?
Учиться?
Все мы учимся …
Дипломный проект?
Без ментора это такое себе занятие
Те, вроде бы, базовое понимание есть: дипломный проект - это то, что может позволить обойти выпускника технического вуза на пути в приличную контору. С другой стороны самостоятельно выбирать и завершать “дипломный” проект - те еще риски, можно угробить кучу усилий не туда, без особой отдачи.
Беседа о менторе:
Студентку слегка пугают вопросы мотивации ментора. Но прежде чем его чем то заинтересовать, надо его вначале найти, что сделать с около нулевыми навыками программирования крайне затруднительно. Во-первых даже никакой мидл не будет возиться с первокурсником, во-вторых пытаясь с таким уровнем знаний оценивать уровень ментора … мы уподобляемся джуниору, которого контора поставила собеседовать сеньора на позицию разработчика, тк других более опытных ( хотя бы мидлов) в конторе нет: кстати, вполне реальный случай из жизни, когда владелец мебельного бизнеса решил пойти в ИТ.
В общем, вряд ли до планирования “дипломного” проекта тут возникнет реальная необходимость в менторе. По моим самым скромным оценкам, студентка выйдет на уровень студента старшекурсника технического вуза, естественно, за исключением математического базиса … года за 2. А там или она бросит это занятие или пристроится куда-нибудь кодить или что-нибудь еще.
Беседа о вакансиях:
Сразу прошу ее найти 3 интересных для нее вакансии PHP junior. С одной стороны это сразу отучит безуспешно долбиться в фирму мечты. С другой исключит тот печальный факт: вот выучились вы на джуниора, а без релокации устроиться некуда, а к релокации вы совершенно не готовы. Конечно, фанаты удаленки скажут: зачем работать в офисе, когда можно из дома? Но мои практические наблюдения показывают: если у вас нет большого таланта, то на удаленку реально пристроиться начиная с позиции сеньора. С третьей стороны по типичным вакансиям можно прикинуть примерный уровень необходимых знаний.
3я вакансия была больше для мидла, первая немного мутная - не побеседовав с работодателем, какого либо мнения о ней не составить … а до беседы было бы неплохо научиться решать тестовые задания. Вторая была всем хороша, но закрылась быстрее чем за 1.5 дня - а это скорее всего значит, что на нее понабежало за этот срок 40+ вполне адекватных кандидатов.
Оцениваем уровень требований к вакансиям: на мой взгляд помимо пхп к обучению еще нужно еще добавить JS, JQuery. Обсуждаю это со студенткой:
Да ну столько всего учить, вот у меня подружка практически ничего о пхп не зная устроилась в приличную контору, ее даже верстать не заставляют и зарплату уже прилично подняли.
Ну хорошо, не будем пока рассматривать full stack. Перевожу тему на 3ю контору: чтобы туда пристроиться, тебе нужно будут отработать пару лет в конторе типа как у твоей подружки. Хотя странная какая-то дружба - она кодить совершенно не помогает.
Из хороших новостей: при устройстве в приличную контору уровень доходов студентки не упадет, из плохих: конкуренция за место в ней выглядит нереально. Вариант пристроиться в плохую не рассматривается, тк там пахать заставят и скорее всего вместе с пхп придется заниматься версткой, когда сейчас спокойная низкооплачиваемая работа совершенно не ограничивает студентку в саморазвитии.
Беседа об алгоритмах:
Не найдя какого либо издания по PHP, где хотя бы вскользь рассматривались алгоритмы и структуры данных. Рассправшиваю студентку, что она думает об алгоритмах в пхп помимо пузырьковой сортировки? Этим вопросом она совершенно не задавалась. Осторожно интересуюсь:
Может вскользь изучить еще один язык, на котором разбираются алгоритмы?
Да ну столько всего учить, мне бы к осени куда вначале пристроиться джуниором …
Собственно, закрадывается мысль, если начинающих пхп кодеров совершенно не принято учить алгоритмам, то может им намного важнее вначале изучить MySQL, JS, JQuery и фреймворк какой для работы? Наверное стоит отложить изучение алгоритмов до времен, когда придется писать вставки на С++ для высоконагруженных приложений? Ой … знал бы я к чему это приведет.
Беседа о страхах:
Ты знаешь, я теперь себе такой глупенькой кажусь, насколько реально будет мне куда-то пристроиться?
Умнейшие нам не конкуренты, их, во-первых, очень мало, во-вторых, они даже не будут рассматривать годные для тебя вакансии … всех кого я встречал - либо устраивались программистом на Яндекс, либо шли торговать “носками”. Тут все будет зависеть от твоей удачи и приложенных тобой усилий.
Собственно практические занятия.
У студентки оказался маленько странный для меня подход: практически не зная языка и алгоритмов сразу врубиться в решение задачек. Все таки немного времени до осени есть - и я настоятельно советую параллельно с решением задачек почитывать O'Reilly: Learning PHP. Не то чтобы я сильно разбирался в том, по какому изданию лучше изучать PHP, но в молодости у меня просто сложился такой подход: если заинтересовался каким-то новым языком после С++, то серия O'Reilly: Learning … это лучшая отправная точка для начала его изучения.
Вторая странность: я то сам ладно по старинке запускаю PHP скрипт с консоли, но у студентки стоит какая-то навороченная IDE и почему нет в ней интеграции с гитхабом или почему студентка не понимает как ее запустить для меня большая загадка.
Первая задачка:
Посчитать сколько в строке слов начинается на одну букву и сколько заканчивается на другую. Единственная сложность: в условии сказано: решение должно быть быстрым … а как подключать профайлер к PHP для меня большая загадка:
<?php
$str = 'Посчитать сколько в строке слов начинается на одну букву и сколько заканчивается на другую. Единственная сложность: в условии сказано: решение должно быть быстрым … а как подключать профайлер к PHP для меня большая загадка.';
function fuSersA ($text) {
$arr = explode(' ', $text);
$count_a = 0;
$count_o = 0;
foreach($arr as $elem) {
if( mb_substr($elem, 0, 1) === 'а' || mb_substr($elem, 0, 1) === 'A') {
$count_a++;
};
if(mb_substr($elem, -1, 1) === 'о' || mb_substr($elem, -1, 1) === 'О') {
$count_o++;
};
}
}
function fuSersA1 ($text) {
$arr = explode(' ', $text);
$count_a = 0;
$count_o = 0;
foreach($arr as $elem) {
$a1 = mb_substr($elem, 0, 1);
if( $a1 === 'а' || $a1 === 'A') {
$count_a++;
};
$a1 = mb_substr($elem, -1, 1);
if( $a1 === 'о' || $a1 === 'О') {
$count_o++;
};
}
}
$t1 = microtime(true);
for($i=0; $i<10000; $i++){
echo fuSersA ($str);
}
$t2 = microtime(true);
$t1=$t2-$t1;
echo $t1 . '<br>';
$t1 = microtime(true);
for($i=0; $i<10000; $i++){
echo fuSersA1 ($str);
}
$t2 = microtime(true);
$t1=$t2-$t1;
echo $t1 . '<br>';
?>
Вторая задачка:
Была уже чуть интереснее: повернуть матрицу на 90 градусов по часовой стрелке. Конечно проще всего такую формулу загуглить … но мы не ищем легких путей.
По логике алгоритма тут взаимно однозначное соответствие между новой и старой позицией элемента: чуть сложнее будет записать в матрицу переноса новую позицию каждого элемента.
Самое сложное решение в плане расчета алгоритма вывести формулу переноса. Мне хватило для вывода значений переноса первых 2х элементов, студентке потребовалось вычислить значения переноса всех элементов, чтобы вывести формулу: видимо она просто никогда не работала с матрицами - зато самостоятельно потом рассчитала обратный поворот и поворот на 180 градусов.
Единственная ее ошибка в коде: $new Matrix[$y][$length-$x-1] = $k, где $k сгенерированое значение. Тут прочитал ей короткую лекцию: Незрелая оптимизация это корень всех бед, в первую очередь код должен быть читабельным, а уже потом быстрым.
Единственное дополнительное неудобство тут: сложно воспринимать состояние матрицы через print r.
<?php
$oldMatrix = [
[1,2,3],
[4,5,6],
[7,8,9]
];
$len = count($oldMatrix);
$newMatrix = [];
for($x=0;$x<$len;$x++){
for($y=0;$y<$len;$y++){
$newMatrix[$y][$len-$x-1] = $oldMatrix[$x][$y];
}
}
function printMatrix($matrix){
$len = count($matrix);
for($x=0;$x<$len;$x++){
for($y=0;$y<$len;$y++){
echo $matrix[$x][$y];
}
echo PHP_EOL;
}
}
printMatrix($oldMatrix);
echo PHP_EOL;
printMatrix($newMatrix);
?>
Третья задачка:
Удалить из строки все дубли и вернуть строку.
Формализация задачи:
К сожалению мне не попадалось толковых методичек по формализации условий задач. Поэтому приходится воспользоваться интуитивным подходом. Сразу после прочтение условий задачки приходит понимание: во первых они двусмысленные, во вторых начинающему кодеру сразу по ним не составить алгоритм - придется их переформулировать.
Первый наводящий вопрос студентке: что такое дубль?
Примерно 30 минут у студентки ушло на подумать и дать несколько неточных определений. В итоге все пришлось разбирать на конкретных строках, чтобы вывести ясное определение: под дублем будем подразумевать 2 одинаковых символа расположенных левее всего в строке не обязательно рядом стоящих.
Небольшое отступление: для начинающего кодера такая задачка становиться уже не реальной, если бы студентка разбирала эту задачку с ее создателем или на курсах: то ей бы пояснили дубль это пара рядом расположенных одинаковых символов. Но я подумал, что новые условия просто отнимут больше времени.
Второй наводящий вопрос: Основная часть описания алгоритма готова, какое одно слово можно добавить, чтобы описать весь алгоритм целиком?
Тут я дал уже на подумать только 10 минут, подозревая что способностей ей не хватит. О да она слышала про рекурсию, даже где то ее применяла … но чтобы додуматься что она применима в этом алгоритме.
В общем, формализация условий задачи: рекурсивно удалять 2 самых левых одинаковых символа, потом вернуть получившуюся строку. Если занудствовать, то можно добавить, что считать самыми левыми одинаковыми символами, но для решения это не потребовалось. Решать, конечно, было удобнее через двойной вложенный цикл и условие можно было бы записать: пока в строке есть одинаковые символы, удалять 2 самых левых из них, потом вернуть строку.
Ну и небольшое отступление на будущее, если она пристроится кодером: при получении таких невнятных условий от заказчика, чем раньше утвердишь формализованное задание, тем меньше придется переделывать. Другая трудность: поймет ли заказчик формализованное задание и не скажет ли переделывать то, что уже утвердил …
Оценка технических рисков:
Прежде чем браться за реализацию алгоритма, нужно прояснить все ли его части студентка сможет реализовать:
Вложенный цикл уже делали в прошлой задачке … ох как я тут ошибался.
Взять по индексу символ из строки - умеет.
Вернуть строку - умеет
Удалить символ по индексу - 5 минут на раздумье и понимание, что не умеет.
Даю ссылку - явно не понимает ее содержимого. Явно указываю на комманду unset - и у меня очень большие сомнения поймет ли как она воздействует на массив.
О преждевременности усилий:
Явно складывается впечатление, что студентка не готова к задачам такого уровня сложности, выкладываю ей готовое решения, вдруг что поймет?
<?php
$str = "hello there";
$str_arr = str_split($str);
$len = count($str_arr);
for( $i=0; $i<$len; $i++) {
if (!isset($str_arr[$i])) continue;
for( $j=$i+1; $j<$len; $j++) {
if (!isset($str_arr[$j])) continue;
if ($str_arr[$i] == $str_arr[$j]) {
echo $i.$j.PHP_EOL;
unset($str_arr[$i]);
unset($str_arr[$j]);
break;
}
}
}
print_r( $str_arr);
echo implode($str_arr);
?>
Во-первых, вложенный цикл для нее это for(x=0;..) { for(y=0;...) с такими условиями она решала 10ки задачек, но конструкция for(x=0;..) { for(y=x+1;...) явно далеко за пределами ее понимания, далее она сплошь и рядом путается с инициацией и выполнением тела цикла.
Во-вторых, control flow в циклах она еще не проходила, и задачку для их усвоения нужна явно попроще.
В-третьих, она так и не разобралась во влиянии unset на массив.
В общем даю ей ссылку на O'Reilly: Learning PHP -> Control Flow -> Looping -> for Loops … и ищу задачки попроще.
Выводы:
Если вы начинаете изучать новый язык программирования, то скорее всего, особенно если вы это делаете в одиночку - лучшим местом для старта будет книга из серии O'Reilly Learning … Практические задачки для усвоения пройденного материала, видимо, сейчас в обучающих изданиях уже не прилагаются - придется что-то гуглить отдельно.
Учите английский хотя бы до уровня чтения-понимания технической документации. Во-первых, не придется ждать пару тройку лет пока современную версию издания переведут на русский язык … если вообще такой момент когда-нибудь наступит. Во-вторых, практически все проблемные места с вероятностью 99.9% во всех студенческих задачках уже разобраны на stack overflow.
Поиском ментора вряд ли стоит заморачиваться до тех пор, пока вы не достигните уровня студента старшекурсника технического вуза.
Совершенно не ясен вопрос, что начинающему PHP кодеру учить важнее: другой язык программирования с понятным разбором алгоритмов и структур данных или JS, JQuery, MySQL, Laravel.
Комментарии (21)
Moraiatw
03.06.2022 19:06+1Да ну столько всего учить, мне бы к осени куда вначале пристроиться джуниором
Она безнадежна.
marimero Автор
03.06.2022 21:45С возрастом происходит некоторый пересмотр приоритетов.
Семья, ипотека и уже вместо простой гонки за знаниями идет оценка зарплат.
С каждым прожитым годом начинает приходить понимания, что шансы пристроиться джуниором все больше стремятся к 0. Вспоминаются слова тим лидов: "Если вы не достигли ничего к Х годам, то ..."
Moraiatw
04.06.2022 09:13+1Безнадежна в плане отсутствия надежд на успешную трудовую деятельность разработчиком. Не может, например, врач, сказать: да зачем мне это все знать, мне бы пристроиться в какую-нибудь больницу.
marimero Автор
04.06.2022 18:00+1Ну не знаю, насчет позиции джуниора - если ей удасться зацепиться за хорошего тимлида, то за год тимлид даст ей больше чем почти любой препод в институте за 5 лет - ну тут мы не берем мет-мах или МГУ. Хотя мне тоже кажется сомнительным, что она за 3 месяца натаскается на уровень достаточный для трудоустройства.
Насчет врача: до путинских реформ достаточно было просто посещать все лекции и практические занятия в вузе, чтобы пристроиться на нищенскую зарплату почти в любую больницу - дальше все решало умение вымогать деньги с пациентов.
Сейчас будущих врачей уже начинают конретно иметь на госах, качество знаний получаемых в ординатуре стало много выше ранних интернатур, уровень нового поколения медиков становится несколько выше. Но ситуация та же (если конечно не брать, что то типа СМП или ВМП) пристроился в больницу - уровень твоих знаний нафиг никому не нужен, набрался опыта: если получается раскручивать пациентов на деньги - то обеспечена головокружительная карьера в частной лавочке, если получается строить средний и младший медперсонал плавный карьерный рост на руководящие должности в госучереждениях. Единицы медработников двигают науку: получают кандидатскую, начинают иметь доход с лекций и конференций. Единицы настолько талантливы, что могут эмигрировать на достойную зарплату.
В общем, если есть талант и\или связи, можно сделать головокружетельный карьерный рост, а так пристроился куда-нибудь в больничку, набрался опыта , удвоил доход и для большинства это будет потолок, если не развивать альтернативные(руководящие, финансовые) способности.
Alexrook
04.06.2022 19:00Почему этот абстрактный тимлид должен выбрать ее среди минимум десятка кандидатов? Почему он не должен выбрать джуна, который уже хотя бы в первом приближении знает и основные алгоритмы, и ООП, и SQL и т.д.? Ну только если за красивое личико. Но тут первый вопрос, красивое ли у неё личико и насколько это личико необходимо тимлиду.
Сейчас к джунам требования очень выросли. Сам пытался устроиться на PHP разработчика. Скажу прямо, с ее подходом ей ничего не светит.
Moraiatw
05.06.2022 07:46Кстати что за основные алгоритмы? В PHP же все сортировки встроенные.
marimero Автор
05.06.2022 20:20Даже со встроенной сортировкой у нее большие проблеммы: отсортировать массив пар: символ-его встречаемость в строке, по встречаемости символа - было долго за пределами ее понимания.
Механизм поиска данных через хеш ( ассоциативные ареи), похоже мне ей не объяснить, как и временную сложность алгоритмов.
Moraiatw
06.06.2022 08:30И неужели кто то использует самописные сортировки в PHP?
Обычно все решается cредствами даже не PHP, а SQL.
FanatPHP
06.06.2022 09:33Самописные алгоритмы сортировки конечно никто, но самописные сортировки, через usort() — сплошь и рядом (при этом если самый примитивный случай освоить ещё могут, то скажем пользовательская сортировка по двум полям уже ставит таких горе-программистов в тупик).
Но в данном конкретном случае даже этого не нужно — [mb_]str_split() / array_count_values().
gohrytt
03.06.2022 19:09Интересное наблюдение: каждый раз когда на хабре заходит речь про новичков в программировании которые как любой из нас в этой точке карьеры хотят просто начать зарабатывать на хлеб - вне зависимости от текста поста его адски по местным меркам минусуют.
К чему бы это?marimero Автор
03.06.2022 21:34Не знаю, сам в шоке ... Я думал читателям будет интересно обсудить когнитивные процессы:
Изучение первого языка программирования в 30+ лет против средних классов школы.
Юношеский максимализм против зрелого принятия решений.
Детская пластичность мозга против закостенелости.
Целая вечность на изучение языков против цейнота в 3 месяца
Steepik
03.06.2022 19:46+1Ну начинать изучения с Laravel не зная ООП такое себе, знаю ребят которые так делали, ничем хорошим это не кончилось
psycho-coder
03.06.2022 21:04-1Знаю ребят которые знают ООП, и пишут на Laravel. Ничем хорошим их проекты не заканчиваются. Проблема в другом
AmdY
05.06.2022 16:34Это отлично работает. При изучении очень важно научиться быстро получать результат, это поднимает желание учиться. Всякие циклы и алгоритмы без контекста вызывают лишь желание всё бросить.
Я занимался менторством, после основ php быстро переходили к Laravel, там учились делать круды, затем рассказывал про рефакторинг и лишь в конце погружались в тонкости реализаций и как работает фреймворк, какие паттерны использует.
Через 3 месяца ребята были готовы к писанине продакшен кода под присмотром, а через год местами были лучше некоторых программистов с 10+ годами опыта (посмотрите только на ужасный код автора статьи).
В целом, курс надо подстраивать под стажёра, но надо помнить о стремлении к быстрому результату.
marimero Автор
05.06.2022 20:14Я занимался менторством, после основ php быстро переходили к Laravel,
Сколько времени уходило на изучение основ языка?
Я попытался закрепеть циклы и ассоциативный аррей, через подсчет каждого символа в строке - не поняла.
Дальше думал недельки за 2 закрепить основы языка ( добавить объекты, анонимные функции) через задачку расчитать формулу типа: f = data1 + 3 * data2 - 7 ... заодно может поймет single linked list
И затем перейти к MySQL и по усвоению начать решать тестовые задания для вакансий
Честно говоря рефакторинг и патерны уже далеко за пределами моей компетенции
Реальный пример выучить на джуниора за 3 месяца, конечно, очень обнадеживает - но это уже уровень ментора уровня сеньора
KonstantinID
Какой странный вывод у вас, я бы даже сказал несколько абсурдный. Единственное что верно, так то что нужно читать книги - пока уровень знаний в языке минимальный. Про другой язык - так вообще бред, алгоритмы будут выглядеть в разных языках +/- одинаково - тут проблема в понимании принципов работы алгоритмов, и простите камушек в ваш огород - в объяснении их ментором. Для алгоритмов - проще выписывать на бумаге числовые ряды, векторы матрицы и объяснять по каждой итерации наглядно что происходит.
Вот это отдельно порадовало, тут можно уже говорить о ваших компетенциях. Это настолько разные вещи - а ответ настолько очевиден.
Во первых сначала теория переменные, циклы, условия, типы данных, структуры, ООП. А затем уже инструмент - ЯП. У каждого языка вкупе с направлением (веб, моб., фронт, бэк) - есть свои дорожные карты. И те же фреймворки - это уже up-инструмент, и лезть туда без хорошего знания языка, понимания ООП - смысла не то чтобы нет, он отсутствует полностью. Базы - это нужно учить параллельно.
Когда я занимался с двоюродным племянником, мы с ним написали небольшую систему отчетов постоянно внося дополнительные фитчи и требования (дада пусть привыкает), сначала это был большой монолитный скрипт, потом вы выделили функции, затем перешли к ООП, далее несколько бест-практик и принципов ООП, я показал пару простых шаблонов, и в процессе даже обратил внимание что он пытает изобразить другие. Я считаю лучшее обучение - это практика, и такая где примеры максимально приближены к жизни.
marimero Автор
Это для вашего уровня знаний, когда вы уже переросли планку какая разница что не знать и понимаете код на любом языке программирования.
А представьте на своем месте школьника средних классов, который путается в операторах циклов паскаля ... И вы ему даете методичку разбора алгоритма на Java
Полностью с вами согласен, студентка щас увязла в циклах и полном непонимании ассоциативных арреев. Но вот после типов и структур данные учебный план соверненно не ясен - лезть в алгоритмы или ооп.
Честно говоря не знал, что для освоения фреймвока нужны глубокие знания ООП.
Тоже согласен, но это уже уровень ментора
Даже далеко не каждый преподаватель вуза может похвастаться хотя бы уровнем мидла в каком либо языке программирования ( с другой стороны, какому мидлу будет интересно преподавать? )
FanatPHP
На самом деле не странный.
РНР действительно скрывает огромное количество деталей реализации от пользователя, который в итоге не знает ни структур данных, ни алгоритмов. Они ему просто не нужны. РНР на 95% — это круд. И из всех структур данных наш джуниор может в течение многих лет обходиться одним только универсальным пхп массивом, а из алгоритмов знать только уайл роу равно муэскюэль фетч эррэй…
И человеку, который учил программирование по академическим учебникам видеть такой hands on подход к программированию довольно странно. Вот это удивление автор и высказывает.
Другое дело что учить сухую теорию тоже бессмысленно. Особенно если она в дальнейшем не пригодится. Надо просто признать тот факт, что программирование из искусства давно уже превратилось в ремесло. Натягиватели тем на Уордпресс не дадут соврать.
KonstantinID
Подождите, стоп, правильно ли я понимаю что вы предлагаете согласится с ТС и выбрать путь - изучения джуниором, который кстати сказать не освоил и первый язык еще одно языка, в угоду тому что в другом языке семантика более дружественна для изучения алгоритмов (с сем я конечно же категорично не согласен, ведь то что php скрывает какие-то реализации не является обратно исключающим что эти реализации можно воспроизвести и даже очень наглядно использовать их при необходимости "качественно" изучать алгоритмы), вместо того чтобы потратить ресурсы на более углубленное изучение "начатого" языка?!
FanatPHP
Я не предлагаю ни с чем соглашаться :)
Я просто показываю точку зрения, с которой сделанный автором вывод не выглядит странным.
Понятно, что при озвученных целях (джуном к осени) учить другой язык будет бессмысленной тратой времени — мне кажется, я это довольно ясно обозначил. Чтобы говнякать круды, алгоритмы изучать не нужно.
Но вот скажем, если бы цель была указана другая — например "стать программистом" — то я бы даже пожалуй одобрил смену языка. Не потому что пых плохой, а именно в тех целях, о которых говорил автор — меньше императива, больше понимания основ.