Really missing the basics here

So I can make a basic website or a full-stack application. Even if it isn’t great. I can understand how to “build” something, but there are a lot of other things I need to learn like creating unit tests, learning about efficiency, design patterns…etc.

But there are some fundamentals that I feel like, even after a 6 month bootcamp and an additional year of learning here and there that I’m just not really grasping.

Like what kind of operations to put on the front end versus the backend/server. Like data and what’s more efficient. I.e., if I want to make a web scraper to add something else to a user’s profile for an app I’m thinking about… whether it would be horribly inefficient to put that on the backend.

Things like testing server loads and simulating tons of users on my server making calls to the database and going about making something more optimized for handling that.

Then, just basic algorithm challenges and data structures. I’ve attempted fairly recently to learn about data structures beyond just objects, arrays, etc.

But I find myself really struggling with logic in general, on even the “easy” questions on Hackerrank. (Which I prefer a lot less than LeetCode due to the clarity of the input and questions in general.)

They say this stuff comes with practice, but I feel like I’m just never going to get to that point. I feel like I consistently struggle with reading comprehension, whether it’s docs or algorithm challenge explanations.

I don’t know. When do you sit back and realize that you’re just not good at something and accept it? That you’re not smart enough or your brain just isn’t wired to think on that level?

2 Likes

If you can build a full-stack app, then yes, you are doing well.

The fact that you think there are some things that you need to work on - that is 100% normal and 100% a great thing that you realize that. Some of the things that you mention of more advanced topics and while I’m sure you can find some good training materials out there, many of them are things that you won’t understand until you get on the job. Things like testing, whether things go on f/e or b/e, testing server loads. It would be helpful to get a little exposure to these things, but ultimately it’s an on the job kind of thing, imho.

Things like algorithms and algorithmic efficiency - those are more theoretical topics that you can study on your own - or with course materials. They are useful to learn and understand, but I think of them more as calisthenics for your coding brain. For some people they come easy, for some they take work, but everyone gets better with time and everyone can benefit. Just keep doing them - there is no magic formula. Look for youtube explanations for various algorithm challenges (preferably after trying them). But don’t beat yourself up if you aren’t good at algorithms (yet) - there are a lot of great web devs that struggle with algorithms.

I think design patterns just come with experience. You need to expose yourself to them. Do some build along tutorials online and see what they do.

I might suggest trying to find some people in the same boat and work on a project together. That is an important skill. See if you can find a meetup to talk to other people. Have people review your code and apps.

But just keep building and doing tutorials. Just keep learning. I picked up a couple freelance jobs that really built my confidence when I was about at your point.

I feel like I consistently struggle with reading comprehension, whether it’s docs or algorithm challenge explanations.

Yeah, I see this with a lot of younger devs (sorry, I don’t know your age). We live in a society that values things like reading comprehension and deep focus less and less. Those are important skills for a developer. But the reading gets less and less. I don’t often have to sit down and read 30 pages of docs but have to check things often. And algorithm challenges can be hard to read - they are often not written well. This mimics things like user stories and requirements you will get on a job, but of course on a job you can ask for clarification. But my general advice is just to read - nothing builds reading comprehension and reading stamina better than simple reading. Read things you enjoy. I might also suggest books like Deep Work.

I don’t know. When do you sit back and realize that you’re just not good at something and accept it? That you’re not smart enough or your brain just isn’t wired to think on that level?

I don’t know man, that’s something you have to decide for yourself. But I think you’re being a little hard on yourself. I think the most important question is if you enjoy it or not.

1 Like

I will also say that 18 months in, I also had no idea about testing, whether things go on f/e or b/e, or testing server loads (and actually still haven’t done much server load testing). And I’m a professional software developer and only think of myself as decent at algorithms and efficiency (things like big O). To be honest, it doesn’t come up that often. And when it does, I just bounce my ideas of coworkers.

2 Likes

Thank you, Kevin.

I’ve spent a few days plugging away at this medium challenge and haven’t gotten it yet but maybe eventually.

It’s good to know that you didn’t have as much experience with some of those things until later. It’s difficult knowing what kind of expectations are there and what to focus on to increase your chances. Maybe I’ve spent too much time focusing on everything I don’t know, don’t have experience with, haven’t built and it’s just led me to feeling overwhelmed with an exponentially increasing list of things I feel I need to do.

I did go through a tutorial phase for a few months this year, with React Native and some Docker. I definitely learn a few things from them but is it job level knowledge and something I can list on a resume? Probably not.

As to the final bit, that’s one thing I’ve struggled to really come to terms with. When I was in class I was enjoying learning and even shortly after. I’d build things in my free time for a few months after graduation, then the 6 months mark went by and my phone screenings started turning into ghosting, the rejection emails started rolling in, then another 6 months went by and I stopped getting as many phone screenings and more rejection emails, then another 6 months roll by and here I am spending a week on algorithm challenges and struggling to fight back the feeling of hopelessness enough to actually get started on something.

It’s difficult for me to write it off as something I’m simply not passionate about and claiming that as the reason as to why it’s so difficult for me to get motivated enough to grind for 12 hours a day though because I’ve never been innately passionate about anything. I’m not passionate about my current job but I’m constantly looking for ways to improve, to learn, to make it better for everyone that I work with. I put in max effort because I’m passionate about simply doing the best that I can. I’d have to imagine I’d feel similar if I were able to break in and put all of this pressure behind me from the actual job search. It’s just been so demoralizing.

