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.
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.
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
A lot of times with a course I was studying there was just something I didn't get and it took a while for it to click, then once it did the rest of the course was cake. I had this problem with exterior derivatives. The text we were using didn't introduce or motivate them well so I ended up in the profs office for an hour once and he helped motivate it and after that the course was no problem.
With proofs there's a big jump to get over and often times the profs don't motivate what you're doing really well. I found a good book on proof technique was helpful because it helped me understand what I was reading. It turns out for most undergrad math you can break a proof down into one of a few patterns and once you know the patterns when you're reading a text you know what to look for and recognize the flow of the proof.
This is a good text on the subject
https://www.amazon.com/How-Prove-Structured-Approach-2nd/dp/0521675995
I'm 33 and I did not learn coding in school either.
<em>How to Prove It: A Structured Approach, 2nd Edition</em> by Daniel Velleman, is very good. He does reference computer coding, but no background in coding or proofing is required. Literally anyone can pick it up and get started.
I would recommend the book "How To Prove It".
https://www.amazon.com/How-Prove-Structured-Approach-2nd/dp/0521675995
It helped me in my transition into proof based mathematics. It will teach common techniques used in proofs and provides a bunch of practice problems as well.
For combinatorics I recommend: https://www.amazon.com/dp/9810211392 It is made for freshman college students, but is likely decipherable to people who know basic arithmetic and basic algebra.
For game theory I recommend: https://www.amazon.com/Games-Decisions-Introduction-Critical-Mathematics/dp/0486659437 Which is actually well written for non-math inclined people.
If you want a more advanced treatment, let me know, as these books just scratch the surface of these topics.
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'.
Yeah, I've just never been shown a problem where this stuff gives deep insight, and until I see one and understand it these are just gonna be arbitrary definitions that slide right out of my brain when I'm done reading them. I'll definitely give the book a look - is it motivated with examples?
The only book I have on category theory is Conceptual Mathematics: A First Introduction to Categories, and I must say, I'm not a fan of it - too intuitive, not detailed enough, not well organized, not formal enough - should have gone for MacLane instead.
Yes, abstract algebra will be useful for some parts. So will number theory.
You should definitely have some idea about algorithms and time/space complexity.
An introductory book like Katz - Lindell will be pretty self contained and it will be easy to understand having a math degree.
The first required one is Sets and Logic. Usually they use: How to Prove It: A Structured Approach, 2nd Edition https://www.amazon.com/dp/0521675995/ref=cm_sw_r_cp_apa_rE.eybZMYQ8NV If you want to take a peek before you decide to do math.
Check out this book: http://www.amazon.com/How-Prove-Structured-Approach-2nd/dp/0521675995/
You can definitely handle it and it'll give you a feel for exactly what being a math major is like. It's a lot of fun too. This material is the basis for all higher math. The things you do in the future are just more specialized versions of this.
If you enjoy math because you like solving puzzles and figuring out how things work, you'll love real math. If you like the idea of constructing arguments, you'll love real math. If you enjoy math because you like applying things that you've memorized and having immediate answers to problems, you probably won't like real math.
The way real math is written and taught is really fantastic. It's nothing to be afraid of once you get the hang of it. Proofs have a fairly standard lingo that's written in an inclusive and relatively unintimidating way. "We'll do this", "Suppose that is true." The math itself can certainly be intimidating but the prose is very welcoming. That might not be as true for professional publications but it's definitely true for almost all learning materials. For learning new things, almost every piece of information comes with a label. Definition, Theorem, Proposition, Corollary, Lemma, Proof, Remark. It looks very robotic at first but it's done that way to help you and it makes it much easier to piece together knowledge. I'm at the point now where, if my professor doesn't give something a label, I assign it one myself.
The stuff you're learning now certainly comes in handy but it's more of a toolbox for doing math rather than math itself.
edit: This is the style guide I used when I was first learning to write proofs, in case anyone is curious where all of that nonsense came from: https://www.math.hmc.edu/~su/math131/good-math-writing.pdf
220 - do all your projects early and don't cheat. this class will teach you how to really "program". start the programs early and you will be fine.
250 - i recommend this book: http://www.amazon.com/How-Prove-It-Structured-Approach/dp/0521675995
this book is pretty good when combined with barrington's "teaching" style. this book doesn't have all the topics covered, but if you find yourself struggling to understand concepts i recommend ordering this book (or find a PDF online of it) and just work through every practice problem you can. answers for a bunch are in the back. i think this book does a better job explaining conceptually what everything means in the class.
good luck!
If you go deep enough smooth infinitesimal analysis is based on category theory according to the main text on the subject.
The common metaphor is like a sequence of dominoes.
If
(1) You line up all the dominoes so that each one would knock over the next one
and
(2) You knock over the first one
Then they will all fall.
The first one will fall because you knocked it over (2).
The second one will fall because you knocked the first one over (2), and because the first one will knock over the second one (1).
The third one will fall because you knocked over the first one (2), and because the first one will knock over the second one (1), and because the second one will knock over the third one (1).
Mathematically, if you want to prove some statement about every number, say greater than or equal to 0, then you have to prove it about 0 and about 1 and about 2, and so on.
So what you do is you prove that if a statement about each number is true then the statement about the next number is true (1)
And that the statement about zero is true (2).
Then you've proved the statement about all numbers.
You've proved it about 0 from (2)
And you've proved it about 1 because you've proved it about 0 from (2) and because you've proved that if you've proved it about 0 then you've proved it about 1 from (1).
And you've proved it about 2 because you've proved it about 0 from (2) and because you've proved that if you proved it about 0 then you've proved it about 1 from (1), and you've proved that if you proved it about 1 then you've proved it about 2 from (1),
and so on.
For a text, I recommend Velleman
Just pick up an intro to proof book. Velleman's Book is well-regarded, or if you want something free you could read The Book of Proof.
> "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.
Book of Proof by Richard Hammackis available for free as a PDF; it is a great resource.
How to Prove It by Daniel Velleman is not free, but is another great resource.
I have the book Conceptual Mathematics on my shelf that is good for beginners but I found it was too advanced for me at the time. As someone with a math degree the book would probably be excellent for you.
I was literally in the same boat as you. Started at a community college, with the intent on going into engineering, and went into engineering having picked up math along the way. Ended up liking math a lot more than engineering, yet finished undergrad with both. Now, currently doing a PhD in pure math.
One book I’d recommend is How to Prove It. Accessible, yet definitely not easy. It really shows you what mathematics truly is. Definitely is a stepping stone into the world of mathematics, yet doesn’t require much background math.
Of course, no worries!
If you don’t mind suggestions, I highly recommend How to Prove It as a book to use when you want to learn proofs. I, along with many others, find this book to be very accessible (compared to other intro to proof writing books) and it also doesn’t rely on too much foundational math (e.g. you can probably read most of this without having taken calculus at all…from what I recall).
And yes, I agree that you shouldn’t rush things. Although don’t be too worried if you don’t understand 100% of the things you learn, especially the first time around. I think if you feel like you understand most things, you can move on to the next subject/topic and if you need, you can always come back to it later. Good luck and don’t forget to enjoy!
How to Prove It was the book I learned from and I enjoyed it. It seems that that’s the general consensus for others as well.
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.
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
Traditional calculus, based on set theory, is plagued by antinomies stemming from the inherently punctiform nature of set theory. It forces you to pick an encoding of a "continuum" as a "set of points." Naturally, this is both tortuous and torturous!
You might find An Invitation to Smooth Infinitesimal Analysis more straightforward, and the full book actually refreshing.
I suggest starting with:
https://www.amazon.ca/How-Prove-Structured-Daniel-Velleman/dp/0521675995
This will remind you of the foundation of math and how predicate logic dictates syntax, and obviously how to prove things.
If you need to work through functions again, do this first, but then I would immediately jump into analysis and I suggest this great book:
https://www.springer.com/gp/book/9781461599906
After that, it's really just about picking the right textbooks. Obviously my advice is more tailored for pure maths.
In the mean time, pick up a textbook on proofs, and start learning about logic and reasoning. That will help you build the foundation to take upper level math classes, and also get a better taste of how higher studies of mathematics will be different from calculus.
Here is an example. https://www.amazon.com/How-Prove-Structured-Approach-2nd/dp/0521675995/ref=sr_1_2?dchild=1&keywords=how+to+prove+it&qid=1603559367&sr=8-2