Remember the Computer Science Past Or Be Condemned To Repeat It?
theodp writes "In the movie Groundhog Day, a weatherman finds himself living the same day over and over again. It's a tale to which software-designers-of-a-certain-age can relate. Like Philip Greenspun, who wrote in 1999, 'One of the most painful things in our culture is to watch other people repeat earlier mistakes. We're not fond of Bill Gates, but it still hurts to see Microsoft struggle with problems that IBM solved in the 1960s.' Or Dave Winer, who recently observed, 'We marvel that the runtime environment of the web browser can do things that we had working 25 years ago on the Mac.' And then there's Scott Locklin, who argues in a new essay that one of the problems with modern computer technology is that programmers don't learn from the great masters. 'There is such a thing as a Beethoven or Mozart of software design,' Locklin writes. 'Modern programmers seem more familiar with Lady Gaga. It's not just a matter of taste and an appreciation for genius. It's a matter of forgetting important things.' Hey, maybe it's hard to learn from computer history when people don't acknowledge the existence of someone old enough to have lived it, as panelists reportedly did at an event held by Mark Zuckerberg's FWD.us last Friday!"
10 GOTO 20
20 GOTO 10
It's managers and executives who make the decisions, and to them whether it's a browser or mobile app or SaaS or whatever the latest trend is, who cares if you're reinventing the wheel as long as profits are up.
sysadmins and parents of newborns get the same amount of sleep.
I saw the Lady Gaga quip and Scott's fondness for effective ancient map-reducey techniques on unusual hardware platforms. It reminded me about things like discovering America. Did the Vikings discover it years before any other Europeans? Certainly. Did the Chinese discover it as well? There's some scholarly thought that maybe they did. But you know whose discovery actually effected change in the world? Lame old Christopher Columbus.
Perhaps there's a lesson to be learned here from people who want to actually change the world with software and if we spent less time ranting about mmap-vs-scanf-in-Hive we could learn it.
The World Wide Web is dying. Soon, we shall have only the Internet.
John Graham-Cumming gave a talk at OSCON 2013 titled "Turing's Curse" that speaks to this same idea. Worth a watch.
It's pretty damn obvious why this is: as an industry, we no longer shun those who should definitely be shunned.
Just look at all of the damn fedora-wearing Ruby on Rails hipster freaks we deal with these days. Whoa, you're 19, you dropped out of college, but you can throw together some HTML and some shitty Ruby and now you consider yourself an "engineer". That's bullshit, son. That's utter bullshit. These kids don't have a clue what they're doing.
In the 1970s and 1980s, when a lot of us got started in industry, a fool like that would've been filtered out long before he could even get a face-to-face interview with anyone at any software company. While there were indeed a lot of weird fuckers in industry back then, especially here in SV, they at least had some skill to offset their oddness. The Ruby youth of today have none of that. They're abnormal, yet they're also without any ability to do software development correctly.
Yeah, these Ruby youngsters should get the hell off all of our lawns. There's not even good money in fixing up the crap they've produced. They fuck up so badly and produce so much utter shit that the companies that hired them go under rather than trying to even fix it!
The moral of the story is to deal with skilled veteran software developers, or at least deal with college graduates who at least have some knowledge and potential to do things properly. And the Ruby on Rails idiots? Let's shun them as hard as we can. They have no place in our industry.
If you have defined features that are more of a consequence of having a particular data model rather than any use required by the customers, you have a shit product. If your UI is coded for what's easiest for the programmer rather than what allows the user to make the most money, you have a shitty UI. If you depend on lock in for your revenue rather than usefulness, you are hoping your customers are idiots and idiots are harder to support than smart people.
Rinse and repeat.
http://scottlocklin.wordpress.com/2013/07/28/ruins-of-forgotten-empires-apl-languages/#comment-6301
Computer science worked better historically in part because humorless totalitarian nincompoopery hadn't been invented yet. People were more concerned with solving actual problems than paying attention to idiots who feel a need to police productive people's language for feminist ideological correctness.
You may now go fuck yourself with a carrot scraper in whatever gender-free orifice you have available. Use a for loop while you're at it.
[Fuck Beta]
o0t!
That's genius: comparing a "$100k/CPU" non-distributed database to a free distributed database. Also no mention that, yes, everyone hates Hive, and that's why there are a dozen replacements coming out this year promising 100x speedup, also all free.
And on programming languages, Locklin is condescending speaking from his high and mighty functional programming languages mountain, and makes no mention of the detour the industry had to first take into object-oriented programming to handle and organize the exploding size in software programs before combined functional/object languages could make a resurgence. He also neglects to make any mention of Python, which has been popular and mainstream since the late 90's.
One of the things that I still see is the idea that when a problem exists, throw more people at it. The mythical man month pretty much threw that to wind for software development, and I am sure there are a whole slew of books that predate it saying essenstially the same thing. Yes advancements do mean that more people can communicate more directly, but there still is a limit and I do not think it is as great as some believe. Define interfaces, define test that insure those interfaces exhibit high fidelity, and let small teams, even a single person, solve a small problem. What technological advance has done is make clock cycles very cheap, so there is less excuse to go digging around trying to change code that will make your code run a little faster. Speaking of interfaces, we know that when data and processes are not highly encapsulated, it is nearly impossible to create a bug free large project. One thing that object oriented programs has done is to create a structure where data and processes can be hidden so they can be changed as needed without damaging the overall software application. Now, many complain because the data is not really hidden, it is just a formality. But really coding is just a formality, and a professional is mostly one who knows how to respect that formality to generate the most manageable and defect free code possible. One thing that has been lost with the generation of rapid development systems quickly spouting out bad code is that code and the ability to tweak it is the basis of what we do.
"She's a scientist and a lesbian. She's not going to let it slide." Orphan Black
We marvel that the runtime environment of the web browser can do things that we had working 25 years ago on the Mac
I don't remember that code running cross platform on varying architectures. The web as an platform for distribution should not be compared to an actual OS...that doesn't even make sense.
neorush
There are a lot of things that if source code was available, other people could build on it and make higher quality products. In the absence of source code, people need to start from scratch often rebuilding the wheel.
Competition for money might get people to strive to make better pieces of art. But on the flip side, this same competition will sue your pants off for any reason they can find so you don't compete with them either.
An on an unrelated note, I had an idea for a zombie video game like Ground Hog day today. When you die, it starts out as the beginning of a zombie pandemic. As you die and play through it over and over, you get secrets to where weapons and supplies are. You find tricks you can use to survive and save people. Eventually you find out who caused the zombie pandemic. You can then kill him before he goes through with it. I'm not sure an ending where you serve in prison is a good ending though. I didn't think it the whole way through, but it sounded like a good premise for a zombie game.
God spoke to me
Lisp doesn't "come back" every few years. For crying out loud, the entire language is nothing but an abstract syntax tree. Of course it's present in all languages! It's what they all end up getting converted down into before they finally get converted again into assembly or directly into machine code in some cases.
I don't see what's surprising or insightful about noticing that a common subset of almost all programming languages is, *gasp*, present in almost all programming languages.
We marvel that the runtime environment of the web browser can do things that we had working 25 years ago on the Mac.
Did the Mac, 25 years ago, allow people to load code from a remote server and execute it locally in a sandbox and in a platform independent manner all in a matter of a couple of seconds? No. No it did not.
We should then pay homage to the Mac 25 years ago, when it basically did what Doug Englebart demonstrated 45 years ago. Nice logic you have there.
Look at Barnes and Noble. They proactively placed a huge bet on the Nook, cannibalizing their bread and butter business in terms of floor space, and (by most reviewers) executed it the right way. The trouble is they still lost. Had they never done the Nook people would've said, "look at those overpaid idiots. Completely asleep with no response to Amazon in the digital age". Everyone would've nodded sagely.
Microsoft has a big problem. They're completely married to Windows, but it is 1) an inferior architecture to Unix and 2) a proprietary architecture when the world wants openness. Also, big companies like the telcos and handset makers don't trust Microsoft as a partner, so MS almost has to go it alone, and that's not their strength as a company.
In real life, things can't be wrapped up easily like they can in a Harvard Business School classroom.
Please explain how a 25 year old Mac can play streaming media.
that HTTP provided no optional persistent connection establishment and thus no way for the server to transmit an update to a page being viewed by a browser. The web would be 20 years farther along than it is now if that simple mechanism had been in place.
The computer industry repeats itself all the time. The current virtualization trend is like the emulation of the 60s but better.
The push toward heavy weight scripting languages with VMs over simple scripting. Watch the next trend come to make simple scripting languages that have fast startup for these virtualized environments in a few years.
The push for terminals that happens every few years.. in reality web apps are the evolution of the terminal because we get dumb devices to see them with.
Tablets are like computers from the mid 80s... no multi user modes, multitasking, etc. New versions of android support multiuser and multitasking. We almost hit windows 95 on the tablets.. I can't wait for NT.
Devices are getting dumber so the little people can use them. Soon we'll have complex tablets that mimic PCs from 8 years ago and new dumber devices will be on the horizon again.
The push for multiple CPU architectures and then the alternate push to standardize on one. Currently we've got the ARM vs x86 war and we had the ppc and alpha in the past or farther back the 68k or even farther back ibm vs dec.
History is doomed to repeat itself.
troll article? i mean really now.
The third link is mainly a praise of APL, the programming language. Talk about odd.
It would be great if he'd actually given examples of why APL is a good language. I would be interested in that. Instead he says mmap is really interesting, which actually doesn't have anything to do with programming language.
He says that old programmers have left a lot of examples of good source code. It would be great if he'd actually linked to their code.......
"First they came for the slanderers and i said nothing."
He says system performance is the same as it was way back then. He thinks that stuff just happened immediately on those systems because they were running very efficient code. So what. Here's a simple test. Go get one of those computers and set it next to yours. Turn them both on. Mine would be at a desktop before the old one even thinks about getting down to actually running the operating system. Or start a program. On a current system it loads now. As in, right now. Back then it was a waiting game. Everything was a waiting game. He must have simply forgotten or repressed those memories.
When people don't learn from people who have made mistakes or even had some real work place experience (not years of academic experience) it easy to end makeing mistakes that in theory seem like good ideas.
Also similar to some of the certs type stuff there the book says this but in the real work place that does not work.
that line about Lady Gaga made me laugh.
The best and brightest at Apple, MS, BeOS, Linux did learn from "the great masters" - thank you to all of them.
They faced the limits of the data on a floppy and cd.
They had to think of updates over dial up, isdn, adsl.
Their art had to look amazing and be responsive on first gen cpu/gpu's.
They had to work around the quality and quantity of consumer RAM.
They where stuck with early sound output.
You got a generation of GUI's that worked, file systems that looked after your data, over time better graphics and sound.
You got a generation of programming options that let you shape your 3d car on screen rather than write your own gui and then have to think about the basics of 3d art for every project.
They also got the internet working at home.
Domestic spying is now "Benign Information Gathering"
As a 66 year old life long geek I actually saw many of the things I worked with decades ago reinvented numerous times under a variety of names, but there is one thing I used extensively on IBM OS/360 that I have never seen in the PC world that was a very useful item to have in my tool kit. The Generation Data Set and by extension the Generation Data Group were a mainstay of mainframe computing on that platform the entire time I worked on it. When I moved on to Unix and networks in the last few decades of my career I looked for something similar, and never found anything quite as simple and elegant (in the engineering sense of the word) as the Generation Data Set was. Oh, you can build the same functionality in any program, but this was built into the OS and used extensively. If anyone has seen a similar feature in Unix or Linux I would love to know about it.
With to much auto testing can just code to pass the test and even if some was looking at they would mark fail but it still passes what the auto system thinks is good.
... or be doomed to repeat it. And they have been for 20 years, every year. Strategy game development in particular seriously needs a persistent collective consciousness.
Imagine how many pharaohs are rolling over in their graves watching us repeat the same "mistake" of building these rounded rectangular stones, discarded like fodder scattered on fields throughout the world as we can't seem to build a proper monument to the dead.
Oh wait, you mean we aren't trying to rebuild pyramids exactly?
In other news, a Turing machine is the mathematical definition of a computer, where all concrete computers are actually a subset of said mathematical concept. I'm not really sure why anything related to "on a computer" is patentable. If it was on a Turing machine, it would be a mathematical definition of that thing, and hence not patentable. So painful to watch as we waste our time looking at subsets of Turing machines. The only new inventions are mathematical concepts, and they are not patentable.
... which really means the late '60s into the '70s. Isaac Newton said that he saw far because he stood on the shoulders of giants. Bill Gates and Steve Jobs were *proud* of knowing nothing about the industry they were trying to overturn. The same free, open, do-your-own-thing attitude (partly based on the new abundance helped along by technological advancement) that permitted startups to overtake established manufacturers, also encouraged tossing out anything "established" as "outdated" whether it was useful or not.
I think I'll use a recursive function with floating point arguments for my climate computations then choose the hardware that gives me the result I want.
For any given software project there is an optimal team size. If the project is small enough, you can keep the team size down to what works with an agile development methodology. If the project is bigger than that, things get ugly. I started my career in a company that considered projects of 50 to 100 man-years to be small to medium sized. Big projects involved over a thousand man-years of effort and the projects were still completed in a few years calendar time. You can do the math as to what that means as far as number of developers working concurrently (I remember one project that had approximately 500 to 600 people working on it).
The methodologies and discipline exist to solve such projects. It isn't efficiient compared to a small project but small project techniques can't solve big problems in time. Usually when you attempt to explain what it entails to management you get a response of, "We don't have time for that." So, the project flounders for twice as long before finally getting put out of everyone's missery.
Oh yeah. Been there. Done that. Over and over. Seen it done right when people used the right approach and I've seen more than my share of death marches that only seemed to convince good developers to look for another line of work.
Cheers,
Dave
They that can give up essential liberty to obtain a little temporary safety deserve neither safety nor liberty.
Ben
You can learn a lot from Mozart because you can read all the notes he published.
You can listen to many interpretations of his works by different people.
We don't have the chance to read through 25-year-old Mac symphonies^W programs.
We aren't even writing for the same instruments.
Ceci n'est pas une signature.
Indeed. Half of today's programmers have roughly zero engineering education, and want to be called software engineers. They have no idea, no idea at all, what their data structures look like in memory and why they are so damn slow. Heck "data structure" is an unfamiliar term to many.
It's not entirely young vs old, either. I'm in my 30s. I work with people in their 50s who make GOOD money as programmers, but can't describe how the systems they are responsible for actually work.
How do we fix it? If you want to be good, studying the old work of the masters like Knuth is helpful, of course. Most helpful, I think, is to become familiar with languages at different levels. Get a little bit familiar with C. Not C# or C++, but C. It will make you a better programmer in any language. Also get familiar with high level. You truly appreciate object oriented code when you do GUI programming in a good Microsoft language. Then, take a peek at Perl's objects to see how the high level objects are implemented with simple low level tricks. Perl is perfect for understanding what an object really is, under the covers. Maybe play with microcontrollers for a few hours. At that point, you'll have the breadth of knowledge that you could implement high level entities like objects in low level C. You'll have UNDERSTANDING, not just rote repetition.
* none of this is intended to imply that I'm any kind of expert. Hundreds, possibly thousands of people are better programmers than I. On the other hand, tens of thousands could learn something from the approach I described.
Chariots were masterpieces of art. They were often made of precious metals and had elegant design work. They were environmentally friendly, using no fossil fuels whatsoever. They didn't cause noise pollution, or kill dozens of people when they crashed.
Aircraft makers should learn from the past. They have totally functional designs, no semblance of artistry anywhere. Accommodations are cramped, passengers treated like cattle.
We should go back to the good old days, things were so much better back then.
No. I've loaded decks of punch cards and distributed printouts. But who could afford a computer of their own? Nobody. He can have his good old days...no way *I* want to go back!
I'm old enough at 55 to remember the past, and yes I did love APL briefly but lamenting that the present isn't like the past is like wishing it was 1850 again so you could have slaves do all your work. Neither the web nor the modern mobile application is anything like the past, and what we use to write that code today is nothing like what I started with. Trying to relive the past is why old programmers get a reputation for being out of touch. The past is important in that I learned a lot then that still rings today but I can say that about every year since I started. Today is a new day everyday.
Libraries should be archiving (and date-stamping) code. When copyright expires, that code can form public domain building blocks for a lot of cool stuff.
The kids of the future won't have to reinvent the wheel, they'll be able to improve it.
Software patents suck.
But people can get far more done today with matlab and mathematica.
Hell, I'd be happy if they just learned about it in the first place
I had a coworker once, claimed a computer science/engineering education. Did not know what parity was - not "didn't know how it worked" - that would be ok, given the slow creep of IP stacks that manage that, but DI NOT KNOW WHAT IT WAS.
captcha: restart
Well, yeah, Facebook is just a slightly improved BBS and a browser is just a slightly improved ANSI terminal.
Excuse me, but please get off my Pennisetum Clandestinum, eh!
For instance: As a cyberneticist I'm fond of programs that output themselves, it's the key component of a self hosting compiler... Such systems have a fundamental self describing mechanism much like DNA, and all other "life". While we programmers continue to add layers of indirection and obfuscation ( homeomorphic encryption ) and segmented computing (client / server), some of us are exploring the essential nature of creation that creates the similarities between such systems -- While you gloat over some clever system architecture some of us are discovering the universal truths of design itself.
To those that may think Computer Science is a field that must be studied or be repeated, I would argue that there is no division in any field and that you haven't figured two key things:
0. Such iteration is part of the cybernetic system of self improvement inherent in all living things -- to cease is death, extinction.
1. Nothing in Computer Science will truly be "solved" until a self improving self hosting computing environment is created...
So, while you look back and see the pains of Microsoft trying to implement POSIX poorly, I've studied the very nature of what POSIX tried and only partially succeeded to describe. While you chuckle at the misfortunes of programmers on the bleeding edge who are reinventing every wheel in each new language, I look deeper and understand why they must do so. While you look to the "great minds" of the past, I look to them as largely ignorant figures of self import who thought they were truly masters of something, but they ultimately did not grasp what they claimed to understand at a fundamental level -- The way a Quantum Physicist might acknowledge pioneers in early Atomic thinking... Important, but not even remotely aware of what they were truly doing.
How foolishly arrogant you puny minded apes are...
"The future will be better tomorrow" - George W. Bush
Harrison's Postulate - "For every action there is an equal and opposite criticism"
The success of the most popular computer these days (the smartphone) is predicated on how much freakin' shareware (aka 'apps') is available for it.
Up to (only about) 5 years ago, I saw microsofties talking about 'defragging the hard drive'. I remember having to do that back when I owned a DOS box, and there was this disk de-fragging tool called spinrite, and it would unclutter the drive by shuffling blocks that were part of the same file together. That was when I had a 20 Megabyte disk drive (I could put more stuff on 20 1.44 Megabyte floppy disks). About 1 year after that, I went to Linux, and had a 512 MB disk drive, and Linux had self-cleaning file systems, and I learned that IBM had been behind that technology from about 1967 (Vote Nixon!). But it wasn't 1967, it was 1993, 26 years after IBM had created the technology. But microsoft only 'got that tech' about 5 years ago, about 40 years after IBM created the technology. As far as I know, you still can't remove a file from a microsoft system if that file is a running program (you can do that easily on other systems, and it makes it easier to upgrade online software). I know that computer hardware had progressed *a lot* in the past 25 years, and software had been developed (on the back end) to accommodate the hardware, but the front-end software hasn't changed a lot, and mainframe front-end software, gets re-written in C for Unix systems, and everyone gets amazed, then everything gets re-written in java and everyone is amazed, then everything gets re-written in C# and 'softies are amazed, while others re-write it in javascript, and everyone is amazed. And web browsers look like fancy dumb terminals. And everyone is amazed.
Agree totally.
"Don't teach a man to fish, feed yourself. He's a grown man. Fishing's not that hard." - Ron Swanson
You don't solve real-world problems with an all-star team, you solve it with the resources you have at hand. That often includes people who aren't very good or very experienced. Hopefully, as they go along, they will learn or improve.
I also do not think that the problems we have today were all solved long ago. Superficially, a web browser may seem like other environments, but it is very different. And the Mac architecture of 25 years ago was a clever but horrendously badly designed piece of software that almost destroyed Apple because it became unmaintainable. People's nostalgia tend to distort reality.
The writer doesn't seem to understand the difference between big data in the banking systems and big data in content analytics. Big banking systems you pretty much know what's happening at any point, the data pointers are relatively small even if the chunks are big so you can use mmap because your index most likely fits in a faster version of your range of memory.
However when the number of data pointers grows beyond the size of your actual data or your index is larger than what any of your fast memory supports, your mmap won't work. A quick example would be ZFS which has this problem when your de-duplication index grows beyond memory (which is a very small, very efficient piece of code using a very efficient form of memory mappings for it's scale) and things revert to using the hard drive.
It seems to me this is an advertisement for this company that sells hand-crafted code at $100k/CPU. Sure, if you hand-craft your code, it will be very efficient, very fast and a lot of other things. However it won't be cheap, it won't be easy to develop, it definitely won't be easy to read, debug, port, extend, fork or anything else the higher level languages has allowed us to do.
As a neck-bearded coder that REMEMBERS actually using some of these systems - yeah, we did a LOT in 64kb of memory. However we also spent HOURS to fit that stuff in 64kb and when we were done, well Perl coders would cry if they saw some of the constructions. Also, a lot of this was done towards a very specific architecture and even timings. Point-in-case would be pre-Intel 386 code - we used game assets to generate audio data. Increasing the speed of the CPU from a 80286 would make those games run faster and things that were previously running from a floppy would crash because the floppy routine couldn't supply data fast enough.
Custom electronics and digital signage for your business: www.evcircuits.com
Most of this sounds like greybeards nattering about the kids on their lawn - while ignoring reality.
A designer on the Falcon 9 today is wrestling with issues that plagued von Braun and Goddard. The guys across the sound at Boeing dreaming up the successor to the Dreamliner are coming up against, and with new solutions for, problems that Lilenthal and the Wright bothers had to deal with. When I go out to my woodshop, I face and come up with solutions to some of the same issues that Joseph did.
It doesn't matter what IBM or Apple did or didn't do mumble years ago, because this isn't mumble years ago. None of us are "ignoring the lessons of the past" because we aren't working with the methods, materials, or in the environment of the past. The solutions of the past may not be applicable in the present even if the problems are identical.
I think "learning from the old masters" really isn't the problem. It's not that we don't have lots of smart people writing software. I think the core problem is that we haven't figured out how to do upgrades and backward compatibility properly, which the old masters haven't figured out either. You can go and develop a HTML replacement that is better and faster, sure, but now try to deploy it. Not only do you have to update billions of devices, you also have to update millions of servers. Good luck with that. It's basically impossible and that's why nobody is even trying it.
In a way HTML/Javascript is actually the first real attempt at trying to solve that issue. As messed up as it might be in itself, deploying a HTML app to billion of people is actually completely doable, it's not even very hard, you just put it on your webserver and send people a link. Not only is it easy, it's also reasonably secure. Classic management of software on the desktop never managed to even get near that ease of deploying software.
If software should improve in the long run we have to figure out a way how to make it not take 10 years to add a new function to the C++ standard. So far we simply haven't. The need for backward compatibility and the slowness of deploying new software slows everything to a crawl.
Thank God Slashdot is reminding us not to repeat the past. Wait a minute...is this story a dupe?
http://www.workpermit.com/news/2005_10_26/us/us_h1b_visa_holders_earn_less.htm
It's not about skill.
It's about
"A recent report suggests that US employers are using the H-1B visa program to pay lower wages than the national average for programming jobs.
According to "The Bottom of the Pay Scale: Wages for H-1B Computer Programmers â" F.Y. 2004," a report by Programmers Guild board member John Miano, non-U.S. citizens working in the United States on an H-1B visa are paid "significantly less than their American counterparts."
How much less? "On average, applications for H-1B workers in computer occupations were for wages $13,000 less than Americans in the same occupation and state.""
Companies make a LIVING teaching other companies how to advertise and interview to avoid hiring qualified u.s. citizens (some of whom are the same birthplace as the H-1B's but who have the misfortune to be a citizen). (easy to find on Youtube btw- one of the seminars where they were bluntly talking about how to disqualify citizens).
She was like chocolate when she drank... semi-sweet at first and then increasingly bitter.
Now welcome to the real world. Entry level assholes, remember a few things:
Do this and you will minimize the number of people you piss off and avoid many of the mistakes other entry level assholes make. And will in fact be less of an asshole.
You don't like Gates but wish programmers looked towards more "Great Masters?" Bill Gates was a Great Master Programmer.
Because so many of them are completely lacking in any usable documentation. Mostly it's easier to rewrite a piece of code from scratch than it is to try and work out what existing stuff does, which version any documentation belongs to and whether the (few) comments in the code reflect its current status. And then you've got to try and work out how the hell the guy managed to build the shambolic mess and just how they got the Makefile to do the things they claimed.
politicians are like babies' nappies: they should both be changed regularly and for the same reasons
Face the facts: nostalgia is a thing of the past.
But javascript pays great homage to APL. In javascript you can find that A is less than B, B equals C, and C is less than A. In APL you could find that A equals B, B equals C, and A does not equal C.
The article is about the positive aspects of programming for the computer, not for the human reader (maintainer) of the program. Lots of companies used APL heavily at one time -- e.g. Boeing, Dupont and about half the actuarial programmers in the world. But it got buried by the structured programming revolution of the 1970's, when program maintenance costs started to shoot up and managers learned the extraordinary costs that one programmer with a very powerful but terse and dense language could inflict. I think that IBM intentionally invented that first pre-PC (5150?) desktop APL machine so that the APL guys could run amok in a sandbox outside the datacenter and no one would have to worry about it raining toads in the machine room.
...Containers.
You know, those things that have been around damned near forever.
They're the cool new thing! Going to revolutionize everything! Migrate your shit now! CLOUD 2.0!
There are a few problems which keep being rediscovered. In many cases, the "new" solution is worse than the original one.
I had an Atari ST at college. It booted (to a graphical, no less) desktop pretty much instantly, say a few seconds if you had a slew of SCSI peripherals (especially a CDROM drive), but otherwise it was about half a second.
It was ready to go, too. None of this crap of *showing* the desktop and then spinning the busy cursor for another 30 secs...
Simon.
Physicists get Hadrons!
It would help quite a lot if we hired a few programmers over 30.
.., a good coder often has such unexpected characteristics. Ir requires a tenacious, unyielding character. The best possible solution is the solution. It's not the smart guy that talks a lot and gets stuck in analysis paralysis. No fear of new approaches, new technologies, huge, bad legacy code that needs analysis. The minimal interpersonal skills to ask questions when they can result in faster understanding. There's no complaining about languages, operating systems, or environments. There's just a focus on the best solution. There's no complaining, that's just weakness and fear. Fear of new is unacceptable weakness. Personality, real personality. You're not a fucking salesman, show some love for people that make you look good, and expect the same. You're never there to stop progressing, if that's your game then go into management. I actually spend a good portion of my time staying off the radar of "tenured" developers, so that I don't piss them off with "new ideas" and "refactored designs. The corporate development world is a simple place, monkeys vying for pecking order while exerting the least effort. Ensure acknowledgement of your work, through whatever means necessary, and subtley set a ground rule that nobody will take credit for your work.
If you hire only youngling, and people above 40 find getting a job in development difficult, then you are condemned to have a development team which never learn from mistake, try to reinvent the wheel. Somebody mentionned it is because of the manager : no not really. I have not seen any development team where the manager dictated the architecture or how the code looks like. They might impose a choice between 2 designs doing the cheaper, but the reinventing the wheel is solely developer's fault.
C. Sagan : A demon haunted world:
http://www.amazon.com/gp/product/0345409469/
visit randi.org
http://xkcd.com/1227/
Those who do not remember complaining about the past being better are doomed to repeat whining about it.
And then there are the ones that know about data structures. It does not make great software perse. Some people follow the right direction and do not arrive at the right destination. Because they never thought of that.
Get thee glass eyes, and, like a scurvy politician, seem to see things thou dost not.--King Lear
I've always felt like that quotation had another interpretation, one that's much more favorable to the MPs:
If you're an MP, you've probably had to deal with a lot of people asking for money to fund what is essentially snake oil. If you don't understand the underlying 'cutting edge' technology (both plausible and acceptable), one simple test is to ask a question that you KNOW if the answer anything other than "No" that the person is bullshitting, and you can safely ignore them... and as reported the question is phrased in such a way that it would sorely tempt any huckster to oversell their device. I think Babbage's lack of comprehension was due to his inability to understand the idea that the MP was questioning HIM, rather than the device.
It seems to me that we /did/ learn from past errors, at least in fields where APL and its derivatives are examples of what not to do.
Reading wikipedia: in the J language, which is a "synthesis of APL and the FP and the FL function-level created by John Backus", one writes quicksort with so many 'junk' characters that slashdot scripts simply reject them in a post (!).
Today, :) )
1) we can code without having a keyboard with a thousand of keys or having to press combinations of keys that would surpass any emacs lover's ability for each character;
2) we can actually read code that has been written (agreed, it might not be true for Perl, but this is another debate
Actually, from the examples cited, it seems to me to be painfully obvious why in those cases information was not shared.
For quite a long period of time, IBM and MS were stiff competitors (remember OS/2 warp?). I doubt MS would inform IBM what they were working on, much less seek help. In fact, it seems to be the exception rather than the rule for software companies to share code with each other. Selling code, after all, is usually how they make money.
Im fairly confident that Apple would sue any company that copies its software written for the Mac. Let us also not forget how much problems Oracle caused for Google when they sued over the Java API in Android. Yes, it is efficient to reuse old tried and tested code, but it also opens you up to a lawsuit. So it is not so much reinventing the wheel as trying to find a different way of doing things so you wont get sued. For that, you have current IP laws to thank.
The problem here is with equating writing software to producing works of art. People are willing to go out of their way to learn and improve themselves to paint better or make beautiful music because it enables them to express themselves. It's emotionally satisfying. OTOH most software is programmed to achieve a certain utility and the programmer is faced with constraints e.g. having to use certain libraries etc. He is rarely able to express himself, and his work is subject to the whims of his bosses. For most everyday programmers, I think there is no real motivation to 'learn from the great masters'.
An exception might be the traditional hacking/cracking community where the members program for the sheer joy/devilry of it. I understand there is a fair amount of sharing of code/information/knowledge/learning from the great masters within their community.
C will make you a better programmer? Don't be soft and use assembly instead!
If information wants to be free, why does my internet connection cost so much?
You play with that newfangled mnemonic bullshit, huh? 1s and 0s too much for you?
goddam kids.
(-1: Post disagrees with my already-settled worldview) is not a valid mod option.
It starts with the morons in the executive wing, is perpetuated in the management wing, and further whored at the marketing wing.
Taking the time to write GOOD CODE is not allowed anymore. No software project is given the proper money and resources to do it right.
Now top that with CS grads that barely know what the hell they are doing and barely have any real CS or EE education.
Do not look at laser with remaining good eye.
There is almost no demand for computer scientists. None whatsoever. The result is that there are very very precious few computer scientists - real, actual scientists.
What there is an enormous demand for are code monkeys - people who can churn out code quickly that allows a company to meet their unreasonable product release target dates and cost targets - but who don't have any real idea what is going on or what their code actually causes the computer to do.
Get a little bit familiar with C.
I appreciate the sentiment, but I disagree. Back years ago when C was the popular language, before Java and Python and Ruby, etc etc, exactly the same complaints could be levelled at C programmers.
The thing is programs were much smaller and with sufficient effort the more egregious bugs could be swept under the carpet. I actually remember a guy complaining about the DEC compiler because it made his code crash (basically the code was bad and the compiler inserted less padding than other compilers).
SJW n. One who posts facts.
Theoretically, this is the type of stuff you get from a formal education. With how young our field is, I'm not surprised that a number of professionals lack the background material to make decisions based on the mistakes of the past. As we mature as a field this will become less of a problem.
On a large scale, I don't believe the problem is fixable. In a class of 40, at an admittedly non-stellar university, no more than 6 students could do what you are suggesting. I doubt that it would have been possible to go much higher than; the alternative is to increase standards of enrollment.
The thing is, it doesn't really matter that much. Most of them are going to be grinding out websites in .NET and they won't really need it. For that 2% of cases where they do, they can call on the office keener to take care of it. From a business perspective, those smarter guys can be a liability because they are expensive, get bored, and tend to design things that others don't understand. If you are developing the future, you need the best. If you are doing a little custom dev for an off-the-shelf CMS, you only need to be good enough.
Yes, back in the day it could be said that becoming familiar with assembly could make you a better C programmer. It can still be said, because it's true, and I said it above. That's the point of "spend a few hours playing with microcontrollers", to get a minimal familiarity with that level of intimacy with the hardware.
.NET will make you truly appreciate the value of objects, interfaces, etc.
Are you suggesting that it's not true, that C won't show you things that you don't learn from Ruby? Also the reverse - GUI programming in
Note that I'm not suggesting that all programs should be written in a low level language. Go ahead and use the appropriate language. Perl is great because it has LWP::Simple (very high level) and it has bit shift operators.
What I'm saying is use SQL, sure, and even report generators, but know how they work. If I give you two tables that are 3X3, could you perform a join with pencil and paper? If so, you'll do better work than someone who only uses a report generator and has never looked at the underlying data.
Historically, apprentices would study at the master's feet. They would start by doing menial support tasks (like sweeping floors), moving to copying the master's work as journeymen, then finally after many years becoming themselves masters and actually creating works.
Up to 80% of the cost of software is maintenance. There are very few maintenance programmers. See, most kids want to start out at the master level and skip paying their dues. There's a bug or an enhancement? No problem! just rewrite the program from scratch, do it right this time! It's actually less expensive to rewrite the software than to maintain it, since you save that 80% of the cost. At least in the very very short run.
If programmers were required to do an apprenticeship, doing software maintenance for a couple of years before ever writing something new, they would be exposed to what went before and overall quality would go up. It just seems the know-it-all of youth has been taken too far in the industry and the price is being paid.
Perl is a perfect example of a programming language perfected but in many instances replaced by Python/Ruby. Sure its object model is a bit obscure and only a fool develops without "strict", but otherwise it is the best scripting language for anyone working with large data sets and task automation. Of course one cannot prevent the choices of imbeciles anymore than one can influence a musical choice of The Black Eyed Peas verses Pyotr Ilyich Tchaikovsky.
You've missed it. Things get re-invented every generation because doing so is where the fun is. Simply tying together primitives written by somebody else sucks all the fun out of the whole process. No matter that they'd be done 10x as soon. Programming is supposed to be fun, and nothing, not even common sense, is going to remove that fun.
I've known so many programmers that had working components at their fingertips that could do everything they needed, but wanted to do it themselves so the code would be *theirs*, and not somebody else's.
At London's Science Museum, you can see Babbage's actual brain in a glass jar.
Unfortunately they haven't yet put in the electrodes, microphones and speakers to make the communication work really well yet.
there's a difference between a language and the code produced by those languages. The article is really more about the quality of earlier languages. To take that and say broadly that programmers don't learn from great masters is quite a stretch. I have not and likely will never write a full blown language, although I do write a lot of software and learn quite a bit from the open source software I use regularly. I don't know if they qualify as a Beethoven for you but it's music to my ears and I would say I've grown considerably from what I've learned.
But checkpointing filesystems come close.
As do some code/content management systems (gitfs makes one present a filesystem mount).
He was a good PR person... and good at dumpster diving.
He did not write dos... that was "appropriated".
And just what code (give example) did you think Gates deserves a "Great Master Programmer" do?
Computer Science learning like math learning is and should be cumulative. we should remember the important things that are required to build more technology and teach them on. Even if its not something directly useful, if it can be applied then it is worth learning and remembering. Take Turing machines for example. Aside from making a turing machine in mine craft or dwarf fortress, its really not something most people do. However, there is important state logic in turing machines that you can apply to a multitude of programming paradigms.
It is a product of rampant ageism in the industry. Younger coders, working with the latest and greatest tools, think they are solving new and unique problems which have never before been encountered. They assume their older colleagues (assuming older colleagues exist at all) have never solved complex problems and are therefore not worth consulting.
The attitude extends to systems. Our two IBM Power7's require four people to operate and maintain. This includes coding, data base administration, and system administration. Our kludgy collection of Microsoft SQL servers do about the same amount of work as the Power7's, but require about 60 people to operate. I can't believe the amount of tweaking and oversight they need. IBM solved and automated these operations years ago.
Librarians are well used to this... for example MARC Records and after all they've had to deal with these sort of problems for a while... 1700 years in this case who are currently in the middle of a digitization project.
I expect there to be many requests in these comments for lawns to be gotten off of.
Okay, I'm sure some little girls with no self confidence think she's great. No one over the age of 13 and no one with a penis thinks she's anything other than a ugly ass attention whore. Her lyrics are about as impressive as you can expect ... if they were written by her 12 year old fan club.
Persistent Volume manager for Kubernetes - https://github.com/dwimsey/openshift-pvmanager
That's just being too lazy to do any real analysis.
I've found it to be beneficial to construct low-level data-wrangling classes in C#.
You'll have a new respect for the underlying "guts" of stuff when you've attempted to write an MJPEG AVI file writer in C#.
You'll also have a fork in your eye and a hangover that would incapacitate a sailor for a week.
..if the source code is treated as a secret
>. Back then as now, people managed to struggle through careers in programming without seeming to gain knowledge, skill or apparently any understanding
I like how you distinguished between knowledge, skill, and understanding. I think many programmers have knowledge of how they've seen something done,
but no understanding of why that's the right way in some cases and not others, or what the side effects may be.
For people who have knowledge, working with languages at different levels can deepen understanding. It has for me.
So, everyone avoids using a previously solved problem because of a patent which is expensive to defend agains.
Instead of a cambrian explosion of languages and solutions followed by a die-off, we have artificially enforced a permanent evolution of wierd, inefficient home-grown code experiments with 9 eyes and star shaped trifurcated limbs to do what two eyes and a claw would have done nicely.
Please do not read this sig. Thank you.
It is normal for us to repeat the past.
Look at the history of computers and you will always find repeated technology just with new names.
Then:
Mainframes - fast, and smart computers.
Terminals - slow, and dumb computers.
Now:
Clouds - fast, and smart computers.
Phones - slow, and dumb computers.
Then:
bulletin board system (BBS), Usenet newsgroup
Now:
facebook, twitter, google+, forums, blogs
Then:
AOL old front end, hypercard
http://www.mikerichardson.name/oldaol/
Now:
HTML
Then:
CSV, property file
Now:
XML, JSON
Welcome to the past, because we will always repeat it in one form or another.
But, we will just put a different sticker on it.
" In a class of 40, at an admittedly non-stellar university, no more than 6 students could do what you are suggesting. I doubt that it would have been possible to go much higher than; the alternative is to increase standards of enrollment."
Well, if only 6 out of 40 could do that, isnt that an indictment of the school? Should we increase standards of enrollment to those who already know the subject matter and so dont need to take the class?
The whole purpose of school is to learn - if you already know a subject, why take a class in it? Or better yet, why complain about those in the class who dont understand - isnt that why theyre there for Christs sake?
It's hard to learn from the Beethoven and Mozart of software design when a lot of code is closed-source. I'm sure a lot of older code would also be hard to get running again. You would likely have to track down old compilers that nobody distributes anymore and for a lot of code older than 20 years you'd like have to find or emulate old hardware.
Yeah, studying assembly and writting the op-codes by hand are also important. But C gives you another point of view, one that is central to understanding the modern world.
Rethinking email
Some generalities, usually true IMHO:
The mother of all languages is assembly. The best programmers are fluent in assembly (often several) and understand very well what a higher level language generates in terms of actual code. C, being pretty close to the metal, offers an excellent path upwards while maintaining an easily grasped relationship between what's happening at the metal level and what one writes. This in turn can lead to highly efficient code in both the space-consumed and cycles-taken senses. The more abstract a language gets (as measured against machine code), the more difficult it is to understand exactly what you've caused to be put together to solve your problem(s.) That leads to slower, fatter code, and that in turn indirectly (but dependably) leads to faster processors and better memory systems in order that said code runs as fast as the previous generation hardware against the previous generation's code. Yet at the same time, those same faster processors make expertly written asm and C code go faster; that in turn directly leverages the skills of the best programmers because the speed of the new processors and memory systems is not in any sense abstracted away at the ASM and C levels.
The most important "new" tool (not that new, really) is the metal-level understanding of threading so as to take advantage of multiple cores. Other than that, nothing fundamental has changed, nor, frankly, do I expect much to change in the near future.
One of the more obvious problems with programmers of more recent vintage is they learn, and then practice, at a very high abstraction level; implementation of efficiency and tuning escapes them simply because they cannot get to the key issues in order to practice and develop those skills.
Also, somewhere up thread, Python is completely mischaracterized. If you think Python is like BASIC, what that tells me is either you know very little about Python, or you don't know much about BASIC. It's definitely one or the other.
--fyngyrz
(posting anon due to mod points)
...is reveal himself to be a poor programmer. Debuggers are for people who write buggy code.
What's that!?
I laughed when you wrote,
Tell the kid to learn ObjC/Cocoa. Then you will learn the notion of quality OOA/OOD and world-class OO Tools for UI design. Better yet, tell them to find a copy of NeXTSTEP, put it in a VM and dig for the old NeXT Dev Manuals.
Fame is wholly over-rated. It's about accomplishment. The TV generations are the ones seeking fame, because they've been misled that a moment of adulation is worth something. I'm here to tell you it isn't. Advancing the power and scope of as many people's abilities as possible -- now that is a worthy goal. You know what fame will get you? Posts about your personal habits on programming sites. And very little else. A great application, on the other hand, empowers every competent user. That's the holy grail, right there.
That was supposed to say the VALUE of object oriented programming. Develop a GUI using textbox objects, then the same GUI via graphics primitives, no objects. You'll quickly learn to love objects.
That's orthogonal to how well the language's object system is designed.
Jeremiah Cornelius obviously trolled you by ac posts in 4 replies + unjustified downmods of your posts attempting to hide the truth he really is nothing more than empty rhetoric along with failed illogical off-topic ad hominem attacks attempts when you showed us a specific example of "his kind" being incompetent. Jeremiah Cornelius also showed us how his type, the PHB, operates (reprehensible unskilled cowardly scum that are nothing but buzzwords and hot air with no actual useful skills).
Of course they do, but it was just published yesterday! Slashdot needs at least 7-10 days to give other news outlets a chance to inform you before igniting the local comment flamewar.
Creating a Mac-only scripting environment in the 1980's, then complaining because users are so stupid that the market chose Javascript instead is nothing more than Mr. Whiner [sic], well, whining that cross-platform, open, networked standards won over his proprietary precious inventions. Wah, wah.
Yeah, I know Frontier is GPL now, but that wasn't always the case. Open sourcing failed proprietary products doesn't guarantee their success unless being proprietary is their only flaw. And maybe not even then.
Has been insulating programmers from 'real' world.
Casteism
There are the 'coder factories' that advertise on late night TV. The people that come out of there, and even out of high-school and Jr Colleges or trade schools are all dropped in the same pool as 'programmers'. Most programmers, at least the better ones, view their code as in many ways an art form. Once upon a time (think '70s) using 'tricks' to save memory was a big thing and was often used as some sick form of 'job security'. From what I have seen most individuals are over that, but not so much commercial software companies that think 'protectionism' is 'protecting their assets'. Much code has been 're-implemented' by doing blackbox reengineering.
There is still a place for the arts in computers and even software, but making things run better, faster, be smaller, use less resources, use 'vertical' AND 'horizontal' computer power, failsafe, encryption, API's, easier to network/interface, secure, better human interface, usability, etc.
Yes, I have studied the history of computing both academically and as a personal interest. That includes anything from mechanics of the babbage engine, digital systems design (that has been useful several times since school in 'doing what everyone says can't be done'), studying the architecture of the Saber System (hardware and software from IBM for American Airlines - now antiquated, but a leap forward in interactive computers, networking, and database architecture). I have worked with some of the architects and developers of the original National Semiconductor UART chips and the IBM HASP system originally written for NASA to keep them from being kicked out of NASA in Houston. Knowing HOW these worked, how the succeeded and failed ALL helped in my systems I wrote for customers (Mainly Fortune 500 types but includes medium to mom&pop shops).
It has been interesting studying some of the big failures and successes of the past, both in computing and business. Seeing the advanced systems before they were appreciated by the public. Seeing the marketing faux pas of large and small companies. For many small companies it is fatal, for large it hurts reputation even if they get through it (Ford Edsel, Apple Lisa, New Coke, we can all name some more).
I don't think EVERYONE needs to get as deep into it as I have, but it would help understanding and appreciation of the history both technical and of the people and times when developing solutions for today and the future.
Education is never lost. It just adds to the tapestry of life.
Mark Zuckerberg is a hell of a person to talk about not repeating mistakes and learning from the past. Whether computer science or not, Face Book is designed to make every error in BBS, blog and USENET design that has ever been made in the past, beginning with the context reply debacle of recent months, and I know because the first BBS I used was way back in 1976 that used text-only messages. It was developed by the Institute for the Future from Menlo Park Ca. and we ran it on a Honeywell MULTICS system at USGS, we may have only used T1 lines to talk to other branches, but USGS was on the Arpanet at about that time.
What is happening is that still very few programmers have CS degrees and so don't know the work of Knuth, McCarthy, Minsky, and even of Richie and Kerningham, so they can't know the evolution of computer languages and operating systems and they can't know how log ago some of the issues we have to deal with today were first discussed 50 years ago and before. They might have Linux or *nix and not appreciate the history contained in /usr/bin. My favorite computer language of late is python, and with any language you revisit the past more or less with design patterns and data structures, so learning design patterns repeatedly for emerging languages gets you some legacy, but going back and revisiting the issues of the past and not falling into the trap of thinking because it is new and hyped that it must be better is a big hurdle for modern developers, especially when they buy into the hype of the PR departments they work with.
As for Zuck, he would do good to examine the vitality of his business model and the history of newsgroups then to worry about theoretical matters. Leave that to the people at places like Stanford Computer Science. Zuck has a long way to go before he can hobnob at that level, despite how much is worth. He shoudl mind his own business, literally, and make the experience decent for his users, because it is not!
Jeremiah Cornelius obviously trolled you by ac posts in 4 replies + unjustified downmods of your posts attempting to hide the truth he really is nothing more than empty rhetoric along with failed illogical off-topic ad hominem attacks attempts when you showed us a specific example of "his kind" being incompetent. Jeremiah Cornelius also showed us how his type, the PHB, operates (reprehensible unskilled cowardly scum that are nothing but buzzwords and hot air with no actual useful skills).
Hmm, APK pretending to be someone different, supporting APK's post.
My goodness, we never expected that.
Not to mention the pioneering works of Harlan D. Mills, Edsger Dijkstra, Robert W. Floyd, Frederick Phillips Brooks, Jr., C. A. R. Hoare, and Larry LeRoy Constantine.
comparing great coders of the past to great musicians is a little bit wrong... Great musical works by geniuses of their day were exposed, meaning, if you were appropriately skilled, you could simply write them down and look at the score, the code, and see directly what the Genius had wrought. With programming it is more obscure, unless the code has been released to the public, all you have are errors, mistakes, and interface design to illuminate you as to the processes and logic that went into its creation. one example would be google. you don't learn alot about the google backend from its web interface, but you know there is some serious stuff going on in the background to spit out a result to you based on the words that you typed in cross referenced with what amounts to basically all of human knowledge.