Live data from Hacker News

What skills do self-taught programmers commonly lack?

quora.com

141–150 of 161 posts

Re: What skills do self-taught programmers commonly lack?

#141

I'd say that programming falls into two categories. I don't quite know how to describe them, so here are two examples: 1) Your average database/object driven application. There is user input. This translates pretty directly to output. There may be some interesting algorithms in between, but it's pretty much UI programming. 2) Solving difficult problems. A logistics routing application. The bulk of the code is based o…

I think you've actually got no clue how complex and hard the average database/object driven application can become. Nor do you seem to have any idea what is actually entailed in a large CRUD application. You claim that GMail isn't complex. Jeezus, a tiny % of programmers are capable of recreating that well. Or Microsoft Office! Go get the source code to OpenOffice and say that again. Think about the problem a bit har…

Sorry. Those examples are admittedly more complex than I made them out to be. I mentioned scaling to be a more difficult problem. There are some master architects in all those projects, who deal with hard problems, but a large code base is not the same as a complex problem. Large pieces of software are many small and simple problems held together by a complex glue. The architects deal with the glue, but category one programmers can so most of the other stuff without too much difficulty.

Re: What skills do self-taught programmers commonly lack?

#142

Earlier quoted context omitted.

I'm inclined to disagree. The converse -- what skills does a programmer who has never left academia lack? -- strikes me as perfectly valid. And surely there must be some benefit to taking four (or more) years out of your productive life to the study of programming? But I say this as a self-taught programmer, so perhaps it's just that I'm envious of those who've had the benefit of a formal CS education.

Speaking as someone who was self-taught, spent four years getting a formal CS education, and then has 16 years post-college professional experience, I don't think you probably missed much. I think the only really practical thing I learned in school was big-O notation, and you can probably pick up the essentials of that in about one day of moderate studying. I can't recall ever learning a data structure more complicat…

I agree with you about the math class. As I mentioned elsewhere in the thread, I ended up doing a minor in CS (which comes out to about 6 courses). I focused these courses on the more theoretical/mathy options, and that has definitely served me well.

Re: What skills do self-taught programmers commonly lack?

#143
post #71

Earlier quoted context omitted.

One more thing: This is why I always find it sort of useless during tech interviews to ask someone who's been out of school for a long time the difference between a thread and a process or the difference between sorting algorithms. It's like people couldn't think of an original question that might actually be of some use to the actual job you'd be doing.

> ask someone who's been out of school for a long time the difference between a thread and a process Quite the contrary: if you're in the industry, the difference between a thread a process should be very hot in your page cache. Understanding why ``system("cd ..");'' won't work is pretty vital. As for sorting algorithm, you should at least know the big-Oh for a good sorting algorithm. In many specialties of programmi…

On the contrary, it's irrelevant if you're not writing a sorting algorithm or your main role doesn't consist of writing any algorithms. Most web developers I know simply call sort() in whatever language they're using instead of reinventing the wheel. Even my work in Objective-C where I handle retaining and releasing memory, I still call sort() (and compare()) without caring about algorithm efficiency.

Re: What skills do self-taught programmers commonly lack?

#145

It's interesting that this question implied the negative -- not what's the difference between , not even what are the strengths and weaknesses of , but: > What pieces of the whole are missing? The implication being that without a formal CS education, it is an impossibility to obtain a whole. As if whole matters; how does one obtain whole , anyway? This is a very loaded question and perspective that betrays a serious…

You can't even guarantee people with a CS degree know any of that stuff. In my experience, many of the people I've worked with that had CS dregrees had forgotten that stuff long ago, if they ever knew it.

The people answering on Quora are people who are interested in CS or else they wouldn't be on Quora answering the question. That interest is the reason they know that stuff, being taught it in college just made it easier for them.

Re: What skills do self-taught programmers commonly lack?

#146

It's interesting that this question implied the negative -- not what's the difference between , not even what are the strengths and weaknesses of , but: > What pieces of the whole are missing? The implication being that without a formal CS education, it is an impossibility to obtain a whole. As if whole matters; how does one obtain whole , anyway? This is a very loaded question and perspective that betrays a serious…

I'm inclined to disagree. The converse -- what skills does a programmer who has never left academia lack? -- strikes me as perfectly valid. And surely there must be some benefit to taking four (or more) years out of your productive life to the study of programming? But I say this as a self-taught programmer, so perhaps it's just that I'm envious of those who've had the benefit of a formal CS education.

[deleted]

Re: What skills do self-taught programmers commonly lack?

#147
post #71

Earlier quoted context omitted.

> ask someone who's been out of school for a long time the difference between a thread and a process Quite the contrary: if you're in the industry, the difference between a thread a process should be very hot in your page cache. Understanding why ``system("cd ..");'' won't work is pretty vital. As for sorting algorithm, you should at least know the big-Oh for a good sorting algorithm. In many specialties of programmi…

