I’ve been posting much longer articles than I meant to, so today’s will be short. [Later: but, as it turns out, not as short as I intended.]
When I was fourteen, I wrote space-invader games in BASIC on a VIC-20. If you were interested in computers back in 1982, I bet you did the same. When I was 18, I wrote multi-user dungeons in C on serial terminals attached to a Sun 3. When I was 22, I worked deep down in the guts of a text database system — still C, now on a Sun 3/80 of my very own, with one of those HUGE bitmapped screens with a million black-or-white pixels. I was in touch with my friends from university: we were going to write compilers and operating systems and cool stuff like that — and to some degree, we did. We sent each other our in-progress code, complained about each other’s programming-language designs, and laughed at how inefficient each others’ completely unnecessary reimplementations of malloc() were. [I remember a friend’s implementation achieving something like 18% occupancy.]
That was then.
Today, I mostly paste libraries together. So do you, most likely, if you work in software. Doesn’t that seem anticlimactic? We did all those courses on LR grammars and concurrent software and referentially transparent functional languages. We messed about with Prolog, Lisp and APL. We studied invariants and formal preconditions and operating system theory. Now how much of that do we use? A huge part of my job these days seems to be impedence-matching between big opaque chunks of library software that sort of do most of what my program is meant to achieve, but don’t quite work right together so I have to, I don’t know, translate USMARC records into Dublin Core or something. Is that programming? Really? Yes, it takes taste and discernment and experience to do well; but it doesn’t require brilliance and it doesn’t excite. It’s not what we dreamed of as fourteen-year-olds and trained for as eighteen-year-olds. It doesn’t get the juices flowing. It’s not making.

Salmon nigiri -- the simplest, yet in some ways the best, form of sushi. When the salmon is really good, it's a deeply sensual, almost spiritual, experience to eat it.
Knuth speaks
If you don’t believe my analysis, will you believe Don Knuth? Here are a couple of extracts from his excellent interview in Peter Siebel’s book Coders at Work (which, yes, I have now finished reading):
“There’s the change that I’m really worried about: that the way a lot of programming goes today isn’t any fun because it’s just plugging in magic incantations — combine somebody else’s software and start it up. It doesn’t have much creativity. I’m worried that it’s becoming too boring because you don’t have a chance to do anything much new. Your kick comes out of seeing fun results coming out of the machine, but not the kind of kick that I always got by creating something new. The kick now is after you’ve done your boring work then all of a sudden you get a great image. But the work didn’t used to be boring.” (page 594)
“The problem is that coding isn’t fun if all you can do is call things out of a library, if you can’t write the library yourself. If the job of coding is just to be finding the right combination of parameters, that does fairly obvious things, then who’d want to go into that as a career?” (page 581)
Are you gonna argue with Knuth? Huh? Are you? Didn’t think so.

