One to ponder: We don’t know how to program
File this under the same category as Jack Reeves The source code is the design - Yes I know that is not quite the title for the article, but that has always been the way I think about this article. The actual title is “What Is Software Design?”
Paul Johnson points out that there is no real process for software development because most of it is design and nobody really has a process for that, since it occurs in the heads of the designers. I would also add that it also occurs in the conversations between designers and other people, because sometimes it is external ideas that spark great designs.
Overall though there is no process, and just like other design disciplines, software development is best learned through apprenticeship to a great designer.
Michael Feathers wrote an article for Beautiful Code called On Loving C.
“C has its quirks, but in retrospect, they are a lot less mysterious than the quirks of many other languages.” Well put, there are many languages out there that are really obtuse, containing many more quirks than C.
Crosstalk has a good article this month on where are the future software engineers. In part the article is the usual rant against the teaching of Java as a first programming language, but it is more nuanced than that.
The authors point out that the mathematical requirements are shrinking, and the students are not really being taught the basics any more. Sure Java is nice and easy to learn but it is not a suitable preparation for working in embedded and real-time systems.
I’m still pondering how this relates to software craftsmanship, since traditionally many craftsmen have either a comp sci or sw eng background.
Article references ACM Computing Curricula 2005 overview report, which is also an interesting read.
I wrote this article for InformIT back in 2002, and someone on Reddit discovered it this week.
“While Java and C# have been receiving all of the publicity of late, a lot of software is still being written in C and C++. Indeed, many traditional languages such as COBOL, FORTRAN, and Ada are still in widespread use. Although I harbor a certain fondness for COBOL, and have written more Java code over the past five years than is probably good for me, I’m finding more and more that I’m drawn back to C and C++.”
“I’m coming back to C and C++ in part because I prefer stable development environments, and because I’ve come to appreciate the power of object-oriented scripting languages, particularly Ruby. Ruby is evolving rapidly, but then I don’t try to write really long-lived code in a scripting language. I use scripting languages for code that I want to be able to write rapidly, to test ideas or to implement some valuable functionality quickly.”
Java is not in the news as much, but Ruby is growing in popularity thanks to Rails.
Overall I still stand by what I wrote back then,
“What this means for developers is that the future of C and C++ is secure for a long time. Other languages might have nicer development environments and be marginally more productive, but for the core business logic of mission-critical applications I still prefer C and C++. I’d choose other languages for the rapidly evolving parts of the application such as the user interface and the web front-end, but for the core of the application I have nothing but praise for C and C++.”
I wonder how many Rails apps out there have some key bit of functionality coded in C while Ruby handles the rest of the application?
Nice article on Idiomatic ruby.
In Certification? Bring It On! Raganwald seems to think that his recent experiences with people asking about degrees can be alleviated by a new style certification.
Unlike other ideas, all that this type of certification covers in one subject.
The one subject? Testing and Quality Control. That’s right. All I care about is that if you are asked to make bulletproof software, you know how.
Inspired by the mistaken ideas that all that matters in a restaurant is that the chef will not poison you, this misguided attempt at vertification assumes that all that really matters is that “someone can be relied upon to write software that is safe”. Unfortunately, there is the assumption that someone who can pass an exam can deliver.
An unwarrrantied assumption in most cases.
At a time when a developer can be called a “senior architect” with only 5 years experience, what do you call someone with 25 or 35 years experience?
Unfortunately, for the most part we can no longer call them developers, because there are few developers with 25+ years experience. Most have either drifted into other fields, been moved into management or are now independent consultants. It is rare for a developer to be able to keep improving their craft skills for 25 years because they get sidetracked into other things.
Other fields of endevour do not have this problem, so I suspect that the economic incentives in software development are skewed such that it makes little sense to get really good at being a developer.
Some thoughts on finding good developers to work on your projects.
To attract good developers you have to let them know what kind of application you are building, because there are two important questions that developers need to be answered about any development job - will this build my skills and reputation, and is this the kind of application I enjoy creating.
If you just list the technology in the project listing it is a negative because it implies you just want a coder to follow directions, so immediately you go to the bottom of the list of possible clients.
So to attract good developers, sell them on your idea of what you want to build. Specify the technology if you must, but that will cut down the number of people who will be interested in doing the work. You will also have to find some way of signaling that you have the budget to afford the type of people you want. It would also help if you could let people know the timeline and commitment involved - is it a small part-time task or full time total involvement year long task.
It seems that once again some people are pushing to create a certification program for software developers.
This time they are promoting the idea that prefessionalism requires a certifying body with recognized certifications just like accountants etc. Luckily the author of the article is alert ot the problems of credentialism, so maybe the movement will be stillborn, but we need to stay vigilant to ensure that our craft does not get stuck in teh stone age due to some corporate welfare scam of IT credentials mandating that everyone who wants to work in It needs to know about mainframe JCL.
I never cease to be amazed by project managers who give lip service to the idea that there are some unknowns in their project plan and then give precise estimates for their schedule.
It seems as if intellectually we can see that there are unknowns, but when it comes to our projects we think we are special and we can precisely predict how long our project will take.