On the contrary, it's irrelevant if you're not writing a sorting algorithm or your main role doesn't consist of writing any algorithms. Most web developers I know simply call sort() in whatever language they're using instead of reinventing the wheel. Even my work in Objective-C where I handle retaining and releasing memory, I still call sort() (and compare()) without caring about algorithm efficiency.

If you're calling a sorting algorithm, you should still know about the efficiency of that sorting algorithm takes so you can make a choice between sorting an array or indexing using a data structure (which data structure).

Web is just a UI to layer software that _does something_, algorithms are a way to get that something done. Have you ever needed to understand why e.g., a SQL JOIN is taking too long? That's an example where algorithms matter (in selecting the index type, knowing whether to use a join between two tables or to denormalize etc...)

Knowing how to do your own memory management and knowing Objective C is great and valuable, but if mobile/Mac desktop application development were to become less valuable and more commodity (right now, I don't think it will happen-- but I can't predict the market), will you be able to apply these skills to (say) working on more complex C and C++ software such as a web browser?

Re: What skills do self-taught programmers commonly lack?

#148
Background: I have a Master's in CS from Wisconsin-Madison, I'm a programmer as well as the founder of a software company. I've hired programmers with and without formal training in CS.

I think the self taught are both fine and justified in their worries that they are missing something. I'll try and explain as best I can.

Imagine that your mind is like a work shop, it's a place you go to create things. Let's consider two workshops: the neat and organized shop and the messy shop. I'm going to suggest that the neat shop is more like a programmer with formal training and the messy shop is more like the self taught. Some self taught folks will argue that their mind is well organized, which is fine, but my opinion from experience is that this view has some amount of validity in the real world. Your experience may vary.

The question here is "is it possible to produce really great work in either shop?" I think that's sort of what the original question was getting at, they talk about skills but the point is what you do with those skills, what you produce. And we all want to produce great work. So can both sorts of shops (minds) produce great work?

My view is that self taught people are typically sharp, sometimes very sharp, but their minds are a little "messy". Formal training in terms of learning basic skills is no better than self taught. But the farther you go the more useful the training becomes. The shop analogy, a bit stretched I'll grant you, is that the training organizes your mind. When you need a tool, you know where it is and you go get it and use it. For example, if you are doing a compiler, you already know that you need an AST (I had a smart guy, with compiler experience, waste quite a bit of time trying to do a compiler without an AST. In spite of another guy saying "Don't we need an AST?". First guy: no formal training, second guy, formal training.)

I think a question that might be more enlightening is "given two equally talented programmers, one with formal training and one without, which one can produce good results, over a broad domain of tasks, faster?"

Re: What skills do self-taught programmers commonly lack?

#149
One of the answers there specifically disparages big-oh analysis of algorithms.

This is actually sometimes important. A self-taught programmer, who really was a whiz at coding had some prototype code for data-analysis. It worked great on the sample data, but was O(n^3) (not just worst-case, average case) and we had a hell of a time convincing him that it wouldn't scale to the quantities of data we had.

Of course constant factors make a difference, but it is frustrating to waste time trying to convince someone that nlogn is going to beat n^3 on a large data-set.

Re: What skills do self-taught programmers commonly lack?

#150
post #147

Earlier quoted context omitted.

On the contrary, it's irrelevant if you're not writing a sorting algorithm or your main role doesn't consist of writing any algorithms. Most web developers I know simply call sort() in whatever language they're using instead of reinventing the wheel. Even my work in Objective-C where I handle retaining and releasing memory, I still call sort() (and compare()) without caring about algorithm efficiency.

If you're calling a sorting algorithm, you should still know about the efficiency of that sorting algorithm takes so you can make a choice between sorting an array or indexing using a data structure (which data structure). Web is just a UI to layer software that _does something_, algorithms are a way to get that something done. Have you ever needed to understand why e.g., a SQL JOIN is taking too long? That's an exam…

IMO, I think you're spending more time talking about edge cases than the norm. How many people are web developers vs those developing web browsers?

Understanding query cost has more to do with data structures than algorithms. Why does the optimizer seek vs scan? What column(s) do I need to index and how should it be structured? You really don't need to understand how things get sorted in a b-tree.

Knowing normal forms is also different from algorithms. Ergo, it would be more useful to ask "When would you denormalized your data?" instead of "What's the difference between Quicksort and Bubble Sort?"

Objective-C is really just one of many languages I know and use. It just happens to be the most recent. Oddly enough I did spend some time (many years ago) implementing my own browser for a job. We used Java and, again, I never really had to know the complexities of sorting algorithms.

Post reply on HN