I don't think you can achieve #1 without a bit of #2 and #3. Milage varies depending on what you're programming, but I think people are too quick to dismiss CS.
If you're, for example, rewriting an obviously correct but slow piece of code X into a faster but not obvious code Y, how do you know if the two are functionally identical without at least some knowledge of program algebra?
by testing and measuring performance ?
In real world it is rare that you have easy way to guess actual overall impact of your optimization.
sure you profile and go for hotspots but still it is very hard to actually understand full impact and CS algorithms are done in ideal conditions so they don't address complexity of executing environment and might be misleading path for optimization.
#2 is very important, and sadly very under valued. You'd be surprised how many candidates I interview who don't understand the basic concepts behind time complexity. I'm not even talking about big-O. I'm talking about the idea that simple algorithms are dominated by a fundamental operation, and that in order to make said algorithm faster you must reduce the number of times you perform that fundamental operation.
So when I ask "if that method were performing too slowly, what would you do in order to make it faster?" I'm often met with answers-phrased-as-questions like "use Vector instead of ArrayList?" Or often the confident statement "use HashMap" because apparently HashMap magically makes things faster... Except we ask this question about a range query (aka checking "if x < y" instead of "if x == y").
Because for a long time we have been able to make computers run faster. Also, with all of the levels of abstraction in programming, making the computer do less could be using a more efficient implementation of something three layers deep, which looks a lot like making the computer run faster.
And if you were insistent on that answer you wouldn't be doing very well. Profiling a complex system to find bottlenecks is quite helpful. Profiling an implementation of an O(n) algorithm isn't going to tell you how to make it O(log(n)).
But it can tell me if the problem with typical data is with the constant, or with n. It may be that the O(log(n)) algorithm will be slower for typical input.
But yeah, I wouldn't be insistent about that on a job interview.
Sorry, but understanding basic data structures is not difficult. This cannot be regarded as computer science. The examples he gives ("Recursive Towers of Hanoi", ...) attract the wrong people - those who are deeply depressed after their first year as 'real-world' programmer.
I agree that understanding basic data structures shouldn't be difficult, but for a remarkable number of candidates it apparently is. Further, basic data structures is as much computer science as the "cell theory" is biology. It's a set of fundamental concepts that's quite core to computer science.
The problem is that in the body of the Quora question, which is omitted in the Forbes transplantation, the asker elaborates that he wants to master C++. Without knowing that, the immediate reference to C++ makes no sense, nor does step #1 saying to "become an expert in computer programming" when that sounds like the exact question itself.
It's usually better to post the original article rather than a wrapper article, especially when the wrapper contributes nothing and even confuses matters.
Edit: BTW, answerer takes the notion of the value of being full stack and blows it out to include all of computer science, computer engineering, anthropology, sociology, psychology, literature, and poetry. Cute, and maybe entertaining to some, but probably less than truly helpful. Become a Renaissance man as a prerequisite? Sure, and pick up deity status too, ya know, just in case.
Ah... thanks. I was about to post "why does being good at a particular language have anything to do with mastering computer programming?" Admittedly C++ is a language with enough historical significance that any "master programmer" should at least have passing familiarity, but the article seemed to make "programming C++" synonymous with programming as a whole.
But hey, it's Forbes. (aka hardly authoritative on software mastery)
If you add ?share=1 to the end of Quora URLs that you share, it will make sure that people who follow the link won't see a sign-up call to action or any answer blurring.
Seems like some kind of mutually beneficial relationship.
Looks like Quora is a contributor to Forbes[1], but that no one gets paid[2]. At least that's what the answer that I can read without signing up for Quora says...
An expert in computer programming might make ~$180,000. But, a non-expert with basic skills might make up to $120,000. Seems like a lot of work to get that extra $60,000.
The industry should be paying the experts at least double what they are currently making.
The industry -- all industries, in fact -- should be paying employees commensurate with their contribution to the success of the firm. Explain how to do that well and I'll nominate you to the Nobel Committee. In the meantime, we have startups for realizing returns from out-sized contributions.
In the meantime, we have startups for realizing returns from out-sized contributions.
I don't think they solve the problem anymore. The VC-funded ecosystem is just another shitty corporate ladder (engineer => eng. manager => founder => angel investor (i.e. rich) => VC). It's now a reputation economy that depends more on pleasing the right people than on engineering excellence. Hot off the press: http://michaelochurch.wordpress.com/2013/07/09/three-capital...
Most of how the current crop of startups defines engineering excellence is not talent or CS expertise but "track record", especially if it involves "scaling" (that's a business anti-intellectual's nomenclature for "hard stuff I don't understand"). That has more to do with careerist maneuvering than any real drive to understand the fundamentals of computer science, software engineering, or anything else that's truly important.
I think that game's done. Yes, there are outsized returns due to the fact that the real value potential of a talented software engineer is $500k-5M, but engineers aren't going to capture the next 10 years of surplus in VC-istan. Management will.
I agree with you. Actually, I would guess that it's more like this:
Star city (NYC/SV) non-experts: $120k
Star city (NYC/SV) experts: $150k
Emerging (ATX) or second-tier tech-hub non-experts: $80k
Emerging or second-tier tech-hub experts: $140k
Hinterland non-experts: $50k
Hinterland experts: ??? ($100k++ if they can consult and work remotely; no work for them otherwise)
Some people are making $180k at a given time, but even great programmers don't have long-term reliable $180k salaries (except as consultants). Right now, your specialty has to be hot (e.g. low-latency C++ in finance) for that.
The star cities have a relatively small premium for strong programming skills, for a number of reasons. The cost of living forces up the low end, but there's also a glut of programming talent which leaves it with surprisingly low leverage. Even though talent is still hard to find and rare in the Bay Area (because it's rare everywhere, just less rare there) those companies think they have a lot of talent, because software managers are too unskilled to detect high talent. So that holds the high end back.
If VC weren't propping up the Bay Area and the job market weren't so flaccid outside of the VC-funded ecosystem and finance, we'd see a lot of the best programmers leaving for the #3-6 tech hubs and the excellence premium would be more ($60k by the number above, but in a low-COL area and with high autonomy).
Now someone just needs to post some article about 10x programmers. Then a bunch of people will comment on how they are underpaid 10x programmers (or phrase it as "an order of magnitude" better than their peers for bonus points). Then someone will reply with a Wikipedia article about the Dunning-Kruger Effect and bam, you've got a regular HN discussion work-flow going.
Is that average programmer salary in USA, or just in Sillicon Valley? Seems unreal anyway - in my country non-expert programmer salary is around $12,000$-$24,000 after taxes :/
Or if that's too nebulous, remember that knowledge is a hierarchy and mastery is a perception. In order for someone to perceive you as a master at a particular skill, you must also be highly competent in a number of other tangentially related skills.
But with this article (and I somewhat agree with programming in general), you have to become an expert at running before you can get really good at walking. Then you can start to learn about the finer points of the crawling maneuver, and when to apply it.
"There are even serious discussions about whether C++ semantics can be formalized, that is, whether it is mathematically possible."
Since it is mechanisable (several compilers exist), surely it is "mathematically" possible to formalise the semantics. The question is maybe rather whether there exists a mathematically _elegant_ formalisation? Glancing at the formalisation of C in the K framework [1], I'm not sure the answer to this question is positive.
According to Toptal and Codility, if you want to be regarded as a top web developer, you need to be able to complete 3 exercises similar to calculating the area of the intersection of two rectangles, that may or may not intersect, in 90 minutes . So, you should tailor your learning around that.
First prong of becoming an expert in computer programming is "becoming an expert in computer programming"? How can I read this when there is a syntax error in the third paragraph?
48 comments
[ 2.9 ms ] story [ 89.8 ms ] thread2. Understand computer science.
3. Understand computer engineering and architecture.
4. Understand people.
5. Understand bullshit.
Then, try programming a game from 20 years ago.
sure you profile and go for hotspots but still it is very hard to actually understand full impact and CS algorithms are done in ideal conditions so they don't address complexity of executing environment and might be misleading path for optimization.
So when I ask "if that method were performing too slowly, what would you do in order to make it faster?" I'm often met with answers-phrased-as-questions like "use Vector instead of ArrayList?" Or often the confident statement "use HashMap" because apparently HashMap magically makes things faster... Except we ask this question about a range query (aka checking "if x < y" instead of "if x == y").
But yeah, I wouldn't be insistent about that on a job interview.
https://www.quora.com/Computer-Programming/What-does-it-take...
The problem is that in the body of the Quora question, which is omitted in the Forbes transplantation, the asker elaborates that he wants to master C++. Without knowing that, the immediate reference to C++ makes no sense, nor does step #1 saying to "become an expert in computer programming" when that sounds like the exact question itself.
It's usually better to post the original article rather than a wrapper article, especially when the wrapper contributes nothing and even confuses matters.
Edit: BTW, answerer takes the notion of the value of being full stack and blows it out to include all of computer science, computer engineering, anthropology, sociology, psychology, literature, and poetry. Cute, and maybe entertaining to some, but probably less than truly helpful. Become a Renaissance man as a prerequisite? Sure, and pick up deity status too, ya know, just in case.
But hey, it's Forbes. (aka hardly authoritative on software mastery)
Looks like Quora is a contributor to Forbes[1], but that no one gets paid[2]. At least that's what the answer that I can read without signing up for Quora says...
[1] - http://www.forbes.com/sites/quora/2013/07/08/what-does-it-ta...
[2] - http://www.quora.com/Quora/When-a-Quora-users-content-is-rep...
what makes great programmers different: http://www.drdobbs.com/architecture-and-design/what-makes-gr...
The industry should be paying the experts at least double what they are currently making.
Of course what an expert is is highly subjective.
The industry -- all industries, in fact -- should be paying employees commensurate with their contribution to the success of the firm. Explain how to do that well and I'll nominate you to the Nobel Committee. In the meantime, we have startups for realizing returns from out-sized contributions.
I don't think they solve the problem anymore. The VC-funded ecosystem is just another shitty corporate ladder (engineer => eng. manager => founder => angel investor (i.e. rich) => VC). It's now a reputation economy that depends more on pleasing the right people than on engineering excellence. Hot off the press: http://michaelochurch.wordpress.com/2013/07/09/three-capital...
Most of how the current crop of startups defines engineering excellence is not talent or CS expertise but "track record", especially if it involves "scaling" (that's a business anti-intellectual's nomenclature for "hard stuff I don't understand"). That has more to do with careerist maneuvering than any real drive to understand the fundamentals of computer science, software engineering, or anything else that's truly important.
I think that game's done. Yes, there are outsized returns due to the fact that the real value potential of a talented software engineer is $500k-5M, but engineers aren't going to capture the next 10 years of surplus in VC-istan. Management will.
The opportunities are somewhere else. I'd like to see more action in the mid-risk/mid-growth space that's currently underserved (too risky for bank loans, not risky enough for VC): http://michaelochurch.wordpress.com/2013/03/26/gervais-macle...
The star cities have a relatively small premium for strong programming skills, for a number of reasons. The cost of living forces up the low end, but there's also a glut of programming talent which leaves it with surprisingly low leverage. Even though talent is still hard to find and rare in the Bay Area (because it's rare everywhere, just less rare there) those companies think they have a lot of talent, because software managers are too unskilled to detect high talent. So that holds the high end back.
If VC weren't propping up the Bay Area and the job market weren't so flaccid outside of the VC-funded ecosystem and finance, we'd see a lot of the best programmers leaving for the #3-6 tech hubs and the excellence premium would be more ($60k by the number above, but in a low-COL area and with high autonomy).
Outside of Silicon Valley, salaries tend not to climb up toward $200K/yr as well (but it doesn't cost $800K to buy a 3 bedroom house).
Or if that's too nebulous, remember that knowledge is a hierarchy and mastery is a perception. In order for someone to perceive you as a master at a particular skill, you must also be highly competent in a number of other tangentially related skills.
Since it is mechanisable (several compilers exist), surely it is "mathematically" possible to formalise the semantics. The question is maybe rather whether there exists a mathematically _elegant_ formalisation? Glancing at the formalisation of C in the K framework [1], I'm not sure the answer to this question is positive.
[1] https://code.google.com/p/c-semantics/
http://norvig.com/21-days.html