I love programming because there is no limit to what I can dream up and realize.
At the same time I hate it because of the terribly convoluted way we have to take in order to achieve a certain goal. In this sense I feel that computing has actually gone backwards compared to where it was in the 80's on simple 8 bit micros.
On a simple 6502 machine it was possible to:
- boot the thing
- type in a small program at the prompt
- observe the result (graphical or textual)
In under a minute. No GUI toolkits, no web interfaces, 300 call APIs and hundreds of megabytes of memory dedicated to the operating system.
If there is anything I would like to change about how computers work I'd like to get away from monolithic operating systems and environments and move towards a more 'lego' like computing architecture.
That would make the 'hate' go out of the love/hate relationship in a heartbeat or two.
I have a really strong feeling that computing is on a dead end path, that at some point we are going to completely ditch what we've got and replace it by something much better. We're still stuck in the 70's for the most part (and yes, that includes the latest hot new little language that is only new because its creators have no sense of history).
I know this sounds like the rant of an old guy, but I really think there is a very bright future hidden in all this and I can't wait to get there.
Not only that, but speaking as someone who taught himself 6502 assembly on an Apple II+ as a 15-year-old, I can state categorically that I would never be able to repeat that feat today, with the insane complexity and bewildering diversity of modern languages and environments.
Oh, I'm sure my 15-year-old self could picked up Python scripting or the like, but C++? Nunh-uh. No way. I'm always impressed when I see some kid teaching him/herself advanced programming languages. Even with the Internet at your disposal, becoming a serious programmer these days is hard for anyone with a sub-genius IQ.
I got in to coding very young and I didn't really 'grok' it until one day it all fell in to place, the proverbial 'a-ha' moment, and overnight I went from programming 10 or 15 line little 'helpers' to work out little electronics problems to a 3000 line piece to compose sheetmusic on the screen :)
The low barrier to entry was definitely a big factor in hanging in there, getting some results and learning from that.
I did C++ as my first real OO language. It was quite a lot.
I don't think it'd be hard to learn C++ if you knew C and Java (or a scripting language with OO).
Courses that start programming with C++ seems to teach a subset first ("a better C").
Edit: Disclaimer: A few years after learning C++, I skipped all the low level stuff and almost only do scripting languages. I might not be C++'s largest fan. :-)
The big difference between programmers and non-programmers is that the latter seem to fail to grasp that computers are universal machines/tools. That you can make them do almost anything you want and simulate entire universes inside them. Or use them to solve any kind of problem.
How can't you love this?
Non programmers, on the other hand, tend to identify the computer with the software already available and known by them.
Programming also means (at least ideally) being able to talk directly with the computer. It means being able to perform boring and time consuming tasks in a fraction of the time.
Non-programmer users get frustrated so easily with computers because they're in a foreign land and they don't know the language. They can go to the station and take a bus if they know which one would bring them wherever they need to go. But they can't ask for directions.
Compare, for instance, the expressiveness of the unix shell with GUIs when you want to perform a specific task on a particular subset of files/data.
That's why I think that programming should be something available to (and acknowledged by) every user.
I don't think that is strictly limited to programmers.
When I was a student, I heard even law students and economists make more or less tha same arguments about their subjects.
That is, there are collections of rules you could handle like games and/or machines, pulling different strings and adjusting to make them do what you want.
(Chemistry and physics are other obvious subjects.)
Of course, the non-programmers' wimpy systems aren't real Turing machines... :-)
I should have noted that myself. During the IT death, I did some bio-/organic chemistry courses for fun. It seemed so interesting to modify prokaryotes. Like the people programming logical circuits with the game of Life, but with proteins.
I got ill for a while and had to stop studying, otherwise I might be working with bioinformatics now. On the other hand, biochemical lab work was boring (organic chemistry lab was incredibly fun.)
"What I really love is tackling something no one else knows how to do, or maybe no one has ever tried to do. That's the most magical thing of all, figuring out how to write a program to do something totally unique, or even seemingly impossible."
Thank you, codist! That is the best description of myself that I have ever read. Whenever anyone asks my biggest strength, I tell them that the answer is always "yes". Whenever they ask my biggest weakness, I tell them that I don't want to work on something that someone else can do.
"Oh well, I am beyond getting the usual jobs via the usual methods, since no one hires a 51 years old programmer with up to date skills and 28 years experience being a passionate programmer who still loves to program."
Wrong. I'm older that you, codist, and I'm never out of work. It's got nothing to do with age, or skills, or politics, or dollars. It has everything to do with results. I'm currently helping a customer's customer solve a 9 figure business problem with software that none of them ever even imagined, because we just kept digging until we came up with it. Once you deliver something like that, people like them don't let people like us get away.
Nice article, here is a similar piece from Fred Brooks that I think nails it slightly more eloquently - http://www.grok2.com/progfun.html
"The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures."
Not just 'making things': creatively crafting solutions. A mason also makes things, but he just stacks bricks. I'm proud to call myself a software engineer.
I can relate to what the author is saying here. Often I described my writing software as something that lived inside of me that was demanding to get out. I had little idea whether I could successfully commercialize it or not. The challenge is something like it required such a heavy up front R&D effort. So I started to see myself like an author. An author doesn't know if their book will be successful without writing it and seeing what happens. So I made my sacrifices and got the software to a good point. It's still my hope that After the Deadline will be my break out novel. Regardless of outcome, it is a labor of love all the way.
I started in college as EE, but the physics requirements were wearing me down. I had to take some programming courses, and decided that I much preferred the opinionated reality of software to the unforgiving objectivity of the real world. So I switched to CS.
I've always loved creating stuff, and programming gives me an unbelievable set of resources.
For me, it's because the challenges are complex and the problems lend themselves to being broken into manageable pieces. If I, instead, wanted to build a space shuttle, there are some real barriers to entry (not the least of which is the few millions needed to get me some rocket fuel and so forth), but with computers it's just me, the debugger and vi. I can do anything I want, limited only by my skill and imagination. I like those kinds of limitations...
I love reading articles like this precisely because I don't feel this way toward programming. I do toward writing, music, design, theatre, but code feels sterile to me. I hope one day to have it click and suddenly understand how so many people here feel to look at a page of code.
It is the only activity that I do that is purely logical. In a world that is run on 'emotions', 'sentiments' and 'politics' being able to apply pure logic when communicating (albeit with a machine) is immensely rewarding.
If a single typo puts you off content then try this:
Language and - by extension - writing are a means of transferring information from one person to another. It is the meaning of the information that matters, not the format in which it comes to you. So if the same piece had been spoken to you (which is just a switch of medium) you would have loved it.
So, just like the first braindead compiler you refused to 'compile' (understand) a perfectly good piece of information because of a syntactical issue. Compilers are not programmed to deal with this sort of thing (it has been tried, see the fiasco of the error correcting pascal compiler) but humans are more flexible than that. There is no need for you to balk at the first error in grammar or spelling.
Plenty of people have a very valid story to tell, even if their delivery may not be 100% on the mark. As a non-native English speaker/writer I'm often quite shocked at the level of spelling and grammar displayed by 'the natives'. But I try hard to not let that stand in the way of understanding the message.
I hear what you say, and I agree with much of, but I disagree with some of your points.
> if the same piece had been spoken to you ... you would have loved it.
Not if the person had a really, really annoying voice, or if it were littered with grammatical differences from my norm, or if it were so loud it were painful, etc.
Delivery matters. If you force me to get past the delivery to find the message, you are saying that my reactions are less important than your thoughts. If you care about your audience, you will take the time and effort to remove obstacles and let the message be unhindered.
How many times have you visited a web site, only to leave fairly promptly because you can't make instant sense of it? This is the web/visual equivalent. We are repeatedly exhorted to make the design simply, clean, clear, and attractive.
Checking your spelling and grammar are the authorial equivalent.
I frequently write in a non-native language, and I know that I need to check these things almost fanatically. Not to do so is to show a lack of respect for my audience, and to ignore the wisdom of ages ago:
Excellent point, I had not thought about it in that way.
I assumed that the speaker would have been reasonably proficient but a horrible writer, of course there are other variations, and I'm acutely allergic to some voices so I really should have given it more thought.
In the age of spell checkers there is hardly any reason to have simple typos in your writings anyway, but that is another matter.
but a typo in the FIRST sentence is such a turn-off
Get over it. For 3 reasons...
1. hn is international. There's a decent chance that English is not OP's primary language.
2. To meny strumbos I work with knitpick on grammer and speling becuz they aren't capabull of evalu8ting the kontent. I don't ever want too be like them. I bet u don't either.
3. Grow a thicker skin in order to learn more. To me, "hacking" and "turn-off" seem like they oughta be mutually exclusive.
when i create a program that can communicate each other, i just realize that the limit in programming is infinite. it's feel like a magic in your hand. a wizard of binary.
I love programming because there is no limit to what I can dream up and realize.
At the same time I hate it because of the terribly convoluted way we have to take in order to achieve a certain goal. In this sense I feel that computing has actually gone backwards compared to where it was in the 80's on simple 8 bit micros.
On a simple 6502 machine it was possible to:
- boot the thing - type in a small program at the prompt - observe the result (graphical or textual)
In under a minute. No GUI toolkits, no web interfaces, 300 call APIs and hundreds of megabytes of memory dedicated to the operating system.
If there is anything I would like to change about how computers work I'd like to get away from monolithic operating systems and environments and move towards a more 'lego' like computing architecture.
That would make the 'hate' go out of the love/hate relationship in a heartbeat or two.
I have a really strong feeling that computing is on a dead end path, that at some point we are going to completely ditch what we've got and replace it by something much better. We're still stuck in the 70's for the most part (and yes, that includes the latest hot new little language that is only new because its creators have no sense of history).
I know this sounds like the rant of an old guy, but I really think there is a very bright future hidden in all this and I can't wait to get there.