Задать вопрос
@dewkins

Нормальный ли прогресс и формат обучения в JS?

Изучаю JS около 20-25 часов+опыт в питоне до этого 30 часов.
Сейчас решаю задачу(ее код и вставил в конце) на ООП и начал сомневаться в том нормален ли прогресс и вообще то как я учусь.
учу вот так примерно:
1.выбираю тему на роадмапе()
2.читаю статьи по теме,если что-то непонятное то спрашиваю у нейронки
3.после изучения нескольких тем в нейросети генерирую задание на эти темы и решаю

many letters
//блок модулей
const prompt = require('prompt-sync')();

//блок переменных
let arrAllId=[]
begin=true
dumpsterCourse={}
dumpsterTeacher={}

//блок функций
function pause(){
    return prompt('Нажмите Enter чтобы продолжить ...')
}

function generateId(length = 5) {
    const alphabetId='0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
    let resultId=''
    for(let i=0;i<length;i++){
        resultId+=alphabetId[Math.floor(Math.random()*alphabetId.length)]
    }
    if (arrAllId.indexOf(resultId)==-1){
        arrAllId.push(resultId)
        return resultId
    }
    return generateId()
}

function checkingValidateEmail(){
    let email=prompt('Введите свою электронную почту: ')
    if (email.includes('@')){
        return email
    }
    else{
        console.log('Почта была введена некорректно\n')
        return checkingValidateEmail()
    }
}

function checkingValidateCode(code){
    if (code.lengh>10){
        console.log('Вы успешно добавили Секретный код')
        return(code)
    }
    else{
        return checkingValidateCode(prompt('Введите секретный код: '))
    }
}
function checkingNameUniqueness(){
    let name=prompt('Введите своё имя: ')
    if (app.allUserNames.indexOf(name)==-1){
        return name
    }
    else{
        console.log('Это имя занято\n')
        return checkingNameUniqueness()
    }
}

function showFirstInterface(){
    console.log(
        '\n1.Войти в аккаунт\n',
        '\n2.Регистрация\n',
        '\n3.Выход\n\n',
    )
    return prompt('Выберете действие: ')
}

function showStudentInterface(){
    console.log(
        '\n1.Найти курс\n',
        '\n2.Поддержка\n',
        '\n3.Выход из аккаунта\n\n',
    )
    return prompt('Выберете действие: ')
}

function sentMessageAdmin(mess,sender){
    app.baseAdmin[sender]=mess
    let keys=Object.keys(app.admins)
    for(let i=0;i<app.admins.length;i++)
        app.admins[keys[i]]=mess
}

function userType(){
    let type=prompt('1.Учитель\n2.Ученик\n3.Владелец Школы\n4.Владелец приложения\nВыберете роль входа: ')
    switch(type){
        case '1':
            return 'teachers'
        case '2':
            return 'students'
        case '3':
            return 'schoolManager'
        case '4':
            return 'admin'
        default:
            console.log('Такой роли нет')
            pause()
            return userType()

    }
}

function inputAccountStudorTeach(userType){
    let userName=prompt('Введите имя пользователя: ')
    let userPass=prompt('Введите свой пароль: ')
    if (prompt('Введите yes если хотите вернуться назад: ')=='yes'){
        return 'no'
    }
    if(app[userType][userName]!==undefined){
        if(app[userType][userName].pass==userPass){
            console.log(`Добро пожаловать ${userName} `)
            pause()
            return app[userType][userName]
            
        }
    }
    else{
        console.log('Вы ввели неправильное имя или пароль\n')
        return inputAccount(userType)
    }
}

function checkingValidatePass(){
    let pass=prompt('Введите пароль: ')
    if (pass.length>=8){
        return pass
    }
    else{
        console.log('Минимальная длинна пароля 8 символов\n')
        return checkingValidatePass()
    }
}

//блок классов
class User{
    constructor(userType,name,email,pass){
        this.pass=pass
        this.name = name
        this.email = email
        this.userType=userType
        this.createdAt = new Date()
        this.isAcive=true
        this.id=generateId()
    }
    getInfo() {
        return `${this.name} (${this.email}) - ${this.role} (аккаунт был создан ${createdAt})`;
    }
}

