3 ms·
Most of the self-taught engineers that I've met struggle with algorithm questions, even relatively straightforward ones. Most also don't have a clear idea of t
by stevewepay 12y ago
Most of the self-taught engineers that I've met struggle with algorithm questions, even relatively straightforward ones. Most also don't have a clear idea of things like algorithmic complexity and how to get an idea of how efficient an algorithm implementation would be. This is mainly because CS students are forced to learn this whereas self-taught programmers would need to be particularly motivated to sit down and teach themselves this, because there are no immediate practical uses for this.
The great debate of course is, how important are those skills? Many self-taught programmers I know reject the idea that these CS fundamental knowledge is important. And to their point, many self-taught programmers that I've met/hired/worked with that would be productive on day one because they have real-world knowledge and experience. Case in point, the founding engineer of the company that I work at is a college dropout, he's more than 15 years younger than me, and he's excellent. As well, I'm a self-taught programmer but came from a EE background, so I had two CS courses under my belt before I decided to pursue programming after graduating.
- greenyoda 12y ago"because there are no immediate practical uses for this" It depends on how hard a problem you're trying to solve. If you're writing the MVP of some CRUD app that supports a handful of users, you don't care about efficient algorithms. But if you ever hope to scale up to support massive numbers of users without using up massive amounts of extraneous servers (think of Google's or Facebook's data centers, and what their power and cooling costs), then knowing how to create efficient algorithms is of tremendous practical importance - it could mean the difference between profit and loss. Another example on a small scale: If you want to write a game that drives a virtual reality display in real time with realistically rendered imagery, knowing how to write efficient algorithms is also going to be very important.
- byoung2 12y agoBut if you ever hope to scale up to support massive numbers of users without using up massive amounts of extraneous servers When the time comes that a self-taught engineer is scaling to these massive numbers, there should be money in the budget to hire people with expertise in efficient algorithms.
- greenyoda 12y ago"there should be money in the budget to hire people with expertise in efficient algorithms" 1. Wouldn't you rather be the developer who built the scalable software that drives your company toward its IPO rather than the developer whose skills suddenly became useless just as the company was getting really profitable? Why should they even keep the first developer around after they hire someone else to clean up their mess? 2. Does your company really want to have to re-write all its critical code just as that code is starting to make money for them? It's OK for an MVP to be lacking features; features can always be added later. But if its fundamental architecture isn't efficient and scalable, you're going to run into a brick wall at the most inconvenient time.
- byoung2 12y agoIn the grandfather post it was suggested that it was a founder who was self taught. If I am the founder and I am self-taught, I have to build what I can into the early version and when I have enough money hire someone to build it better. That day might be a few months from now, or years, or it may never come at all.
- rayiner 12y ago> Many self-taught programmers I know reject the idea that these CS fundamental knowledge is important. Besides some CS math courses I took while doing an unrelated engineering degree, I'm self-taught. And I've always felt incredibly limited as a consequence. E.g. given the popularity of Rust, I'm really interested in type systems to limit aliasing. But the papers make my eyes glaze over. Self-teaching is difficult, because even the stuff written with an eye towards approachability assumes mastery I don't have of a couple of years worth of discrete math.
- kibwen 12y agoAs both a Rust user and a CS grad, I can confirm both that papers still make my eyes glaze over and that thankfully you don't need to understand the type system to use Rust effectively. :) Personally I'm thankful for my CS background, but you also need experience using various tools to round out your knowledge. To put it another way: real-world experience teaches you how to solve problems, while academic experience teaches you that hard problems can be solved.
- deleted 12y ago[deleted]
- caseysoftware 12y agoAlso self-taught with a EE degree behind me.. I'd agree 100% with the algorithm point but I'll add data structures to the list. Beyond low level memory - think shift registers - I had no concept of linked lists, pointers, stack vs heap, etc. My solution was simple. I contacted the CS department from my undergrad (Rose-Hulman - small school, I knew the department head) and asked for the syllabus for the data structures course. The prof was great and went so far as to send me all the homeworks, last year's tests, and recommendations for books. It was above and beyond and reinforced my appreciation.
- jkubicek 12y agoAlso self-taught with an ME degree (also from Rose-Hulman. Hi Keith!). I'm an engineer at Twitter. Due to the interview process, I have yet to encounter anyone (myself included) who doesn't have a pretty sound understanding of algorithms and data structures. The biggest difference I've noticed between self taught folks and CS majors is comfort level with bit-twiddling. All the high-level stuff I know I've had to learn to do my job. All the algorithm and data structures stuff I've had to learn to pass interviews. Moving bits and bytes around is hard for me because it's so rare for me to encounter it in my day-to-day work. As for how I learned all this stuff? Read Steve Yegge's Google interview post[1], buy the Algorithms book[2], learn everything Steve suggests you learn. 1: http://steve-yegge.blogspot.ca/2008/03/get-that-job-at-google.html http://steve-yegge.blogspot.ca/2008/03/get-that-job-at-googl... 2: http://www.amazon.com/Introduction-Algorithms-3rd-Thomas-Cormen/dp/0262033844/ref=sr_1_1?s=books&ie=UTF8&qid=1425841484&sr=1-1&keywords=introduction+to+algorithms http://www.amazon.com/Introduction-Algorithms-3rd-Thomas-Cor...
- s_baby 12y agoBeing able to answer those questions represent 1-2 freshman/sophomore level courses. Being able to answer these questions represents signaling more so than answers that are intrinsically representative of skill.
- GFK_of_xmaspast 12y ago"there are no immediate practical uses for this" Not too long ago I had to bang on some code that was running too slowly to be practical. Thanks to knowing stuff about algorithms and complexity I was able to knock it down from cubic time to just-over-linear time and reduced it from taking about 9.5 seconds of a 10 second response time to 'basically none' of a 0.5 second response time.
- rajacombinator 12y agoI can't imagine that someone could be an effective programmer without at least a basic understanding of fundamentals like algorithmic complexity and data structures. They just touch every aspect of programming.