Creo que mucha gente se confunde ser autodidacta con hacer algun cursito de como hacer una web y darle con eso. Para llegar a cierto nivel, tenes que aprender computer science, teoria y trabajar en cosas que te permitan aplicar esa teoria. Tenes que saber ver un algoritmo y poder calcular la complejidad, tenes que entender que son las patrones de diseño y cuando conviene aplicar tal o cual.
Tenes que entender como funciona OOP, pero tambien tenes que aprender algun lenguaje funcional, te va a hacer un programador más rico.
Tenes que entender de Unit Testing, automated testing, Integration testing.
Los dos libros que más me ayudaron cuando empecé en computer science son : https://www.amazon.es/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693 y https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612
Y ir codeando mientras vas leyendo y aplicando las cosas es fundamental.
Me parece que la diferencia entre ser autodidacta es que no tenés esa vara minima que te da la facultad, asi que depende de vos que tan crack queres ser y si estas dispuesto a poner el laburo y a aprender cosas constantemente. La información esta en internet o Amazon, no hay ningún secreto.
Your resume sucks given your 20+ yrs of experience. Also, being a Co-Founder is a big title. It is usually 3 categories:
I'm afraid companies are viewing you as a #3, which is a big negative.
Read these books. Even though you have the experience, companies nowadays like to ask irrelevant "whiteboard" questions which have very little to do with the day-to-date of the position.
I also hate the way interviews are nowadays but it is what it is.
Given your experience, and likely skillset which you fail to advertise, I recommend these titles:
Good luck. Also, yes, $180k is very much possible in Seattle.
> Nothing to do but apply my man.
No. OP is rusty and will most likely not pass technical interview questions without a review. https://exercism.io/ is great for this. Doing a few of those, before interviewing is helpful to get back into the spirit of things.
It depends on the role one is applying for, but if comp sci questions might come into play during an interview. Elements of Programming Interviews is a great way to review and find any holes in ones knowledge when it comes to algorithms and data structures for backend dev roles. Web dev doesn't usually use comp sci as much.
OP will be asked why there is a gap. "Due to mental health, family problems, and a general lack of jobs in my area" is not a good answer. Instead, "I chose to help my family after I graduated." is a much better answer.
OP realizes there are not jobs in their area, so applying for jobs everywhere is a solution.
>Due to mental health
/u/digital_desperation I know how it is. I hope you've gotten or will get the help you need. Psychological stress never has to be a permanent problem.
Regardless if you have or have not gotten help, it's not a good idea to not talk about mental health during a job interview. I'd skip the subject entirely, but that doesn't mean people don't care.
The Book of Why by Judea Pearl
"Correlation is not causation." This mantra, chanted by scientists for more than a century, has led to a virtual prohibition on causal talk. Today, that taboo is dead. The causal revolution, instigated by Judea Pearl and his colleagues, has cut through a century of confusion and established causality--the study of cause and effect--on a firm scientific basis. His work explains how we can know easy things, like whether it was rain or a sprinkler that made a sidewalk wet; and how to answer hard questions, like whether a drug cured an illness. Pearl's work enables us to know not just whether one thing causes another: it lets us explore the world that is and the worlds that could have been. It shows us the essence of human thought and key to artificial intelligence. Anyone who wants to understand either needs The Book of Why.
Here's my strategy: Divide your time between working on algorithm questions and a passion project every day.
For starters, set a daily goal of answering ONE algorithm question on leetcode/firecode.io/CTCI/book/etc - your choice. After that, move on to your project and work on that until you get bored. Rinse and repeat each day.
The project could be ANYTHING and use ANY KIND/TYPE of technology you want, however, I encourage you to work on something that could solve a problem in your daily life (a better alarm clock app, a surveillance system for your front door using arduinos, etc.) using a stack that has a large community (RoR, React Native, etc.).
Once you start getting comfortable with the questions, increase the amount that you do each day by one. You should also start seeing progress on your app which should snowball from there.
Skiena's Algorithm Design Manual - It gives you an overview of what classes of problems exist and how real world problems can be expressed as instances of them. It doesn't always give you the step-by-step directions of how certain algorithms work, but it gives you enough of an overview to understand the problem and points you towards existing implementations.
It's certainly one of the most useful books I used when preparing for interviews (and comes in handy in the real world as well). As an anecdote, in one interview at a big-N company, I was presented with a problem, said "based on these factors I'd treat this as a network flow problem by doing X", and that was the only buzzword needed - rather than watch me try to write a solution to a known problem, we were able to move on to other questions. Without knowing that term, I probably would have spent the remainder of the interview trying to optimize a solution to the problem instead.
The textbook is usually Discrete Mathematics and It's Applications. Don't let the bookstore fool you, the sell the "UCF Edition" for an inflated price. The only difference is an additional introduction. Here is an Amazon link where you should be able to find a reasonably priced used copy. Alternatively, here is a link to a PDF copy that you can have for free! Enjoy =)
leet code is a great place for practice problems
For algorithms this book is great https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ref=sr_1_9?keywords=algorithms+book&qid=1554149281&s=gateway&sr=8-9
Also, if you are looking for a software engineering role you will also need to brush up on high level design like this video: https://www.youtube.com/watch?v=KmAyPUv9gOY
This is pretty much the bible of cryptography technology https://www.schneier.com/books/applied_cryptography/
also on amazon https://www.amazon.com/Applied-Cryptography-Protocols-Algorithms-Source/dp/0471117099
I hope I'm not out of line with any assumptions i.make but you NEED a solid understanding of discrete mathematics. https://www.amazon.com/Discrete-Mathematics-Applications-Susanna-Epp/dp/0495391328 cover most of what you need. For data structures and algorithms this open source free course beats any online course I have seen yet AND covers all of what most colleges need: https://opendsa-server.cs.vt.edu/home/books
That's not how causality works.
Causal modelling is a whole rabbit hole. Check out this book for an intro: Judea Pearl - The Book of Why
Ah, the Bible of Algorithms. It's a good reference but never understood why many professors use it as an introductory textbook when it assumes some previous knowledge despite saying otherwise. The Algorithm Design Manual by Skiena offers better explanations along with a short intro on math notation but might still be problematic without any background. Schaum's Outline of Discrete Mathematics has a good overview of discrete math with lots of practice problems. Other than that it might be difficult finding a good book since they tend to be all over the place on what they consider 'discrete math'.
Sunt self-taught. Daca m-as apuca din nou de invatat, as incepe clar cu C si as prioritiza fundamentele mai intai. Imo, e cel mai bun limbaj pentru a prinde eficient concepte care-s foarte abstractizate in limbajele high level.
C e suficient de high level sa nu-ti stea in cale si suficient de low level ca sa-ti formeze o gandire cat mai corecta asupra limbajelor de programare.
Pe langa asta, recomand si urmatoarea carte:
https://www.amazon.com/Discrete-Mathematics-Applications-Susanna-Epp/dp/0495391328
> "Dynamic Programming", "Linear Programming" or "Operations Research", that were mentioned in some threads, are terms I've never even heard about.
If you haven't heard of dynamic programming, then it's not surprising you're struggling. Many of the later problems are easy to solve if you know the trick, and for most of us, most of the time, knowing the trick comes down to recognizing something we read in a textbook.
People who do well on the later days have, pretty much without fail, gone through at least one algorithms textbook and really mastered the material there. Jumping into the later days of AoC is a lot like taking a multi-day exam in algorithms. It would be pretty nuts if you could do well on that without studying it first.
If you do want to learn this stuff, get a textbook! I really like Skiena's Algorithm Design Manual. I've never taken a comp-sci class in my life, but most of the later days in AoC I'm basically just using one of the things I learned from that book.
If you're concerned about interviewing, and haven't already worked through it Cracking the Coding Interview is a fantastic resource. It'll also help you do better on AoC. Read Skiena first though - Cracking the Coding Interview is more of a practice resource for people who have already studied algorithms, not a first course.
+1 on the book and practice. I took the undergrad course in 1999 in C++ but didn't really "get it" until a few years working and using the above book. The pseudo code examples were much easier to follow than the prior C and math heavy books. I still use it for reference in addition to this book: https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202
I enjoyed The Algorithm Design Manual, as someone that's self-taught. Skiena has a good mix of war stories and visualizations that most algorithm texts lack.
He can still go a little overboard with the math-adjacent variable-naming and notation at times, but it's also usually explained visually or concretely elsewhere in a way that makes the abstract form easier to work through.
Honestly, this is probably a bit of a tough problem for someone without a decent background in data structures and algorithms. If you're feeling lost, I'd encourage you to work on problems that are a little simpler initially.
You don't need to take a formal class to learn this stuff, but you should be aware that most people who can solve problems like this will spent a semester learning the tools used here.
If you're interested in self-study, I'd recommend Skiena's Algorithm Design Manual. It covers, among (many) other things, backtracking algorithms, and, I think, Knuth's dancing links algorithm. I personally never took any CS classes, and found the book really fantastic for catching me up on a surprisingly large fraction of what actual CS majors know.
The Book of Why
https://www.amazon.com/Book-Why-Science-Cause-Effect/dp/046509760X
Statistical Rethinking
https://www.amazon.com/Statistical-Rethinking-Bayesian-Examples-Chapman/dp/1482253445
Yeah - you'd generally learn this stuff in a class on data structures and algorithms.
For self-study (I've never take a class myself), I found this textbook really helpful - there's a whole chapter on graph algorithms.
It's not a matter of computing power necessarily. We miss a piece of the theoretical puzzle here.
Check out this book if you're interested in where the biggest innovations still have to be made in computer science:
https://www.amazon.com/Book-Why-Science-Cause-Effect/dp/046509760X
I would recommend you to learn back-end. With your experience it shouldn't be too hard. If i were you i would start with https://www.oreilly.com/library/view/designing-data-intensive-applications/9781491903063/ and https://www.amazon.co.uk/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836. If you can complete these books you can easily land a job in FAANG/top tier company.
I spent some time spinning my wheels on leetcode. It was not two years of daily study like the other comments suggested, but enough that I realized it wasted after I tried another tactic: I got an algorithm textbook (this one that dove into the fundamentals of why these algorithms worked. Hacks with hashmaps and two pointer solutions are easy to get once doing enough of them, but learning nuances of common graph algorithms/ DP and why the can prove certain properties was super helpful
It's great to see this. Deep learning models currently rule the world, but they are based entirely upon statistical correlation, and don't have representations of objects or classes and the causal relationships between them. In the meantime, the science of causal reasoning has been making serious progress in the past decade or two. They will need to be combined in order to create grounded models that can generalize.
For those of you who have not been following causal reasoning, I'd recommend the following books:
For a more popular and historical account, you can read:
For an introduction: a "discrete math" textbook might be helpful. When I took discrete math in undergrad, I used the text by Epp (a few editions ago). It was a nice introduction, and also covers some baseline information that's useful if you're starting entirely from the ground up (e.g. truth tables, methods of mathematical proof, basic set theory, etc). If you're more familiar with statistics-ish math, some introductory probability texts will also cover some combinatorics (I don't have a good recommendation off-the-cuff tho).
For a more in-depth, applied approach, Concrete Mathematics by Graham, Knuth, and Patashnik is a really great text. It has a fairly steep learning curve and is targeted at an upper-undergraduate level, particularly for computer science students (though I know CS grad students who would probably find it a challenge too), but you'll know a lot more than the basic "how to count balls in buckets" stuff from an introductory discrete math or probability text after going through it.
Based on how you're asking this question, I'd guess the above options should satisfy what you're looking for. But, if you're aiming for even more advanced books in combinatorics: If you want to approach it from an algebraic perspective, works by Stanley are really solid. From an analytic perspective, the gold standard is Analytic Combinatorics by Flajolet and Sedgewick.
I'd recommend graph theory as a way to learn about real math (by which I assume you mean more abstract math that is less focused on computation and more on learning to develop conjectures, prove them rigorously). One advantage of graph theory is that the prerequisites for it are fairly simple, not like say analysis where a lot of it won't make sense if you don't have a good background in calculus. Another is that the material has a ton of practical applications (assuming you will care about these eventually) in Computer Science and Electrical Engineering.
There are many books out there on this subject, I like this cheap dover book.
This was recommended by my very adept discrete math prof (don't worry, he's not the author). The excerpts I've used are good. The reviews make it seem pretty hit or miss, but textbooks tend to be that way on amazon.
I wish I had more to offer you. That sounds like a hard situation.
Are you averse to learning more web-related technologies? If I worked for a company that didn't respect my time like that, I would do the bare minimum to not get fired and put all my extra energy into learning new, more marketable skills.
FWIW - https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ref=sr_1_3?crid=DMY3RYJUI0PN&dchild=1 is my go-to book for interview prep. It is framed in a way that helps you practice pattern matching of common computer science problems to options for data structures and algorithms that solve those problems. I have always done extremely well with whiteboarding/fast algorithm questions when I am grounded in the concepts of that book.
this is my go to book when prepping for interviews: https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202
the whole book is framed around pattern recognition of common CS problems and options for solutions to those problems. It's a great way to practice for interviews where you have little idea what type of problem you're going to be presented with and will be expected to think quickly.
Data structures and algorithms are definitely useful. So is math and general problem solving techniques. There are some books for competitive programming you might wanna check out, like https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202 (I haven't read it.) Language doesn't matter so much for competitive programming, especially if you are practicing. If you enter a competition you might be better off with a faster language, but that depends on the competition.
This is certainly a true statement. In my experience, though, students would generally do better with something else; Susanna Epp's book Discrete Mathematics with Applications is generally better; less rambling, and fewer cases where they jump from simple to nonobvious results with no explanation.
While not the only source for such things, check out the relative Amazon reviews from verified purchasers:
Rosen: https://www.amazon.com/Discrete-Mathematics-Its-Applications-Seventh/dp/0073383090