class Student extends User{
    constructor(name,email,pass){
        super('студент',name,email,pass)
        this.balance=0
        this.learnCourses=[]
        this.sentComplaint={}
    }
    getInfo(){
       return super.getInfo()+`|| Баланс: ${this.balance}`
    }
    addCourse(onlineSchoolName,nameCourse){
        if (this.balance>=app[onlineSchoolName][nameCourse].price){
            this.balance-=app[onlineSchoolName][nameCourse].price
            app[onlineSchoolName][nameCourse].students[this.name]=app.students[this.name]
            console.log('Вы успешно записались на курс')
            pause()
        }
        else{
            console.log('У вас недостаточно средств')
            pause()
        }
    }
    addComplaintForTeacher(nameTeacher,description){
        if(this.sentComplaint[nameTeacher]!==undefined){
            return 'Вы уже отправляли жалобу на этого учителя'
        }
        else{
            this.sentComplaint[nameTeacher]=true
            app.teachers[nameTeacher].complaint.push(this.name+': '+description,'жалоба')
            if (app.teachers[nameTeacher].complaint.length>=10 & app.baseAdmin.message[nameTeacher]!==undefined & app.baseAdmin.viewedMessage[nameTeacher]!==undefined){
                for(let i=0;i<10;i++){
                    sentMessageAdmin(app.teachers[nameTeacher][i])
                }
            }
            return 'Жалоба успешно отправлена на рассмотрение администрации'
        }
    }
    
}

class Teacher extends User{
    constructor(name,email,pass,specialty){
    super('учитель',name,email,pass)
    this.specialty=specialty
    this.rating=0
    this.complaint=[]
    }
    changeSpecialty(){
        console.log(`Ваша специальность сейчас:\n${this.specialty}`)
        this.specialty=prompt('Введите новую специальность:\n')
    }
    getInfo(){
        return super.getInfo()+`|| Рейтинг ${this.rating}/5`
    }
}

class Admin{
    constructor(){
        this.message={}
        
    }
    deleteTeacher(name){

    }
}
class Course{
    constructor(nameCourse,price,description,duration,id){
        this.id=id
        this.nameCourse=nameCourse
        this.price=Number(price)
        this.description=description
        this.duration=Number(duration)
        this.students={}
        this.teacher=null
    }
    changeDescription(){
        console.log(`Описание сейчас:\n${this.description}`)
        this.description=prompt('Введите новое описание:\n')
    }
    changePrice(){
        console.log(`Описание сейчас: ${this.price}`)
        this.priсe=Number(prompt('Введите новую цену: '))
    }
}

class OnlineSchool{
    static CourselastId=0
    constructor(name){
        this.name=name
        this.teachers=[]
        this.students=[]
        this.courses=[]
    }
    createCurse(nameCourse){
        CourselastId+=1
        let price=Number(prompt('Введите цену курса: '))
        let description=prompt('Введите описание для курса:\n')
        let duration=Number(prompt('Введите продолжительность курса в кол-вах уроков: '))
        this.courses[nameCourse]=new Course(nameCourse,price,description,duration,CourselastId)
        
    }
    getStatistics(){
        let rate=0
        for (let i =0;i<this.teachers.length;i++){
            rate+=this.teachers[i]
        }
        rate=rate/this.teachers.length
        return `Средний рейтинг учителей ${rate} || Количество учеников записаных на курсы вашей школы ${this.students.length}`
    }
}

//объект в котором будут храниться все данные
let app={
    baseAdmin:{dewkins:{name: 'dewkins',
        pass: '42',//для быстрых тестов кода
        email: '42', //для быстрых тестов кода
        message: {},
        createSecretCodes(){
            app.secretCodes.push(checkingValidateCode(prompt('Введите секретный код: ')))
        },
    }},
    admins: {},
    teachers: {},
    students: {},
    onlineSchools: {},
    allUserNames:[],
    secretCodes:[],

    registerTeacher(){
        let name=checkingNameUniqueness()
        let email=checkingValidateEmail()
        let specialty=prompt('Введите свою специальность: ')
        this.teachers[name]=new Teacher(name,email,pass,specialty)
        this.allUserNames.push(name)
    },
    registerStudent(){
        let name=checkingNameUniqueness()
        let email=checkingValidateEmail()
        let pass=checkingValidatePass()
        this.students[name]=new Student(name,email,pass)
    },
}

//блок выполняемого кода
while(begin===true){
switch(showFirstInterface()){
    case '1':
        let type=userType()
        if (type==='teachers' || type==='students'){
            let userObj=inputAccountStudorTeach(type)
        }
        if(userObj==='no'){
            continue
        }
        break
    case '2':

        break
    case '3':
        begin=false
        break
    default:
        console.log('Такого действия нет')
        pause()
        break
}
switch(userObj.userType){
    case 'студент':
        showStudentInterface()
        break
    case 'учитель':

        break
    case 'schoolManager':

        break
    case 'admin':

        break    
    
}
}
//cd C:\Users\dewkinz\documents
//node prototype.js
  • Вопрос задан
  • 1039 просмотров
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Академия Eduson
    Fullstack-разработчик на JavaScript
    11 месяцев
    Далее
  • Skillbox
    JavaScript
    3 месяца
    Далее