But aside from these algorithm challenges I’m thinking the best approach at this point is to find something to build that I might be passionate about. For awhile I was obsessing over tutorial videos of things that I thought I would grant me better odds at employment, or building things I wasn’t overly excited about because I thought it would look better on my portfolio. It became entirely about the job search, and then when that never went anywhere I started to lose whatever passion I had during bootcamp.

As to freelancing, it’s definitely something I need to look into. I’ve always suffered from low-self esteem and realistically have little experience doing anything other than working in low level jobs where I just do as I’m told. The idea of actually reaching out to someone, thinking about something like a “contract” or evaluating how much my time is worth just feels so foreign to me. Not to mention the confidence to be able to tell someone, look, I CAN do this. And I probably could, but there are also the other unfamiliar aspects to it like… is this really good enough for me to accept payment for?

I redid a website for a local business, just because I wanted to, and it looks better than their original but I’m still too nervous to even mention it to the owners. I used to design promotional material like painting murals/building props for upcoming films at a movie theater when I was younger and had people offer to buy certain things or pay me to paint something in their house… but for some reason something always kept me from saying yes. Self-esteem? Confidence? Maybe I just felt like I wasn’t worth it? Or was going to mess something up?

Thank you for your input though. And yes, the collaborative effort is something I haven’t done in quite awhile so I do need to find some way to get used to other people’s code.

2 Likes

I think this doesn’t depend on your trade, more on your skill level.

As a beginner you just don’t know enough to make own decisions.

First you should check if there is a cognitive bias in your thinking.

I see this story a lot here on the forum:

  • they start having a look into programming
  • they do it for ~5-10h per week, mostly watching youtube and copying other peoples code and thoughts
  • they do this for 6 month and ask theirselves why they can’t build facebook on their own

Some problems:

  • time ranges (6 months) don’t say anything about the invested hours
  • invested hours don’t say anything about deliberate practice hours (doing the hard stuff)
  • there is a big difference between shutting down your brain while watching other people do stuff and active learning while problem solving
  • why do people think that programming just needs 6 months to be employable, but for every other trade you go to school/college for like 3-5 years?

I think people should see this a little more realistically.

Coming back to maybe my brain not wired. If you think your brain is currently not wired to do this stuff, I think there is only one solution: practice.

E.g. do this:

This is very undervalued. Sitting at a desk and reading. No smartphone, no internet, no other distractions.

2 Likes

there are a lot of other things I need to learn like creating unit tests, learning about efficiency, design patterns…etc.

That’s true. And it will still be true when you’re decades into a successful development career. Continuous learning is a great part of our trade.

Like what kind of operations to put on the front end versus the backend/server.

There’s a Wheel of Reincarnation in our trade. It turns about once a decade or so. At one extreme it has thin clients and thick servers. In today’s lingo that means “server rendering”. In these cases the experience you deliver to the user’s web browser is mostly HTML and CSS, with just enough JS to get the job done. At the other extreme it means a thick client and a thinner server. React apps, where there’s lots of logic in the client (the “React front end” in today’s lingo) are a great example of this structure. The server sides of React apps tend to be APIs that handle the data and business logic.

So what you learn here at FCC has its code divided between client and server. The way operations are allocated between client and server will change as the Wheel turns.

But one thing doesn’t change much: Data – your organization’s data – lives on servers. And the volume of data in most orgs, by now, is vast. It’s many orders of magnitude larger than you could possibly load into even a very complex client. So, searching / selecting data for your user will always be a server function.

Like data and what’s more efficient.

It’s said there are two hard questions in Computer Science: naming things and caching things. Both of those are data-efficiency problems. It’s good you understand that data efficiency is hard. Because it is, and it will remain so.

I.e., if I want to make a web scraper to add something else to a user’s profile … whether it would be horribly inefficient to put that on the backend.

Think of it this way. When you put code on the front end you’re sticking your user with the power bill to run your app. When you put it on the back end you’re paying the power bill yourself. But when you pay the power bill, you gain control over the environment.

Scraping a web site from another web site’s client can run into CORS trouble. Look it up.

Things like testing server loads and simulating tons of users on my server

Ahh, load testing. Maybe that’s even harder than naming and caching. Place I worked recently had a customer insisting they would load test our servers. It turned out they spun up ten thousand EC2 virtual machines on AWS to do that, and it cost them more than US$100K. We did fine in the load test, except for the second where they hit us with 5.000 concurrent requests to log in to our app. It was generous of them to invest that much in load testing: it helped us improve our stuff, a lot.

Again, it’s great you understand this is hard.

making calls to the database and going about making something more optimized for handling that.

There’s a whole professional field called “database administrator” dedicated to solving that problem day to day. And, another called “database designer” or “database programmer.”

I feel like I consistently struggle with reading comprehension, whether it’s docs or algorithm challenge explanations.

You’re not alone. Everybody struggles with this stuff.

When do you sit back and realize that you’re just not good at something and accept it?

You have reached the point in your learning where you are starting to understand the scope of what you don’t know. That’s great. It is a HUGE milestone for you. You’re starting to do “systems thinking” about your programming problems. That ability is rare and valuable.

Please don’t take it as a sign you should give up, because the opposite is true. Keep going.

1 Like