User Controls
Real talk: algorithms and data structures
-
2016-08-06 at 2:57 AM UTCHow important is this shit, really? I'm conflicted because I could spend my time either making apps and websites to try and make money or I could try and learn this. Seems there are plenty of programming automation jobs which don't require this knowledge, but all I read on hacker jedis is how this stuff is the holy grail. I'm not strictly talking about getting a developer job, it pretty lucrative, but the tech/business people must also be making a killing. Will places really grill you on this stuff even if it's not a purely dev position? I want to level up eventually and honestly feel insecure about not knowing this stuff.
And what's the fastest easiest way to learn the most important stuff? I know about moocs and all that, lectures are a pretty shit format in person and even if free it's still not really worth the time. Is there a book or set of projects that will cover the basics?
GTKRWN -
2016-08-06 at 3:36 AM UTCIf you're talking about like doing your typical web dev grind then an algorithms course isn't going to do anything for you. 99% of a typical developer's career is covered by passably efficient dynamically sized maps and sequences and your language has already implemented that for you.
Algorithms are important though, the main reason is the same reason that philosophy is important, because their study reveals something fundamental about the world, or worlds more generally. The move from seeing instructions written on a page or board to understanding, intuitively, and then formally, why they possess the properties that make them interesting is one of the most intellectually rewarding activities a person can undertake. Programming per se is tedious, stupid. You memorize a bunch of syntax rules and line-shunt to appease a fragile compiler, programmers are considered good when they can also satisfy the petty egos of other programmers at the same time. Yes in 2016 it has some material value in much the same way being a blacksmithing has been a skill in high demand in times past but it has that status as a mere quirk of history. The study of computation however is immutable, we've been studying it for far longer than we've had computing machines and its truths will remain long after the last microprocessor has turned to dust.
And if lofty pontificating about the intrinsic value of the study of computation doesn't do it for you there's also this: algorithms is the shibboleth by which good (well paid) programmers identify each other. For better or worse almost anyone worth a shit in this field has a degree in CS or EE (less and less the latter). What the causal order there is (if that formal education produces better programmers or social sorting files good programmers into those education paths) is irrelevant, if you interview at a big name tech company the interview questions are going to be half or more algorithms.
In any case, for learning I recently skipped my way around the OCW intro to algorithms course to brush up for an interview and thought it was really good, I know you said you don't like lectures but IDK, I guess you could just do the problem sets or something, but I thought the lectures were interesting if you're willing to skip the stuff you already know. Depending on your math background it might be just a little proof-heavy but not so bad that you wouldn't be able to get through it with like high school level math.
CLR's Introduction to Algorithms is considered the definitive algorithms text but it's largely a refrence volume, I don't think anyone reads it cover to cover. You will also see recommendations of TAOCP but it falls in the same category, only more.
If you can bring yourself to do nothing else I guess googling around for the typical presentations of hashing, hashmaps, dynamic arrays, and linked lists and their analysis is probably the lowest hanging fruit there is. -
2016-08-06 at 4:43 AM UTCFunny you mention MIT 6006 and Intro to Algorithms 3rd edition, those were the two resources I was looking at. I got as far as problem set 2 with the koch fractal before getting over my head. Honestly I suck at math, I can do alright at concrete things like easy statistics and discrete math, once it starts getting complex on paper or code it's really hard for me to visualize. I guess you've convinced me that it is worth my while. My education is in IT, which is basically a cheat code for a CS degree. I panicked my junior year of college and was convinced that webdev would be the best thing to get into, it's not what I ended up doing, but what I do requires more or less the same skill set (I use tcl a.k.a. everything but arrays is a string language).
For example I like the idea of network security, but it feels like the options for that field are either get a security clearence and become a goon or become a prodidgy and join McAfees elite team. -
2016-08-06 at 6:39 AM UTC
Funny you mention MIT 6006 and Intro to Algorithms 3rd edition, those were the two resources I was looking at. I got as far as problem set 2 with the koch fractal before getting over my head.
Is there anything in particular you had difficulty with? You might get better answers on an education-focused site but I'm happy to answer any questions I can or talk though the problem sets.Honestly I suck at math, I can do alright at concrete things like easy statistics and discrete math, once it starts getting complex on paper or code it's really hard for me to visualize.
Yeah, I think math skills in technology are pretty bad on the whole, I still can't really do integral calculus on paper, but like anything you can practice and get better. For me I found I both enjoyed mathematics and could learn a lot faster if I did fairly few problems but learned in the context of like "I want to do this analysis, what do I need to know?", kind of going down the wikipedia rabbit hole, proving out intermediary steps instead of perpetual symbol manipulation.
I think it's a real weakness in modern western mathematics education in the way we treat mathematics like some kind of dependency tree, like first you learn some algebra and then that's set in stone and 5 years later you being able to work out some problem requires you recall some reflexivity property of some operation, if you don't remember this particular quirk of symbol shunting then "oh no, you suck at math, that was highschool stuff maaann". That wasn't the way the field developed, and while you do frequently need "lower" mathematics in dealing with more advanced material there's no reason you have to go out and "learn algebra" (whatever that's supposed to mean) before you can crack open a calculus text. You can teach middle schoolers graduate level math if you work up from the necessary ideas instead of trying to group all the math you need into some a set of monolithic subjects and putting them in some linear order and sure it's not as "robust" as the K-through-undergraduate approach I think it lends to a much more intuitive, useful understanding of mathematics as spirit of thought about formal systems rather than this kind of disjointed series of mechanical exercises you just need to shut up and memorize.I guess you've convinced me that it is worth my while. My education is in IT, which is basically a cheat code for a CS degree. I panicked my junior year of college and was convinced that webdev would be the best thing to get into, it's not what I ended up doing, but what I do requires more or less the same skill set (I use tcl a.k.a. everything but arrays is a string language).
Well to be fair webdev is, professionally, not a bad direction these days. It's how I pay the rent, a real "growth industry" at least for the time being. Tech is always thin ice in some sense but it's the place to be in terms of money these days, everyone is perpetually hiring and people flock in from other field with severely limited experience and manage to make 6 figs starting, depending on what corner of the world you inhabit. I wouldn't call it a bad career choice, I'm just kind of sad that between endless rivers of VC cash and tech megacorps we stream the majority of graduating CS talent into this wierd market that really has very little to do with computer science.For example I like the idea of network security, but it feels like the options for that field are either get a security clearence and become a goon or become a prodidgy and join McAfees elite team.
I'm not sure that's necessarily true, there's room in security for people who are neither total eliet or working for Uncle Sam. The McAfees of the world employ a lot of devs. It's probably true a not a lot of people start their careers there but it doesn't mean it's impossible down the line. There's this company called OPSWAT, they do sec stuff, they soaked up a good chunk of my graduating class and some of those people were straight up retards. It might take some work to get there but you shouldn't pigeonhole yourself unless you've found something you really want to dive into for its own sake. -
2016-08-06 at 1:48 PM UTC
Is there anything in particular you had difficulty with? You might get better answers on an education-focused site but I'm happy to answer any questions I can or talk though the problem sets.
Thanks I'll post quotestions when I have them. It was awhile ago when I last looked, mostly realized I'd need to backtrack a bunch to properly understand the complexity and growth rate to not just be taking random guesses.Yeah, I think math skills in technology are pretty bad on the whole, I still can't really do integral calculus on paper, but like anything you can practice and get better. For me I found I both enjoyed mathematics and could learn a lot faster if I did fairly few problems but learned in the context of like "I want to do this analysis, what do I need to know?", kind of going down the wikipedia rabbit hole, proving out intermediary steps instead of perpetual symbol manipulation.
Hah the school system has somehow created a generation of kids with the "I suck at math" mentality, it's created a defeatist attitude in general. That's why I want to do my part to improve.
I think it's a real weakness in modern western mathematics education in the way we treat mathematics like some kind of dependency tree, like first you learn some algebra and then that's set in stone and 5 years later you being able to work out some problem requires you recall some reflexivity property of some operation, if you don't remember this particular quirk of symbol shunting then "oh no, you suck at math, that was highschool stuff maaann". That wasn't the way the field developed, and while you do frequently need "lower" mathematics in dealing with more advanced material there's no reason you have to go out and "learn algebra" (whatever that's supposed to mean) before you can crack open a calculus text. You can teach middle schoolers graduate level math if you work up from the necessary ideas instead of trying to group all the math you need into some a set of monolithic subjects and putting them in some linear order and sure it's not as "robust" as the K-through-undergraduate approach I think it lends to a much more intuitive, useful understanding of mathematics as spirit of thought about formal systems rather than this kind of disjointed series of mechanical exercises you just need to shut up and memorize.Well to be fair webdev is, professionally, not a bad direction these days. It's how I pay the rent, a real "growth industry" at least for the time being. Tech is always thin ice in some sense but it's the place to be in terms of money these days, everyone is perpetually hiring and people flock in from other field with severely limited experience and manage to make 6 figs starting, depending on what corner of the world you inhabit. I wouldn't call it a bad career choice, I'm just kind of sad that between endless rivers of VC cash and tech megacorps we stream the majority of graduating CS talent into this wierd market that really has very little to do with computer science.
I'm not sure that's necessarily true, there's room in security for people who are neither total eliet or working for Uncle Sam. The McAfees of the world employ a lot of devs. It's probably true a not a lot of people start their careers there but it doesn't mean it's impossible down the line. There's this company called OPSWAT, they do sec stuff, they soaked up a good chunk of my graduating class and some of those people were straight up retards. It might take some work to get there but you shouldn't pigeonhole yourself unless you've found something you really want to dive into for its own sake.
That's solid life advice. And I remember you saying before you wished people cared more about theoreticals of compiler optimization and all that. The phrase "computer science" really has no one meaning, I'd say it's only used because it has a common understanding. Maybe in academia it really is a science. Personally I'm more drawn to the notion of building something than anything else.