3 ms·
Self taught programmer here. This thread will eventually have 500 replies all telling you to learn linked lists and various sorting algorithms. Maybe you can d
by rubiquity 13y ago
Self taught programmer here.
This thread will eventually have 500 replies all telling you to learn linked lists and various sorting algorithms. Maybe you can do that, but only after you've learned about operating system fundamentals such as processes, threads and, in my opinion, pipes and the socket APIs.
You'll likely never have to implement a linked list in C in the real world, but I promise you there will be many times that your web server is erroring on connect(2).
Any company that puts a bigger emphasis on linked lists and sorting algorithms in the hiring process than on OS and networking fundamentals is a good sign to start running away.
- kenster07 13y agoSo you should run away from Google? Sorry, I couldn't help myself. I actually think you have a valid point.
- adamnemecek 13y agoIt has been said repeatedly that those white board algo questions are pretty pointless.
- chacham15 13y agoPerhaps, but as an employer I would run away from a candidate that couldnt code a linked list.
- matthewmacleod 13y agoI don't like whiteboard exercises either, but I definitely have to agree with this. Three interview questions that I've found do a great job of determining how effective an engineer will be: 1. Describe the principles of a linked list. What properties does it have that are useful, and in what situations will using one cause a problem? 2. What's the difference between this and a doubly-linked list? What are the benefits and downsides of using the latter? 3. How would you represent a tree in a SQL database? What are the properties of your representation? (I especially like the last one, because it's totally open-ended. Engineers come up with everything from naïve adjacency lists through to nested intervals and closure tables, and their ability to describe the tradeoffs is a really strong indicator of their programming ability. Of course, it's not a suitable question for all positions.)
- PakG1 13y agoThe interesting question I have for you is what is the most complicated code you've written? There are a lot of cases where I imagine more advanced knowledge isn't necessary. But let's be honest, that advanced knowledge didn't come about because the people who created it wanted to just twiddle their thumbs. A lot of scenarios don't call for this knowledge. Various scenarios do. Perhaps we should qualify the advice with "it's important to do this if you want to do A, but unimportant if you want to do B, and maybe useful if you want to do C." This is an excellent read too for another reason why this stuff is interesting/useful. http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html http://www.joelonsoftware.com/articles/ThePerilsofJavaSchool...
- mattmanser 13y agoThe interesting question I have for you is what do you think is complicated? 1. The algorithm you spent 1/2 a day writing and designing that took me a day using google and common sense 2. The 20k LOC program we then spend a few months writing that contains that single algo in it but yours keeps falling over because you spent all that time learning algos instead of learning how to program Swings both ways! Managing complexity, practical experience and the 'art' of programming are things that are not taught in a degree and far more fundamental and used far more frequently.
- deleted 13y ago[deleted]
- matthewmacleod 13y agoYou'll likely never have to implement a linked list in C in the real world…Any company that puts a bigger emphasis on linked lists and sorting algorithms in the hiring process than on OS and networking fundamentals is a good sign to start running away. Not true. Networking and operating system fundamentals are important, no doubt. But there's also ample documentation, and it's relatively easy to find practical examples about how to work with (say) multithreaded code. But you'll be better at exploiting your knowledge in this area if you're familiar with the underlying tools and algorithms. For example, how are you going to write good multithreaded code unless you understand semaphores and mutexes? How are you going to parse and search data rom your network service, unless you know when it's appropriate to store it in a doubly-linked list, or maybe a skip list… I've known programmers to do preposterously inefficient things because they don't understand the underlying constraints and rules of the system they are working with. In particular, developers I've worked with who don't have a formal CompSci background tend to be more likely to implement complex ad-hoc solutions to problems where there are well-understood general classes of implementation (sometimes included in whatever stdlib or framework they are using!) which will solve the problem for them. Understanding the principles underneath it all is something that all great programmers I've known share in common. That doesn't mean that it's impossible to be a good programmer without a CompSci degree, and it doesn't mean that software engineering is any less important to an actual deliverable product. But writing it off in the way you do isn't really justified.