Решения вопроса 3
@historydev Куратор тега JavaScript
long long long long long .... int
1. Нейросети используйте осторожно, они имеют привычку уверенно "втирать какую-то дичь" или "галлюцинировать".
2. Задачи ничего не стоят, если не решают существующую проблему.
3. Книжки это хорошо, но пока дядя её напишет и выпустит - половина описанного устареет.

Поэтому лучше так:
1. Изучили тему.
2. Изучили проблему которую она решает.
3. Нагуглили репозиторий по теме на гите.
4. Попытались улучшить/модифицировать или как минимум разобраться.
- Здесь так-же как и с нейросетями, могут чуши написать, поэтому не воспринимайте всё как истину с первого взгляда.

Саму тему я бы советовал брать не из roadmap, который не мониторит рынок, а просто добавляет всё подряд про что шумят, а со стека вакансий.
- Выберите подходящие, посмотрите на их стек и темы сами по себе появятся. Например как работает http или что такое shadow dom.
Ответ написан
Комментировать
Нейронки, к сожалению, стали бичом для начинающих программистов. Да, как инструмент для опытного программиста они просто прекрасны. Но это потому, что опытный программист уже всё знает, ему не нужно учиться тому, что генерирует нейронка, он просто экономит время. Но самое главное - он может оценить то, что выдала нейронка, исправить, улучшить этот код. Начинающий всего этого не может, и не сможет. При использовании нейронки в его голове не закрепятся нужные знания, т.е. он никогда не станет опытным программистом.
Поэтому, я бы посоветовал наложить на нейронки бан. А если надо получить какой-то ответ на технический вопрос, то можно использовать вот эту новую секцию в Гугле, которая перед поисковой выдачей генерирует ИИ-выдержку.

Итак, нейронки не используем. Что же делать, чтобы научиться? Это, как ни странно, очень сложный вопрос, где люди теряют интерес к обучению и превращают его в нудную работу. А ведь мы имеем перед собой язык программирования! На нём же игры можно писать! И вот мой совет: попытайтесь написать игру. Я советую написать Minesweeper. Поверьте, вы используете при этом так много концепций, которые используются в реальных проектах, что вам будет значительно проще в дальнейшем. А организовав ещё и хранение игровой статистики для разных пользователей на бэкенде, вы вообще охватите всё. Вы можете сказать, что это же сложно для начинающего? Но в этом и прикол! Решая сложную и интересную задачу, вы по дороге изучите и закрепите все необходимые знания, которые бы раньше просто бестолково и нудно зубрили.
Успехов вам!

P.S. Я ещё подумал и нашёл кейс для применения нейронки, может даже целого агента. Но тут нужна будет дисциплина и понимание, что вы сознательно себя ограничиваете. При обучении бывает очень больно, когда появляется какая-то ошибка, и вы бьётесь буквально целый день, не понимая, что же происходит. Это может сломать некоторых людей. Так вот, даёте себе три часа на поиск решения проблемы с ошибкой, и если совсем нет идей, то идёте с вопросом к нейронке, указывая обязательно, чтобы она не писала код, а объяснила причину ошибки. Т.е. используете нейронки как джуниоры используют сеньоров на работе: обращаетесь за советом в ситуации, когда вы полностью застряли и совсем не можете выбраться.
Ответ написан
VoidVolker
@VoidVolker Куратор тега JavaScript
Dark side eye. А у нас печеньки! А у вас?
Да. Из рекомендуемой литературы почитайте ещё JavaScript-Garden, а для фронта — HtmlBook. Спрашивать у нейронок и им подобным не следует — получите неправильный ответ/совет и потом будете ему следовать и плодить непотребства, при этом ещё и сами ничему не научитесь. Лучше самостоятельно изучайте всё. Самостоятельные исследования, поиск и анализ — тоже часть учёбы, а так же очень важные и необходимые навыки, без которых дальнейший рост и прогресс невозможен.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Viji
@Viji
DevOps Engineer
Если все же хотите использовать нейронку, создайте проект и попросите в контексте, чтобы она не писала код за вас, а обьясняла сложные концепции простым языком. На инете есть примеры таких промтов
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы