Fixing the Pain of Programming
An anonymous reader writes "Light Table is a Kickstarted, open source IDE that's been trying to integrate real-time feedback into code creation. Part of their process has been figuring out how to improve the practice of programming, from top to bottom. They've put up a post about the troublesome aspects of programming that we've learned to deal with and take for granted, but which need solving if programming is to be made accessible for more people. 'Surprisingly, one of the most common difficulties we have heard from beginners is just running code. Even if we were to hand [a new programmer the whole source code] they would likely still struggle to actually use it. They have to install dependencies, compile code, start servers and open ports. At each step the errors are difficult to diagnose and time-consuming to fix.' But these problems extend to experienced coders, too: 'The simplest question we could ask about our application is "what is the current state." Bizarrely, very few programming environments give you any help on this front. Many programmers get by with nothing but print statements.' It's interesting to see somebody working on these issues, instead of accepting that they're the status quo and just part of the experience of programming."
I suppose this is addressed by the old quote "What is the best language for x?"
"I don't know. Which has the best debugger?"
I simply don't get why not all programming languages/development environments support live images like Smalltalk..
For those who don't know what that is: in Smalltalk the IDE and the running program are 'the same'. Your 'program' (what you code) never stops and/or is restarted. It just 'freezes' like a laptop and is 'restarted' or awaken at it previous state.
That means if you send me your 'source code' you are actually sending me a sleeping, but running! program.
Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
the more accessible you make it the more people get into it and the more of a commodity it will become
even now developing and coding is a commodity in a lot of fields or a secondary skill to being a math whiz and working with algorithms on data sets
TFS says:
Part of their process has been figuring out how to improve the practice of programming, from top to bottom.
The problem here is that depending on top to bottom only works well on very small scale and very large scale. In reality, you need both top to bottom, bottom to top, side to side, diagonal, and too often even a bit of pogostick programming.
When you spend 8 hours troubleshooting an open-source project to compile with a third party proprietary library it feels damn good to make it work. Coding is good because it's hard. The higher the stakes the more the accomplishment of that task will make me proud/happy.
Sure... there are some places where things should be simple. When I install an IDE I expect it to compile a hello world just after typing the proper code.
This combination doesn`t exist: ETIs that know about humanity and want to see us dead. Otherwise we wouldn't exist.
Just suck it up. If it was easy then everyone would do it. ( actually it is easy, people are just whiny lazy asses these days and want everything to be done for them, and presented on a silver platter, paid for by someone else via some 'wealth distribution plan' )
---- Booth was a patriot ----
Bizarely the OP apparently hasn't heard of python. How can you not run a python programme, the error messages tell you exactly where the problem is and almost how to solve it. If the OP is talking about C and the like you do know that they are the domain of professional programmers or hacker hobyists like myself not secondary skills in another field.
This is a problem of skill level not an IDE will solve it type of problem. Seriously no wonder the programming world is so screwed up with all these managers saying things like , get windows it will solve your high wages problem as you only need junior low wage workers to do your coding, and those type of shitty things. Programming is for professionals and we should be compensated for our skills not burned because the next fad language will make your workforce less expensive.
Light Table isn't really an IDE. It's just a slow and simple text editor for "web development".
They probably spent more time on the design than on the features.
An outdated version of Notepad++ without any plugins would still be a better 'IDE'.
The less "brogrammers" we have, the better.
Programming has a spectrum of difficulty. The tools can always be improved to make the easier parts easier and the harder parts more manageable, but in the end the hard parts are hard because of the nature of the work; not due to lack of tools.
In more mature fields the spectrum of difficulty is well understood and no one expects the hard parts to be easy. If a person can write a "hello world" program then it should not be expected they will have the wherewithal to roll out healthcare.gov. If a person can apply a bandage to a skinned knee then it should not be expected they will have the wherewithal to do brain surgery; regardless of how good the tools are.
I don't use mythology in a perjorative sense that this is all pretend or wishful nonsense. I use it in the best Joseph Campbell-Hero-With-Many-Faces sense, of a dim recollection of The Way Stuff Used to Be. This is a way of communicating an Underlying Truth about the Human Condition.
Apparently there was this era of things such as this Smalltalk that you allude to. Another version of this I hear from tales is Common Lisp. And Lisp Machines, specialized hardware and expensive workstations on which these "live images" would reside. So maybe these tales of direct, personal communication with the gods taking place with the Bronze Age Greek heros was not made up?
I guess there was this Barbarian Invasion of Bearded Men from the land called "New Jersey", especially a high place among the rolling plains they called "Murray Hill"? There is this piece of non-canonical scripture that our elders have been trying to supress known as the Unix Hater's Handbook explaining how we came to our present age and how this Golden Age entered into myth. Our elders warn against reading this heretical tract as dangerous to our souls.
As Jerry Pournelle describes the intervening Dark Age between now and that heroic or Golden Age, it isn't so much that people forgot how to develop and maintain a live image programming system such as Smalltalk or Common Lisp, it was that people forgot that such a thing could exist, and we attribute such things to gods or space aliens.
But then again, just as there is talk of ancient creatures in deep lakes in Scotland or in the remote sections of Zaire or Southeast Asia, there are accounts that Smalltalk or Common Lisp are still in use . . .
This is why we need a new standard for languages to solve the problem of setting up, runing, debugging, and hot swapping the code.
Wait a moment...
Honestly, having a language built-in on stock pc is perhaps easier. Like including Basic in BIOS. Excel (and VBA) is now taking its place as commoner's programming tools.
And if Excel cell data validation is such an advanced, even hidden feature to most users, perhaps the problem is not about difficulty of getting commoner to handle professional tools.
Just suck it up. If it was easy then everyone would do it. ( actually it is easy, people are just whiny lazy asses these days and want everything to be done for them, and presented on a silver platter, paid for by someone else via some 'wealth distribution plan' )
This is unmitigated bullshit! Edit/compile/link is NOT the object of coding. As a mathematician hacking semi-numerical algorithms, the programming languages (I use mostly C) are the easy/sensible part of the job. A Backus Naur diagram defines the language nicely, making things sensible. (making A[i] clearly the same as i[A].) But my IDEs to link/compile are a morass of no-reason-just-policy quagmires worthy of organized religions.
Coding is not a tedious religious rite to be memorized w/o question. Coding is a tool to get a job done, not an idol of obscurity to be worshiped.
One of my rules at work is: "If I check it out in Visual Studio and press 'Start', it better compile and run". It's not acceptable to make the next guy figure out how to run a program. Everyone I work with thinks I'm overreacting at first, but when they go to fix an issue in four-year-old code they've never seen before, they suddenly get it. Bonus points for starting the test suite by default instead of the actual program.
I realize this is a tangent to what the post is talking about. However there is a related feedback that's a big problem for me. Getting feedback from "user". So at least in my company it often turns out one manager is a big user of the software. Guess which office door is closed pretty much all day and no answering e-mails of any kind? It's very difficult to give mangers like that what they want when the only time they'll tell you is they pop-up behind you while you're doing something else, give you a 3-5 minute explanation that they've not really fleshed out, then run silent for 3 weeks. (Yes, I've literally developed something that was requested and it got used for a couple of minutes and got "This isn't what I wanted." talk. It's very aggravating.)
Did you know 80 to 90% of the moderators on slashdot wouldn't recognize a troll even if one dragged them under a bridge.
One of the most painful lessons beginners have to learn is just how often everyone is wrong about everything.
Well put! Programming would be ten times more pleasant (it is already easy, but so tedious ...) if the documentation were more palatable and available. Cudos to the authors for trying to make the process more streamlined.
On the other hand they are mostly talking about web development. I wish someone would put some though into similar tools for embedded stuff
Beeing a great programmer is to master a form of ART.
Becoming great programmer means you either was gifted with it, or have mastered all the techniques by doing hard work.
You are never going to get good at anything without going through the pain of learning.
To "fix" programming, stop this constant churn of change for the sake of change. I just saw Microsoft is scrapping ASP.NET and starting over with a new framework. They're still calling it ASP.NET, but the internals are incompatible with what they have now. Every year or two, there's some new MVC library, ORM framework, version control system, language. Stop changing things randomly and gratuitously and get some stable industry standards. Change for the sake of change doesn't improve the situation, it makes it worse.
I mean, thats the elephant in the room, isnt it. I found that everything thich can be automated easily is automated in eclipse.
Whenever I see one of these headlines about how there is a supposed shortage of programmers and we should make it easier so "stupid people" will come to save the day, it just makes me think "what the what?" I have an awesome sister. She can't sing. She makes people cover their ears and the dog runs out of the room. Are we going to solve today's broken music scene by making singing easier and coaxing my sister to become a singer? I don't think so. Singing is easy. Doing it well enough that people want to listen is not hard...for people who are good at it. People who suck at singing should just do the world a favor and not try it in public. The fact that the world has a limited number of programmers, and an even smaller number of good programmers and an even smaller number of really-really good programmers is simply that people are all different. Some of them can sing. Some of them can do technology. Some of them are jocks. Some of them just take up space. (Hey, it may be harsh, but it is accurate.) On the other end of the millions of different bell curves that could be used to describe humanity, there are some people who excel at bad things, like the Hitlers and the Lawyers of the world. Sadly though, this sort of "how can we make programming accessible to the masses" nonsense will never go away. That is simply because there are people on this planet who are six sigma at asking stupid questions.
> that evaluating code is always safe
You haven't really thought that through. That means there's a lot that it can't do (including knowing if the evaluation completes).
> a uniform (logical) data model where every piece of state is globally addressable
You haven't really thought that through. That means there's either hidden stuff it can't access, or it will be extremely fat.
> a model for change that tracks history and causality
You haven't really thought that through. Causality can be very granular, and even cyclic.
> a powerful query language that can be used for querying code, runtime state, causal graphs, profiling data
You haven't really thought that through. It will scale with toy web projects until you make a complex state machine (or need security).
> composable gui tools with transparent guts
You haven't really thought that through. Sounds like Swing but will break down as soon as you need multilevel composition patterns.
> a smooth interface to the old world so we don't end up sharing a grave with smalltalk
You haven't really thought that through. You can't do all of that, introduce nondeterminism and complete transparently, and do it efficiently and understandably.
More than once I've seen the existing functionality of an IDE's automatic (or semi-automatic) compile, run and debug loop sabotaged by some (sometimes mandated) third party plugin which is supposed to make things "easier." I've watched as people poorly integrate Java Spring into a project and render it impossible to use Eclipse's debug button because of badly constructed project dependencies. ("Oh, if you want to run the project, just drop into the command-line terminal and type 'ant someobscurebuildproduct run'; it's pretty easy, why are you complaining?") I've seen people integrate Maven into a build process in ways which guarantee the project will stop compiling at some unspecified time in the future by improperly scoping the range of libraries that will be accepted. (And I'm not a fan of Maven or CocoaPods or other external dependency resolution tools anyway, as in part it presumes the external libraries we link against that are hosted outside of our source kits will honor their public interface contracts as minor revisions roll out, something which isn't always true.)
I've seen refactoring which adds code bloat (rather than simplifies the code). I've seen home-rolled configuration files which make code discovery functions break code discovery functions in Eclipse useless (do you really need to home-roll you own class loader, and specify Java classes in JSON?). I've seen plenty of 'voodoo stick waving' standing in for good coding practices. I've seen the lava flow anti-pattern obscure a simple Java RTL call in 20 discrete layers of classes, each added on by another refactoring that did nothing but make things more obscure.
I've seen weird blends of ant and makefile build processes which took a product that should have taken perhaps 5 minutes to build take over an hour, and build processes so broken that it was impossible to shoe-horn into an IDE without rewriting the entire project. ("Real programmers use 'vi.'" *shakes head*)
In fact, I have a working theory about programmers--and that is this: Most programmers think something should be a certain level of difficulty. And when a project turns out to be easier than they think it should be, they add artificial complexity until it reaches the expected level of difficulty. At some point, the project then needs to grow, making things organically more difficult--but the artificial difficulty added by the programmer who thought things were too easy before then simply sabotage the project. This is why quite a few projects I've worked on over the past 25 years have failed.
This is why I have no hope for any project that attempts to fix the problem. That's because the problem is cultural, not technological. We've had IDEs which had integrated debugging and one-button build + run processes going back to the 1980's--yet somehow we always glom to the next big thing, oh, and sorry about breaking your IDE--but this next big thing is SO important it'll totally compensate for the fact that we broke your edit/run/debug cycle.
Meaning I guarantee you the moment someone builds a fool-proof IDE which makes it brain-dead simple to edit, compile, run and debug an application, some damned brain-dead fool will come along, worried that things shouldn't be harder, and break the system.
of programming environments where the stuff kids use early on has tangible links to the stuff they'll use later on.
Code is not code is not code. The AP exam alone has been through three languages (Pascal, C++, Java) and their official caveat isn't reassuring.
I can teach young kids Scratch, Stagecast, NXT all day every day and they love it and learn to solve problems.
Trouble is there's no bridge between that and "real" programming. The parentheses are mine, but there's no volume knob on the chorus that rushes to pooh-pooh anything other than a full-blown professional language as "programming". Got it. Hour of Code was an inch deep and a mile wide. Understood.
And that's the problem. What's a kid who gets inspired by that first experience to do - jump into a CS course that's an inch wide and a mile deep?
To extend another analogy used elsewhere in these comments, it's like going from applying a bandaid to being handed a scalpel and suture set.
Want to make a lot of money? Create a language that mimics their maths experience - that explains variables, arrays, transformations, algorithms, sets, etc. in a way that they can parallel and apply.
Yes, cue the snarky comments, but I miss BASIC and HyperTalk. Very low learning "floor" and pretty-darn-high learning "ceiling". RunRev / LiveCode has huge potential as it uses hypertalk-ish syntax and actually does something tangible in short time. The engineering equivalent of such a continuum is LabView, but yes, it's basically for instrumentation, no, you can't produce standalone apps, etc.
Huge need for a continuum / bridge.
"Win treats sysadmins better than users. Mac treats users better than sysadmins. Linux treats everyone like sysadmins."
If one tried this $316000 masterpiece, it's nothing but a fancy notepad at the moment. IDE needs top quality intellisense, project references etc. It has none of these, even rudimentary things like line numbers is missing.
One can only hope they spend several years developing this thing, though I suspect this is the final and the developers will take a holiday on remote Island with rest of the money.
You'll find that even if you give someone all the workout clothes they need and equipment, they'll struggle to use it. They'll be aching and moaning through every exercise. Struggling to find the motivation and not eating the correct meals. Most people consider this part of it but some think that it should be easier. Maybe we should tie their feet to the stair-stepper and let the machine move their legs. Maybe we should predigest their food for them like a bird. Oh America! When will we see that all work is too difficult for mankind and finally build a gym that removes all the challenge from challenging yourself!
Wasn't all this solved at the end of the 80s and early 90s with Borland and MS IDEs?
Yes, I usually get by with print statements as well, because I do not need anything else! Learning to debug is a critical part of learning how to program. Taking that away is plain harmful. Advanced debuggers give you more, but anybody that cannot debug simpler print-statements does not have the level of understanding of the code that is absolutely required to make it any good.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
Yes. Turns out people unable to program lack talent, insight, dedication, but not an IDE.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
IDEs cost you time and induce bad habits. You end up spending too much time debugging the IDEs themselves and becoming dependent on the crutches they provide. I've seen Java developers who don't know how to run their program without Eclipse installed.
My advice is to use vi(m) or emacs.
So it seems to me that most of the pain of programming is bad programmers who can't be bothered to learn about the tools they're working with or even the hammer that they're using to solve every problem. So why do you think your hammer's going to be better, again?
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?
It's right before the sentence that accuses the world of choosing to be illiterate.
Making programming more accessible by more people may result in well-functioning programs being as common as well-functioning governments are where voting is more accessible by more people.
"a morass of no-reason-just-policy quagmires worthy of organized religions."
Thank you for cogently describing the current state of programming languages.
I was going to suggest by analogy that your neighborhood mechanic be up to speed not only your car, but your bicycle, steamboat, helicopter, Segway, pogo stick and diesel-electric train.
"Win treats sysadmins better than users. Mac treats users better than sysadmins. Linux treats everyone like sysadmins."
You're a bunch of over-testosteroned, machismo idiots.
Offense definitely intended.
First point. Machines and software exist to serve *people* and for no other reason. To the extent that they do that, they are "good." Anything less is "bad." Simple enough for you?
Second point. Programming is not about "overcoming intellectual challenges." Don't flatter yourselves. Nobody cares how you feel. Programming is either about money or masturbation. If the latter, make it as hard as you like. Go for it. Wheeeee! Look at meeeee! Look how smart I am! Whoo hoo!
But if you're trying to make *money* programming, or actually have to get a task done, you need all the help you can get. If you have a manager or officer breathing down your neck to GET IT DONE so millions aren't lost, or someone doesn't die, you need effective tools.
Bottom line? Get over yourselves. The IDE is there to make accomplishing a task as easy as possible. It serves no other purpose. It should make everything easily known and obvious. Moreover, it should actually HELP YOU solve your problems. Otherwise, it's just another idiotic software failure.
Please do not read this sig. Thank you.
Mod parent up. Not sure if this New Yorker cartoon from the most recent issue will stay around long, but I saw it this morning and it sums up how I feel about much of computer software development the last thirty years since Smalltalk:
http://www.newyorker.com/image...
A character says "The new house is almost ready!" and it looks exactly the same as the rundown house in almost exactly the same location.
Software could be better, like the character could in theory have built a better house. But in practice, watching this play out of 30 years myself, much of what we get is just re-re-re-inventing the wheel. And there is a terrible waste in having to re-learning it slightly differently with slightly different bugs and limits, and little true progress. Often there is regress, since Smalltalk's keyword syntax is still more readable and expandable than C-like syntax.
Where would we be now if a truly free Smalltalk had had all the billions poured into it that Java had due to IBM and Sun's marketing clout and all the effort that has gone into JavaScript dues to Netscape/Mozilla/Google/etc.? Including the best of any LightTable ideas (a view with source when you hover over a name in code is indeed cool) and any other GUI improvements? As well as better libraries and better cross-platform support and better browser integration and so on?
Still, maybe JavaScript is the best we could hope for at this point, and better than we deserve, as someone else said and I echo in this submission from yesterday about James Mickens' last "USENIX "login" column explaining all that is wrong with the Web pages technically:
http://slashdot.org/submission...
Citing: https://www.usenix.org/system/...
But we got that mess for social reasons (competition, centralization, monetarization), not technical one, like I mention here:
http://slashdot.org/comments.p...
Social stuff like ParcPlace not being willing to license ObjectWorks/VisualWorks cheaply to Sun when they wanted to do a set top project (which ultimately lead to sun making Java).
Could Smalltalk be improved? Yes. Even the syntax could, like by using more C-like strings and comments while keeping the keywords. Could it benefit from type annotations for optimization? Probably yes too. And could it benefit from being built from textual sources instead of an image (like GNU smalltalk). Again yes. But investments in that direction would have produced so much more benefits than something like Java or JavaScript.
That said, after all the pain and suffering and waste, Java and JavaScript/HTML5/CSS3 have finally become half-way decent platforms. I'm moving more in a JavaScript direction myself for mostly social and practical reasons, despite knowing how great Smalltalk was and seeing how much it could have become. I talk about that on Slashdot here:
http://slashdot.org/comments.p...
http://developers.slashdot.org...
Smalltalk might still get there building on Java and JavaScript as with these projects:
http://amber-lang.net/
http://www.redline.st/
Mickens' comments are mostly true, but end up being tradeoffs for ubiquity and easy installs in the case of JavaScript -- even Alan Kay and Dan Ingalls agreed on that with their efforts toward the Lively Kernel driven by the fact they could not get many people to install Squeak or Squeak-based apps).
http://www.lively-k
A 21st century issue: the irony of technologies of abundance in the hands of those still thinking in terms of scarcity.
I don't see why beginner programmers should be starting with servers or ports. Where are the basic fundamentals of programming before they approach things like servers and ports where one should be thinking about task blocking, threading and security above and beyond the "make it do what it want" level.
it solves many of these problem, Microsoft even has a free version (Express) - if you want to use Pro for a while, you can even 'rent' it by the month from the link below
Express:
http://www.visualstudio.com/en-us/products/visual-studio-express-vs.aspx
Online:
http://www.visualstudio.com/en-us/products/visual-studio-online-overview-vs
First, why does programming need to be accessible to more people? That's exactly the opposite direction a mature technology goes. It use to be easy to fix your own car, but now with the modern engine and manufacturing techniques it's damn near impossible for most people to do more than add consumables. It used to be easy to fix electronics, but now it's impossible to take things apart and if you do you find everything is done in literally a black box of a chip and there's nothing you can do to it. These things have good points and bad points and I'm not here to argue for or against them, just to say that mature technology tends towards "no user-serviceable parts inside". Why would you expect programming to be any different?
Second, the pain in programming doesn't come from the tools. Yeah, it's a pain to learn the tools, but that's a pain that's short-lived. The real pain comes from the nature of programming. It's caused by having to tell the computer in excruciating detail exactly what you want it to do. In order to tell the computer you have to figure it out for yourself, without glossing over any "you know what I mean" steps, because the computer certainly doesn't know what you mean. And not only do you have to tell it how to do the job when everything is working as it should, you have to anticipate all the ways in which things could fail and tell the computer what to do in those cases, too. THAT'S the painful part of programming -- the programming. No tool is going to fix that.
Chelloveck
I give up on debugging. From now on, SIGSEGV is a feature.
The only "pain of programming" I have experienced was always the result of my own poor design choices. Is there an IDE for that?
I found it hilarious that the post bemoans the state of getting started with a new environment, and how it invariably requires a tutorial, and that is terrible.... And then you download their software and you're presented with a blank screen and no idea how to get started... so you turn to you guessed it.. a tutorial.
And then a tutorial that isn't even illustrated, so you can't tell what is supposed to happen with you hit cmd/ctrl+enter... I get a little checkbox next to my line of code.. I don't know what that means. Line is syntactically correct? Line executed? Line monitored by system? And it certainly doesn't provide any insight into the flow of data. I don't see a pane like I do in pycharm that lists the variables with their current values, I don't see any state.. Is that intended? I don't know, the tutorial doesn't inform me, and the environment is useless.
I don't generally use debugging tools, preferring to keep my abstractions shallow, my code small and understandable, and a test suite that can prove that my code is handling the cases its designed for correctly. In some projects, yes, complexity is a requirement, but I feel like the advent of IDEs and debuggers has only served to allow people to more easily break what is in my opinion the first rule of development:
"Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it?" - Brian Kernighan
Break systems down into small manageable parts. Write the code simply and clearly. Write tests EVERYWHERE.
http://www.basicincome.org/bie...
Not because my kid is a dummy (far from it), but because I know becoming and staying an "owner" in the 1% is like winning the lottery. And societies with big rich/poor divides are less happy to live in -- even for the 1%.
http://www.nytimes.com/2012/08...
"Stiglitz and his allies argue that a free and competitive market is highly beneficial to society at large, but that it needs government regulation and oversight to remain functional. Without constraint, dominant interests use their leverage to make gains at the expense of the majority. Concentration of power in private hands, Stiglitz believes, can be just as damaging to the functioning of markets as excessive regulation and political control. "
See also on how aspiring millionaires are used to keep everyone down:
"The Wrath of the Millionaire Wannabe's"
http://conceptualguerilla.com/...
"But here's something I'll bet the dittoheads haven't thought of. Maybe they're the chumps. Maybe they've been sold a bogus "American dream" that never existed. Maybe "the rules" they play by were written by the people who have "made it" -- not by the people who haven't. And maybe -- just maybe-- the people who have "made it" wrote those rules to keep the wannabes chasing a dream that's a mirage."
I wrote an essay on why even rich people should support a basic income:
http://www.pdfernhout.net/basi...
The fact is, most paid jobs are going away as robots and AIs become cheaper to employ than humans for more and more jobs -- even "creative" ones, like I discuss here
http://www.pdfernhout.net/beyo...
Preparing your kid to win the 20th century economic rat race leaves him or her a rat on a sinking economic ship in a 21st century economy...
That said, independence when needed, cooperation when needed, hard work, prudence, saving, frugality, investing in the future -- in broad sense, these are all good things to learn however a kid applies them later in life.
On code, the free code and content I write now and in the past like our free garden simulator and other tools has helped (a teeny tiny bit, I hope) to help bring about a 21st century transformation to a bigger gift economy, to better planning, to a more informed and enlightened and empowered citizenry. For example, this freely usable software someone else lets me reformat my slashdot posts to remove smart quotes from quotations in the above that display wrong:
http://dan.hersam.com/tools/sm...
So, free code and free content can make a difference in the world by making the world a better place in various ways. And then, such a society can hopefully do a better job of taking care of old farts like I will be soon enough -- if I am not already. :-) As well as doing a better job of taking care of the next generation which is much more important than taking care of the previous generation -- although you would not know that looking at who gets "Social Security" and Medicare in the USA -- the old, not the young). As Daniel Moynihan said, "the young don't vote, and it shows".
Kids grow so fast. Enjoy them while you can! See also:
http://www.katsandogz.com/onch...
----
On Children
Kahlil Gibran
Your children are not your children.
They are the sons and daughters of Life's longing for itself.
A 21st century issue: the irony of technologies of abundance in the hands of those still thinking in terms of scarcity.
1. Use a powerful editor that you know well.
2. Don't use Windows.
There you go. Done.
> First point. Machines and software exist to serve *people* and for no other reason.
> To the extent that they do that, they are "good." Anything less is "bad." Simple enough for you?
Not really. You are saying nothing about how any goals would be accomplished. Stating the obvious doesn't help.
> Second point. Programming is not about "overcoming intellectual challenges." Don't flatter yourselves.
If it's not, you're not automating something that hasn't been done already, you're not working out how to make a business process leaner, you're not working to facilitate business capability that doesn't exist, and you're not working on technology that enables any of that either.
> Nobody cares how you feel.
I do, and employers who want me to work for them, also do.
> Programming is either about money or masturbation. If the latter, make it as hard as you like.
If you don't care about the quality of the work you do, it shows. There's a reason I'm always employed, and it's actually more about making things easier. Not everyone can see that right away.
> Go for it. Wheeeee! Look at meeeee! Look how smart I am! Whoo hoo!
OK, if there's a point there, I've missed it. Do you say similar things to friends or family members who are doctors, lawyers, architects, engineers, teachers, plumbers, drivers, nurses, retail staff etc?
Switch the functionality of the '.' and ';' characters in C style languages. For me, it's perfectly fine with what '.' and ';' do and mean, but apparently it's a real struggle for those learning programming. While in University I'd be talking with somebody struggling in their Introduction to Computer Programming class, or somebody who was a CS major, and then dropped out and the number 1 complaint was how they were upset with how the program wouldn't compile because they were missing a ';' at the end of a statement. But if the character which represented the end of a statement was a '.', that would make sense to them because it's same character that represents the end of a statement in written communication. That way if they complained about a program not compiling because they forgot a '.', you could respond with "Well you wouldn't end a sentence with out a '.', would you?"
"most of us in the industrialized world have a driving license and can drive, but track and bus drivers are still professionals with special license. The question is - do you want to be a track driver?"
Very good analogy. Thanks! (Typos fixed, sorry)
I feel that the world needs more people who understand computing and information management, but we probably already have perhaps 10X-100X more professional programmers than we need -- mostly making work for each other with slightly different proprietary (or even free) versions of essentially the same thing but with different bugs.
Agriculture used to employ 90%of US workers 200 years ago, and now it employs about 2% Manufacturing is also on its way down. Yet, gardening is the most popular outdoor recreational hobby, and the Maker movement is rapidly growing. People like making and growing things -- often they like that more when they are not forced to do it endlessly in a boring or stressful way due to economic necessity.
Programming may well go the same way more towards a hobby. It already is in various areas. For example, a dozen years ago, everyone was writing web frameworks or ecommerce frameworks, and now there are so many off-the-shelf ones, only hobbyists or researchers are focusing on that (mostly, always rare exceptions). As we get more free software piling up, how many jobs do we really need writing more? The jobs become more "software archaeologist" or "software chooser" or "software customizer" if even any of that depending on how far standards have spread -- so similar to your point between daily drivers versus specialized drivers.
To build on your car analogy -- there is also a difference between car drivers, gas station attendants, car sales people, car mechanics, car delivery people, car rental agents, drivers ed teachers, gasoline refinery workers, and car designers. All are involved with cars, but in very different ways. There are right now very few car designer jobs compared to all the others. One hundred years ago though, 100s of small companies were designing cars, and with fewer drivers the ratio of designers to drivers was much higher. Although this analogy maybe breaks down because in theory software may need less maintenance once the software ecosystem settles down and also software may eventually maintain itself as AIs.
A 21st century issue: the irony of technologies of abundance in the hands of those still thinking in terms of scarcity.
GETTING STARTED - First we need to get a development environment running. Let's try clojure: [example]. At this point you have already lost 99% of the population and we haven't even touched on css or templates yet.
That's how you teach beginners.
"First they came for the slanderers and i said nothing."
When people say 'programming should be hard' usually they mean 'programming is irreducibly complex.' There's no way around the fact that programming is hard.
"First they came for the slanderers and i said nothing."
Self-replicating space habitats that could duplicate themselves from sunlight and asteroidal ore were a long favorite "ark" idea of mine to deal with the risk of global nuclear war (although JD Bernal proposed them first in the 1920s it turns out). Anyway, arks are just another option to umbrellas -- given umbrellas may not work depending in the size of the storm. For me, the idea of a basic income is also a sort of an "ark". But I've tried others -- like helping people be more self-reliant with growing stuff via the garden simulator or helping people with making stuff with OSCOMAK (not to say how successful I've been, which is not much, especially for OSCOMAK, pretty much a big nothing except others are doing related ideas now in a smaller way like Thingiverse or Appropedia).
I agree there is a tension of where to invest your time and other resources. You have to find something that works for you and your unique interests and abilities. It;s true though that when you invest in yourself, or your family, or even your local neighborhood, you have a much better sense of whether the investment is paying off than doing general advocacy for something to contribute to global change. As I say on my site when I talk about five interwoven economies (subsistence, gift, exchange, planned and theft): "The particular balance a society adopts is going to reflect the unique blend of history, culture, infrastructure, environment, relationships, mythologies, religions, and politics of that society." I guess the same goes for individuals and families, too?
Anyway, I had my kid around age 40. I've come to learn that being an older parent has its pros and cons. My dad had me around age 50 though. So, good luck if you want kids!!!
And don't let worries about the future stop you, or no one would have kids, since even for billionaires, money can come and go. Example (and kind of makes your point about techies vs. legal sharks, plus mine about a basic income to support inventors):
"Goldman Sachs Not Liable for Failed $580 Million Deal"
http://www.bloomberg.com/news/...
"Goldman Sachs Group Inc. (GS) defeated a $580 million negligence suit over its role as adviser to speech- recognition pioneer Dragon Systems Inc. in a doomed merger, one of its biggest victories in a string of claims by dissatisfied clients since the financial crisis.A federal jury in Boston yesterday rejected the claims of Dragonâ(TM)s founders Jim and Janet Baker and two other shareholders that Goldman Sachs failed to properly vet Belgium-based Lernout & Hauspie Speech Products NV. The all-stock deal in June 2000 was rendered worthless months later when the fraud at Lernout & Hauspie was exposed and the company filed for bankruptcy. The verdict relieves Goldman Sachs of responsibility for a sale that left its clients with worthless shares in a failed company. The four Dragon founders sold some Lernout & Hauspie shares for $11 million before the stock collapsed and the Bakers lost the technology they spent decades developing."
I met Janet once at a trade show and she and her husband were also students of my college adviser They lost about most of their wealth, but worse, they lost access to all the Dragon speech recognition source code that was in some sense their "baby".
We all have our personal choices to make. And they are often hard ones. A book I just ordered:
"In Good Company: The Fast Track from the Corporate World to Poverty, Chastity, and Obedience"
http://www.amazon.com/gp/produ...
"From the Wharton Business School and a secure place in corporate America to a $35-a-month allowance and the insecurity of a life of faith. This may seem a precautionary tale of downward secular mobility, but as we follow James Martin through his life and Jesuit training, we find it is all about ascent -- to God and to true happiness. (Paul Wilkes, Author
A 21st century issue: the irony of technologies of abundance in the hands of those still thinking in terms of scarcity.
When you spend 8 hours troubleshooting an open-source project to compile with a third party proprietary library it feels damn good to make it work. Coding is good because it's hard.
Golf is hard.
But golf doesn't pretend to be anything other than a game which is defined by the wholly artificial --- and unnecessary --- obstructions it places in your path,
They looked at this problem before, and came up with Netbeans. They looked at it again and the result was Eclipse. I don't hold out much hope.
Disclaimer: currently trying to [re]learn java (did a bit when it was 1.1) and I'm wondering if it'd just be better to use gedit or even vi...
Confucius say, "Find worm in apple - bad. Find half a worm - worse."
http://stilldrinking.org/progr... Programing sucks
Once upon a time there was a precocious young man, called Bill Gates, who saw a shiny new toy made by Apple, and thought it would be even better if he wrote a word processor and spreadsheet for it. Almost thirty years later, the software remains unfished and still has bugs.
The tools you need to write computer software have not changed: a ream of paper, a pencil, and an eraser. Programming is about hard thought and mathematics, not about touch typing or touching mice in perverse ways; for all talk to the contrary, it is an art and not some form of engineering. The mediocre programmer that's you and me.
I commented on a similar article the other day... In reflection over the past couple of days, it occurs to me that the things that they are doing to make programming 'easier' for the average person is making it much more complex for me. For me to be functionally adept (I'm the type of person that needs to know how and why, not just what) - I need to understand how the languages are doing things - how do things boil down to system calls? This is becoming more and more abstracted and obfuscated and it makes it very difficult for me to grasp the concepts of 'what is really going on'. How can anyone be anything but average if we can't fully understand the nature of what is going on - or how could we expand on anything? Call me old fashioned, but if a person can't grasp the concept of pointers then they just aren't adequate for software development - because the direction that things are moving in in order to make software development something that can be performed by the masses is really dumbing down and neutering the potential to make a computer do things that aren't just run of the mill. One example is taking things like threading and making it part of a language, instead of what it really is - part of the platform. Threading has no place in C++ the language - it belongs in a class library - but not the language.
I always thought programming was fun!
Maybe if it's painful to you, you should try a different line of work.
"Even if we were to hand [a new programmer the whole source code] they would likely still struggle to actually use it. They have to install dependencies, compile code, start servers and open ports. At each step the errors are difficult to diagnose and time-consuming to fix"
Use Subversion to manage your source code, Maven to manage the dependency installation and build process (with Ant if also necessary) and Puppet to manage deployment if it's more complex than just dropping the compiled artifact into a deploy directory. Oh yes, and write a build and installation document describing the process in exact complete steps. If the guys who have learnt your ad hoc processes can't be bothered to document them, expect everything to be costly and time consuming when bringing new developers on board.
I just start Visual Basic.net express, create a GUI, type in some lines and run. The IDE handles all the dependencies, I think. I don't need to manually add dependencies or libraries unless I want to use a third-party control. I don't need to start a server or open ports. What kinds of IDE needs to start a server or open ports? Just asking.
Why does everyone need to be a programmer? Why does someone imply, programming is a pain?
Todays tools are okay, and who can't be a programmer, doesn't need to. We do not need to simplify laws, so everyone can be a lawyer, so we do not need to change programming just to have everyone as a programmer.
I've head the same complaints about "make" for the past 30 years. Anyone who managed to create a makefile that used a common configuration directory, could successfully process multiple types of source file (.c, .cpp, .s), handle both 32-bit and 64-bit builds, multiprocessing with pthreads, support multiple target platforms, along with different GUI's was considered a Makefile guru. In many cases, Makefiles were passed down the generations and treated the same respect as a 150 year old family heirloom.
Programming is either about money or masturbation.
Of course, the fact that a good programmer can make six figures is largely due to the fact that there are so few good programmers around -- in the (unlikely) event that awesome IDEs make it so easy to program that most people can do it well, chances are programmers' wages will drop significantly due to increased availability of employees willing to work for cheap.
Call me selfish, but having spent the 10,000+ hours to get good at programming, I have conflicted emotions about deliberately devaluing my skills and earning $10/hour again.
I don't care if it's 90,000 hectares. That lake was not my doing.
The more accessable programming is, the lower programmers get paid. Look at Objective C vs PHP when it comes to a programmers pay. If anything we want programming to be less accessable. Hoepfully the next hot consumer device is only programmable in assembler.
Why is there not an IDE that can offer a cogent error message indicating how to fix a missing library, or to resolve incompatibilities in this sort of thing?
I find setting up a build environment an unduly large part of most projects. It's arcana. It is poorly documented. The IDE should be helping, but the present ones too often are so clueless that they will offer "help" on highlighted functions that have equivalents in other languages than the one being edited.
Funny thing is, 30 years along I really haven't run across anything I like better. Automake works great if it's already set up, but seems very esoteric to set up. Ant and Maven are just make with XML files. They're very clearly intended for use in systems that will autogenerate the build file for you, but somehow you always end up having to edit the damn things in a text editor and know implementation details of the build systems to make them work. Most IDEs are awesome as long as everyone works with that IDE and does everything with it. I've never seen that level of organization on any programming project. Most of the time I'm just putting together small libraries on one architecture, and can crank out a makefile that will work in a couple of minutes.
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?
When it comes to Java, it begins on day one with the standard "Hello, World" teaching people to write a procedural program in the static context before they even understand what an object is. And then they learn about object inheritance. Years later, they read Effective Java and find out their entire CS education was a lie. Meanwhile, they've been churning out utter shit as a contractor in Hong Kong or Bangalore or San Francisco... and every company who's been using their horrible code has been paying dearly for it.
"the vast majority of the world has chosen to remain illiterate"
waaaaah-f-ing-waaaaaaah.
The vast majority of the world are IDIOTS. That I have to risk my life on the highway with them where they operate dangerous devices is ENOUGH. I do not want to ever use code those same idiots wrote. PROGRAMING IS LIKE BRAIN SURGERY, it is really not for everyone. Has NOBODY learned ANYTHING from the WWW explosion of "anyone can make a web page" attitude with NO SKILL NOR LORE to back up the fool who follows the catchphrase? Half the reason why most sites are so hackable is because the creator never RTFM, never knew what they were doing but just winged it with WYSIWYG tools. FEH. Crack a book and learn the lore or just go back to mowning your lawn, at least there's lemonaid waiting for you when that's done.
"They have to install dependencies, compile code, start servers and open ports. At each step the errors are difficult to diagnose and time-consuming to fix."
Here's your fucking problem right here. These things should be fucking /trivial/ for a programmer.
Too many programmers know /fuck all/ about the computers they are supposed to be witting software for. I'm sorry, but you're not a "programmer" if you can't administer the system you're targeting. It's clear why so much software is bloated, buggy shit.
I've seen "programmers" that don't know how to log in to a windows domain (It says press ctrl-alt-delete right on the fucking screen you fucking moron) and don't know how to install visual studio. (You know. The thing they were hired to use.) I know absolutely nothing about visual studio but it only took me 2 minutes of googling for fucks sake.
You know how automatic versioning is baked into your operating system, so that you never overwrite working code by accident, or fail to save that perfect version before you've "optimized" it into spooge? Isn't that great? No, you don't know what I'm talking about?
Oh, that's right, no commercially successful OS uses that anymore. We've all reverted to 40 year old Unix/mainframe programming paradigms instead of using the nearly idiot-proof automatic versioning that DEC developed more than 20 years ago. Because the PC.
Programmers become accustomed to things and consider them good. It's like a Stockholm Syndrome thing. Until we get past that, we will continue to suffer pain. The horrific rwxrwxrwx permissions scheme, non-versioning file systems, mainframers preallocating file blocks, etc. etc. etc.
This happens a lot. But, it isn't obvious who to blame.
My most recent example (this year) is as follows: We were called in to help fix a problem as consultants. We found a mass of c++ code with a build system written entirely in with ant files and no form of dependency managment or package management.
I showed them things like rpm management and cmake files, and while they agreed it was nice, this was their current process, and maybe they would try mine on the next project - when it starts in 3 years.
*shrugs* I've learned multiple languages, and the difference between a well-formed tool for the job and a poor one is often unclear before you know them both, but amazing once you do. Many of the changes which make programming more accessible will also improve the tools in subtle ways. If you simply make C++ give remotely sane compile errors when using templates... it would both make templates more accessible and easier for experienced programmers to use on an occaisional basis. (Of course, if all you do is templates, you'll learn to interpret the gibberty-gook they put out.) Many, though not all, changes to programming tools improves the breadth of a programmers capabilities. It's like the computer read-out port on cars; it does many diagnostics in one step that used to require expert knowledge in multiple systems, quite possibly specific to that model of car. It requires some investment in obtaining the tool, but makes your life waaay easier.
no seriously fuck beta
In live programming an attempt is made to reduce the time between a program change and the ability to wittness consequences of this change. In the good old days, with punched cards, this was not a pretty picture as it could take a long time to get to that point. With Conversational Programming, which is a special kind of live programming, we try to go one step further and compute of the program you are writing. A simple version of Conversational Programming has been added to AgentCubes online. You can play with this as part of one of the hour of code tutorials: http://hourofcode.com/ac
The complaints seem to be about a lot of perfectly fixable usability problems, common to open source development tools, that nobody's bothered, or will ever bother, to address.
I know - we're supposed to hate MS here - but I've never had these problems in projects of any type, large or small, closed or open source, using Visual Studio.
And you get people also complaining that if making programming (actually, using the programming tools) too easy makes bad programmers. Which is total bullshit.