Is there a concrete gauge for those of us learning new frameworks that we've reached a professional level of understanding? For those already in the industry, how do we quantify that?
Oh, for anyone who doesn't know, my name is Maureen! I am a student at the University of Toronto studying Kinesiology, but self-teaching myself software development. I am based in multicultural Toronto 🇨🇦. Yes, I am straddling two different worlds and I love it ❤️!
Alright, sorry about the backtrack! Let's get on with my discussion...
Let's break it down at the basic level - programming logic and fundamental skill sets that can make or break a candidate's interview? This piece is incredibly fundamental to any developer out there. Regardless of whether you're front-end or back-end or a generalist, this forms the core of our work. Many platforms using online quizzes like TripleByte and Leetcode set out to solve these very problems and perhaps they've gotten it right.
Still, I think we can agree that, even for seasoned devs, the tech interview process filled with its conceptual questions to algorithms to programming problems, can be heavily biased and skewed. Some argue a candidate's performance in an interview (like what we'd call "white board programming") is not representative of an individual's general skill set. Gender/racial bias can also critically affect whether a candidate gets the job.
So, by now we've all learned a programming language or two - that's usually where most people start in programming, whether you're in a CS degree (lucky you... kidding) or self-teaching like me. Now what? The next step seems most obvious - pick up a framework in the language(s) you know. So, under the previous assertion, even if we fully mastered a language, does this so-called "mastery" still apply for frameworks? These skills (especially Object-Oriented Programming) will hands-down come in handy when moving on to frameworks.
"comprehensive knowledge or skill in a subject or accomplishment" - simple Google search
What does "mastery" look like in our industry? The above definition from my quick Google search turned up very vague. Is it the speed of your coding? Data Structures? The depth of your knowledge about the industry? The type of person you are? Is it how well you understand Design Patterns? Time Complexity? Huh? The tech industry is shifting and adding new languages (ever heard of Dragon?!), with new frameworks popping up at break-neck speed - there are just so many nuanced concepts out there that prove no way for us to fully understand what makes someone a master at xyz.
In short, maybe we could break this topic down logically into a list of general concepts! Bear with me down this rabbit hole of philosophy...
Let's say we start with a programming language like Python as number one. Let's pick out the core concepts of the language (well, any language really) - variables, loops, memory model management (anyone?), data structures, control flow, higher-order functions, functions, built-in types, and objects & OOP. Are we good here? Is that all? At least at the moment of writing this. This makes sense as any language shares these fundamental concepts.
So, this should be all and well - mastered or "proficient". Let's move on - a framework! Now, this is where the world of programming really opens up to you! What about a framework is crucial to mastery? Hmm, in the case of Django, maybe the admin page, the APIs you want to work with, the model-view-controller architecture (Django is often argued to be more MTV), HTTP requests, a database. Okay, that's it? But, remember this is a framework, which is backend, but backend is a whole other thing! Should we then go on to learn about database maintenance/design, data validation, security, and handling user-related info safely? I would say that these extra aspects are fully useful in and of themselves. Wow, that's really a lot already.
What about the user-facing elements? Lots of great frameworks to choose from (such as Bulma CSS and Nuxt.js, and more)! Here, we learn to integrate our backend with something prettier to the eye (backend would be our bodyguard - we don't see them but they protect us). So what entails knowing, in this case, a front-end framework really well? We could say handling requests, async/await, Promises, sanitizing user input, URL routing, and creating complex UIs. Did I hit all of them? But again, just like backend, we have a whole lot more to front-end like HTML/CSS/, icons, graphic design, Design Patterns, UI/UX, colour theory, etc. Do we need to know all of this and the above? And to make this more head-spinningly complex, I was able to create a website (currently in the making) by routing the static pages without needing to dynamically route anything (Note: the framework I used was Nuxt.js so they are able to do static and dynamic routing)! So, even if I made that website, does it mean I'm comfortable with my skill level if I look on StackOverFlow and see others asking about async/await requests because their application needs it, not mine?
And... what about testing? This is integral to a professional developer's skill set. But as we see, this is so much to learn!
Maybe this is why our industry has these themes broken down categories like backend, frontend, and full-stack. Still, does this solve anything? It gives us a general blueprint to work with but it doesn't give us the user manual for what we need to know to be at a "professional standard" (e.g knowing Django well enough to be "professional").
Whew! Thanks for bearing with me up to this point. Just a bit more and then you're free to comment, get a coffee ☕️, or get back whatever you're doing 📚.
In conclusion, would we need to know every single aspect of a framework (know it inside-out) to be considered professional? Even if we base it on the condition of "being comfortable with using x framework", how do we know we are good enough to apply for interviews, or have mastered it? I wrote earlier that we can make a website without dynamically routing anything at least up to the functionality I want of my website. Does that mean I'm comfortable with it (yes, I could learn more about the parts of a framework I don't know yet)? I understand that whichever category we choose - front-end, backed, full-stack - we can learn what we need to within those bounds. Especially going full-stack while self-taught, I am quite protective of the term "self-taught" and often wonder just how much we need to know of a framework or language to be proficient or employable.
Thanks for listening and definitely do leave comments below! This is my first post so let me know if things work for you 😊