We are done with “Hacking”
cacm.acm.org
cacm.acm.org
He implies that this somehow falls into “socitech” ability, which it is not. Maintainable code is precise, well-factored code — almost pedantic — which requires an orthogonal (if not counterpointed) talent to the more “social” talents. I would go further to say that a mathematical understanding or at least inclination is required to write maintainable code. (In the sense that the same is required to write a readable academic paper.)
Another assumption he seems to make here is that somehow there are all these algorithmic hackers who sit and write algorithms all day. No, I doubt this has been some kind of norm ever. Most of what we (business software) programmers write is business logic and data processing with an occasional, infrequent need — but need nevertheless — to break out a unique algorithm.
You can scale up all you want and into the future but we are always going to need to understand the difference between a O(n^2) and O(n) algorithm.
I’m sick of these kinds of pieces that are pure philistinism. The future isn’t going to save you from your lack of technical skills, education and awareness. Stay curious and develop yourself — your social self as much as your craft and profession.
Maintainable code is more an act of writing than of mathematics.
Since it's similar to math, it's as clear as it can be. Like functional programming - the cleanest code is one line of code which expresses the intent as an mathematical function.
1. To reduce the number of changes that will need to be made to it.
2. To reduce the time it takes to make each change.
The (1) category encompasses the idea of making code that requires few changes. Such code is essentially "right" to begin with. I think about this mostly in terms of models -- i.e. does it accurately model the problem -- and quality -- i.e. does it have bugs or performance issues. Of course there are other concerns as well, but those are two big ones and they often involve thinking like a "computer scientist."
The (2) category -- reducing the effort of changes -- is achieved by using appropriate abstraction layers, encapsulation, low coupling, and other good-program design. There are many technical concerns in this category, but it seems there are some social ones as well.
I would say the programmer's experience is another huge factor. To sum it up in a phrase, perhaps "writing maintainable code is an act of prediction."
<author> is founder and CEO of software engineering and management platform <blah>.
I think their case for advancement of development technologies or how much social interaction was needed in the 90's is a bit flawed.
Based purely on my personal experiences, leaders who have both boxes ticked are even more unicorn-y than the fabled 10x engineer.
Using a Dijkstra quote in an article where sentences such as "The profession now requires less mathematics and algorithms and instead emphasizes more skills under the umbrella term `sociotech.' are used.
I wonder what Prof. Dijkstra would have to say about this "sociotech" umbrella. Actually I don't, because that's the value of having an understanding of a subject matter deeper than an Internet search and a copy and paste: it prevents one from throwing quotes and invented words around that sound good, but ultimately mean nothing useful.
> It seems that the future of programming rests less in math and more in sociotech relationships between people.
Or: it seems that the future of making your fortune with software rests less in math and more in marketing.
True though it may be, I don't know how this relates to the discipline of computer programming.
"Simplicity is a great virtue but it requires hard work to achieve it and education to appreciate it. And to make matters worse: complexity sells better."
-- Edsger W. Dijkstra
-– C.A.R. Hoare
As a general statement, I feel like this is objectively false. Just look at how much code gets added to Github daily.
there are a lot of programmers which develop purely in visual environments such as LabVIEW, Max/MSP, PureData, vvvv, and others - you just don't hear them complaining on hn :p
If anything, I'd argue the LOC it takes to accomplish many tasks is actually increasing because applications are held to higher standards of quality, scalability, availability, scope, etc.
I'm certain someone did such surveys.
Software isn't entirely driven by need, sometimes politics or licensing preclude the use of libraries. Sometimes libraries are not specific for your area and cannot be used - typical when handling hard real time applications or when otherwise microseconds matter.
Sure, it's easy enough. But until you can actually point to the surveys, we can't say anything about the code on Github relating to the point being made.
This reminds me of the assumption that the 'cloud' is making IT personel obsolete, when it's just someone else's computer and IT staff.
Worse, it's just someone else's computer and mostly just hardware-IT staff, and that's not the difficult or expensive part, despite the current mythology among those who have never done it.
As if this stops you from re-inventing the wheel in attempt to understand more. Understanding things is what distinguishes programmers.
I had exactly the same discussion with one of my friends that wants to become a programmer. His argument was that programming is not fun at all because all we do is use libraries and frameworks. My counter-argument was the paragraph above.
Most days I feel more like a combination of a preschool teacher and a switchboard operator than a computer scientist.
I'm not really sure how your first paragraph is a counter-argument to your friend. Reinventing the wheel to learn is just busywork. Reinventing the wheel because you need the wheel and don't have one available is fun.
Unfortunately the wheel is always available now.
Edit: Also, I disagree that re-inventing the wheel is just busywork. Compare a programmer that just uses .sort() and another one that uses .sort() and implemented his own sort (disregarding the fact that he is not using his own sort) and really understands the math behind it. Which one would you rely on?
For example, if you are trying to write "business logic", you don't want to have to worry about allocating memory or ensuring data consistency. You just want to worry about business concerns.
I suspect your friend has simply not tried any sufficiently difficult programming project. If your problem is non-trivial, you feel appropriately grateful for libraries that provide higher layers of abstraction.
I know he's a trillionaire and all and probably smarter than me but still - as somebody who spent a full three years reading and working through the problems in the first three books, I wonder how deep an understanding he could really have walked away with after just a few months.
You mean like the MIX (and later MMIX) assembly code used extensively throughout the books?
"Website obesity" [0] is a phenomenon where this is especially evident.
> The labor market increasingly rewards social skills. Between 1980 and 2012, jobs re- quiring high levels of social interaction grew by nearly 12 percentage points as a share of the U.S. labor force. Math-intensive but less social jobs - including many STEM occu- pations - shrank by 3.3 percentage points over the same period. Employment and wage growth was particularly strong for jobs requiring high levels of both math skill and so- cial skill. To understand these patterns, I develop a model of team production where workers “trade tasks” to exploit their comparative advantage. In the model, social skills reduce coordination costs, allowing workers to specialize and work together more effi- ciently. The model generates predictions about sorting and the relative returns to skill across occupations, which I investigate using data from the NLSY79 and the NLSY97. Using a comparable set of skill measures and covariates across survey waves, I find that the labor market return to social skills was much greater in the 2000s than in the mid 1980s and 1990s.
[0]: https://scholar.harvard.edu/files/ddeming/files/deming_socia...
The average salary for a Programmer is $89,128 in San Francisco, CA. Salaries estimates are based on 238 salaries submitted anonymously to Glassdoor by Programmer employees in San Francisco, CA....
are coders really making $240k /year?
https://www.glassdoor.ca/Salaries/san-francisco-programmer-s...?
Confused by the downvotes. Programmer: $89k. Software Engineer: $137k.
That's news to me.
> "Computers [have] doubled in power every 18 months for the last 40 years."
This, along with the salary estimate you mentioned made all the numbers in the article quite suspect.
That doesn't necessarily invalidate whatever point the author was trying to make, but it does cast a shadow of lack of seriousness on the whole article.
If you had enough memory slots on the motherboard.
This sort of markup still exists in "enterprise" hardware today, which is why moving to the cloud actually is a cost savings for some places. Of course, operating their own operating their own commodity hardware instead would save even more, but this is typically a political impossibility.
There were also various Taiwanese earthquakes and resin factory fires etc that probably caused me to remember the price spikes better than the average prices. Well that's my excuse :)
There are still people creating fundamental new infrastructure or building blocks. But probably a lot more people are just gluing things together to solve a problem.
Being long enough in the tooth to have been 'hacking' back then, I'd strongly disagree with that since - and rather obviously given the era - there was little training to be had.
Rather, I'd characterise it as being a time where anyone (irrespective of talent or training) could get their own computer and be the master of it.
Personally, I resent the system trying to take that control away from us (in this case, trying to pass us from an age of controlling our own computers to having to be licensed, controlled and directed in what we can do with them).
Then there's the countless libraries in the University of Oxford, some of which might want to stock it, but I'd be surprised if they didn't either already.
This guy also seems to think programmers are so mentally deficient they are unable communicate with the 'open source community' and that this is in some way how programmers discover new technologies. He also thinks people did not contribute code in the 1990s. Where did all this software come from? Typical business view of open source. Originally b-schools actually lectured that open source was anti-business like a trade union. Now I guess they think it is sort of a crutch for too-dumb-to-breathe programmers?
There are tons of people like this guy in tech. Coded a year or two and found out the were a taker and not a maker. Still pretending to be a maker though. Their idealized programmer befits a corporation. Colors in the lines and writes "perfect code" which has no meaning other than has been annointed by CR's as to make it seem owned by the company rather than the individual. Their ideal programmer is someone who doesn't need to understand the details, works as a unit in a team, and gathers all of their knowledge by "getting help" from the company. It is absolutely blasphemy in the corporate world to suggest that anyone synthesize his or her own ideas. That's of course ridiculous but in a business setting, the takers absolutely must discount creative thought of employees 100% which literally the "product" up for grabs in tech companies. Obviously if people knew the value and how to exploit their own original ideas they wouldn't need the fucking company or takers.
As far as math and algorithms, those are more important than ever. The reason you don't see people working on those is that those people are hidden from public and private view, jealously guarded by the takers who think they control them. Natural sciences did not fucking change since the 90's. A surface to air missile or high frequency trading algorithm or advanced simulation is as costly and valuable as ever. It's the author perception of what is valuable that has changed. He's looking for code monkeys to exploit who will "get help" and write "clean code" whatever the hell that means.
Egor answers to a question, why his company has only 2 female coders from 500. His answers is a joke "Female Coders are like guinea pigs, neither Hyena neither Pigs. So lets not try to make programmers from women, because they they'are not women and not coders"
Wouldn't programmers know how to code it themselves without req. Stack Overflow? I would be pissed spending $100k /year on programmer who uses Stack Overflow.
Stack overflow is a valuable resource. I'd be pissed if my boss told me not to use it.
"How often they need to refer to reference material" is a pretty terrible metric for measuring the abilities of a programmer.
Its similar to being unable to do math in your head. You can get away with always using the calculator but you'll be outperformed by someone who can do it without dropping their pencil.
They're not wrong about the first part. Tiling window managers are very efficient. They are wrong about that making them more productive, though. It certainly makes them feel more productive, but this kind of micro-optimization is solving something that wasn't actually a huge productivity problem to begin with. You can add up all the time I spend switching windows in a slightly suboptimal manner on Gnome or Windows and all of that time will be lost by an extra 5 minute coffee break or the mental deficit from sleeping less than 8ish hours a night.
Similarly, a person who doesn't have to look at Stack Overflow may seem more productive, but the tiny amount of time it takes to look something up instead of remembering it is a very, very small part of the developers day. Even if they have to do it 100 times a day it's unlikely to make any meaningful difference in the big picture.
Not needing documentation would be helpful in a world where a programmer sat down and didn't stop typing for 8 hours, but that's not the world that we live in.
100*1 minute is an hour and 40 minutes. That is not a trivial portion of the work day. Even if it were 30 seconds that's still almost an hour.
If that is truly a micro optimization then I shudder to think of the waste elsewhere.
Suppose candidate A tends to communicate in terms of specs and reference implementations. Candidate B tends to communicate in terms of accepted answers and discussions on Stack Overflow.
All other things being equal that should be an easy choice.
I have also seen entire teams that would not really notice if the internet was working.
Stack Overflow has a place in productive development, but I agree - people should be able to function without it.
1) Posting general questions about "coding", like syntax questions, ie- "how do you create a loop in JavaScript"
2) Posting specific, targeted questions about specifics of something the dev doesn't do on a regular basis, ie- "how do you use Google OAuth for logins"
3) Searching existing SO posts for general questions about "coding", ie- Google search for "what is the difference between let and var in JavaScript", read first SO result
4) Searching existing SO posts for the specifics, ie- Google search for "how to manage cross-tab communication using javascript", read first SO result
I would argue that a competent dev would (and should!) utilize SO using the 4th strategy on a regular basis (maybe weekly for a web dev) and occasionally the 2nd when all other resources have been exhausted. If you are paying someone $100k, yeah I agree that the first usage pattern is inappropriate, but saying "a developer shouldn't need to use StackOverflow" is a gross oversimplification of the vast knowledge that exists in SO.