It's Time To Revive Hypercard
HughPickens.com writes HyperCard, an application program and programming tool released for the Apple Macintosh in 1987, represented the 'computing for the people' philosophy that enabled users to go past the pre-built software that came on their machines, and to program and build software of their own. "Mac users could use Hypercard to build their own mini-programs to balance their taxes, manage sports statistics, make music – all kinds of individualized software that would be useful (or fun) for individual users." Now Jer Thorp writes that the end of HyperCard left a huge gap that desperately needs to be filled – a space for an easy to use, intuitive tool that will once again let average computer users make their own tools. According to Throp, this type of plain-language programming makes sense, particularly in an application that was designed specifically for non-programmers. "I find the largest concern for learners to be not with the conceptual hurdles involved in writing a program, but with obscure and confusing syntax requirements. I would love to be able to teach HyperTalk to my students, as a smooth on-road to more complex languages like JavaScript, Java or C++." By putting the tools of creation into the hands of the broader userbase, we would allow for the creation of ultra-specific personalized apps that, aside from a few exceptions, don't exist today."
HyperTalk wasn't just easy, it was also fairly powerful. Complex object structures could be built to handle complicated tasks, and the base language could be expanded by a variety of available external commands and functions (XCMDs and XFCNs, respectively), which were precursors to the modern plug-in. But ultimately, HyperCard would disappear from Mac computers by the mid-nineties, eclipsed by web browsers and other applications which it had itself inspired. The last copy of HyperCard was sold by Apple in 2004. "One thing that's changed in the intervening decades is that the hobbyist has largely gone by the wayside. Now you're either a user or a full-fledged developer, and the gulf is wider than ever," writes Peter Cohen. "There's really nothing like it today, and I think the Mac is lesser for it."
HyperTalk wasn't just easy, it was also fairly powerful. Complex object structures could be built to handle complicated tasks, and the base language could be expanded by a variety of available external commands and functions (XCMDs and XFCNs, respectively), which were precursors to the modern plug-in. But ultimately, HyperCard would disappear from Mac computers by the mid-nineties, eclipsed by web browsers and other applications which it had itself inspired. The last copy of HyperCard was sold by Apple in 2004. "One thing that's changed in the intervening decades is that the hobbyist has largely gone by the wayside. Now you're either a user or a full-fledged developer, and the gulf is wider than ever," writes Peter Cohen. "There's really nothing like it today, and I think the Mac is lesser for it."
The majority of us did not have money to spare for Macs. I have no doubt that they were the best personal computers around. I used them.
For less expensive computers, there was the BASIC interpreter. Not as WYSIWYG or simple and Beginners need to think when coding, even at that level. It also had the advantage of being close to a standard untill MS teurned it into QBasic then dumped it.
BASIC is what we need again but standardised and improved a lot.
I'll see your Constitution and raise you a Queen.
LiveCode is free, supports Mac, Windows, Linux, iOS, and Android. Best of all, it speaks HyperTalk, plus has more flexibility HyperTalk didn't.
I've moved on from wanting HyperCard, to using LiveCode.
Obligatory - smart people have been working on it for quite some time. (Although admittedly, their main goal is to prove that common personal computing is ultimately squashable into 20 kLOCs.)
Ezekiel 23:20
I learned on HyperCard, so I know your pain. I still use HyperCard daily at work.
However, many years ago I discovered Runtime Revolution, a commercial product that is effectively what HyperCard should have been. Recently it's been released freely as LiveCode. Check it out. Runs on anything you'd want it to (Mac, Linux, Windows, etc.).
I learned to program with both BASIC and HyperCard, depending on which machine I was on at the time, back when I was younger. I think it's a great idea. I built simple "database" simulations, using nothing more than the free stuff that came with it, and it helped to mold my initial approach to programming. I even created a testing program we used at my high school for a couple of my teachers that was ran over a network. It was fun AND useful.
. Define sqrt(x) as something really evil like (x / rand()), and bury it deep. Watch your coworkers go nuts.
APL, FYI. HAND.
Get thee glass eyes, and, like a scurvy politician, seem to see things thou dost not.--King Lear
I have seen some attempts to r creating HyperCard, but nothing really seems to have come of them. If there are any successful or fully functioning open source equivalents I would be interested in knowing about them.
I used HyperCard a bit and in certain ways the closest equivalent is something like PowerPoint or Keynote, though even with them there I a huge gap with HyperCard did. I wonder whether Apple could recreate a 21st century HyperCard, but using Keynote as a basis?
Jumpstart the tartan drive.
https://ifttt.com/ Check it out.
'We are trying to prove ourselves wrong as quickly as possible, because only in that way can we find progress.' RPF
I've felt the same way for years. I had high hopes for Google Wave to fill the gap.
It's not the same thing, and scripting for end users would not have been the same, but we don't need a direct replacement. We need:
- Web based, cloud based.
- Multi screen sized, flowable
- The card stack model from HyperCard was GOOD for naive use - and perfectly carried into Google Wave
- Simple scripting, but probably JavaScript not HyperTalk
In fact, my ideal system is somewhere in the middle of Wave, HyperCard, Lotus Notes, XSLT or similar and the web.
- Document templates that can be filled in. Let's get rid of MS Word and have more structured docs, but in a way that hobby developers can cope with.
- Effective visual editing of templates; HTML template editing but much more like a good UI editor,
- Somehow remove all the complexity from the scripting of events... HyperCard WAS good at this!!
I'm not going to mention SharePoint. MicroSoft NEVER understood groupware!
So we shouldn't have easy-to-use tools for people to LEARN how to program? Or for people (including kids) who never thought about programming, but took interest in it only after writing some software using an easy-to-use tool?
I started using HyperCard in 1990, in grade 9 after-school computer class. I loved it. I've been writing code ever since.
Get off your high-and-mighty "professionals are the only ones who can do things" box. Just because you might have a degree, doesn't mean you know your face from your ass when it comes to code compared to some there people who don't. Just sayin'.
I'm intrigued by the idea of LiveCode, but are you serious about its built-in language being called "Grundle"?
I can't go to my boss and suggest the use of LiveCode if it has a name like that. For anyone who doesn't know, grundle refers to the area between a man's anus and scrotum.
The Coq Proof Assistant project has a similar problem. This software would be seriously useful at work, but we can't be sitting in meetings with passersby hearing us saying what they hear as cock (as in a long, thick, throbbing penis) for hours on end. We also can't go to customers and say stuff that they'd hear like, "Don't worry, our cock has verified it."
We don't need more average or low-end hobbyists writing software. ... When these amateurs try to write code in any sort of a business or professional setting, it usually ends up being the IT department or professional software developers who get to maintain the crap code in the end
I did not think this is about writing enterprise software. Where I work the system is so locked down that you could not write anything yourself anyway. Even before it was locked down, there was no way that IT would have taken over code not written outside their Dept.
When personal computers first came out they were all about the user programming it themselves. I still have some old handbooks that came with computers then (they were well written) and they were straight on to programming (in BASIC, or OPL in the case of the Psion hand-held I once had). These were easy and satisfying languages to use for what they were intended. For eg the Psion I wrote programs to keep score in Scrabble, "throw" dice, keep track of my bank balance, and such like. That is what this is about.
This opinion gets written up at least once a year. Nothing's new this time around.
Except..
Now we have a viable alternative to Hypercard: the Brainfuck programming language.
You can thank me later.
https://app.box.com/WitthoftResume Code: https://github.com/cellocgw
I've used these sorts of things extensively before. They all fail for the same reason.
Programmers often assume that the hard part of programing is the obscure syntax of languages, because to them when learning a new language, that's what's hard. And while yes, the syntax is difficult at first, the novice does get it eventually. The real problem with the novice is often the counter-intuitive logic often presented in programming.
For example, take the typical problem of "If they chose Yes, I don't want the program to do X. But if they don't, I do what them to do X"
The novice often has a hard time even articulating that condition in the English language, much less a programming one. How would simplifying the syntax make it any easier?
The solution to a programmer is simple: If "yes" then X
and the novice asks in alarm "Greater than or less than?!!? WHAT?"
So then you have your "easy" programming language that's similar to English. That's great, how do you articulate that previous statement in that language now? It's not any easier. On top of that, because you've dumbed down the language to make it more user friendly, you've likely also taken away a lot of its power. The archaic syntax of languages is often for a very good reason. And when that user does start to get somewhere, they'll end up in a forum asking how to do it, and the programmers will flat out tell them the logic at which point they'll find out that they can't apply that logic because of the simplified syntax.
If you're just starting out, I'd recommend this: http://www.autohotkey.com/
The syntax is about as user friendly as you'll ever get.
You can write the applications in notepad
You don't even have to compile them if you don't want to.
It can do just about anything any major language can.
Well this might not be for Mac users, Microsoft Project Siena might be a useful option for people on the Windows platform. http://www.microsoft.com/en-us...
This 'story' is just a copy/paste from Ars Technica used to get the submitters URL/username on the front page of slashdot.
Persistent Volume manager for Kubernetes - https://github.com/dwimsey/openshift-pvmanager
Thingamy seems to have a similar goal, but appears to be targeted only for large user base purchases. Sad, as the background material seems well thought out. http://www.thingamy.com/
Obviously, you've never had to hire CS graduates.
I can't tell you how many of these bozos who've learned in a "formal" setting can barely manage a coherent if/then statement, much less successfully complete even a small in-house application.
Granted, most of the self-taught crowd is weak on specialized algorithms and data structures. On the good side, self motivated autodidacts rarely have trouble picking this up, when necessary. CS grads seem to need a professor, hand-holding and a cookie in order to learn anything new.
Please do not read this sig. Thank you.
We already have a pretty nice 3rd party product called SuperCard which is very compatible with Hypercard. At $279 its not getting much traction. Apple should buy this product and ship it free with every Mac.
It's fairly trivial to learn a language at a decent level. We have a lot of languages that abstract away all the "hard" stuff like OS interaction and memory management. Take Java. Take C#. There is literally an object for EVERYTHING you could possibly ponder doing. You dump some values into that blackbox, it does its magic and presto, result.
The hard part of creating software is designing it. And no environment can take that part out of your hands. There is simply no way some piece of software could magically read your mind and produce it.
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
The problems are that all variables are global and there's not a good way to create a function for it. It's not designed as a visual programming language but as a simple way to put together a bunch of simple tests that don't need to reuse a lot between them. If you want to share the code that logs into your web page every time, the easiest way to do that is cut and paste. Then you have to change 80 copies of it if you ever update that code. They were working on improving that situation last time I looked at it. You wouldn't ever want to use it to accomplish work in a production environment, but you probably would never want to use Hypercard to accomplish work in a production environment. Some people probably DID do that, but you wouldn't want to.
The problem with creating something like Hypercard is that it's very hard to hit that sweet spot where it's easy enough for non-programmers to use while being powerful (and secure) enough to be useful. Whenever people get their hands on something like that, they tend to start working around its deficiencies to accomplish their goals. You end up spending more time working around the deficiencies in the environment than you would have if you'd just written the application in a real programming language to begin with. There was quite a lot of THAT going on in the late 80s early 90s, too.
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?
Wasn't that the idea behind Visual Basic, the users could write their own little functional pieces of code. This is why VBS macros exist in Microsoft Office and Windows.
Entia non sunt multiplicanda praeter necessitatem.
I programmed Hypercard a lot in middle/high school in the mid 80s. I got to college and was taking an AI course using Lisp, and was working on a reinforcement learning assignment. I had a bug in my program I couldn't track down. The smartest guy in the class sat next to me and he couldn't figure out the bug. Neither of the two TAs for the class could figure out the bug. I rewrote it from scratch and still had the bug. At one point I said "If I was working in Hypercard, I know how I could solve this." The smartest guy in the class said "That's crazy." The TA who was helping me out said "When you're ready to talk seriously about this I'll come back and help you." I went home that night a wrote it in Hypercard and it worked. Slow as all hell (it took 24 hours for one test run), but it worked. It was easy to make nice graphics of the mouse and the maze the assignment was about, which went into the final report. I got 110/A+ on the assignment.
I've never balanced taxes. Is this a new thing?
Oh, you mean balance checkbooks and pay taxes. There's much better software to do that these days.
And there are much better ways to teach programming. For a very long time there has been a movement to bring programming to the masses, as if, somehow, everyone would be able to write beautiful, intricate code to solve their most complex problems. Most people can barely match their clothing (note to the reading-impaired: that was hyperbole); why should we expect them to be able to write code?
Writing programs requires clear, linear thought. It requires thinking in terms of structures and systems. The push in the greater population has been toward valuing non-linear thought (although that baffles me), so there's a big mismatch to overcome. Yes, there are plenty of graphical programming languages that reduce the need for precise syntax, but they only REDUCE it, not eliminate it, and they still require procedural thinking which, ultimately, presents an insurmountable difficulty for many people.
Not everyone can or should be a programmer: Not everyone is a writer, Not everyone is a photographer, Not everyone is a painter. Sure, everyone should be given basic skills in writing, and perhaps in drawing or painting as a child, and so perhaps everyone should be given basic skills in programming, but beyond that, why? Not everyone is able to understand calculus; why should we automatically expect that everyone should be able to write Java, Python, or whathaveyou?
Put my fist through my alarm clock with its ding-dong death inside my ear. - The Blackjacks.
No, that's what trade school is for.
But a more relevant question would be: can we devise a building-block language that solves today's real-world problems? Such a language should be (1) capable of solving simple problems easily for general users and (2) allow including complex 'blocks' for those willing to climb the learning curve it would take to include some highly specialized function in one's program.
This is nonsense. I learned a little programming back in chemistry undergrad when they decided to use x-ray diffraction calculations to teach us some FORTRAN. I've been programming here and there since. Some of it has even been useful. I wrote a number of HyperCards back in the day and really liked the environment. It was quick and easy to put together a nice little program for specific tasks. There was a low barrier to entry and it was easy to make useful things that you could never find an IT whiz to do for you.
Here's the problem. It's a lot easier and more likely to happen that a chemist learns a little programming to get a job done than to try to teach chemistry to a programmer and get his management to approve him spending the time. If a project ever gets escalated to where "real' programmers are needed, the scientists can, at least, have realistic expectations and do a better job explaining the problem. I've helped with the design of data models, which greatly lowered a project's complexity, because I knew a lot more about how the data was used.
I have a good knowledge of my limitations. I now have a pretty good knowledge of yours except that I don't know who you are.
It wasn't just for beginners. HyperCard was used in the development of Myst.
Professionals with years or even decades of experience have enough trouble writing secure software.
And just where do these "professionals" who can't write secure software get these years or decades of experience??
It's even worse when they use "beginner-friendly" languages like PHP, Ruby (with Ruby on Rails), and JavaScript. These languages are totally shit, and end up promoting buggy, insecure code.
I don't know PHP or Ruby, but javascript is in no way "beginner-friendly". I'd been coding in BASIC, assembly, xBase (various dialects), NOMAD, and a couple I can't remember (I'm getting old) for well over a decade when I needed javascript.
Javascript is crap. Often useful and necessary crap, but still crap.
When these amateurs try to write code in any sort of a business or professional setting, it usually ends up being the IT department or professional software developers who get to maintain the crap code in the end.
It's true that someone who thinks he knows what he's doing but doesn't can really screw a project up, an idiot I worked with who thought he knew dBase almost cost us a ten million dollar Federal grant by removing some columns in some tables in an application I wrote. I was able to make it work anyway.
Asimov got it right in Foundation; those who know little and are aware of their ignorance aren't dangerous, it's those who think they know but don't that are.
But I was mostly self-taught, only taking classes after I'd been programming for years, and few of the classes taught me anything I hadn't already learned from reading hundreds of books on the subject and practicing.
And we can't forget how these half-assed amateurs often start "contributing to" (a.k.a. destroying) open source projects. Thanks to them, we have disasters like GNOME 3, where instead of trying to make efficient, effective software, they just ended up trying to make a shitty, half-assed copy of their warped understanding of OS X.
It's not that they're shitty programmers, it's that they're shitty designers, and the professionals at Microsoft are no better; Windows 8, anyone? And whose code is the least secure? Yep, your fellow professionals at Microsoft with their warped "understanding" of UI, just like the GNOME devs.
We shouldn't promote the idea of them getting involved with software development. We should discourage it!
No, we should develop easier to use tools. The languages and compilers you professionals are writing suck donkey ass.
Free Martian Whores!
_ I had a joke about it but the punch line kind of writes itself
_ no magnetic stripes so storage should last longer
_ paper is bio degradable so it is more eco-friendly
_ we have been too spoiled with code editors
Never antropomorphize computers, they do not like that
I don't want a self-taught developer writing flight control, banking systems, or medical embedded systems code. I'd rather have someone formally trained doing that work. On the other hand, there's plenty of places where if the code doesn't quite work right I don't really care that much. From everything of the once-thriving online text based gaming community (the MUSH, MUCK, MOO, MUX, MUD, etcs) to simple web pages or even stupid phone apps, there's a place for "non-professional" programmers.
Similarly, there is a place for non-professional carpenters -- my trained-programmer father has made every bookshelf in my folks house, a couple tables, has redone the 2nd story deck multiple times, and redone the roof (structural and laying shingles) on the horse barn on the back of the garage, and a bunch of brio-compatible track for me when I was ~4. He doesn't redo the main house roof (45 deg slope or more -- too steep), nor does he repoint the structural brick exterior (1920s house) or do plumbing when it involves sweating copper.
He also taught me enough of it (I helped him on most of what I listed above as a teen) that I've done plenty myself; four bookshelves, two desks (one used bookshelves for legs, the other is just an oak plywood surface for a geekdesk base, but stained and varnished a nice deep brown), and one storage cabinet with removable shelves that just happen to be 60x90 LEGO studs in size. Oh and an exterior door on my own 1960s-era house -- that was worlds of fun since while you can order a door and frame to the right opening size, the way houses set doors into the house's wooden structure has changed since my place was built. That was a learning experience (doors are a pain in the ass) and I let professionals have the fun of the next exterior door that needed to be replaced -- who, by the way, cracked the trim worse than I did when they replaced it.
Its about knowing what you know, what you don't, and what you should (or want to) call in a professional for.
Slashdot Patriotism: We Support our Dupes!
I wanted to simple do something cute like "Happy Birthday"
#!/bin/bash
echo "Happy Birthday"
You can thank me later.
Have gnu, will travel.
Hypercard was incredible back then. If Apple had thought about integrating it with network features from the beginning, the internet might have looked a lot different.
Snob.
Are you really serious.
Perhaps you're writing satire. Poor quality. Poor taste.
From my own personal experience I just want to say if you enjoy programming and think maybe you'd like to do it as a career... Go for it.
Every job type has a certain percentage of workers who are barely skirting by and somehow get paid for it. There's doctors who shouldn't be, lawyers, etc... There's also the elite that truly know what they're doing and are at a much higher level of skill.
Believe me when I say most programmers are the former.
The #1 most important thing IMNSHO is a continual desire to learn and improve. If you have that, you may start at the bottom but you will eventually become good or great at it.
As a hobbyist you already seem to have that, just keep it up.
Many "professional" developers do copy and paste coding, grabbing chunks of code off stackoverflow and not taking the time to understand them. They don't write test cases for their code, instead they patch it over and over whenever they run into an unexpected condition. Instead of reading through their code to spot the bug, they'll change random parts and attempt to run it over and over until they get lucky... Often leaving some of the unneeded changes in place causing more bugs.
If you can avoid doing those things, you're probably better than half the guys out there. :-)
So if you enjoy it, you can do it for a living, and maybe do it well.
Cwm, fjord-bank glyphs vext quiz
The bigger problem is that Apple (and others) abandon software and make their OS incompatible with legacy software so that we can't continue using our old tools. If the software followed the API rules in the past it should continue working with the new operating system and the OS vendor should not abandon it. If they want to get rid of old APIs they should provide cross-recompilers for older software or emulation. There is a tremendous legacy of software that is lost because Apple and other companies change their OSs on a whim.
These don't count as simple tools for users to build mini programs? RD
I ran into a "hypercard"-like app for the C-64 back in 1986, that involved you building a flowchart of your app, answer some basic questions, and it would generate the Basic code for it. It was pretty spectacular for the day. There are quite a few code generator programs available today, just get one that runs on Python and give it a snazzy GUI. There you go. A nice easy to understand app generator that's cross platform, multiple output languages, open-source, self-extending, etc. etc...
You would spend more time on the design of the GUI, writing the help files, and creating tutorials, than anything else. The user wouldn't even have to know ANY particular language, just the logic they needed.
But that's just my opinion. I just build stuff.
When you want something built, come see me. If you want correct grammar and spelling, get a F*ing liberal arts student.
HyperCard combined three aspects: (1) A easy-to-assemble set of graphical/user interface components; (2) a simple (simplistic) database; (3) a quirky programming language.
Possibly VB with Access provides a similar set of functions.
We should be able to produce something that allows end users to do some development for themselves, while acknowledging this is not a production-quality tool, but no matter what, people will take prototyping systems and try to deploy them to production usage.
I've used it for several different things, including catalog/library "decks", user interface mock-up with a bit of back-end semantics (for a system configuration function, to understand user requirements and usage models), and a potential front-end controller to a very simple 'robot'.
CS grads seem to need a professor, hand-holding and a cookie in order to learn anything new.
AH! Maybe that's what I need! Bringing cookies to my class. That's smart!
LiveCode is great in many ways, and I really appreciate that it is now a free download, but it lacks one feature that really made a difference to people who were learning HyperCard. In Livecode, every object is its own layer. In HyperCard, there was a simple, useful distinction between the background layer and the card (foreground) layer. People quickly grasped how to make a picture or button show up on every card or just one. Now, if you google "livecode background layers," you're likely to get instructions to add a background to a single card. I hate to say it, but I don't think that LiveCode, even free, can build the same kind of community that HyperCard has...simply because of this choice. It's not a trivial difference.
-Gareth
It did have network features, if by network you consider Appletalk. The code 'go to stack addressbok on machine "Andrew's Powerbook"' was valid Hypertalk.
It has been revived and it has a free / open source version: http://livecode.com/
Far better than the original.
I'd say the reason we don't see a lot of demand for Hypercard-like environments these days is, they aren't necessary anymore.
Back in the Olden Days, if you wanted to accomplish something on your computer, and there wasn't an application available that met your needs, you might respond to that problem by writing one yourself. Hypercard could make that easier for you to do, if you weren't already an experienced programmer.
These days the software market is much larger and more mature, so if you want to accomplish something on your computer, chances are very good that there is already an application that does what you want better than anything you could make yourself. So instead of spending a few days learning Hypercard and then designing and implementing a HyperCard stack, you just Google what you want to do, find five different applications that are ready to use (and probably free, or cheap), and pick one.
So I don't think there is a lot of pent-up demand for a Hypercard-like language these days. People who want to learn how to program will continue to do so, and people who merely want to get a task done ASAP have plenty of premade higher-quality software to choose from. The "middle ground" of people who want to make an app without officially learning how to program has gone away.
I don't care if it's 90,000 hectares. That lake was not my doing.
I'm glad someone posted that. LiveCard is basically HyperCard.
I don't think Applescript and Automator bridge the gap between non-programmer and programmer as slowly and as fluidly as Hypercard did. A non-programmer could start using Hypercard as a simple flat file database without programming. The sample Addressbook etc. Hypercard stacks were perfectly usable and there was a large quantity of freeware and shareware stacks that (inherently) came with complete source code. If someone had just a small wish for how it behaved differently ("I wish the addressbook had a nickname field:) many could be added through the GUI tools without programming. At some point, they may wish for behavior that involved changes in code, if they reached that point, the code had a fairly strong mapping to the concepts they had learned so far (stacks, cards, backgrounds, fields, etc) that they may be able to suss out what the code was doing and figure out simple changes. Once doing a fair amount of modification of the existing code, some may choose to strike out on their own and create something new.
Applescript and Automator seem to be more about simple automation of tasks. Which is a great power to give someone. ("Ugh, I hate doing this same drudgework every day|week|whenever_the_situation_bothers_me") but seems to me still a larger jump from non-programmer to programmer.
are the best current follow-ons to the HyperCard simplicity and utility.
"Win treats sysadmins better than users. Mac treats users better than sysadmins. Linux treats everyone like sysadmins."
and that's somehow OK? (puerile snickers at words aside...) Language naming isn't exactly highbrow technical stuff to begin with.
"Win treats sysadmins better than users. Mac treats users better than sysadmins. Linux treats everyone like sysadmins."
But if it's spelled Koch it's going to offend a lot of people. ;-)
Is it just my observation, or are there way too many stupid people in the world?
You sir or madam, do not know what you are talking about as well as being pompous. As long as you can pass the required certification tests, many professions will grant you a license.
http://lmgtfy.com/?q=mit+scrat...
i disagree with premise that everyone can or even should code. Secondly, I also can't believe a software opportunity exists for an 'unfilled need' for some void existing almost 3 decades. Any place a need exists - and in many cases where no need exists - software erupts. In my job I so hated our project management software, I wrote one on my own time at home. The company had some very unique processes that traditional PM didn't flow correctly. My version was adopted immediately. The point being programmers write to scratch an itch. If an itch exists, someone will offer an option. That's how we're wired.
"Now you're either a user or a full-fledged developer, and the gulf is wider than ever,"
"If any question why we died, Tell them because our fathers lied."
The cookie was metaphorical, but criminy, whatever works. Just get me someone I can hand a task to and walk away.
Please do not read this sig. Thank you.
Nice troll post. Just about only real distinction between a professional and a hobby programmer is that the former gets paid whereas the latter doesn't. I've seen just as much complete crap written by professionals than has been written by so-called amateurs.
Besides, you're missing the point. Everybody should be able to program his computer in the way he or she likes and the tools should be easy to use and completely unrestricted. Nobody forces you to use someone else's program if you have no confidence in his or her abilities.
Aren't we elite. You realize that a lot of what was down on hypercode was done by domain experts to meet their very specific needs, stuff that would never, ever have been done otherwise. Right?
Yep.
This is ludicrous. You've personally interviewed all self-taught programmers and can confidently assure us that none of them are aware of data structures or algorithmic complexity. I don't think so. I think you're blowing it out your ass.
LOL. It's hilarious how college educated "programmers" always get so defensive when this topic comes up. See how that works?
Fails the Cute Test.
The real gap is something that will empower users without putting them into danger.
Excel is an example of this approach gone wrong. If you've never been in a company that runs important business processes on spreadsheets, raise your hand. Kids and students, drop your hands. Not many left, are there?
And yet, studies have shown that a large percentage of non-trivial spreadsheets contain errors.
The difficult part in making tools is to make them so that users realize at which point they should call a professional. It's good if you can put a screw into the wall yourself or hang a picture on your own. But it's likewise clear to you that building a house is something you leave to experts, or at least get their advise on wall and floor strengths.
Computers, sadly, are not so transparent. Unless the task involves higher math, too many people think they can program a quick sales database themselves in Access or something. Only when the ceiling does fall down do they realize there's an IT equivalent of structural analysis.
Assorted stuff I do sometimes: Lemuria.org
The idea of Hypercard begat Filemaker. A little more like a real database, a little less in the way of training wheels. Still really simple to bang out an app in. Still extensible. The way we did it was to make use of its serial or telnet capabilities (way back when) in order to talk to devices or machines.
I realize there's snazzier stuff today but Hypercard didn't just vanish in a puff of logic without anything in between, before this Livecode thing I know nothing about, there was Filemaker. Love it, hate it (more likely) or feel indifferent, but it did more or less the same job as Hypercard. Sure, it was harder to do simple things, but it was easier to do the slightly more complicated things that people commonly needed to do.
"You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
So we shouldn't have easy-to-use tools for people to LEARN how to program?
We have that, it's called Pascal.
But no, we shouldn't give pseudo-programming tools into the hands of non-programmers for the same reason we don't put handgrenades with half the amount of explosives into the hands of non-soldiers so they can play around and learn a bit - it's dangerous.
Get off your high-and-mighty "professionals are the only ones who can do things" box.
Sorry, when it comes to software with real-world impact, professionals are the only ones who should be doing it. You wouldn't fly by plane if the aviation industries approach to piloting were like what you demand for software, would you?
Assorted stuff I do sometimes: Lemuria.org
Hire from a better university. Good universities teach not just formal algorithms and language structures, but also programming methods and require practical applications to be submitted to pass the subject.
The real problem with university and other formal education is that the setting is artificial and the task always has a solution. When I was teaching assistant back in university days, I took some perverse pleasure from breaking students applications, typically because they didn't do proper input validation or didn't check boundary conditions. I don't think they liked me very much, but if you look at some of the exploits out there you see this exact kinds of mistakes being made in the real world by people who never had to deal with someone intentionally trying to break their precious baby.
Assorted stuff I do sometimes: Lemuria.org
So in a regulated trade such as health care, how should one practice the trade before taking the certification test? For another, regulators often require a specific number of verifiable supervised practice hours, such as 50 hours of supervised driving on a learner's permit in Indiana. Good luck with that if you happen not to have a roommate who drives.
The fact that some professors dont give a crap and hand out "A"s like candy doesnt mean that theres not value in a formal education.
How many of those self-taught people are familiar with the control structure theory that any program can be written using only selection, repetition, and concatenation? How many think that its not relevant, despite the fact that it actually gives rise to readable programs (as opposed to ones that are a mess of GOTOs and multiple entry / exit points)?
You think it doesnt matter as long as the code does the job, and then you need version 1.1 All of a sudden you realize that the self-taught programmer doesnt really understand documentation, or how to craft readable code.
Granted there are a lot of generalizations here-- but I've done the self-taught thing, and I've done the formal education thing, and I find myself wishing I had done far more formal education prior to writing large scripts; as I continue with an education, I realize how much code that I've written over my career was just bad because I did not follow some of the practices I would have learned in a CS class-- and how much better it was because of the little education I did have.
Obviously, you've never had to hire CS graduates. I can't tell you how many of these bozos who've learned in a "formal" setting can barely manage a coherent if/then statement, much less successfully complete even a small in-house application.
There are people who go into a formal CS/CE program because they have a genuine interest in programming. There are also those who go into a formal CS/CE program because someone told them it is a good career path. While the later (career path) can be decent programmers the former (genuine interest) are the ones who tend to truly excel. The later tend to be both formally trained **and** self taught.
Those with a genuine interest in CS/CE tend to learn a lot on their own. And a university setting **greatly** facilitates this. At the university there is an incredible density of like minded folks to learn from or in partnership with. Online and remote can be useful, but two or three in the same room is often better. Plus professors are actually useful, they are often sick of the "career path" type students as well and often are very supportive and encouraging of those with a genuine interest. Besides the like minded folks the university environment offers access to incredible hardware and software that might otherwise be unaccessible. Whenever I asked for access to some specialized equipment (ex workstations with licensed software normally not available unless you are enrolled in a particular class) the professor in charge would ask why and I was never turned away because my project was a personal one, just curiosity. Even professors in other departments were supportive. In grad school I was considering a CS research project that involved a submersible robotic vehicle. I talked to a mechanical engineering professor about the potential project and he was very generous with his time and supportive.
One nice thing about supplementing genuine interest and curiosity with formal university training is that the formal training tends to be a well thought out somewhat comprehensive tour of important topics. Left to oneself the self-taught tend to focus on the more interesting or the more obviously relevant. However some boring and seeming no-so-relevant topics turn out to sometimes be surprisingly relevant and useful. At least that has been my experience, some classes I would never have selected on my own surprised me with their eventual value. While it is certainly possible that the self-taught can read and learn such a comprehensive set of topics at a university level this is exceptionally rare, incredibly rare. In 30 years I've worked with a lot of talented self-taught individuals but I've only met a handful who have the motivation to read and learn things at this level and over a broad range of topics purely on their own initiative.
Obviously, you've never had to hire CS graduates. I can't tell you how many of these bozos who've learned in a "formal" setting can barely manage a coherent if/then statement, much less successfully complete even a small in-house application.
If you are talking about some web based business app done in javascript then going to CS/CE grads may be gross overkill. Its probably better to go to a trade school with classes on web programming for that sort of stuff.
Or if its a more involved business app look for a "programming" degree program in a University's school of business, not its school or science or school of engineering. At my university it was called "Computer Information Systems", it focused on software development for corporate and business needs rather than scientific and engineering needs as "Computer Science" and "Computer Engineering tend to do". Note that things will vary wildly from one university to another so you really need to look at the school and or classes, you can't make assumptions based on "Science", "Engineering", "Information Systems", "Information Technology" appearing in the program name. These are sometimes a bit arbitrary.
>I can't tell you how many of these bozos who've learned in a "formal" setting can barely manage a coherent if/then statement, much less successfully complete even a small in-house application.
I'm going to start teaching CS in January. My approach will be to have the students writing code every class, which will be automatically tested by code that I write for correctness. If they can't get it done in class, they have until the next class (48 hours later) to finish it.
It is somewhat inspired by the code competitions I used to do. If a CS student can't write code to save his life, why is he taking a programming class?
>Granted, most of the self-taught crowd is weak on specialized algorithms and data structures
This is a bigger weakness than you think. Sure, some concepts like hashing and linked lists can be learned pretty quickly by an auto-didact, but the lack of formal training in discrete math means that their code all too often isn't correct. I can look at a recursive algorithm and immediately see when it was written by someone who never learned to do a proof by induction.
Also, their understanding of big-O notation is often (but not always) weak, and they'll tend to just try to use the one or two structures they understand for everything, which leads to inefficient implementations.
While, in principle I agree with you (I learned at a university that had several MIT PHDs in the computer science department - one of which was the head of the department - and later in my career when interviewing new candidates, and working with people from what I will call 'sub standard' programs - I saw first hand that all CS degrees were not equal) - I also realize that the people coming from the top university are going to gravitate to where the money is - meaning if you are a small company, or in a company that can't attract the top talent you will be stuck with what you can get.
This situation isn't bound to change, so how do we deal with this? I think the solution should be multifold and systematic to have possibility of success:
If we don't find a way to something like what I describe, we will continue to suffer as we keep expecting all CS graduates/programmers to be equal. HR and Execs don't like this because they want all developers to be interchangeable widgets...but reality does not bend to policy.
Lodragan Draoidh
The more you explain it, the more I don't understand it. - Mark Twain
Firstly, small companies can easily lure talent if what they offer is interesting and their culture is appealing. I would much rather work a 100k job that is interesting in a good company than a 120k job that's boring in a faceless corporation with MBA culture. They'd have to offer maybe 150k and even then I won't be as motivated. Lots of geeks are motivated by interest more than by money.
Secondly, yes we need to make a difference between software architects and programmers.
Assorted stuff I do sometimes: Lemuria.org
I studied computer science in college but I didn't learn to code until I worked in private practice. This is similar to learning legal theory in law school but learning how to practice law in private practice.
As always, the tech community collectively forgets about a software product type that existed on the Atari ST before it did on the Mac platform. Zoomracks predates Hypercard and it was patented. The author settled later with Apple over it and then the tech community obviously forgot about it.
The AVID video editing empire still dominating the video world was born as a HyperCard stack and was one of the best editing programs anywhere! When the guy went into the big time he reversed the name DIVA and it became AVID (and no longer HyperCard but it still revolved completely around Quicktime which was not just a file format, it was a massive video library with a larger codebase than windows 98.)
I never created with HyperCard; however, I knew it was crazy powerful.
I actually never knew that about Myst before.
I knew it was a Mac title originally, but I only owned the Windows version on CD. Pretty sure that one was no longer using HyperCard technology (though I remember it did use the Quicktime for Windows player and the QT videos).
In 1989 my colleague, Loranne Dayton, showed me Hypercard. On this Apple computer you had 'cards' (pages), and they could contain links to other pages on that same machine.
I was too stupd to realize the imprtance of what she was showing me. Extent the link with a computer name (from the Internet), and we would have had the World Wide Web, several years before it was invented by CERN. She was years ahead of me.
Did Hypercard die? You're using it's grandchildren, IIS and Apache and Firefox and Internet Explorer, to read this web page today. Hypercard on a global scale.
>Granted, most of the self-taught crowd is weak on specialized algorithms and data structures
This is a bigger weakness than you think.
As someone with 30 years of software development experience I can't emphasize strongly enough that some of the biggest mistakes are made in algorithm and data structure selection and design.
To motivate your students share this from a 10+ year video game developer. When they apply for a job at that Triple-AAA video game development studio they will be tested. The test will not center on the intricacies of OpenGL and other topics / technologies that they expect. They will find the greatest amount of that testing will have to do with algorithms and data structures. It is in algorithms and data structures where the performance killing and RAM consuming mistakes occur. Video games have little tolerance for such errors. If you don't display sufficient knowledge of algorithms and data structures you will not be considered regardless of how pretty an OpenGL demo you put together.
LiveCode doesn't have background layer, but you can select any set of objects and make them be a group that acts like a background. That makes it possible to reproduce HyperCard's backgrounds, but is more flexible.
HyperCard was awesome. It was fairly easy to create a fully functional gui application that someone might pay money for- possibly without writing a line of code. My first serious application was in HyperCard. HyperCard was dog-ass slow though.
I think Apple killed HyperCard because of the performance issues, and because it didn't fit into Jobs' vision. Once they settled on NeXT for OSX, the NeXTStep environment had a lot of cutting edge rapid development features but with the speed of compiled code. They didn't want to develop two separate environments, so HyperCard got the axe.
It is too bad. I would love to see HyperCard alive again.
In computer timelines, I know that Hypercard is ancient. The software wasn't much bigger that 800K bytes and ran from a floppy disk on Mac OS System 6. Hypercard was essentially cancelled by Apple Computer because, when Mac OS System 7 came out, Apple wanted extreme tight control over the graphical user interface of the computer. Apple wrote the "Human Interface Guidelines" and Hypercard broke all the rules. A neat trick with Hypercard of 1987 was, if it was auto booted, it could replace your graphical user interface (GUI) on your computer, and because it was full screen, the menu bars and icons would disappear. Image being able to draw the GUI of the computer with a paint program, which was included in Hypercard, and create hyperlinks to files, applications, and basic interface functions. If one created text fields, a basic database form is created. This is why Hypercard was so cool and ahead of its time, way before the invention of the commercial Internet. As a computer person, listening to computer users, the big complaint over and over again is the GUI forced on them. If the original Hypercard were available today, and you didn't like the "Start Menu" missing or the font change from iOS7 to iOS8, imagine being empowered to change those features, on your own. I have no disrespect for current versions of Supercard and Livecode. I am not familiar with the 2014 versions of those products.
I think that AmigaVision is HyperCard for the rest of us.
If anything could or should be re-released, it's AmigaVision.
http://en.wikipedia.org/wiki/A...
Kriston
Please, visit http://livecode.com/download/ and download the most recent version of LiveCode Community Edition (Open Source) for your OS: (Linux, MacOS X, Windows) If you visit this webpage: http://downloads.livecode.com/... you will find all downloads available, including stable public releases, release candidates and developer previews. Choose one of the stable releases and install it in your computer. Then, you will understand why many developers still cherish and remember fondly, it's first encounter with HyperCard. You could download Livecode's source code from Git: https://github.com/runrev/live... Learn about Livecode's quality controls at: http://quality.runrev.com/ By the way, HyperCard found it's way to many platforms in the form of clones: For Commodore Amiga, there was UltraCard (later renamed Foundation): http://www.dreamtimestudioz.co... For Linux, there was MetaCard (today Open Source LiveCode): http://www.metacard.com/ For Windows, Oracle Media Objects: http://en.wikipedia.org/wiki/O...
>People quickly grasped how to make a picture or
>button show up on every card or just one. Now, if
>you google "livecode background layers," you're
>likely to get instructions to add a background to a
>single card.
You open the group inspector, and click the "backgroundBehavior" box.
That's it. Done.
hawk
Will do. Thanks for the input!
I plan on using some common computer science job application questions as homework assignments, like Fizzbuzz. A friend of mine applied to Facebook and was asked to test a string for being a palindrome, create a linked list class, and write a method to reverse it.
You do have any suggestions for such homework assignments?
Evaluation is done on coding style and the thoughts of the implementor as much as getting a correct solution.
...
Consider a simple problem. Detecting if a point is in a rectangle. The textbook answer is quite simple. The game implementation is not necessarily simple. Keep in mind that textbook answers have lots of preconditions, random data, neutral circumstances, etc. Actual implementation may not, leverage any knowledge of the data or circumstances. For example what is the likely case, point inside or outside; is the rectangle relatively small compared to the screen. Like the SAT pay attention to the details of the question. If the question states that the point is a missile and the rectangle is an enemy unit then the missile probably spends more time outside the rectangle than within, so optimize detection for the miss case. Also since the rectangle represents a unit it will be relatively small compared to the screen. Now think about the screen, is it wider than taller. Probably, if so further optimize your test for misses by comparing against the vertical edges first. Assuming firing takes place from any angle. The really important thing here is to show that you were thinking beyond the textbook and leveraging information about data and circumstances. Such thinking should be explained in comments.
So you've implemented some special purpose variant of an algorithm. You might want to implement the general case too. You might want to add a unit test that verifies that the special purpose case yields correct results for specific known inputs, edge cases etc, and that it matches the results of the generic implementation for some appropriate number of randomly generated cases. Of course doing so would be more appropriate it the evaluation is not timed. But if you finished early and have checked your work
When implementing code consider performance. For example if you need to test the distance between two points a classic implementation might use the distance formula, desired_dist >= sqrt((x2 - x1)^2 + (y2 - y1)^2). Note we don't need the actual distance and we can square both sides, desired_dist^2 >= (x2 - x1)^2 + (y2 - y1)^2, replacing a square root operation with a multiply operation. Be sure to comment the code when doing something like this.
Did I mention that comments should be explaining your motivations, what you are thinking, what you are trying to accomplish? Not simply restating in english what code does.
Knowing how to implement data structures like a doubly linked list would be a good idea, however knowing how to do so in a multithreaded environment is even better. It might be a bit beyond what is expected for students in a lower division class but it would definitely be important at the time of a job application. Perhaps a brief mention in class might be useful, a little hand waiving and telling them to call placeholders lock() / unlock() would be fine. No need to have them actually implement calls to pthreads if their prerequisites don't warrant it.
So, an overall theme. Questions may be less about "regurgitating" the correct answer and more about showing how you think about problems and how you implement solutions, and how well you leverage any additional information available.
It wasn't at a game company but I once had a question during an interview that was very illustrative of what I'm trying to get across. The question listed 6 sorting algorithms and asked for the run time complexity. I answered bubble sort and qsort and then wrote "I own Knuth vol 3 Sorting and Searching so I don't have to memorize this sort of trivia". After this written test the project lead asked why I thought this question a "trivia question". I explained that the textbook run time complexity answers assume random data, and that if your data is not random the run time for these algorithms can change wildly. One algorithm may be the best choice for random data, another for mostly sorted data and still another for mostly unsorted data. I go
Moments after my first post I had an idea. Some of my favorite homework assignments or lab projects were those that were steps towards a larger whole.
Maybe an A* based pathing implementation for a game should be the final result. Individual assignments steps along the path to this end result.
Arrays could implement static objects (obstacles) on a map.
Link lists could implement temporary objects (units, subject to destruction when they fire upon each other).
Maybe sort units in a linked list based on their position with respect to a line of movement, ex moving up sort by y position. As they move into range of enemy units those units at the front of the linked list are the first to come under fire, usually. When hit, destroyed, removed from list. List shorter for next round of fire.
Since its a class project keep things simple. Perhaps something similar to 1970s/80s tank arcade games. The map is a grid. Motion is only up, down, left, right. Obstacles are like walls, filling in an entire grid element or leaving it open. Units take up one grid element each.
Profile performance, before and after some improvement. Textbook A* vs modified A* using special info. Linked list search with and without sorting in direction of movement.
Speaking of profiling, that is something very important to mention in an interview. Attempts to optimize must be based on profiling. Both to make sure one is optimize the code path where cpu cycles are being spent and to confirm that a modification to the algorithm if in fact helping.
I'm not sure if a good fit can be found between the class topics and the components of such a minigame but it might be something worth taking a quick look at.
I can use some of that. I'm teaching 1st and 2nd semester CS in January, and I don't want to overload them too much with philosophy of programming, but I plan on having code reviews be 20% of their grade. They'll have to come up in front of the class and talk about why they made the design decisions they did, and other students can earn extra credit by finding bugs and pointing out questionable decisions.
But yeah, I was planning on doing a maze solver, so maybe a A* solver might be a little more useful. Thanks for the ideas!