Tuna nigiri. For me, there is a sort of metallic flavour to most raw tuna; but belly tuna, the fatty cut known as toro, is just sensational -- when you can get it. (This isn't it. This is just your bog-standard maguro.)
We gotta get out of this place
I want to make things, not just glue things together. When people ask me what I like about my job, I always say the same thing: that its the thrill of starting with nothing and making something. That, for me, is the essence of programming, and it hurts that there isn’t as much of it about as there used to be.
We all know that the most enjoyable part of a programming project is early on: when the slate is clean, the emacs buffer is empty, and the world is fresh and alive with possibilities. And then the invigorating rush as the shape of the code starts to emerge, the data structures condense, the algorithms come together; the code becomes runnable, then it does something useful, it passes tests, and then — yes! — it’s not just an idea any more, but an actual program. You’ve completed Phase 1.
And then — anyone who’s ever actually released software will recognise this — then in a sense the actual work begins. For the program to stop being a private project and become a public product, it needs documentation — APIs, command-line manuals, tutorials. It needs unit tests. It needs a home on the web. It needs checking for portability. It needs changelogs and a release history. It needs tweaking, and quite possibly internal reorganisation to make it play nicer with other programs out there. All this is phase 2, and it’s closely related to the issues of programming culture that I talked about last time.
The thing is, no professional programmer begrudges Phase 2. We all recognise the necessity of these things, and we take pride in doing them right. It’s part of professionalism; part of being not just a computer scientist, but also a software engineer. It’s all good.
But Phase 2 is not the core of the work. It’s really all about Phase 1; and even if Phase 2 takes more effort and time, it’s still only the ‘i’s that we dot and the ‘t’s that we cross to give our beautiful code a life outside of our own computers. And the problem with modern software development is that it’s all Phase 2. The ubiquitious availability of nearly-right-but-not-quite libraries and frameworks-that-do-it-all-for-you-except-that-actually-they-don’t wipes out the exhilaration of Phase 1, but leaves us with even more of the drudgery of Phase 2. Instead of designing beautiful data-structures and elegant algorithms, we’re looking up the EnterpriseFactoryBeanMaker class in the 3,456-page Bumper Tome Of Horrible Stupid Classes (Special Grimoire Edition), because we can’t remember which of the arguments to the createEnterpriseBeanBuilderFactory() method tells it to make the public static pure virtual destructor be a volatile final abstract interface factory decorator.
I understand, I think, how we landed up here. I wish I know how we can get out.
Update (9 March 2010)
I should have added this update days ago, but I only just realised that a lot of people are reading this article from links elsewhere and may not have seen what’s on the rest of the site. So:
I wrote a follow-up article in response to the initial batch of thirty or forty comments, which addresses a lot of points that were made there, and much of what has been said subsequently, too. If you liked, or hated, this article, you’ll probably find that one interesting, too.
Update #2 (15 March 2010)
Belatedly, here are some links to other discussions of this article elsewhere on the net:
Update #3 (1 November 2011)
To my great surprise, this article has popped up on Reddit again, twenty months after its first appearance. So if you’re interested in what’s being said now, head over to:
I couldn’t agree more. Nothing better than an empty canvas.
What kills me inside is non-programmers deciding on the application foundation. Then they try and hire some code monkey to work within their system. What they don’t realize is that force-feeding frameworks and libraries will turnoff true talent.
I am sad about this too
I agree.
Everyone goes on about how creativity is key for the future (since information-retention has been made obsolete by Google). But, despite being a senior developer I don’t get to use any creativity in my job other than to solve artificial constraints that I instituted for the purposes of achieving elegant design.
And when I look at the jobs available (in Auckland, NZ), 90%+ of them involve some business information system which just sounds like snooze-ville.
So for me from now on it’s either a career change (into management) or finding jobs with companies that work in areas that interest me. But the latter condition is very limiting…
I had a Vic 20 also, great machine. I bought a floppy drive for it that cost more than the Vic 20.
I know what you mean about building something when coding but glue-ware is also fun, I mean building something huge out of little bits of code here and there, thats why I am learning perl right now.
I frequently create custom business and ecommerce applications, and I hardly ever get to do any copy/pasting. There’s always a custom report to create, a custom csv to parse, or a custom xml system to integrate..
I am in complete agreement with you. I was trained since Kindergarten to program. To write code from nothing to something. Take a few fundamental constructs, and arrange them to create something greater.
Nowadays all the programming I do is very high level. I just paste libraries together. I am actually worse at this kind of “programming” because I can’t memorize so many commands. I’m basically just reading documentation and following instructions all day long.
I think maybe I will go back and try to find some low level things I can improve, or reinvent, just to bring back the old spirit.
Maybe you just need to change languages/platforms?
I have plenty of fun in what you call ‘Phase 2’ because what I’m creating isn’t a bunch of functions that perform system calls and manage memory and processes but code that is interesting-to-my-problem and domain-specific logic. To me, this is the best part. I don’t want to start from scratch writing the code that makes a pixel some color or constructs a TCP packet, I did plenty of that mundane stuff in school, I want to write the code that lets the user do something interesting and useful to them. I’d rather spend time doing interesting things with the UI than writing my own JSON parser.
I think the problem is that you (and apparently Knuth) seem to think that what’s interesting and fun for you is also what’s interesting and fun for everyone else. Not everyone (in fact quite the opposite) got into programming and computer science to futz around with algorithms, sometimes we just want to solve a real world problem for ourselves and users.
The best part about the current landscape is that you can still pick up C or something suitably low-level, ignore any available libraries and get down to work on the interesting stuff — meanwhile someone else can pick up Ruby, `gem install rails` and have a site that tracks their expenses in a weekend.
You start by getting out of a commoditized job.
The difference between programming and coding is that the
former requires an adroit intellect and creative spirit, the latter
only requires recall of syntax and APIs.
Since computers and software have become commodities (as opposed to
when computers were relegated to Universities, large corporations, and
people that could operate them) – consumer items – there is more of a
need for production rather than creation. You
“produce” (or code) websites, accounting software, and time tracking systems;
whereas, you “create” (program) when you do something that cannot be
done by gluing APIs together, experiment with Kernel designs that have
never been done before, or build something so unique it
requires more thinking than typing.
Much of today’s “programming” is just coding, factory workers churning
out applications, systems, or websites that are all the “same” save
for slightly different aesthetics or copy.
There is nothing wrong with this! The world of
programming is *not* coming to an end! It is a wonderful thing, as a
matter of fact – it gives one the opportunity to step back and say
“Gee, what value could I be providing here that is not being provided
for by the commodities that already exist?”.
It gives you the opportunity to shine. I’m a contract programmer and I
build commodity websites; I (for the most part, but not all the time)
glue libraries together. Is it satisfying? Not entirely. But, I do
have direction because of this knowledge – without the lower barrier
to entry I would not be envisioning the things I do now.
I understand your frustrations, but divert your focus from this to
creating something of value – that is the beauty of startup culture, IMHO.
Interresting. I think the decade’s explosion of open-source software (and the culture that goes with it) can in large part be traced back to this. Hobby projects and such.
It’s unfortunate that the current industry model doesn’t allow for coding from scratch.
The three choices I can think of are:
1) Start an open source project in your spare time.
2) Switch jobs.
3) Switch careers. (jwz seems to have lots of fun hacking stuff for his bar.)
I remember drawing computer graphics by injecting into my Pascal program some assembly language that wrote the rgb number straight to the memory address that controlled the screen. I also remember creating my own math equations to breathe perspective and depth into the flat 2D screen. That was FUN.
Those days are gone forever, as there are many layers of libraries between me and the pixels. Now the way I change pixels on the screen is to fight with CSS and IE6. Fun, fun! :)
There are plenty of organisations out there that are tackling difficult problems that require well thought out data structures and innovative algorithms (among other things). Sure, if you are working as a software dev for corporate IT then you’re probably not in that sort of environment.
I think the type of programming you are talking about is alive and well, you just have to go out and find it.
Incidently, I disagree that unit tests come as part of phase 2 :)
I’ve been in programming with Ruby for about a year now working for myself, and I find it very “make-ful”, as in I get a lot of satisfaction spending a lot of time making new stuff. It might be that I’m too new. It might be that Rails handles a lot of the resuable bits really well. It might be that I get to pick my clients. I don’t know. I’m just saying I’m find it my work very engaging in that often have the satisfaction from building software and not bogged down in the stuff you wrote about.
As a comment to the end of your article – its obvious you are talking about Java. This is what I would consider “old” web programming or programming patterns.
Even though Ruby, functional languages (and to a way lesser extent PHP), new idioms are created and it is only a matter of time before they reach enterprise level.
If you could take the pieces of infrastructure from Java that allows it to scale so well, and add on top of it an expressive, dynamic, loosely typed JIT language we could be in better shape.
“If I have seen further it is only by standing on the shoulders of giants.”
The programming world is different than it was 40, 30, 10, or even 5 years ago. We have vast resources of open source code, APIs, and developer tools to use and implement. Sure, you can innovate by reinventing something that someone else has already done. But why? You don’t have to invent a stove in order to make yourself eggs in the morning.
Why should programming be any different from the rest of the world? If you can make something in 1/5th the time because you used someone else’s code and you didn’t have to, then that is much better for you because you can move on to solving real problems and truly innovating instead of reinventing the wheel.
I both agree and disagree. I agree that there are a lot of off-the-shelf components available and it’s becoming almost stupidly easy to stitch a little program together. But I don’t find fault in this — it’s the democratization of programming, which is what happens to technical disciplines (e.g. the photographer’s camera, the artist’s pen).
It sounds to me like you’ve become bored and disillusioned. I mean no disrespect, but from the very brief description of your job, I don’t blame you — it sounds boring. Fortunately, the world of programming is even more exciting than it ever was. I too come from BASIC->C->C++->Java roots, and every day I find programming to be more enjoyable thanks to new languages, paradigms, frameworks, and ways of thinking.
All this to say the discipline is still only as exciting as you make it, so get out there and learn something new! Write an iPhone app, check out Rails, Django, Node.js, and Cappuccino. If you’re not interested in the mainstream stuff, have a(nother) look at Lisp, Smalltalk, Go, Erlang, Haskell, ad infinitum.
Have fun again!
P.S. If you need a little help getting oriented, I
I had a blast writing an operating system and compiler from scratch :-) Bummer for you.
In theory, it’s for programming as entertainment.
http://www.losethos.com
I don’t know about you, but I don’t find myself enjoying coding a stupid video game for fun, any more. That used to be fun. LoseThos is supposed to be for kids who haven’t burned-out, yet, I guess. The graphics are so retro, I don’t think kids would get excited.
It’s 64-bit and multicored. That should be fun for programmers.
If you find a way out of your melaise, let me know.
Pingback: Whatever happened to programming?
I guess it depends on your motivation. I don’t program because I love creating complex data structures or innovative new algorithms, I program because I want to create innovative new applications that change how users live, think, work, learn, etc. I signed up for programming so I could change the world for the better in my own little way — not improve how an electronic machine inputs and outputs binary input.
But to each their own. It seems everyone likes to work at different levels of abstractions. I think we can both agree that those electric engineers are weird :)
Great essay…
Can’t argue/disagree w/ you or with DK.
Is this the price that we pay for “going fast to market” while “reducing cost of development”? Yes, it is.
Time to find a new cool project? Perhaps… ;-)
ceo
I am just like you, same age, same history. And literally just last night I was having dinner with a group of top-notch technologists and made *exactly* this same point. I feel like most “software engineering” for last 5-10 years has really become “writing glue.” It’s happened because so much great open-source stuff has been written, and the truth is that I can be a lot more productive than I’d be if I had to write everything myself. But… I don’t feel like a real programmer anymore.
There is one exception. On one of those open-source projects, I’m a core contributor. I’ve designed and implemented major new components. For that project, I am a *programmer*. For work, I’m a gluer.
It’s not that bad because I’m lucky enough to work for a company based on the open-source I’m a contributor to. Actually, the details of my job have almost completely *removed* me from contributing to the project for the last six months, but in principle the company wants me to stay involved and even tries to give “20% time” for all engineers to do so. It’s just that I have so damn much gluing-things-together work to do so the company succeeds and can pay my salary that I have little time for real programming.
Not exactly what I expected when I was 12, but then also not the worst possible way to make a living.
I couldn’t agree more. Writing software is not fun anymore, it’s a job. The type of job that is occupied by people who don’t even like computers, they’re 9 to 5 programmers.
This just parallels the hardware world really. Companies like Sun and SGI dying off for cheaper commodity hardware. It’s not a matter of quality or job satisfaction, it’s about making developers a commodity.
If you want to program creatively, do it on your own time, and put the results on github. There are thousands of people inventing things there. Pick a hard problem that interests you, and work on that. However, if you are complaining about not having professional work that lets you reinvent 2o-year-old wheels, that hardly seems reasonable. Almost all businesses sell what software does for their customers, not software itself. They have every motivation to only pay for you to write original code where they need all the cost and flexibility of having original code. There are very few jobs that require programmers to have real CS skills — not none, but few.
> I wish I know how we can get out.
By not having an industry completely flooded by novices.
I wish we could get out of this situation, too, but it is really difficult, especially in web programming. The only way may be to use so efficient tools that allow us to compete with frameworks even if we often rewrite stuff. Common Lisp comes into mind. Also, there may be some academic jobs/projects that allow creative work – I’ve just been contracted for one :)
I couldn’t agree more! Just like you, I understand the importance of Phase 2, but I just wish that there was more of Phase 1. Especially when you come in to an existing project, it’s almost always in Phase 2 already. It would seem that Phase 1 is what you do at home (if you didn’t have programming as both a hobby and a profession, you probably wouldn’t be very interested in this post), and Phase 2 is what you do at work.
There was a (caustic?) article that highlights the same problems and gives one possible out:
“In Praise of Scripting: Real Programming Pragmatism”, by Ron Loui
http://lambda-the-ultimate.org/node/2941
Pingback: Reálná náplň práce programátora: Dejvův blog
Great blog, you are a very good writer.
Keep up the good work,
p.s. your feed does not seem to be working.
I feel your pain :( I work for a company that just uses already made apps(php apps), I just have to hack some functionality into it, nothing else. It does indeed get very boring :(
I feel nostalgic! :| Had it not been for hobby projects, I would’ve been brain dead because of depression by now.
It seems I’m in the minority, but I’ve found myself taking great pleasure from some of the higher level stuff I’ve done over the last 11-ish years as a pro. I’ve found problems that are every bit as fun to solve, they’re just on a larger than that pure algorithmic level.
I’m thinking about things like producing OO class hierarchies that satisfy the requirements of flexibility, reusability and robustness. If I were merely gluing libraries together mindlessly, I would expect to produce applications that are a nightmare to maintain. The intellectual challenge is in avoiding those pitfalls of maintenance by coming up with an elegant design.
You can still program linux kernel and get a paycheck for that; however, you’ve chosen to whine about how solving already-solved problems were funnier than solving present-day problems.
Get used to it: malloc() has already been written, and nobody would be impressed by you drawing some pixels on a screen using assembler magic. It’s just done and isn’t interesting nowdays.
There are a lot of places where you can apply your desire to make, but you chose to whine.
Pingback: Whatever happened to programming, redux: it may not be as bad as all that « The Reinvigorated Programmer
Pingback: Two types of programmers « Jason J. Gullickson
Its just the industry maturing. Having everybody going off and implementing malloc() or an operating system isn’t very efficient. Leave it to the people who do that stuff all day and really know how to get the best performance out of it. If you really want to do that stuff, maybe you should be knocking on Microsoft’s door or one of the few handful of companies that do that sort of thing. Maybe you’re just in the wrong job?
My first experience of programming was BASIC on the VIC-20 . It was a pretty awful machine. No really, pretty much everything else had more memory, better processor, usable graphics, etc.. But I loved it!
As for programming I’m sure there’s plenty of it going on. Was the Linux kernel a copy-and-paste job? Did the guys at Google just paste libraries together? (they have their own internal fork of Apache). Super computers and grid computing has brought all sorts of new challenges to memory and process allocation. Google and Apple are both actively involved in compiler development at moment.
All of those “boring” toolkits are what lets us write software that actually does things instead of sitting around and inventing new data structures and writing compilers. I think we should be grateful that we can reuse off-the shelf components and crank out a new iPhone app in a couple of afternoons rather than writing our own compilers. I’m sure that in the VIC-20 days, the “old school” programmers were complaining about how all the fancy tools like BASIC interpreters and assemblers were taking the fun out of programming.
The software industry is maturing, and, as a result, software engineering and research computer science are diverging as disciplines. If you really enjoy writing compilers and coming up with novel structures, get into research.
That said, the choice of development environment and language can make a huge difference: if you feel stifled by your tools, try something else.
I don’t think that this problem is unique to programming. I’m not *really* a programmer (I know how to write code, but I wouldn’t put myself on the same level as most of the commenters here). But I enjoy *trying* to write programs. I work on Project Euler problems, and I’m learning to create apps for the iPhone. I’ve had a long-standing admiration for the true programmers, but when it comes to my own time and ability, I resort mostly to gluing. It’s the level that I’m at, and unfortunately, it’s the most I can commit to something that is a hobby and not my career.
However, many careers get replaced by gluing rather than creating, as the fields mature. It’s part of the reason why mechanics are not required to be engineers. You can get a lot of job satisfaction from fixing things that exist, and building things from existing parts, like mechanics do — and even exhibit a lot of creativity and ingenuity doing it. However, it’s not the same as building something from inert scraps and raw materials, and watching it come alive. Yet we need armies of auto mechanics in order for the industry to function, and to provide customers with what they want, and we need comparatively fewer true engineers.
In my line of work as an actuary working in retirement benefits, there’s a similar problem. I’m have the ability to take a client’s financial situation, and generate solutions from them completely from scratch, using creative design and mathematical prowess. However, over 90% of my work begins by taking client data and information, and shoehorning it into existing models — the same old software-based valuations and projections and expense calculations — in order to get them what they basically *need*. I love getting the occasional true challenge, where I get to think of all the different moving pieces as abstract building blocks and consequently make something out of nothing. But no industry can afford to grow and become mainstream if every problem requires a truly new solution, from scratch, every time.
Programming hasn’t changed. The skills that you like to exhibit are still valued. They’re just needed less frequently than the gluing that gluers do. It’s a symptom of programming become ubiquitous, mainstream, and cheap.
I am rewriting my resume and realise, I have been programming since 1963 and still having fun doing it. Now I am studying Scala, Clojure, F# and reviewing my old notes on Smalltalk as I am impressed with the Seaside web framework (I did some Smalltalk professionally back in 1983) and program in C#, C++, Java, Perl. I have programmed extensively in JavaScript and have learned it in depth and find it amazing, dangerous, and fun.
Pingback: links for 2010-03-04 « that dismal science
I agree. I see a lot of this in programmer forums – ask a question, and the usual response is to suggest a 3rd party library to use.. even for the most trivial things. You get blank stares if you suggest the person create their own home grown solution.
Thank you for reminding me why I stubbornly remain in game development, despite the long hours and inferior pay. We write code.
Pingback: Top Posts — WordPress.com
I’ve gotta disagree with you about what programming has turned into. It’s really been the same two ideas that it always has been. One is you see something you like, rewrite it and make some tweaks to it, then call it your own which is what you were doing when you were writing an OS or making your own malloc(). Then there’s the programming that is making computers work in a way that they aren’t generally used right now (plan9 comes to mind).
Back when you started programming the idea was to make computers mimic as much as they possibly could. Now 30 years later they’ve do a pretty good job of mimicking everything we use in daily life so it’s harder to get ideas for these new innovative uses. On top of that the chances you’ll make any money from some new innovative idea have a huge risk factor whereas you can (relatively) easily make quite a bit of money from the non-innovative method of tweaking existing applications.
If you really want to go be innovative with your programming, start working on some sort of robotics related work.
Gist of the discussion is: (from my prespective)
1) Not having to start from scratch helps, doesn’t matter if it’s fun or not.
2) Programming in the good old days was fun. Believe me! :) . But the fact remains, if we had to do that now, nothing would get done on time. (Not evening thinking about cost!)
3) If you crave for the good old days, no body is stopping you from creating and developing your hobby projects. It helps you to keep learning new things and have fun at the same time. Nothing beats learning a new language to get the kicks and develop personal projects using them.
4) Changing jobs to get to a shop where you can “have fun coding”, isn’t the option for everyone. Lot of things come into factor (Job location, kids school, the money! et cetera, et cetera…).
5) While the daily work at your company may be boring, because most your time is spent maintaining a software you (or someone else) created. There are times, you’ll get the rush and feel high, writing one module. In the end, the onus is on you to seek the “fun work” at you current job.
6) As engineers we are here to get work done! Gluing the glue has been reality across all engineering domains. Without the items for us to glue, there won’t be the accelerated pace of development we’ve witnessed since the dawn of ancient tools.
My 2 cents,
– xk0der
Hi Mike. Nice article. But there is hope…
For a decade I was primarily coding in C and C++, then I had a few years where with Java development, but now I am back with C and C++ developing embedded systems.
Working in Java or C# usually means gluing libraries together, just like you say, it is sometimes boring but often very productive. However, when doing embedded systems programming it is often necessary to write “everything” from scratch, because there might be no existing libraries or code that can be reused. Perhaps we should all get hold of some development kits with some exotic processors and limited memory and feel the joy of coding in C again?
Would you have as many responses any of us had something interesting to work on?
Everything is a framework or at least knowledge domain with constraints you have to work within. Would you not use printf or cout? Some of us live in reality, where we can’t afford to spend three months writing yet another hibernate or a complete directx package, or for that matter a complete database system.
So instead of using a database what would you do? Write your own? God forbid you have to “throw-in” sql server or oracle. Why not just program in binary? Maybe just write everything in assembly? Or how about creating your own virtual java machine. Let’s just use text files instead of a database and build our own hand rolled indexing scheme. Yeah, I see a lot of business wanting to pay for that.
What you are saying maybe a nice utopia in the land of academics or free time where there are no real budgets or business needs that have to be met. You make the best design and decision choices you can to deliver “business value” or “solve a problem”.
Here’s a neat story that is true, My grandfather worked as draft’s man for a gauge manufacturing company. One of the engineers had come in one day with an irregular shaped light bulb (base was missing) and gave a challenge of figuring out the volume of the shape. The next day some had answers others didn’t . The other engineers that had answers had attempted to use complex formulas and calculus to determine the volume. My grandfather had taken more a pragmatic approach to the problem. He had asked to borrow the build for 10 minutes. He took a beaker and the bulb to the bathroom and filled the shape with water and poured into the beaker to get a measurement. Suffice it say that answer was within acceptable tolerance.
So you use what is around you and your intelligent to solve the issues and problems given to you. You can’t take the approach of having to “build” everything from ground zero.
Hotness, I talked about a lot of these issues in the followup post, Whatever happened … redux. Check out the link on the RHS.
OK as an Old Skool Programmer and as a computer user (and there is a huge difference between writing programs and actually having to use them) I have 1 major and 1 minor complaint about the way programs are written now compared to when I was coding back in the 1970s. I’m currently posting this message from a Linux box with a half gig of memory, that uses more than 150 MB just to run the OS. My first program was for a steel rolling mill that had to fit into 112 bytes of RAM (we had 1KB of ROM). The current environment has gotten sloppy, and does too little with too many resources, just because they can. That’s my major gripe.
The minor gripe is the environment has excluded the “little guy” working in his basement or garage. I say this is minor because this is the way things evolve, with a bunch of little guys fighting over s small market until one of them makes something that creates a big market and makes him the Big Guy.
And if you want a challenging fun project, but an 8-bit uC and make it do something useful. My current project is a controller that turns a car alternator into a small motor to make a bicycle into a hybrid vehicle.
I was first professionally employed to write code in 1980 using the Intel 4004. I had been soldering together computers on my coffee table for several years prior to that. While there is still some interest in various aspects of the trade that I have done for a living for the last 30 years, for the most part it has lost all of its luster. I agree with the fellow that suggested that non-programming managers are calling too many shots. The number of sites that are married to Microsoft and are completely unwilling to consider other platforms and solutions is appalling.
Pingback: Weekend miscellany — The Endeavour
I very much enjoyed this article. 감사합니다. The word “cobbler” came to mind.
My programming has been FAR less rigorous, but I can recall the joy of early programming projects. Much of it was based on the low level of sophistication at the time. If you didn’t have what you needed, you wrote it yourself. Word processor tasks too repetitive? Write a script in the macro language. No Paint program (pre-Windows, pre-Mac or no Mac available)? Write one yourself.
Is it that “those were the days,” or isn’t it much better now — just less fun for the programmers who aren’t in it for the fun, anyway?
It’s not that writing your own code isn’t possible using today’s languages/compilers; it’s just that someone clever has already written something similar, so why not…
We miss you guys. “Mrs. Shackleford” will be back in Texas, soon.
Ignore that last comment (the last paragraph). Mistaken identity over a simple web link.
Pingback: Whatever Happened To Programming? | JetLib News
Y’all need to get yourselves a Uzebox:
http://belogic.com/uzebox/
I write code because I like to write code. I started with Fortran way back in ’72. I bought a C64 (and replaced it about 5 times) then upgraded to a C128 (which I upgraded to 512K (K!!!)) I loved it. I still write code. Seriously, if you’re only writing code at work, you don’t love it and you should leave the profession. If you don’t write code in your “off” time, you’re not a coder. There are a bazillion open source projects, join one, or start your own. Or just write what you want and keep it to yourself. All is not lost, and you may indeed pass.
Insightful post. Would solving bigger problems break some of the monotony and give you a creative outlet?
For example: One area of Microsoft monopoly that seems to be somewhat overlooked by the OSS world is Small Business Server. SBS is cohesive and comprehensive enough for a small business to make paying extra worth it. Think about it: It provides so many services under one umbrella, tied together with single sign-on, and provides practically limitless scalability. Certainly it’s not without its faults, but no other comprehensive solution has really been “glued” together as tightly as SBS (although DataSync Suite is getting close).
MS pretty much has a monopoly here. Small businesses make up more than 99.7% of employers, and as of 2004 SBS was installed in 85% of those businesses (sorry, couldn’t find more recent stats, but I’ll bet it’s not changed much). This could be a significant contributing factor to keeping Linux off the desktop — businesses “must” run Exchange+Outlook (so they think).
I begun to outline a plan of action here, but due to serious chronic fatigue I’m not able to contribute: http://devidal.blogspot.com/2009/02/steps-preventing-small-business.html
Could you imagine such a project giving MS serious competition? It could actually be less difficult for a consultant to implement than SBS.
Back to my original question, tackling bigger problems may be where you go from here, do you agree? It’s still a kind of creativity, just on a larger, and arguably more helpful scale.
Seems more like nostalgia rather than anything substantial.
You want to do something kool – and suddenly you are finding that with libraries etc. anyone can do what you are doing. The lament of the photographer who sees the masses taking photographs with digital cameras (some of which actually are as good as his!)
What you saw and tried as a kid – was also because you did not know how to do it well – and unfortunately since you were 18 or 20.. you and your job have not really grown.
You could even be the car mechanic who thought cars were cool – and at 45 found that changing oil for someone’s car was no fun, or dinking with a processor controlled engine did not give you the amount of ‘control’ as a 1970 mustang did.
In other words – basically you are lamenting that you missed the big picture and got stuck in the weeds. Cool projects, cool things always exist – you ‘matching impedence’ across libraries is your choice.
I was feeling pretty burnt out, but I’m learning Lisp/Scheme/Clojure. It’s like a whole new world of code goodness. I recommend that if you wanna flex your brain.
I sometimes get nostalgic for “the good old days”, but then, a VIC 20 was a piece of crap compared to what I get to play with now. I look forward to the next 30 years when what I have no is a piece of crap.
I don’t mind using other people’s tool most of the time, because I’m building a solution to a problem. I still get to use my skills in making the best execution times, etc.
Yeah, having a non-tech make tech calls is a pain in the posterior, but that’s life. I didn’t get paid to do my work on a VIC-20, I do get paid now. The man with the money gets to call a few shots and one of them is “Make it as fast as you can.”
What annoys me is when people think an MCSE is superior to a 4 year degree.
This story is about programming for programming….without results.
If you don’t like libraries -> don’t use it!!!!
Writing software is not about ‘do it yourself’ but ‘do it right’. The code reuse or unit tests are parts of evolution. Same as garbage collector, autocomplete, code highlighting, code generators etc.
If you want to stay behind…
I agree with you 100%. Not only is this true, but I find that more and more “programmers” have never used a compiled language before. Remember when Java was a prototype language, then you’d program it for better efficiency in a true compiled language? It saddens me that people are now just getting stuff working as fast as they can. Then you throw more resources at the program just to work.
18%? Was it really that bad?
A very timely article. I’ve recently been trying to decipher which of the seventeen versions CompositeFacadeStatelessEntityInstanceFactoryTemplateMethod actually constructs a triangle. I suspect none of them. I suppose an article on “Why do people give their classes dumb names” (which invariably are one of the GoF pattern names, despite the book saying DO NOT DO THIS), might be a suitable follow up?
Sheesh. Kids these days.
By using libraries you restrain yourself way too often. you spend time resolving what you could do yourself. often involving a dirty technique to get around different sets of assumptions.
by writing it from scratch you know all that jazz and you can write a single-pass no-copy buffering routine.
I had the same feeling the first time I used Visual Basic. Someone showed me how you could use the GUI designer and plop down buttons, double-click the button, and add your code, and I said “great!”.
Than I asked “so… if I wanted to make a new kind of button?” They looked at me like they didn’t know what I meant. “You know, or a spreadsheet component, etc.”, “oh well you can download those kinds of things and integrate them.” Shortly thereafter I found out that they can’t actually be written in VB, but only linked to. (They had to be written in C or what not). I realized that VB was only a scripting language for “real code” that was written outside of VB. (Then I found Delphi, where real work could be done).
I was writing games in ’82 as well. Yes it was fun. And I disagree with the post – and with Knuth for that matter.
Programming is a SERVICE industry, SERVICE and INDUSTRY being keywords here. When I was 12, I was making games like you, but I haven’t made my living out of it. Today, dungeon games are not enough. If you want to make World of Warcraft, in your lifetime, you must use libraries.
Unless you’re a pimp, mixing pleasure with business is not recommended. I get OVERALL satisfaction that I am maestro on a string violine – everybody can buy PC, but only so many people can make living out of it.
Use libraries to make something NEW or BETTER. You will find your personal satisfaction in that, more than reimplementing malloc 30 years after that was in fashion.
It’s like car industry: in ’30s you could make your own car, if you were talented. Today? No chance. At least not the car that you can sell to anyone. World is moving, so should you!
I think that if you actually went BACK to trying to program the VIC 20, you would feel constrained and limited. Similarly, if you actually were forced to rewrite malloc().
Having said that, I agree with you.
Personally, my job is pretty good in this regard — I am writing algorithms. In fact, I would suggest that a true algorithm writer is quite hard to find. Furthermore, there is quite a lot of work for them.
I think that both the ‘architectural’ and the ‘algorithmic’ level of programming are important.
Nah. You wouldn’t write your software in assembly just to keep the board clean. Using tools including libraries is OK. The problem is using _shitty_ libraries.
So you mean, rewriting STL if a viable option if the pressure of deadline is on your back is a good option?
Well …
We can blame those “non-programming managers ” for calling the shot.
That is, if we want to.
But fact of the matter is, new crops of so-called “programmers” don’t even understand what PROGRAMMING is all about.
Unlike those of us who grew up with solders in one hand and machine language on another, the new crops of “programmers” get their education in classrooms, where their teachers teach them “packaged goods”, like Java or .NET or whatnots.
All they ever know is how to glue this library to that library and end up creating a monstrous “project” they call “programs”.
Our aim isn’t theirs anymore.
We were aiming for simplicity.
We were aiming for optimization, down to the last byte.
We were aiming for speed.
Them?
Speed isn’t that important anymore in the era of multi-cored CPUs and super-juiced up GPUs.
Size ain’t important either. Super-megabyte packages are the norm since HDs come in TB sizes.
As we were locked into 4K of RAM (later expanded to 128K and then 640K) and we were trying out best to make things worked within that constraint, the new crop of “programmers” don’t really care about how their “programs” run — since the 64-bit OS (Win 7, Linux, Solaris) have given them hyper-petabyte of RAM to play with.
No, the aim isn’t the same anymore.
And sadly, I have to concur with the original author, there is no more fun !
I wouldn’t dream of arguing with Knuth – but not all programming is as he says. The point of frameworks and libraries is to enable a programmer to build something bigger than is possible by writing bare-metal code.
Knuth’s a bare-metal kind of guy. I’m in the middle. I prefer C to Assembler; Perl to C. My productivity went up a lot when I moved from Assembler to higher level languages.
Much of the programming I have to do (in a corporate environment) is creative new stuff that’s never been done before (at least not in this company). Solving problems the right way is never trivial – although there are many easy ways to solve problems incorrectly.
I have to disagree with almost the entire article. That’s because, I presume, the author and I prefer to work at different levels, on different things. Our ideas of what we make are different.
I’m not interested in making compilers. Others are, I’m not. I’m interested in using compilers (usually of the Just-In-Time variety). I’m interested in making end results. The things I make don’t need to be completely from scratch any more than house builders need to cut down their own lumber. When a library helps me build software, I use it. I don’t get pleasure out of re-inventing the quicksort or finding novel ways of interacting with databases. I like thinking “I want a website that does X” and reaching X, and not having to worry so much along the way about how to implement the font rendering in the browser that’s going to display it.
It is my impression that if that is the stuff that you seek, you can find it. Talk to Google. Talk to video game programmers. Heck, talk to Microsoft. Or university professors. Work on embedded systems. Hack the Linux kernel. There’s people who do like to worry about font rendering in web browsers, and if you’re one of them, then god bless you, cause someone’s gotta do it.
The difference, I think, is between pure computer science and software engineering. If it seems like most of the jobs out there call for software engineering, I don’t think it’s because software engineering is stealing jobs from computer science, I think it’s just because there are more jobs that call for software engineering than computer science. More people want websites and photo editors than want new compilers. But it’s not like there were tons of jobs calling for new compilers in the 80s, it’s just that there wasn’t so many calling for websites and photo editors.
this is progress. go with the times guys. we need more complex systems, so we need more complex building blocks. we cant be writting complicated social networks using assembler now can we? you guys are all too old for this shit. malloc() indeed…
It’s pretty much inevitable that writing software these days consists mostly of writing glue. That’s what happens when writing software pays the bills of many thousands.
As a software shop, you can do one of two things: either write software for consumers, or write software for businesses. The easy money is in the former, as app stores for all sorts of platforms demonstrate.
When writing consumer software – the name already implies it – all that counts are two things: time to market and glitz. It doesn’t have to do much, but it really needs to look cool and change according to consumer feedback very, very quickly. If you tried to build something like that from scratch, you’d fail.
When providing businesses with software, what they care about is whether or not it saves them money in the long term. Long term does not mean a month or two, but can still – to this day – approach a decade, but at least several years. While the stereotype is true to a degree that business buy technology because some manager has been wined and dined by the vendor, on average the savings still matter.
Savings means the software needs to do shit, and preferrably do it well – or at least better than the competitors.
If you’re worried about not working enough in what you call “Phase 1”, run or work for a technology business, not a product business.
There are a lot of good points here. On one hand Vivek is right. I think there are definitely a shrinking set of “good” opportunities out there where you can get paid. However there are a lot of really nasty bad programs out there that were poorly designed, and you can always start a non-profit project and build something truly worthy. Also, to the people blaming Java and C#, your just stuck in the past, there are a lot of very good things about those languages and you can design some really cool stuff (I have). However, with all that said: I myself used to work for Northrop Grumman on C# and I quit and went to program assembly for another organization. Software engineering is dead as a profession via which you can make a living. I don’t believe I want to go the route of stressed out glorified web xml/database technician. Most importantly, I don’t want my worth to an organization being judged mostly upon which software libraries I have memorized. Hence, for the immediate moment I am getting back to the basics. My plan is to go back to college and study math/statistics, get out of programming, and do something that requires design.
Pingback: Magic incantations are good | Chris Hanretty
Thoughts
Programming != designing software.
Programming almost always is creating a new library, usually on top of other libraries. Programming is the art of exposing new functionality for programmers built on top of other layers or libraries. Extending functionality for programmers, or in other words programming users.
I mean this in a much wider scope then you would initially think of. If you write a super-duper efficient new square root calculation algorithm, a typical programmer would say it does not use any other libraries. The contrary is true: You are using programming language X, which is a layer in itself. Unless you write the function completely in machine code.
Designing software is taking the usable libraries, and then exposing this functionality to the user. The WYSIWYG clicking user, not the programming user. The stupid user we are always ranting on.
Since most trivial and widely used libraries are already written and in ‘stable’ phase right now, there is less and less need to write those libraries. Instead, we use most of our time using the libraries in our projects. Thus most emphasis is put on documentation and usability of those libraries (as seen from a programmers perspective). In turn, documentation and clarity of design of these libraries should be the programmers focus point. But we all know programmers want to code stuff, not design libraries, let alone write docs!
As such, we need to improve the usability of the current libraries. The writer of the article is right when he says that doing impedance matching, matching library functionality, etc etc etc is boring stuff. It’s like gluing stuff together, but instead focusing on the gluing process, we are still focusing on the process *to enable the gluing process to happen*. Personally, I have a lot of fun in gluing in libraries together. Really, it’s the part where I find more joy in than actual coding! However, most of the time I am busy creating the environment to be able to do the gluing, not the *actual gluing itself*. It sucks to need 15 minutes to hunt down how function x exactly works, or to find out after an hour library X’s function Y meant something different than you initially understood from Library’s X website. Or to find out Library Z is throwing a weird error because precondition Y is not met, which after all isn’t documented.
In my experience, transforming an idea from mindwave to an actual implementation in code within hours, is immensely rewarding and fun! The big spoil factor here is *un*usability of the libs.
Designing software, in my humble opinion, is gluing together those libs, together with providing a decent user interface for the WYSIWYG stupid user. This is not programming.
I agree with you in some way. I also had the pleasure to see some moving pixels on the display of a some-tens-k-memory computer due to my lines of code. That was fun, and that was discovery. But if I think of that times, I can’t remember of my boss video-calling me every 15 minutes asking about the release date of my code.
Nowadays code is written to go to the market, and bringing together big chunks is the only way to have it done on time. That was fun, this is business. For people who is 14 years old today, I guess there are lots of things to play with, at any level from code to systems.
I remember when we used to spend an afternoon to read Intel x86 specs, just to find out which mix of instructions took the lesser clock cycles. Since I liked that I managed to work in the hypervisor business, where I thought I could find the same attention to low level details. Well, I found 2 drawbacks:
1. Also at this level, we abstract lots of things into bigger libraries, because every now and then the chip makers come out with a single instruction worth millions of lines of code. We used to laugh saying Intel would have put a “win” instruction to run WFW out of the chip. We are beyond that point…
2. We are the ones who create the world you don’t like: we create systems so that the smallest unit the people have to work with is an entire virtualized system. To create an application, people draw schemas full of machine-items, just as we designed classes on C++.. We killed the need-to-know way of coding. We are guilty
Two opposite points, based on my having been programming since 1966:
Now we paste libraries, but decades ago we pasted arbitrary assembly instructions and job control language, that, if IBM, had no more internal consistency than today’s libraries. Of course, some vendors (like DEC) did it much better than others (like IBM).
What’s new today is that the available resources might offer a solution. I don’t know what that is, but do know that, for the first time, we are not driven by the need for utmost efficiency. So, we have a new tool.
By the way, in the history of engineering, the famous people are the ones who put together a working complex system. No one cares that Edison made a useful lightbulb, since other people were working on that too. Edison made a working system from generator to distribution to lights, including meters so people could be billed.
I have a vague idea that the Rensselaer Center for Open Source SW http://rcos.rpi.edu/ might run a planning workshop. Comments? Thanks.
There are solutions to the problem. Instead of taking a lib and plugging it into your program, you could isolate the library! This isolation will do two things — it forces you to describe what part of the lib you’re going to use. And also it forces you to write abstraction of the library, and this abstraction will remove any boring reading of library’s documentation and and figuring out order of parameters for a function. And it makes programming fun again — after the abstraction, it’s again all your code, not someone elses.
Too often we see code which takes a lib, and just uses it without any kind of abstraction. While the library interface tries to do it’s own abstraction and make the lib easy to use, the lib authors just cannot do it correctly, because they need to support several different kinds of applications. Your app needs to support just one application, and it uses just part of the library, so the app should not directly use the lib’s api. Instead programmers should invent their custom api, implement it using the lib, and then make their app use the custom api without any direct dependencies to the lib. Isolation like this will fix many of the problems with how we use libraries…
Get back to hacking. Take things apart again and try to make them do things their designers never intended. Try finding a deep bug no one else has found before and then try writing some code to exploit it. It really is a different sort of programming with unlimited opportunities for creativity.
There is real value in this. The world needs good security assessment tools now more than ever.
Today most software development is not about programming – it’s about getting a product or service to market as quickly an inexpensively as possible. More than anything else, companies select frameworks and libraries for their support of those business goals.
This business perspective makes the situation look different, particularly when most business IT managers do not have deep experience in the realities of development, and can’t easily judge the value / appropriateness – both short and long-term of a library or framework.
There are of course company and OSS projects that operate differently. But they are rare, and typically managed by people with a deep appreciation of the complexities of development, and who take a longer-term view of the business goals and value of the IT assets.
REALLY GOOD AND INFORMATION INFORMATION THANKS
These days “programming the metal” is something reserved for inventors, not career programmers. With liberal or reasonable source licenses for most off the shelf tasks, it makes very little business sense to reinvent the wheel.
If you are in a job where you are gluing libraries together, consider the difference between your responsibilities and that of an inventor who is using a computer to realize or prototype their work.
You may be looking at a career adjustment if that is the experience you want when you are programming.
I would have to at least partially disagree with the thrust of this blog post. I have found that while most corporate software development efforts do not innovate, most startup efforts do.
If you find yourself in a dreary job doing nothing creative, and you feel you have the impetus and brilliance to achieve great things, then you should by all means strike out on your own. The belief in a great idea and the will to make it reality will give you the opportunity to innovate to your hearts content.
I would say its all the complexity, back in my Commodore days (PET-C128) we could get a good grasp on the systems and the state was pretty static, so we could code and hack away new tech was good but you could get by with the old stuff the ‘ol C64 worked the same.
Today, we have to be part system administrator ( Linux, Mac Windows, take your pick, know file systems, TCP/IP, mail, SSL, apache, etc.) have to work with multiple technologies (HTML, CSS, XML, etc), code for muti user access, and lets not forget security. Oh, and web apps are stateless, unlike local apps.
On top of that we have constantly changing environment, externally (IE6 vs new standards, new technology and APIs, and fickleness of new web/data technologies.) and internally (OSs, coding,testing, and design tools) Not to mention the constant barrage of varied information to digest for doing all this (books, google, newsgroups, etc.)
All of it is uber cool, but dang it, when will it give us a break.
I think as I get more into web development, I am getting better – but it has been a massive learning curve, on many many levels. Once I am comformtable with much of it the fun can return as long as your choices are solid and with luck you can just code for a few years after hitting the web-developer ‘zone’.
There are interesting programming problems at many levels of abstraction. They are not limited to the level of twiddling bits. If gluing bits from libraries together is tedious and time consuming, leaving no time to work on the more interesting larger scale problems, it suggests that the libraries are not very well designed, implemented or documented. I often find deficiencies in all three aspects, making them unpleasant to work with, yet still quicker that writing my own library, at least in the short term. Perhaps the fundamental problem is that there is insufficient reward for developing well designed, well implemented and well documented libraries that are a pleasure to use and leave one free to focus on more interesting things than reverse engineering the libraries just enough to get them working together to achieve a task. The collective willingness to suffer tedium for the sake of short term savings dooms us all to lives of tedium.
Program more APL – get matrices to dance!
tOM
As more of the wilderness gets roads thru it, the fun of exploration decreases. Is the joy in the destination or the trip?
It’s much worse when you can’t go off-road because of fences – “you can’t get there from here” – and the only choice is which road.
Then the only freedom is building your own roads – and making the problem worse….
-tOM
Larry Anderson wrote: “All of it is uber cool, but dang it, when will it give us a break.”
This is now my official new motto.
I don’t have a problem using libraries. I have a problem using crappy/buggy/insecure IDEs. I don’t miss using gdb or dbx on C++ code. Write me a good debugger for Java EE, and I will beat a path to your door.
Waah Waah. A zillion more people program than when you were younger, and most of them suck. There are a zillion more jobs around for programmers, and most of them suck.
If you don’t like the projects you are given, QUIT YOUR JOB AND FIND A BETTER ONE. Put your money where your mouth is instead of whining online about how your frontier has been paved.
I think the frontier for software development has changed, so what used to be fun in 1982 is boring now and it should be (progress!!).
Some of the really fun and cool new frontiers in my opinion are: NLP, IR, Data Mining/Machine Learning, computational advertisement, decision support, distributed computing (e.g. hadoop) and many other areas. If you work for a technology company or a startup you still can work on really cool stuff. But nowadays you got to have strong background in Math and statistics in order to get involved in some the above mentioned, but it is still comes down do programming in many cases.
Arrggh! I should spend my time trying to have some kind of dissociated professor code perfection moment in the process of firing up a useful app that works, help folks and is stylish even if it rides on the shoulders of others? Get over it! Programming ain’t religion. It’s closer to cooking.
This article hit home for me. I consistently write my own classes and libs because of what you’ve detailed.
Here’s some things that also do me in for writing my own tools:
1) If you use a framework or library the developers impose their design philosophies on you. It’s even worse when you combine them because there is an inconsistency.
2) You spend most of your time (which you could have spent writing the software) digging through the APIs and Googling for how the commands work together.
3) I tend to get so fed up with design inconsistencies or have so many disagreements with the library or framework that I end up writing my own wrapper classes and routines. Increased complexity.
4) The users can suffer. From time to time I come by code that the developer added an ENTIRE library to linking just to solve one problem. Between compiling, downloading, and installing it, it’s ludicrous to use libraries for such small problems.
I won’t go on with the smaller frustrations, but I hope this article spreads even faster.
PS: yes, lot’s of libraries are amazing. Just the ones who seem to take over your computer…
Couldn’t agree more with you. When I was younger we had to code everything from scratch, we almost never wrote documentation, apart from the odd comment. The problem comes in when programmers become lazy and just “tape” other peoples code together and hope it works.
You exactly express why I did not chose to do programming as my day to day job.
Indeed, I did my first program at 7 on a Thomson TO7 (yes, I’m french), followed by C64, Amiga and PC. Now I’m a fervent OSX supporter.
In high school (back in 1997), I realized that industrialization was changing programmers’ job from ingenious and inventive to ‘copy, paste and apply glue’. Only few spaces last for creation.
It is surely the same path that the car industry followed a century ago… and it’s a shame!
Pingback: Whatever happened to programming - Blog of Leonid Mamchenkov
Well,
time to grow up :)
When I was 14 I did write a game in BASIC, xdraw was a revelation and that was fun.
But … except if you are one of those guys who live all their life in their parents’ basement, it’s time to grow and find a job, and I don’t think anybody would offer YOU a job if your only fun is to start every project with rewriting malloc …
Now hope I made a valid point, probably is just the winter depression hitting you, don’t worry and download iphone sdk 3.2 final beta and get hackin …
vote for #1 comment ” force-feeding frameworks and libraries will turnoff true talent. ” 100% agree.
but nowdays programming is not stand on its own there’s a business side which require ” deliver fast, debug later “
Pingback: Tavarn Ty Pwyll
A big problem with glue-programming is that it promotes lazy programming. All the major platforms provide the basic data structures, so I imagine a lot of people never think about data structures once they finish the data structures courses.
In my experience, it’s actually faster to implement a linked list on the spot then it would be to read the documentation on Java’s LinkedList class or the equivalent in other languages. Also, since I’ve just written the linked-list, the interface to it is fresh in my working memory.
With the way programming is today, I’m feeling very tempted to make a living in computer service and program in my spare time so I don’t have limits imposed upon how I write code.
i agree with you, but as a linux user i also understand the “new programming way”. It’s, why should i build everything new when Parts already exist much more flexible and bigger than mine would get.
And when i write a Programm uses some other Librarys it makes fun too, i also start by null but have to ready some manuals more.
I think that we still can take some time to create either our own framework or our own libraries, and maybe put them in service of the community, it’s cool since it make our jobs easier and we still have some time to create something new (maybe not the entire application but a part of it), and you will have a part of YOUR code in the programs of many people…
I thought maybe I was the only one who felt this way, but reading the blog entry and the comments I see that I am far from the only one. This is exactly what has begun to take my career choice and turn it into a job instead. The lackluster boring integration of libraries when it was the libraries I wanted to write in the first place. I have to take the work available and I become increasingly more scatterbrained by the banality of it all. My mind wants to create and I am forced to simply plug pieces together. It seems a waste of my education and time sometimes.
I used to write as a hobby and I find that I can’t write anymore. I used to think it was that the part of your mind that creates was being used up by programming but now I think its simply grown cold from disuse. This never happened in college. I wrote prose and code equally with gusto.
I recently set a simple assignments to my CompArc students – implement a Producer-Consumer scenario and write your own Semaphores to protect shared code (in Java, unfortunately). Wasn’t going to be perfect, but at least it would explore the idea of indeterminacy. Realised I had to tell them not to use synchronise… but didn’t expect most of them to use container classes, when for the assignment, a simple static char array would have done. What happened to simple, beautiful code? Has programming simply become plumbing??? Ho hum…
I do know exactly what you mean. And I had almost exactly the same experience as Wyatt earlier. (Plugging assembler into my Pascal program and getting the graphics to run faster.) The most sophisticated library call in our programs was usually a print statement.
A lot of the posts seem to take this as a slight on modern programming. It’s not. This is like comparing hand-powered carpentry to building a house with power tools. Of course if you want to build a house (outside of pioneer village), you will use power tools. But there is a simple pleasure in hand crafting something that you would never get with power tools.
The trend I see is that software development is becoming closer to becoming a profession like medicine or law or engineering. There are best practices, standards and accepted ways of doing things. Back when you were writing a compiler, there wasn’t much of that. You had a worn out copy of K & R and not much else, I presume. (I still have my first edition.)
IMHO, software development does have a long way to go before it becomes a profession, but that’s another story. Like medicine, there will still be way cool things to do on the cutting edge of the profession. Not everyone wants to scan colons all day long.
Back in the day, all coding was cutting edge–except for maybe the corporate COBOL and RPG guys. (No, RPG doesn’t stand for Role Playing Game.) They were cutting and pasting before a lot of editors really let you do that efficiently. I’d venture to guess that the cutting edge part of the software community is actually bigger than back in the day, just because the the field has expanded so much. But the cutting edge is a much smaller percentage of the community.
I think the pleasure you can get from programming today is a bit more on the conceptual level. You come up with a cool new idea and whip up a prototype in a few weeks. A lot of the new tools like Rails will let you see results soon enough that you don’t have to wait long to get that reward of seeing something work. That is awesome, but I still miss building everything from the ground up.
Hi, I’m pretty much a self taught coder, got my mcsd but I’ve not done comp.sci (though am considering a correspondance course); can you explain what you mean by Occupancy referring to malloc?
Thanks!
rich c., by occupancy I meant the proportion of all the memory used that is made available to the application. So my friend’s malloc() might take 100 Kb from the operating system, but so mismanage it that it ended up returning handles to only 18 Kb of that to the application.
By the way, Harv (who wrote that malloc) has commented on this article, and seems incredulous that it really was that bad … so maybe I am misremembering. (I bet I’m not, though :-))
I will toss out that knowing how to work with everything from bare metal up is really quite handy – especially in debugging when complex app environments break. I’ve usually got a couple of “noodling” apps going at any given time – lowlevel stuff that everyone already has – just to keep me reminded of how (and why) things work.
I’ve not had an actual programming job for more than a decade – but that debugging (and occasionally patching) has proven very valuable to me in system and network administration as well as other technical fields.
heh due to me REALLY wanting to know lowlevel well, I ended up working for three years (not too long back even) as an electronics tech.
I still mess with stuff. erlang’s especially fun if you have a strong engineering background. There ARE dragons and surprises too – which helps the fun *grin*. Embedded platforms are fun too.
I don’t like frameworks that much but will use them (unless I break them too badly *cough* MFC *cough* trying to do simple stuff). I’ll even work with php although it tends to annoy me the most out of all the “framework” environments. I’ll occasionally explore their code too, especially if I keep breaking stuff. Reliable frameworks on the other hand make my life a lot easier and I’ll happily work with them.
anyway my advice : keep messing with stuff, work related or no.
I see where your coming from but isn’t this what everyone feels in a new era of X?
“I remember when a program was just 0’s and 1’s, we had to run to the lab and if we fell our programming cards spilled all over the concrete, god help you if you hadn’t numbered your cards. THOSE were the days you really created something from the ground up. Sure it took you a year to build a simple addition calculator but we liked it oohhhh we loved it”
I know what you mean though. It seems like most of my work is getting two different things to work together.
Good article.
I’m only now learning PHP(at 28, a late starter) and it’s quite challenging – I clearly don’t have the same mental make-up that you do and I’m rather envious, truth be told.
Even only doing PHP though, I see so many people telling others to not bother making a forum or this or that, that someone already made one, why reinvent the wheel?
I want to, damn it. Why? Because even if my forum or blogging engine sucks and is nowhere near as good as vBulletin or Blogger, it’s mine. I can feel proud of having built something and it working, even if it is only basic.
Khalid, I completely sympthise; likewise Steve, with your partial Make reimplementation. It’s fun to make stuff, and sometimes you don’t need any more reason than that. If you do need another reason, then I offer this: that you’ve never really learned a language until you’ve build things in it.
Ahh, Thanks Mitch – I thought it’d be something along the lines of that – Cheer’s for the explanation!
Agreed. Good observations. The most annoying part is the massive amount of bad quality legacy stuff that we need to live with since all that extra weight is not necessary and this problem can in principle be fixed. What is good in this misery is that when things get bad enough a simplifying revolution becomes possible.
Just the other day I was wondering out loud whether I’d made a mistake by learning Perl years ago. Ever since I did, I get recruiters calling with an endless stream of soul-destroying cookie-cutter Perl jobs. They’re *always* patching together libraries in the way you describe – or even more likely, modifying somebody else’s patchwork collection – naturally, since gluing libraries together is what Perl was made for. PHP? Don’t get me started. I’ll just comment that it has all the same problems, but more so. I refuse to touch it nowadays.
My own web coding efforts (when I do web coding, which isn’t that often) have progressed to building my own C/C++ platform, and I like that a whole lot more. I do still use other libraries quite a lot, of course; who in their right mind would re-implement SSL/TLS or invent their own image-munging library? It’s still a big improvement over the kind of coding we’re talking about above. The difference is being the master of what I do rather than a slave to somebody else’s generalized notions of how things should be done.
I think “real programming” is still out there, but it’s hard to find jobs doing it because those jobs are rarely advertised. I suspect the people who do this work drift from one project to the next and no sign of their activity ever appears on the open market.
This is a silly argument. Even in the Vic 20 days you were using “libraries” of hardware functionality for playing a tone, rendering a sprite etc. Your program was just a glue for those fast hardware libraries doing their thing. Unless, of course, you built your own computer with NAND gates.
I have been programming since I was 12 — at 16 I was writing commercial video games for ZX Spectrum. These days, there is nothing better than starting from scratch with tons of power libraries available and seeing my program take shape real quick instead of me wasting time with sorts and linked lists and other painful boring things I’ve done before. And if a library is missing, I can always write my own.
Bottom line, people writing good software today are every bit as creative as those who wrote good software in the 80’s and 90’s.
Sprites on a VIC-20? Oh ho ho, certainly not! :-)
We got sprites for the first time on the C64. On the VIC-20, the best you could do was define your own monochrome characters in the 8×8 grid, and move them around within the 22×23 space that was the screen.
I’m going to have to mostly disagree.
Sure. There’s something to be said for being able to go out into the woods and make a shelter out of nothing but sticks and leaves. But in our modern society, that’s no way to live.
Today we build our homes out of 2×4’s, nails, plywood, siding, etc.; materials that have been prepared for us before hand.
Granted, anyone with basic construction skills could throw these things together and make a house, and it might even pass inspection, but the skilled creates a beautiful, sturdy and livable home.
Programming today isn’t about just being able to glue things together, but to use the tools that are available, along with our own innovation and creativity, to create beautiful, stable and usable software.
Come over to scientific programming. We still largely create. You’ll have to do fortran.
Man, you totally read my mind. I was just thinking this the other day, how at odds our craft is with its enjoyment. If I code something really well, really portable, then I no longer get to have fun reinventing the wheel. It’s a horrible inverse relationship between productivity and fun.
You don’t expect your customer/client/employee to pay for your little selfish indulgence, do you? A working programmer must ship code. If you don’t agree then you either need a sponsor with deeeeep pockets or go out on your own. Sadly, I’d wager that once you start feeling the effects of not being paid because the code isn’t quite beautiful enough, you’ll start hacking together some libraries and ship.
It sucks but code must be shipped. My boss don’t care whether I feel good about my beautiful code. My boss do care if I miss a deadline and will most definitely howl vile obscenities at me if the reason turned out be the nth unnecessary refactor to get the code extra yummy.
What happened to programming? Money happened!
I feel old. 25 years ago what you are complaining about was a Holy Grail discussion in software – the creation of reusable libraries.
Now that we have it and the resulting increase in productivity, I guess it wasn’t such a great idea. Or maybe you just need to create a better set of reusable libraries.
I can’t agree more, and I’ve had this conversation with a number of my colleagues over the past few years. Honestly I think most of us do our best, most interesting work out of the workplace these days. For those with the luxury, writing code at home, perhaps even taking part in making the magic libraries, when they are opensourced, has become our outlet for curiosity.
I honestly don’t know what your problem is. In my spare, time I run an open source project ( http://www.vienna-rss.org ) that would be a full-time job for 5 people if the libaries weren’t so awesome. I can scratch my itch and run a solid project in a few hours a week – how is that bad?
AND: If this ever gets boring, I can just fire up VMWare and start writing an OS from scratch. Who is going to stop me? What’s stopping you? If the programming you do sucks, start working on more insteresting projects!
People out there are creating new languages and compilers, writing device drivers and entire operating systems. They are writing software for astronomy, genetics, and physics, and inventing new protocols (BitTorrent) just for the heck of it just for the heck of it. Hell, even the traditional demo-scene is going strong! Stop whinging and do something interesting.
Programming using a keyboard is quaint. If I read one more web page that uses “syntactical sugar” I’m going to puke. The future is filled with people who can program applications and OSes from scratch in a reasonable amount of time because they aren’t typing it out on a stupid keyboard, having to invent names for things like variables and functions, or wasting time reading about another person’s code solution. If you can’t see that a visual programming language and compiler (IDE) will supplant keyboard languages then I guess you are just too myopic about the future.
Oh, and the reason programming is boring is because you sold out for money, not entirely dissimilar from a prostitute, who also could be enjoying her work more but doesn’t for obvious reasons.
Saif mentioned something that bears repeating: this is part of the maturation of a technical discipline and industry. For instance, 50-100 years ago, architects and civil engineers had their material made for each job including beams, etc. They didn’t use cookie-cutter designs. Now most buildings use off-the-shelf beams and connectors. Ticky tacky strip malls, houses, office tilt-up buildings, etc. Only the elite engineers and architects get the projects that are largely custom now–whether its a custom green home, a mansion, luxury resort, or a tower in Dubai.
You can avoid the soul-sucking grasp of this calcification and break away from the lemmings–or embrace it if you are less talented, just don’t want to work hard or be creative, or are simply a drone in it for the cash and not for the enjoyment of it as well. If you are a software engineer in AI, gaming, natural language parsing, genetic algorithms, quantitative finance, or any other leading edge area, you only use core libraries like Boost, GMP, etc., a specialty libraries for stats or algorithms, and maybe a GUI one like Cocoa or Qt. the rest is you and it’s the way to keep it challenging and rewarding.
You need to some change ju-jitsu–use the change on itself to move you where you want to go instead of pushing you where it wants you.
Since you noted that the picture of the tuna nigiri wasn’t toro, maybe you should note that the salmon nigiri is farmed salmon, rather than proper wild sockeye salmon. If you’re not getting wild salmon instead of farmed salmon, you’re doing yourself a disservice.
(Proper wild sockeye salmon is a dark red; the pinkish-peach colour is a dead giveaway that you’re getting farmed salmon.)
Maybe it doesn’t feel like programming because you’re writing programs that aren’t gluing libraries together in creative enough ways. If all you’re doing is gluing libraries together and making the parameters fit, where’s the creativity and skill in that? Where is the value that you, as a trained programmer, are adding to the mix?
When you stand on the shoulders of giants, don’t just shoulder-surf. Actually look around and try to see farther. Do something clever and creative. Add code that does something non-trivial on top of those libraries that you glued together. Amaze someone. Write some REAL CODE on top of those libraries you’re using, and earn your keep.
And have some fun while you’re at it.
Those sorts of paste-things-together programming jobs have been around forever. You need to find yourself an employer that has need for a Real Programmer.
Myself, I also program in Java and use third-party libraries up the wazoo. But they only do 20% of what I need to do. Right now I’m trying to generate million-record reports on the fly with under a second of user-visible latency. Why? Because I can convince others in my company that addictive reporting tools cause our clients to increase their use of our services. Find yourself an employer who knows the value of awesome software.
I’m not sure who is forcing you to use off-the-shelf parts, but ask them to stop, I guess?
I don’t see the problem with having useful drop-in libraries to use. I don’t write code to write code, I write code to make _stuff_.
I don’t know what it was but in 1982 I started writing programs for the Spectrum. And in 1983 I gave up. Essentially gave up everything to do with computers and I think we can thank Sir Clive Sinclair for that.
In 1992 I discovered the Internet and got myself into IT but never started the programming side of things.
I’m trying it now with a library of iPhone development books because the iPad excites me in a way no computer has before, in a way that the web doesn’t.
I had this debate before – at what point is your programming low level enough? I didn’t write the BASIC language the Spectrum used, but it was tricky getting the stuff working. I didn’t write most of the classes I used in the “Build an RSS Reader” tutorial I just completed but it felt like programming.
Mike Bauer writes: “Come over to scientific programming. We still largely create. You’ll have to do fortran.”
I don’t know whether to laugh or cry.
:-)
Dan, if I could get wild salmon I would; unfortunately, out in the wilds of Gloucestershire, we are short on wild-salmon dealers, and have to make to with what we can get. One of the things I am most aware of when I eat sushi in a good restaurant is how much better their salmon is than what I use.
Pingback: Where Dijkstra went wrong: the value of BASIC as a first programming language « The Reinvigorated Programmer
Pingback: Why is that a good thing? // Monkey Style Games
I like phase 2. Usually phase 1 is total crap, but done right, the pain points have been identified, and prototyped.
It’s phase 2 where you actually build something, phase 1 is mostly throw away code.
Pingback: links for 2010-03-09 | GFMorris.com
Matt Kanninen, it’s interesting that you actively prefer Phase 2 over Phase 1, and I suppose it gives me some hope that there might after all be a way for all of us to work on stuff we enjoy. I have a piece in the works that suggests the choice between imperative and functional programming might come down to which model best fits the way the individual programmer is wire; it’s nice to think the same might be true of Phase 1 vs. 2.
Pingback: Lightly Organized Chaos » Blog Archive » Perspectives on Programming
The condition that you describe here is not unique to programming. It is a possibility anytime a person decides to make their passion into their career. As a programmer in the business world, your role is to deliver value to your clients.
If you’ve chosen to work for a certain client, and 80% of the functionality they need already exists in high-quality libraries and modules, it would be foolish for them to spend developer time re-inventing these elements, even if those activities are enjoyable to you.
The impedance mismatch may simply be between you and your client. There are plenty of programming jobs that involve building new things, close to the metal if you prefer. If that’s what you’re looking for, by all means, go for it. Life is too short to do work that you don’t enjoy. Approach the companies who do the kind of work you’re interested in and show them how passionate you are about it.
Pingback: Why I Don’t Program Much Anymore » Karl Katzke | PHP, Puppies, and other Geekery
So art becomes engineering – sorry mate. As another fiend brought up on BASIC, I also nostalgically look back on the days when programming was a more creative process.
However, ask yourself this – what was the contribution of this ‘creative’ approach to programming in the 1970s-90s? Inefficient, bug ridden, over budget systems that didn’t do the job they were was supposed to and no one could use without a PhD in Computer Science. Proprietary and connected to nothing else, they had shelf lives as long as the original programmer could be bothered to support them, as no one else understood their idiosyncratic code.
So, art becomes engineering. Code becomes classes, best practice is documented into ‘libraries’ and replicated. Bad for you, good for everyone else. Sorry.
Pingback: links for 2010-03-10 « Tru North Ware
I have to disagree. You presented a nostalgic vision, but today we have more freedom for creativity. You still can program from the scratch, but also have zillion of libraries with dirty work done for you – keep focus on your business (creativity). The libraries are advantage for programmers, and if there is more people complain about how boring is to write a program, it is because more people are able to program and complain. Nowadays, we read on the press about new database schemes like NoSQL, and just go back 10 years ago and you see no other successful option besides SQL. Now we have opensource projects in which everybody can engage to practice programming and hang out with other programmers. Today programming is easier and funnier than before, just look around at the Internet ecosystem.
Pingback: The Work of Art in the Age of Digital Pre-production | Quiet Babylon
Pingback: Scripting Enterprise | Lusta.hu
Pingback: What Happened To Programming? | Superposition Kitty
Pingback: API og liming « Jons spontane ytringer
> I could get wild salmon I would; unfortunately, out in the wilds of Gloucestershire, we are short on wild-salmon dealers
c’mon man, can’t get decent programming gigs, can’t get decent salmon, yadiyadiya, you can fish salmon in Gloucester and it took me 10 seconds on Google to find a dealer in your county, he’ll even deliver by FedEx.
lol…
No didn’t you read the article. He wants to raise the salmon himself from a little egg and fend off the bears with a stick. He wants to rock them to sleep in the cove he built for them with his BARE HANDS.
Then he wants to eat them raw on a slab of rice.
The End
Great insights! I think your exposé of is exactly what computer programming has become. And in a sense it summarizes the history of my career. Which in short went somewhat like this…
I started programming back in 1984 with a second hand ZX Spectrum which I got from a cousin. I was seven years old.
I don’t miss that little keyboard with rubber keys that had five functions each. But what I miss is the thrill of making something new, the joy of knowing that I went where no one had been before.
That is the main reason I spent a good portion of the last decade managing development teams that coded business web apps. In other words, while I created software, those guys, most of them kids, glued pieces of frameworks together.
Then something weird started to happen. Some of these same kids were bragging they were the real programmers, even though they weren’t capable of start coding anything from scratch. Listening to that hurt my feelings a bit. Mostly because I knew I was capable of much, much more.
That’s when I realized I was living in someone’s else shoes, after all I’M a programmer. So, I dropped that job and started programming again.
However, in the beginning it was not a joy, really. That because I restarted programming trying to [self update] using these new techniques (a.k.a shortcuts to productivity). I found myself miserably attaching pieces of software much like a five year old does with Legos. YUCK!
Yet, I got that stubborn programmer’s gene, I didn’t gave up. What I needed was a new platform to develop my ideas. That’s when Cocoa and Cocoa Touch came into place. Yeah, yeah, I know what you’re thinking. These things still frameworks, software Legos. Yup! You’re right. But at the same time, the fact it has C under the hood got my juices flowing.
So, I started to tackle into Objective-C, AppKit and UIKit. And what I found out, unlike others, these frameworks don’t get in your way when you want to create innovative software, they help you a lot in fact.
That’s when I realized: it’s all about the user experience, and never has been in history a better time to innovate in this field. Now I have the complete toolset: ideas, tools, and space to innovate.
I got happy again.
In short the message is, don’t give up. After all, each and every one of us have that stubborn gene.
Todd, real programmers don’t fend salmon-stealing bears off with sticks! As if! No, we use our bare hands!
Nice. Thanks for sharing…
“Todd, real programmers don’t fend salmon-stealing bears off with sticks! As if! No, we use our bare hands!”
That was a test sir. You have passed.
DOWN WITH TOOLS! POPULACE REVERT!
(fine print) The term “populace revert” is a copyright of Todd Inc. and may not be used withtout his strict permission and compliance. Any usage outside of these boundaries will result in him showing up and smacking you with a oh so fresh salmon corpse.
I’ve spent most of my career looking at other people’s code for bug fixing and enhancements. I haven’t had many opportunities in my career to do new development, let alone build something from scratch without existing frameworks and APIs. It used to be you had a toolbox of utility code that you took from place to place so you would not have to reinvent the wheel, but the Non-Disclosure Confidentiality agreements kind of discourage this. Sometimes things are just out of your control, and you just deal with it the best you can. The I.T. world is so budget driven, systems are inherently put together fast and sloppy. If you want to do classical computer science stuff, you can still do that at research centers where software prototypes are still built from scratch.
Pingback: Friday Links: Short & Sweet since it seems most of the nerdom is at SXSW | Inside the Nerdery
Pingback: Programming Books, part 3: Programming the Commodore 64 « The Reinvigorated Programmer
This is the path of every successful technology – from creative intellectual adventure to industrialization and ubiquity. And the comes the next big fun… :)
Great post. I think about the topic almost every day. The other issue is, when you look at modern apps, they are a true hairball of myriad scripting and markup languages, in addition to duct tape and bubble gum roping a bunch of components and frameworks together. When I coded regularly, the entire app would be built in a single readable, maintainable language. The developers were all speaking the same language, and we could understand the code and logic flow clearly. Today, coding is often like having to speak English, French, and Italian in the same conversation. BTW, anyone interested in this topic might well enjoy an interview I had the honor of conducting with Dan Bricklin. Hit my blog; it’s the most recent post. We cover some of these same issues in the conversation.
Pingback: Totally agree with « What happened to programming ? » « Appliweb
Pingback: Ce se intampla cu programarea? | GanaiteD
Pingback: UVa | Save the ions!
Pingback: Seconds & pixels » Blog Archive » “Whatever happened to programming”
Coding games and stuff was fun. I started doing that when I was 12 on the C64. Underperformed in high school because I skipped school and homework to work on my programming. I feel half sorry about that, but boy was it magical to create something from scratch, using that one programming book I owned, inventing the rest as I went.
However, I like being a software engineer today. I will probably like it even better tomorrow. I think it is great that we are (finally) moving towards more higher level abstractions. Closer to the original idea, less distraction from mildy interesting implementation details to get it all working. Less hacking, more the art of architecting.
Let me whine in. The thing that really screwed up programming is google. I just google. I don´t program. It´s not just that somebody has already written a library that solved something you want to do, but some other person has written about how to use it on the internet and postet an example you can use. Where is the creativity in that?
Still even if it is fun to code something from scratch I think I have seen too much sloppy code that i want to see more of it. Usually the biggest problems come from some code people have coded from scratch. A big pile of code that does not use lego bricks. Preferably from contractors. I prefer libraries that are well written, with code I can understand and maybe even fix and submit a patch. Code from scratch that some smart guy invented there and then can be a real pain in the ass.
Still… Sometimes I have been surprised by how conservative most programmers are. They seem to think you either have to fit something into a framework or program everything yourself. Often one have to be a bit creative with the plumbing. That can be fun.
The practice of “stacking existing blocks” may pay the bills, but, I believe, the standards allowing such practice have been severely reduced. For a professional should be able to *guarantee* to their employer the complete behavior of the system so constructed. Surely, that is the responsibility when you “code from scratch”. That it somehow no longer is the responsibility of the Amalgamator because, well, “I didn’t write those other parts”, is changing the rules of comparison along the way. And, I should hope we have learned that the notion that market success is actual success is bupcus. Consider The Bubble. Consider credit derivatives.
Frankly, I don’t personally care. They who buy into borrowing others spreadsheets to calculate their profit-loss without critically examining them will someday, in the limit, come to terms. Meanwhile, I’ll find the work I like, and those who seek cookie-cutter software won’t get the benefit of my help. Sad for them.
Mike,
You have penned down the thoughts that have been wandering in my mind since the day I have stepped into the software development world.
As you have said ” I wish I know how we can get out.” I am also looking for the same but dont know if I will ever get the answer
Thanks for the article.
I guess we all programmers more or less do feel the same about the high availability of open source softwares/frameworks/components in our day to day programming life. I am convinced/have understood that this feeling basically is/can be a starting point to think in the direction of being software entrepreneur rather than being a programmer. The race is now to introduce new idea rather than programming something in our own way using the components/language we like. Google has set the limits…..no offense to my community
Pingback: Whatever Happened To Programming? « Rubber Tyres –> Smooth Rides
yeah, agree, even if I started on other machines in 1979 ;-) and never used a VIC-20 nor a TRS-80 :D
programming has stopped being fun since long AFAIK ; in fact I remeber having thought the same as you back around 1997 when Java begun to be taught in classes in stead of C/C++, having previously thought it was a disaster people stopped learning programming with a real-world-class language being Pascal (Turbo-, then Delphi- then Kylix- and now Free Pascal/Lazarus)
we’re massons now. We assemble bricks with cement. I still refuse to use black-box software. I prefer to use my own. “Trust nobody but yourself”, it’s the only way I escaped disasters ;-)
(I could add that I trust Knuth’s, Dijkstra’s and Wirth’s algorithms, but that all)
Time permitting, I will expand on your essay.
Now I’m bringing back the “true programmer manifest” of the late 70s. I’ve the text but I need to translate it again and put it on my website (see link)
good job, keep up the faith and may the Force be with all True Programmers.
very well said.
this is connected to the price of software development i think. nobody will ever be trusted to start off with a clean slate, when the cost of just gluing stuff together seems much smaller..
creativity is left for weekend projects and so on :-)
Pingback: 你是在重新发明轮子么? « 辛望的开发日志
Pingback: Software: Just Plumbing or Mad Science? | Lessons of Failure
As a software engineer trained in the 80s I agree. I cut my teeth on DEC kit. RSTS/E and VMS.
Another thing that REALLY bothers me about the developers of today is their inability to learn APIs, and language constructs before diving into code.
They just google up some code, splat it into an editor, make some guesses about methods and constructs that look like the *incantations* they googled up, and then take the whole mess to a forum and demand that someone fixes it!
To some extent there’s not good documentation about, and the API and language vendors rely on commercial books which atempt to “befriend” the developer. I hate books like that. I prefer to read technical manuals. Am I weird?
I grew up with the VMS “grey wall”
[IMG]http://i131.photobucket.com/albums/p286/TimeTrialAnimal/grey-wall.jpg[/IMG]
The font of all knowledge. You read the facts on how to build an RMS FAB, RAB and XAB datablock, and test the results. No cargo cult programming and whining on forums back then!
AND WE LIKED IT…. OHHHHH WE LOOOOOOVED IT….
PROGRAMMERS REVERT!
Nice article. The only qualm I have is the interspersing of photos of dead fish flesh and detailed descriptions of their succulence and the pleasure the author receives from eating them.
This has nothing at all to do with the article, and is distracting and unsettling particularly for those who, like me, choose not to eat fish or any other animals for that matter, and who cringe when we see people revel in the consumption of the dead flesh of beings that suffered and died purely for the sake of pleasure. Especially considering that they are not at all required for human nutritional needs and health.
Please rethink this feature for this and other blog posts.
All the best!
Vlad,
I really hope your a full vegan otherwise you stink of hyprocrisy.
There is nothing more natural than the predator eating the pray.
ROWWWRRR!
pray = prey D’OH!
Pingback: The long-overdue serious attempt at Lisp, part 1: which Lisp? « The Reinvigorated Programmer
Todd,
your = your D’OH! :-)
Vlad, I’m sorry the sushi pictures are not tickling your taste-buds, but I’m afraid they’re not going away any time soon. I (heart) sushi, and I don’t really see why humans have any less right to each fish than dolphins do (or than other fish so, for that matter).
Mike,
Good point however are we not hyprocrites ourselves for being horrified when a shark eats a human or a deer maliciously humps a hunter then impales him? (Note: by impale I mean with his horn…. Note: by horn I mean object near his head… Note: oh forget it)
First, Mike, just wanted to apologize for the tone of my original comment, I reread it and it looks a bit nasty. The basic issue is that I’m reading a fascinating blog post about programming “then vs. now” and all of a sudden — whammo — an image of corpses that, in my mind, gets instantly categorized as “yuck” rather than “yummy”. :) My motivation in writing here was just to point out that although I understand the intent behind “spicing up” the text in that way, it will not work across the board as intended.
Yeah Mike you’re never going to satisfy all the vegan developers out there. There goes 0.000001% of your audience.
ROWWRRR
Pingback: Programming - What have we learned? | Improving Podcasts
Pingback: Closer To The Ideal » Blog Archive » What does a programming work entail?
Pingback: Commodore/BASIC/Early Programming Nostalgia Links | cmsnewstoday.com
Pingback: The radius of comprehension — in PragPub « The Reinvigorated Programmer
Sorry, but what’s with the pictures of food items embedded within your blogs?!
Alok: sorry, but if you have to ask then you will never understand :-)
(I believe Louis Armstrong once said something similar to someone who asked him to explain what jazz is.)
Classical + classic rock + funktification – pop = Jazz
@Todd, jazz predates all but classical, so your formula is in error.
You would be correct sir if “Modern Jazz” did not exist. Rock n’ Roll from the sixties is a different beast all together than the current flavor of Rock today.
Invention of a genre of music is only a history lesson. The life force of it lives in the NOW.
(lightsaber thrust impales RBL)
Good day sir
@Todd, why the lightsaber thrust? A little violent, methinks. Did your parents fail to show up for your baseball game as a child?
“Modern Jazz” still requires “Jazz” as an input.
“Modern rock” (if there is such a thing; it’s always been “modern”) is loaded with influences from the fifties and sixties, and earlier, and later. It’s also loaded with influences from outside RnR, includin Blues, Country, Funk, Rap, hip-Hop, Punk, etc.
Rock ‘n Roll is great precisely because it continuously evolves, continuously embraces the new, cannot be contained, can cannot be turned into a commodity genre.
“Jazz” has evolved, but it’s parameters are constrained. Ditto “classical.” Ditto “show tunes.” Ditto “blues.” Ditto etc. I don’t believe rock has constraints of any kind–and it might well be the only class of music that doesn’t.
ALERT: Major thread drift.
Wait a second didn’t I just kill you with a lightsaber thrust?
OMG Clone wars!
“loaded with influences from outside RnR, includin Blues, Country, Funk, Rap, hip-Hop, Punk, etc.”
You just defined every genre of music ever sir. I love the use of “etc.” by the way. Very definite of you.
All music everywhere derived from the drums of Africa.
BOOM thcik… BOOM tchik… BOOM tchik tchik… BOOM
Also, the term methinks was banned in the early 90’s. Thanks for coming out though. Now back into your time machine where music is a history lesson and not something to be LIVED.
(Lightsaber chop, arm falls to the ground ‘Tis but a scratch’. Lightsaber chop, other arm falls, ‘I’ve had worse’. Finally both your legs are cleaved and cauterized ‘It is only a flesh wound!’… Let’s just call it a ‘draw’)
I’ve got no problems with Thread Drift so long as we’re drifting somewhere interesting. The problem here is that ALL these musical-genre names are such broad churches that they are close to meaningless. My wife is a “classical” musician by profession and is horrified that people use that term to include baroque, Romantic and 20th Century music as well as Classical proper. (And what a wholly useless term “20th Century” is in this context!) “Rock” similarly seems to encompass, well, pretty much whatever you want it to; in which light your statement that is “has [no] constraints of any kind” is pretty much tautological.
By the way, I find it COMPLETELY mystifying how the meaning of the term “R&B” has drifted in the last 20-30 years.
R&B before and after autotune. Has me wondering what the next Weapon of Music Destruction will be.
““Modern Jazz” still requires “Jazz” as an input.”
If only ‘Modern Jazz’ musicians lived by that! Instead, Modern Jazz seems to be best defined by how well it fits an average elevator ride or talk show decor.
It gets worse. I have been developing software professionally for nearly a decade. I don’t know how many times I’ve been in situations where a customer has been convinced out of thinking they have a problem. It’s usually somebody from IT these days that comes around and just tells them how to think about their situation. This is the same person that makes the perception of a problem go away, rather than the problem itself. The skilled “re-framer” speaks, rather than solving the problem. If this trend continues, then what we do for a living has really changed, in a fundamental way.
Wait… what does that have to do with Jazz?
Oh, sorry. I’m off topic with the discussion thread. Proceed …
Pingback: DataConnect.be Blog » Blog Archive » Great article on the reinvigorated programmer blog
So true, I completely agree.
Pingback: Are you one of the 10% of programmers who can write a binary search? « The Reinvigorated Programmer
This has happened in everywhere around us.
Just like the “soft skill” is cover up our core skill in all walk of our life. Then people start to forget the core skill. Just like a bubble (but quite different from the bubble that exist in the financial area.)
Pingback: 20 Anos Depois, Ainda Não Entendemos Reusabilidade « Disk Chocolate
Pingback: Dearth Patterns « SQUARISM
Although this is an old post… I thought I should point to a similar article: http://www.cs.utah.edu/~elb/folklore/mel-annotated/node1.html#SECTION00010000000000000000
Tis about a programmer wanting to code in 0’s and 1’s.
Ah yes, the Story of Mel — justly considered a classic. I can’t remember when I first read this, but I am pretty sure it was in the 80s. Thanks for the reminder!
Ok not to highjack this posting. But something along these lines.
When did being a developer or just, anyone who writes code, become the equivalent of a ditch digger. I don’t know about you guys but we have the most difficult job out in the organizations we work for.
Maybe because everyone and their dog wanted to be a developer and now the market is bloated. Maybe because we have a large group of “Developers” who just stink at what they do and give us all a bad name (yes you who would rather write everything you’ll ever use instead of using new libraries and technology etc…). Or maybe its because everyone around us KNOWS we do the most work, the most difficult work and are threatened by it because they know deep down that they couldn’t do our work but we could do there’s.
I’ve come to the conclusion that if I really love code and move away from a career in writing code that I’ll still do it at home or in my business. Without constraints or bureaucracy for that matter. I’ll always work with technology and don’t ever want a career away from it but we just don’t get the respect we deserve. And if you do and get paid well for it congratulations on clawing your way to the top. Don’t ever leave that job.
For the rest of us why not just move on to management etc… of some sort. No one respects us, we work the hardest/most and as for pay we always seem to make less than the people that can say things like “manage your clients expectations”.
Anyways, I could rant forever but before you know it computers will write their own code and we’ll all be obsolete AND have no respect.
Hmmmm… maybe they’ll need someone to dust the dilithium crystals (Oh I remember the days when we had to MAKE the crystals, with our BARE HANDS and we bled like stuck goats bleeting away but we liked it ooohhhhh we loved it…)
Agree, coding must excite the programmer
Great article, I read through some comments.
I feel exactly the same as you do, but I know I’m hopeless if I go on wasting time reinventing the wheel.
I suppose all blacksmiths got really frustrated in seeing that years of experience to learn the craftsmanship of metal modeling got almost wiped out by industrial revolution that created factories able to mold thousands of metal pieces in one day.
In software in particular is even worst, because things change faster, and in one life you can start coding from Assembler and end up coding in such an high level language that maybe you won’t even have to write a for-loop anymore.
When I think at that I don’t know what to say and how should I feel. Maybe I got in the wrong business, maybe I should get into the business of Floor-building or in Accounting, those type of businesses do not change so fast.
But now what I do? I give up all of what I have learned? I know Assembler is not useful, I know being able to write a strlength function is not useful anymore.
But I think it was not wasted time to learn how to do it, I’m sure it makes my programming life easier, it makes me feel more secure when I have to create a new project (even a big one).
I don’t know how to force my brain in not to reinvent the wheel, it’s psychological. I should try to make reinventing the wheel not the only funny part of my job. It’s difficult, but there is no other choice if you want to make some money. Otherwise my way of thinking will bring me to something that is an hobby not a work anymore.
Going back to the blacksmiths example I wrote before: if I was a blacksmith during the industrial revolution time, I could still work as a blacksmith in now days, but it could be more an hobby rather than a real work.
Interesting discussion. I am not sure if a lot of you is worried about programming for living. Fun is good, but living is more vital for me.
If you like new tech. and you have the sharp IQ, you will have fun. There is always a version x+1 that you need to know or else, you will be playing some music in a subway tunnel.
Who has the time for fun when you have to go through thousands of lines of codes other have written to figure out what is broken or when you have to document systems or fix production problems or learn that new version of software thru useless and expensive books or better yet pay 3k/seminar that tells you really nothing or wasting hours and hours on learning UML and other useless inventions? Still they will trash you resume without mercy if you are not up to par and fun does not count on a resume.
I disagree. I think efficiency is far more valuable then creativity. As far as employment outlook it just makes so much more since to hire someone who can pump out mass reliable code then a programmer that can put that special touch on it for maximum performance.
It’s just my 2 cents though.
I was feeling pretty burnt out, but I’m learning Lisp/Scheme/Clojure. It’s like a whole new world of code goodness. I recommend that if you wanna flex your brain.
I loved this. Thank you man. I made me laugh loud at the end, as I had a feeling of tears comming into my eyes.
Pingback: 转:只有10%程序员能正确实现二分查找算法 | ☆零☆ || coderling
All I can say is so spot on to my on experiences with programming. I remember writing some awesome code back in the day and doing so much of the same – writing a compiler, exploring architecture with breadboards, and so on… And today, what do I do when I even get the chance to code? Just as you said, a little script to make some format work for another format.
Well, you have to do serious programming now because you have to earn a living. How much did Space Invaders sell for?
Play with open source more, maybe? I’m in my 40s (my first full computer was a VIC-20 too) and code hasn’t lost its excitement for me, I still twiddle out little fun stuff and post it on my blog just to share the neat-O. But I stress: I do *NOT* code for a living… directly.
Pete,
I can change the spark plugs on my car but that doesn’t mean I’m a mechanic.
JTM
Pingback: what is programming? — coder . cl
the boring part in programming is no surprise but there is one difference i would like to point out, its different to program as a job than as a personal software project. As a job you have to be fast, productive, and flexible. imagine if for every new software project you had to start from scratch, so its understandable. but as personal software project or if your job is building a framework or a new technology or you work in software R&D then its more likely you build things from scratch. so one could change a line of work if bored or start a personal software project.
I have so much real programming work to do I can’t even think straight. I am writing Android and iOS apps. I have to write all the code twice as I am doing it all native – Java for Android and Objective C for iOS. This is a medical app and with the amount of data it needs stored locally (25 SQLite tables at last count) it is not a candidate for web based coding. I am the only developer with the this small company working on the mobile site.
I am NOT batching up libraries. Pretty much everything is hand coded, nothing out there exists to do what I want and finding any kind of libraries for iOS is nearly impossible. Sure I am using as much open source code as possible, not going to reinvent the wheel, and I contribute back my changes but library usage under iOS is pretty much unheard of due to Apples rules.
Guess it depends on where you work. There are jobs out there that involve actual coding. Every job I have had involves actual coding and like you I started back in the old days. First on a HeathKit Z80 then on the Atari 400 and its kin.
I also write code at home and have a game on the Android market. Nothing in the Apple App store as I don’t personally own a Mac to code on.
Time for you to switch jobs or languages to get back to the real core of it all or to help out an open source project. Probably a lot less stress than “being the guy” like I am.
So true. And I try to tell this to programmers all the time. They don’t want to listen. Lose the fancy API’s and actually LEARN how to do something. Learn OpenGL so you can write an engine for yourself. It isn’t hard. It isnt a moon launch. Earn the damn money they are paying you. Stop hiding behind Unity and all that crap. For god’s sake, stop being lazy, and make yourself a better programmer.
Hmm is anyone else having problems with the images on this blog loading? I’m trying to determine if its a problem on my end or if it’s the blog. Any feed-back would be greatly appreciated.
I did have problems a couple of months ago when WordPress simply stopped delivering images to me — from both of my blogs, not just this one but also Sauropod Vertebra Picture of the Week. I found that it affected Firefox on both by Ubuntu box and my MacBook, but not Google Chrome. Creating a new Firefox profile fixed the problem temporarily, but then the new profile started to have the same problems. So I dumped the new profile and returned to my old one (which had the bookmarks, history and all); and while I was thinking of other things to try the problem just sorted itself out.
Sorry if that’s not very helpful. But it was my experience.
But, like, these libraries which make coding “less fun” don’t grow on trees. There are actual real people who are employed – given money even – for creating and maintaining these, too.
I’m in the lucky/sad position of working on support for one of these enormous libraries. There are a lot of really smart people working on it. And people like me, who work in support because we just aren’t smart enough.
The kind of low level programming you are lamenting isn’t gone, it’s just moved elsewhere – although there really isn’t anything wrong with writing code that uses these libraries. The kind of applications which we use computers for these days is infinitely broader than it was in 1982.
The advent of code libraries and high level programming has allowed programming to become more accessible to more people, people who didn’t have the luxury of starting their programming path from the kindergarten.
Although I agree with your reasoning to some extent, I do not agree with your elitist attitude. Yes, programming is very much commoditized nowadays, but it’s done this for a reason. For businesses to maintain their day-to-day non-creative operations, a certain degree of homogeneity and consistency is required and this is best achieved with reuseable libraries and high level programming languages. They are MUCH less time-consuming than, let’s say, starting from a blank canvass with a low level language. Time is the essense.
That being said, there is nothing to prevent you from creating something new from scratch. Maybe you are just not in the right industry for it? My engineering friends are still using C to write code on a daily basis, as it is within their job requirements to CREATE and INNOVATE.
I can from VMS the operating system that Windows replaced. I do think the article is correct. I was not an applications programmer. I was an opearating systems developer. Believe me, .NET is an insult to intelligence. It intended to be so it will sell.
Renee
While I want to disagree with you, I really can’t. I was exposed to C in a major way in the last couple of months and had the feeling, “YES! THIS IS IT! THIS IS WHERE THE ACTION IS!!!” Unfortunately, since I work in VHLL, I quickly devolved into a world of Java, PHP and the browser… :::sigh:::
Pingback: ¿Qué le pasó a la programación? [ENG]
excellent.
One must change. For Example. in the past the farmer use small tools and now invention be made…
If now I would like to build a car, I don’t have to know how to build a tire, how to build machines.. etc… I just need to choose which tire, machine and etc fits for my car.
But obviously understand about the basic more will make us able to make custom program. For example people in my country Indonesia use prestashop much.. but it has too much module and slow… also not compatible with our languages well.. So we have to build a simple sites with PHP / Rails.. it’s better .. and it cost more.
If you are specialized in one things but also able to do general. this will be a huge different.
So I am as programmer has to switch from Delphi to PHP previously in university the teach VC++ this is now.. almost useless ….
why would we need to do many coding just to split string to array. It’s fun but it’s over and it’s in university.
:)
Pingback: New programmer’s survival manual — The Endeavour
An excellent article from an excellent blog. I hear and understand your lament. Programming has changed and programmers have changed! This was driven home to me years ago when I attended a fascinating talk at the Toronto APL Programmers Tool of Thought group. The presenters were talking about “endangered bits.” Endangered bits are old programs that exist only on obsolete binary media and run on ancient machine instruction sets. Most endangered bits are vanishing and this includes some historic and important early programs that in other fields would be considered landmarks. A great bridge built a thousand years ago is still a great bridge. A great program written forty years ago is probably still great — provided you can find something to run it on. In this case the presenters had managed to get their hands on an old IBM tape that held a copy of the first version of APL to run outside of IBM’s labs. The tape was obsolete and unreadable but they managed to find a friend of a friend that had a thirty year old tape deck that could read it. They recovered the tape’s bits and wrote a JAVA emulator for the 1960’s circa 360 instruction set. Cutting to the chase when the ancient APL was booted on the JAVA emulator it ran.
This was fascinating but the most interesting part of this talk was the fact that many of the assembly language programmers that wrote that ancient 360 version of APL were in the room and many of them remembered exact phrases, comments and quirks of 360 instructions after setting it aside for thirty years! I was impressed. I need to review my own code after a few years. I’d bet serious money that very few of us will be discussing intricate details about our cut, paste and glue jobs thirty years from now because unlike many gifted early programmers gluing stuff together, while productive and sometimes fun, ranks right up there with putting jigsaw puzzles together for intellectual significance.
Nowadays you can write shoot’em’up games in Javascript for the browser. I’d say Javascript is nicer than that old BASIC.
About programming nowadays … Idunno. When you have to write an app to scale to 2000 concurrent users from a small box, that’s a challenge you won’t easily solve with glue code alone. It gets even funnier if you have to scale to 2 million concurrent users from a server farm. Sometimes you have it easy – it’s only a few dozen concurrent users. Not to worry, in such cases the algorithms asked for by the business side of projects are often brainfuckingly difficult to understand, and other times they change very often, and you have to design some easily adaptable solution. All these libraries allow you to solve more difficult problems. Solving a difficult business problem now is IMO comparably difficult as was writing your own self-balancing binary search tree back in the old times.
My enjoyment comes from designing and completing a project that does what I need it to do. Using library components makes me more efficient, and thus I can complete my project in less time. I fee no desire to create more components than I need to. The same is true for a home project. I am replacing a partially-collpased plaster ceiling. I did not create any of the components I am using: the hammer, the chisel, the drill, the screws, the drywall, the spackling compound; nor would I wish to. I merely wish to use those components to fix the ceiling. Programming for me is exactly the same.
well, Nick, no offense but you’re not a programmer, you’re a mason. You assemble already-made bricks with almost-already-made mortar. Just glueing pieces of software toghether is the current way of building software. It’s not programming. It’s no longer an Art, not even artisanal, it’s industrial.
I would be curious to know your “programming age” : at what age and year did you start ? Using which hardware and software platform ?
Again, no offense intended, just discussing our difference in view. Personally I’m 45 and I started programming around 13.
regards
“My enjoyment comes from designing and completing a project that does what I need it to do. Using library components makes me more efficient, and thus I can complete my project in less time.”
That’s total B.S.The canned stuff that’s out there now doesnt make ANYONE a better programmer. With the stuff that’s out there now, NO ONE is really programming.
Renee
I sympathise with what’s clearly a heartfelt complaint, but my own experience is diametrically opposed.
Cheap linux-on-a-board (like Raspberry Pi or BeagleBone) gives me a chance to start with a clean slate and build stuff that’s fun, useful and satisfying to code.
That’s a hobby, but when I’m working on a paid project I have almost as many opportunities to exercise creativity. When I can, I build tools to boost my team’s productivity; I’ve never yet got into trouble for this, and I’ve been programming on and off for over 50 years.
For me this is a golden age; I love it.
Thanks, Romilly, it’s nice to see such a positive perspective!
I think it’s an age of capilatism where “would-be programmers” measns big bucks. You used to have to think to be a programmer but no longer.
Renee
It is sad. Not only the lack of excitement but the way programming has gone. I learned procedural programming. I loved the purity of it, the obviousness of top down design, the ability to read and follow execution paths. In this day of object oriented everything I can’t program anything. I can’t stand the random “keep filling in bits until it’s a completed project” method of programming. I can’t design anything. Not everything can be modelled in this way and modelling isn’t a good way t achieve completeness.
When I look at the complexity of java and the un-necessary and un-fathomable format of the scope definitions and class instantiation and everything about it. Then boggle at how anyone can ever find a class that even so much as attempts to do what you want in an elegant fashion I end up crying, rocking back and forth in a corner, muttering motorola 68k assembly to calm my frayed nerves.
Why. If you want to program for Android, can’t you use a procedural language, with usable and sensible API’s.
I so want to code, but there is just no where to go and nothing to write that I find enjoyable, innovative or creative.
Each time I try, the period of my giving up an waiting for change extends. Sadly I fear that by the time computing returns, or comes full circle to the point where I think it went off the rails, I will no longer be alive.
It is true that programming should have become easier, creating should be able to make use of new inventions made along the way. But it was all done wrong. Grabbing and using a block of code written by someone else is confusing. Everything mean to increase ease has infact increased complexity and made good software design not only unlikely, but almost impossible. Convoluted. The vast majority of all modern languages can only be explained well with the use of a term such as “FUBAR”.
We try to do more and more in software while the hardware is responsible for less and less. What should have happened is that the best, purest algorithms, each the performed one task and one task well, should have become hardware implemented. Software then could build on that which the hardware supplied.
Pure algorithms have been lost. The best of breed replaced as some exec attempt to prove himself by instituting change. Change that lost some of the best the human race has produced.
In an industry as young as IT I take solice knowing it won’t stay this way. Sadly though, in the industry that I grew with as a teen with a C64 and having a blast, it’s going to end for me as an Adult with a boring PC on which I can’t even speak it’s native language, much less have it help me to create. It’s like trying to instruct Michelangelo how to pain the Sistine Chapel when you don’t know how to speak Italian.. and ending up with a “nice shade of beige” as a result.
Hopeless.
This article is getting more true. To those who don’t see a distinction between being proficient at configuring plugins vs understanding algorithms and data structures, you are just pointing out your lack of being able to see a distinction.
This is not a matter of opinion or perspective.
In other words, those that can’t see the distinction don’t know enough about the subject matter, all due respect, that’s an objective observation. The more one knows about subject matter, the finer grained distinctions one can draw. Consider a oenophile who can tell the year and region of a wine by taste. Or a horse breeder who can tell a winner on inspection.
We all still write a lot of code, even when using frameworks, et al. Yet, the focus isn’t on the code anymore, thinking these artificial architectures create an actual software system architecture, which they don’t. What you have is a somewhat predictable folder structure filled with little messes and duplicate code all globally coupled. You have a higher cost of ownership. But somehow management has been convinced that’s the state of the art by a lot of mediocre talent. You also have dissatisfaction among professionals like myself that know how to evolve a robust enterprise system.
And mark my words, those are the people you need to keep to beat the competitors — they are the top 10% of software talent.
Pingback: What Happened to Programming — Light Year Software
Pingback: Random thoughts on programming, culture and such | Scali's OpenBlog™
Pingback: coding conventions | feffi.org
Pingback: Where Dijkstra went wrong: the value of BASIC as a first programming language | The Reinvigorated Programmer
I had a lot of fun as reading about the ” public static pure virtual destructor …etc.” !! I would like, though, to put somebody with Django or so and a good Drupalist in the starting block to make an online video site with subscriptions Functionnaly it took me 5h34mn. (no styling, but with 64 videos online on every mobile included). You need to check that a member is not logged twice. You need recurring payments. Come on : you can do this only with Drupal. I’m an old coder ( I began in 1976). It’s insane.
It’s another pleasure. I loved to code every single function. But I love building a site with Drupal. It still programming. What is an API ? Do you know every single function by heart ? No. Do you need to turn on programmatically every pixel yourself to print an ‘A’ on the screen in Red (like I did in Z80 (1983) in HEXA to get the colors.). I prefer to write “color=#xxx” in a css.
Programming is creating. I prefer to create many things rather than one every 2 years. Do you think that Gustave Eiffel (from the Tour Eiffel) screwed himself every bolt ? I dont care who did. I only care about the sight where you’re upthere!
The internet doomed us. The vast majority of programming nowadays is about managing customer data. By its nature, that sort of programming is repetitive and easy to solve with all-encompassing frameworks.
The internet did not doom us….Microsoft did with .NET.
When I originally commented I clicked the “Notify me when new comments are added” checkbox and now each time a comment is added I get several emails with the
same comment. Is there any way you can remove me from that service?
Bless you!
Sorry, there doesn’t seem to be a way for me to do that — rightly, I suppose, since it’s your subscription. You should be able to find an option to do it yourself somewhere on the page, but I’m afraid I don’t know where.
Pingback: Weekly Round Up « Joseph Hallenbeck
the people have changed too
back when i started there were a lot of people from different backgrounds with varied interests. You needed them too, you needed people with people skills, you needed people who were creative but disorganised types. Now the skills to survive are being able to trudge through the same old shit day in day out.
Nowadays its either…
A) career guy in it for the money, who will stab you in the back at the earliest opportunity, seek to take credit for anything that goes right and through blame for anything that goes wrong
B) your proper full on nerds that actually enjoy the isolation and repetition, who yes were there originally too, who when they do talk to you its about something you have no interest in like orc bothering, steam trains or MORE coding at home
Its such a lonely job for people who were “good” originally for the creative element.
I started writing code in the early 1990s (just to be clear on which century so that the Y’s and millennials don’t get confused) and haven’t looked back. Well that’s not true, about 5 years ago I HAVE started looking back.
I am in my late thirties and find that my time is becoming more valuable than my salary. Once I get some expenses under control it’s time to take my life in a whole new direction. The software industry has transitioned from a wild-wild west of uncertainty and mystery into a hum-drum of everyday glueing components together written by someone else. Incidentally, it has also transitioned from being dominated by introverts to being dominated by extraverts, private offices to open-concept offices, silo’d development to collaborative development, strong code ownership to shared code ownership, invisibility to greater visibility. As someone who finds human interaction taxing and draining even at the best of times, it’s no tall tale to say that my career has become toxic to me and to many others. The primary reason for many who entered this industry originally was because of how it accommodated the socially awkward. A lot has changed.
A great deal of emphasis these days is placed on making code readable and comprehensible, that it should tell a story about how I arrived at my conclusion. Deep down I realize I don’t want other people to read my code. I understand and appreciate why it is important, but it feels invasive and I feel naked. I’ve challenged this limiting factor in myself and have found that the logical end of increasing visibility on one’s code is essentially what the OP is referring to: the mindless process of reading instructions and gluing together libraries and frameworks written by other people. Because the industry has already solved everything. Time once spent cracking difficult problems is now spent scouring Google. This is great for the company and its efficiency, which is why I find it difficult to challenge the direction the industry is taking.
In contrast I come from an era where code and software was largely invisible. Source code was treated as personal private property, nobody looked at someone else’s code and nobody wanted to. I still remember the rush of joy I felt when after several weeks finally received a reply to my letter I wrote to the developer of a popular ASCII art program. I asked him about how he displayed control characters (< 0x20) on the screen. Back in the early 90s in school we would compete over who could make the best procedurally generated flames or pinhole camera 3D simulator. I would run home as fast as my legs could carry me with 4 floppy diskettes containing the Doom demo only to find that they were corrupt and unreadable. Why did I have to rely on diskettes? because the some-odd 5 MB game exceeded my download quota for my BBS subscription, so a friend got it for me for a pack of cigarettes. This was an era of mystery and invisibility and I found that tremendously exciting.
I am quite certain that there is nothing new. Anything you can dream-up someone has already written code for it. The ideal day for the cog in the wheel consists 99% of talking to people and running Google searches and then 1% remains for actually writing code that reconciles contracts between layers. The world doesn't need more code because code introduces bugs and bugs are expensive. The world doesn't need your creativity because the fruits of your creativity is immature, bug-ridden, and incomplete. The most efficient course of action is to glue together existing frameworks and polish what we have now. How awful.
I could be one of those people who thrives in a good mystery where there's a total lack of certainty about just about everything. The wild-wild west is a perfect place for such an individual. There also comes a time to acknowledge when it's time to move-on. I think the current state of the software industry is inevitable and it has to go through this era of relative dullness for a season or two. I will take my career a very different direction, preferably doing something that doesn't involve sitting in-front of a computer all day long.
What a sad story, Tony. I’m really sorry that the direction of modern software development has worked out so very badly for you. Best of luck in finding something that suits you better.
I agree I am actually a guy that became a programmer in times like this.. Where productivity became the core of programming and efficiency and performance a feature.. The problem is that nowadays programmers in the making are being taught that programming is about looking at Google for a library that can do what you need and not to code.. I have met people that doesn’t know how to code but they build websites and programs like if they were playing with Lego’s making computer scientist and programmers like anyone can do it because it is easy.. I understand that productivity is necessary in corporate level but come on!! you glue lots and lots of things and then the program run slower and buggy and you have to do a lot of maintenance later so I ask where is the productivity in that?? People say often than you dont have to remake the wheel but I say yes you have.. Maybe the first wheel wasn’t round enough but they keep doing it until became perfect.. And at the pace of time they improve it to do it better.. For me all the tools you need is your programming language then build your own stuff so you will know how it works at perfection plus you will feel this god like satisfaction for your creation and then the fun will never go!! But yeah this is for coders not for gluers.. So coders out there please don’t became a gluer
Software used to be interesting back in the 90s and 80s, now it’s boring and amounts to wiring-up libraries. What’s changed? that one’s easy, the market has become saturated with developers. Someone blew the whistle and said you could make a lot of money writing code, now everyone’s dog and mother has signed-up and all the interesting problems get snapped-up very quickly. If you want the interesting projects you quite simply have to compete for them. Incidentally, while working with some library may be boring and frustrating, to the person who wrote the library it is their master piece. The desire to “roll your own” is no different. If you want to tackle interesting projects then why not do that on your own time? Who cares if you’re reinventing a better wheel if your goal is to have fun doing it on your own time? I am worried that responding to boredom in software development with constant never-ending technology and code disruption will build a culture of ephemeral support and lax commitment to software maintenance and end users will end-up with the short end of the stick having to cope with bug-ridden garbage.
I’m afraid you’re right, Jonathan: the culture you describe at the end of your comment will hauntingly familiar to anyone who’s worked in JavaScript front-end development in the last couple of years. Frameworks go from the Hot New Thing to Who Uses That Anymore in a frighteningly short time.
Pingback: Where Dijkstra went wrong: the value of BASIC as a first programming language | The Reinvigorated Programmer
Yeah, I’m afraid that programming is no longer any fun for me either. If I get an algorithm online, my heart sinks to the floor. NIH is huge with me. If it’s not invented “here”, I lose all hope.
Is this a problem with software in general or C# / Java? In Haskell and Lisp unlike OOP, the embedded DSLs can be inline expanded via a substitution, in Lisp its called macroexpand-1 and by using a good ide like emacs or whatever you can look up the definition of things. Reading a good library is just as good as writing it, but no need to debug as long as the code is concise. Also in Smalltalk (which I haven’t used much) the eDSLs (object-interpreters) can be interacted with and inspected.
The worst thing about all this is that nowadays’ software is incredibly bloated, unstable, slow, despite ridiculous advancements in CPU and RAM capacity, and is increasingly out-of-control. Including low level operating system code. This “plugging together libraries” is also often — or even most of the time — done by people who don’t have a single clue about problem solving or coming up with creative and efficient solutions, and often without mathematical or technical knowledge.
All of this is disastrous of course and I’m not sure if the advancements in hardware and the forgivingness of software users will be able to compensate. If anything, airplanes are not very forgiving about ridiculous software errors (hint!) which result from that exact mindset.
Pingback: Madness Links - India Inc Blog
Pingback: 64 a 30: la revolucionaria computadora Commodore entra en su cuarta década - Krypton Solid
Pingback: Yet more thoughts! | Scali's OpenBlog™
Pingback: The cloudy layers of modern-day programming - Avada Taxi
Pingback: The cloudy layers of modern-day programming - Smashapk