I'm around 40 and I struggle with the exact same issues, at least with algorithms (I'm pretty much OK with data structures).
Funny thing is, I've enjoyed doing things like Project Euler just for fun, and I can usually work out an algorithm given a little time and the ability to work on my own in an environment I'm comfortable in.
But put me in front of a white board, or phone interview, with one or more impatient interviewers in front of me? I'm toast. Many of these interviewers were studying these algorithms in depth in school only 4 or 5 years ago.
Anyway, I've resigned myself to the fact that I have to earn my own living by freelancing and side projects. I'm doing OK with that, and I hope that an upcoming side project will provide even more financial stability.
Have you considered starting your own company? These days, you don't need much.
Older programmers can do just fine in those algorithm tests, if they have been programming recently at their day jobs, and not PM/managerial work. Years of 8 hours of programming per day is actually good practice. They might have to brush up on Big O notation. :)
My role is similar to yours too. But I'm not confident of solving tough algorithmic problems under deadlines yet. I'd rather work on a side project which involves designing and implementing neat algorithms.
That is a very familiar pain to me. I started programming when I was ten and kept up with it since, but my education was not in programming (although I would take courses as it suited me), so I never had any formal training in data structures or algorithms. I have occasionally found that I had re-invented some known algorithm and wondered just how much difficult I would have been spared if I had known about it in the first place.
Ha I'm too scared to try to get a job, because I suck at algorithms. I can develop a product, but I don't have a degree and I cannot do that algorithm stuff well at all.
You are not alone. As the founder of garage script I've come across a few students who got a CS degree and couldn't find a job. The problem might not actually be your ability to solve algorithm, but rather your inability to communicate. For the students who came to me with similar situations, I had them lead coding sessions at our local library to help them get more comfortable with talking to strangers and they now all have a full time job. From my work experience as a tech lead, I've hired many people who didnt do well with algorithm questions but they were able to listen to my suggestions and get to an answer.
Maybe start a Meetup group and work through problems with other people?
I like algorithms and coding competitions, but in my 22 year career in software engineering I have never had to code any algorithm myself, except in numerous job interviews.
As for data structures, the only one I occasionally need to code myself is a simple tree.
You're saying you can demonstrate that you have the knowledge to do the problem, but you can't actually do the problem? I'm 43 myself, it's not something I do for fun but I can certainly code up a DFS/BFS implementation or something similar in 40 minutes. With a modern IDE it's not unreasonable for me to expect it to work correctly on the first try.
Maybe it's because I've come from a more mathematical background, but I'm pretty much exactly the opposite. I'll see the problem, come up with an algo in my head to solve it and then the actual programming is just a remaindered implementation detail.
Obviously it helps if you know the final language well when you're coming up with the solution, but ultimately the algorithm is the only difficult bit.
Same. I’ve been in the industry for over a decade and the only time I had to implement an algorithm/ds like b-trees or quicksort has been at the university.
Usually, what companies want is people that can handle db failovers, deploy k8s services, know how to talk to business, and write good enough code. It’s sad, but it is what it is.
Interesting point. The most capable junior programmer (in experience) I know has a math degree. Algorithms are basically obvious to him and he has no trouble solving tough problems quickly.
The thing that gets in his way though is that his soft-skills are the absolute worst and he still can't get through an interview to get hired anywhere.
Yeah i'm struggling with this aswell - I basically dropped out of the danish HS-equivelant.
I think i'm a pretty decent coder, but i have next to none experience with algorithms - Usually i'm pretty good at learning new things just by trying out and reading up on them (server management, new languages etc).
Algorithms is the one that really seems to require an education, i'm having a hard time learning that stuff on my own - But i'm giving it a go by working my way up to linear algebra on Khan Academy and reading examples on Naive Bayes etc.
sure, for the first 20 years that I was a programmer, I really couldn't wrap my head around algorithms at all. It took concerted effort (I'm a slow learner) and repeatedly reading books, talking to people, writing code and having it reviewed before I felt comfortable with hash tables, etc.
Sounds to me like you're focusing on the wrong things or don't have the right resources for the task at hand. (that is, I don't think I've ever had to brush up on a proof for any algorithm or data structure when prepping for interviews)
Take it from someone who also had a shit background/education in math/CS and had to teach myself a lot of these things from scratch - it's doable, you just need time, and I guess the mindset that you can learn these things. See my comment history for some book recommendations. If you really feel like you need to learn things from scratch to give yourself the confidence of having a solid foundation, look at some of the intro computer science courses on Coursera. When I realized most of my uni's cs courses were... not great, I just ended up going through courses like Stanford's Introduction to Algorithms on Coursera and teaching myself.
I can also tell you as someone who was in Seattle for a while and had a bunch of friends at Amazon, I don't think anyone is going to think less of you, if anything, being able to survive at a place like Amazon seemed to be recognized as its own accomplishment...
edit: I'll also add (from personal experience), if it still feels like these things are difficult even once you feel like you have all the right resources, look into seeing medical professionals to make sure you're not being held back by anything, like sleep apnea, any cognitive disability (not sure if that's the right term...) etc
As a web developer I've lately been noticing this problem as well. Pretty much everything I do lately is about integrating this or that API, producing a little bit of glue code and that's it.
Even working for startups mostly doesn't solve the problem ... what I need is a good algorithmic challenge. Something fun and cool.
But I fear I might have lost the ability to even design algorithms due to all this tools stuff.
I'd say you'd be far better off deriving your own algorithm every day.
Make something to solve a real problem every day of your life and you'll be far better at solving problems then other people. I'd rather be able to do that then just parrot back sorts, graph traversals, and what not.
I am a 29 year old self-taught developer. Like you, my experience lies primarily with ruby and javascript (though I have developed a habit of doing project euler problems in clojure).
1) Practice. Glassdoor is an indispensable tool for this. For example, if you're interviewing at Facebook, you can basically compile a list of the algorithms that have been asked and practice that set, until you have it completely down. Rehearse in front of peers, friends, pets, inanimate objects, whatever. You can likely find a working solution to any of these problems on stack.
2) Yeah, they are pretty important, but probably not to the degree that they are emphasized in the interview process. For example, a common theme in algorithm problems is finding a solution which works within a certain time complexity (linear, log, etc). In practice this often reduces to the following situation: You are doing some calculation which involves a bunch of nested for-loops. Eliminate one of the inner for-loops.. or something to that effect. So yeah, it's important practically. It becomes more important when you're dealing with millions of records and terabytes of data, and an extra for-loop could mean that your program effectively runs a month longer than it should.
3. The only online course I took for CS stuff was a MIT open-courseware class on Algorithms. Additionally, I highly recommend the book "Algorithms" by Robert Sedgewick and Kevin Wayne.
Funny thing is, I've enjoyed doing things like Project Euler just for fun, and I can usually work out an algorithm given a little time and the ability to work on my own in an environment I'm comfortable in.
But put me in front of a white board, or phone interview, with one or more impatient interviewers in front of me? I'm toast. Many of these interviewers were studying these algorithms in depth in school only 4 or 5 years ago.
Anyway, I've resigned myself to the fact that I have to earn my own living by freelancing and side projects. I'm doing OK with that, and I hope that an upcoming side project will provide even more financial stability.
Have you considered starting your own company? These days, you don't need much.
reply