Professional Programmers

Posted 12 Jun 2002 at 04:01 UTC by johnnyb Share This

It seems that the computer industry is run amok with "professional programmers" who have little right to be called such.

It seems that the computer industry is run amok with "programmers" who have little right to be called such.

First let me say that this is meant to be about professional programmers. I don't hold anything against people who program to fix something small - like an accountant writing a Word macro or something. As long as they know they are not professionals, such behavior is perfectly acceptible. However, the trend I am seeing more and more is that the computer "professionals" are just accountants who have written two word macros and now think they are professional programmers, or someone who thinks that writing a Visual Basic program qualifies him as a senior programmer.

Unfortunately, today's Human Resources departments are making this situation worse. They are the ones screening candidates, yet they know the least about what to look for. If I'm competing for a Visual Basic job and I know 13 languages, except Visual Basic, and I'm competing with someone who started programming 2 months ago, but all they use is Visual Basic, sadly, the HR person is going to go with the other guy. Why? Because they don't know that it's the concepts that count, not the specifics.

So, not only are more and more people calling themselves professional programmers without really being such, but they are more likely to be hired as well. Now we know why today's software is so terrible.

So, what do I expect from programmers? First of all, I expect programmers to know how the machine works. That means knowing how pointers work, how memory is laid out, and how the operating system and the programs interact. I honestly met someone who was a "professional" COBOL programmer who did not know the difference between a file and a process. Second, I expect them to be familiar with a variety of tools and development practices, and be able to select the best for each job, and also be willing to learn new ones as needed.

Anyway, I wish colleges would go back to emphasizing assembly-language programming. Not because they will ever use it, but because it gives the student a sense of what is really happening inside the computer. And that is useful no matter what language they are using, no matter how high-level.

For a professional programmer, learning a new language or new tool should be thought of as an every day occurance. Too many times I have seen people who only know one product or one way of doing things, and are totally oblivious to the many excellent packages that are out there. Too many Sun admins have never explored the GNU toolset. Too many Windows admins have never looked at non-Microsoft software. Too many COBOL programmers have never really learned object-oriented programming. Too many C programmers never know how easy object-oriented scripting languages can be.

One thing I have found, though, is that free software lends more to someone being a professional programmer than anything else. Why is this? Because with free software, everything is open and transparent. At too many companies you find programmers who only know one way of doing things. With free software, you get exposed to nearly every way of doing things - and the benefits and drawbacks of each. You get to interact with users, programmers, and administrators from just about every experience level and type of job. There is no vendor trying to keep you on their wares - they are open about getting whatever works best at the best price.

As such, I have found that, by far, free software developers are the most professional developers I have met, because they are drawing on the strength of not just one college or one way of doing things, but on the whole of the software development community.

I remember the Bible talking about being surrounded by "such a great cloud of witnesses", and how it helps one so much in their walk as a believer. Likewise, being surrounded by the best programmers, documenters, testers, and the like helps a programmer be the absolute best and most professional he can be.


hmmm...., posted 12 Jun 2002 at 05:26 UTC by bytesplit » (Journeyer)

so, was this article really about programming in general, or a hyping of open source software? open source programmers (i'm thinking of Python, Ruby, etc.) are really no better than, say for example, C++ programmers or JAVA programmers.

just because they use open source software solutions and technologies, does not mean they have any more a grasp on programming concepts and the tricks of the trade then those using proprietary solutions.

i consider myself to be more a teacher of programming (i am just better at that), but i don't think that someone who has been programming for years or uses open source solutions is any more qualified a programmer than i am.

A grain of salt, posted 12 Jun 2002 at 06:12 UTC by tk » (Observer)

Though many free software programmers exhibit high quality in their work, I'll hesitate before concluding that a good way to nurture good coders is to throw them into the midst of the free community. It may well be that many people go into free software because they are already competent enough and want to contribute.

That said, I'm not sure either what's the best way to groom people into truly professional coders.

<off-topic>
An excellent (IMO) book which introduces assembly languages to complete beginners is "Peter Norton's Assembly Language Book for the IBM PC", by Peter Norton and John Socha.
</off-topic>

Kids These Days..., posted 12 Jun 2002 at 08:03 UTC by goingware » (Master)

I've written some stuff on this topic. Here's a sampler:

Study Fundamentals Not Tools, APIs or OSes.

Also see the last two sections, the ones entitled "The Value of Constant Factor Optimization" and "Old School Programming" in Musings on Good C++ Style as well as the conclusion of Pointers, References and Values.

I think everyone should learn at least two architectures of assembly code (RISC and CISC), no matter what language they're programming in.

Also read University of California at Davis Professor Norman Matloff's testimony to Congress: Debunking the Myth of a Desperate Software Labor Shortage.

It happens that I have a very long resume. The reason I make it so long is that I depend on potential clients finding it via the search engines for a large portion of my business. If I just wanted to help someone understand my employability it could be considerably shorter. But in an effort to make my resume show up in a lot of searches for skills, I mention every skill keyword that I can legitimately claim to have experience in somewhere in the resume, sometimes several times. The resume is designed to appeal to buzzword hunters.

But it annoys me, I shouldn't have to do that. So my resume has an editorial statement in it, aimed squarely at the HR managers you complain about:

I strive to achieve quality, correctness, performance and maintainability in the products I write.

I believe a sound understanding and application of software engineering principles is more valuable than knowledge of APIs or toolsets. In particular, this makes one flexible enough to handle any sort of programming task.

It helps if you don't deal with headhunters or contract brokers. They're much worse than most HR managers for only attempting to place people that match a buzzword search in a database rather than understanding someone's real talent. Read my policy on recruiters and contract agencies.

It's generally easier to get smaller companies to take real depth seriously than the larger companies. One reason for this is that they are too small to employ HR managers, so the person you're talking to is likely to be another engineer. My first jobs writing retail Macintosh software, Smalltalk, and Java were gotten at small companies where the person I contacted first at the company was an engineer.

If you're looking for permanent employment, many companies post their openings on their own web pages. I give some tips on locating these job postings via search engines on this page.

If you're a consultant like me, and you're fed up with the body shops, may I suggest you read my article Market Yourself - Tips for High-Tech Consultants.

I've been consulting full-time for over four years, and I've only taken one contract through a broker. I've actually bent my own rules and tried to find other work through the body shops, but they have been useless to me. I've had far better luck finding work on my own, through the web, and through referrals from friends and former coworkers.

Hyp?, posted 12 Jun 2002 at 10:30 UTC by chakie » (Master)

bytesplit: I couldn't find any hyping of anything related to Open Source in that article, let alone any hyping. I assume you somehow reflect upon the fact that VB was used to illustrate cluelessness and other languages more cluefulness? Well, it just happens that VB is often the first language of the clueless, and I'd dare say that a far larger percentage of VB programmers are professionally less qualified than, say, Python or C++ programmers.

There are programmers, and there are programmers., posted 12 Jun 2002 at 16:51 UTC by mpr » (Journeyer)

bytesplit: open source means everyone sees your code, so you know that releasing some piece of crap that just works will be frowned upon. There's the natural desire to impress your peers. There's easy access to source code produced by some of the best programmers around. Contrast this with closed source development: I've actually met a C++/VB programmer who developed for Windows, an individual well respected where he worked, probably with a paycheck to match, that answered my suggestion that he could get a performance increase in one of his programs if he used a binary tree with something along the lines of "uh, yeah, I heard about binary trees, but I've never felt the need to use them". My personal experience: since I took contact with the open source community (which, unfortunately, happened relatively recently, about a year ago) I came to realize how limited my programming skills actually were, when compared to that open source developers, and, wow, these people do all this for free (as in speech)! Take some time to browse through the source code of some of your favorite open source software - compilers, interpreters, libc, the Linux kernel... Humbling, I'd say, and inspiring: makes you want to learn more and get better at your craft... unlike what happens when you, for instance, try to read Microsoft's OLE2 developer documentation. That's what happened to me, at least.

Screening, posted 12 Jun 2002 at 17:10 UTC by zephc » (Journeyer)

This article wanders quite a bit. I would also like to say that every software co. I have worked at has had at least 3 current developers screen candidates.

bad HR departments == bad company, posted 12 Jun 2002 at 19:29 UTC by splork » (Master)

If HR makes all hiring decisions and they aren't technically compitent to screen for appropriate applicants (yes, this happens) then just let that company die; the people you'd be working with are likely to be of the same low quality, you don't want to work there.

Yes, I ramble, posted 12 Jun 2002 at 19:37 UTC by johnnyb » (Journeyer)

Yes, I ramble. There were about 3 rants in there all packed into one.

  • Programmers who really aren't
  • HR and company practices that tend to hire such people
  • How open-source helps programmers better themselves

By "open-source programmers" I mean programmers who have programmed on open-source projects. Even if it's only reading lots of open-source code, and not producing any. Being able to look at and read source code done by a variety of people helps your own programming tremendously.

doh, posted 12 Jun 2002 at 21:52 UTC by binaryfoo » (Master)

well i hate to admit it, but VB was the 1st language I could see immediate results from. maybe that's from my own ineptitude, and former lack of understanding of integral computer concepts, but it was something i could run with, albiet running smack into a brick wall.

but C was the first language i was exposed to. and i must say, understanding malloc and other related terms didn't exactly help me become a better VB programmer. at least as far as i know. what brought me closer to the mountain that i had forgotten was perl, and then later C++ and now java. in short, experience. working in a UNIX environment, understanding the hardware, building my own system, then writing applications that i could actually use and benefit from, enabled my understanding. it might be too much to ask of the educational institutions that are producing computer scientists and software engineers to completely grasp the concepts that make one a professional programmer.

as the founder of C++ once said, "Computer science is an ocean of knowledge a foot deep". And while it may be difficult to start swimming in such an environment, we at least have to jump in somewhere, whether it's VB, java, Lisp, ada, or even word macros (not that these languages are on the same plane or anything )

doh, binaryfoo is really a binaryfool, posted 13 Jun 2002 at 18:18 UTC by badvogato » (Master)

in comparison with BinaryTree's trunk

It's a job, posted 13 Jun 2002 at 18:35 UTC by mrcsparker » (Journeyer)

I don't really see any problem in people that just learn VB and never really learn the mechanics of a computer or any other lower/higher level languages. In many cases, all a company needs is someone to write apps that input form data into a database. The company I work for has a ton of these, and they are great for what they do. Unfortunatly, for those guys who know one language and one environment, these form programmers tend to have trouble adapting and we are currently letting go of a few FoxPro programmers every month because we are moving to a new platform. By the way - I consider these guys "professional" FoxPro programmers - it is just that what they are professional in is no longer useful to us.

We also have "real" programmers, and those guys stay around as long as they want. They kind of linger around in the background and fix things - writing apps in C, sh, or whatever language needs to be used. All companies need at least a few of these, even though they tend to be more expensive than form developers.

It's a job, posted 13 Jun 2002 at 18:35 UTC by mrcsparker » (Journeyer)

I don't really see any problem in people that just learn VB and never really learn the mechanics of a computer or any other lower/higher level languages. In many cases, all a company needs is someone to write apps that input form data into a database. The company I work for has a ton of these, and they are great for what they do. Unfortunatly, for those guys who know one language and one environment, these form programmers tend to have trouble adapting and we are currently letting go of a few FoxPro programmers every month because we are moving to a new platform. By the way - I consider these guys "professional" FoxPro programmers - it is just that what they are professional in is no longer useful to us.

We also have "real" programmers, and those guys stay around as long as they want. They kind of linger around in the background and fix things - writing apps in C, sh, or whatever language needs to be used. All companies need at least a few of these, even though they tend to be more expensive than professional form developers.

mrcsparker, you kind of proved my point, posted 13 Jun 2002 at 19:48 UTC by johnnyb » (Journeyer)

Although you consider them useful, you admit that they are easy to let go. Personally, I've found that a fully-educated, well-rounded programmer pulls the weight of about 5-10 single-tasking people. The reason is that the well-rounded programmer can see bugs ahead of time, knows all of the issues as well as the integration issues, and can debug a lot better.

If you are just looking for code monkeys it would probably be cheaper to hire a person from the poor side of town and train them. Anyone can learn a single function well. Actually, anyone can learn to be a well-rounded programmer, too. It just takes more time.

badvogato detection, posted 13 Jun 2002 at 22:11 UTC by binaryfoo » (Master)

Here's something really useful. I only had to use 98.99% of my brain to come up with it. I will have to rest now.

Private Sub txtBadvogatoDetect_LostFocus()
    If txtBadvogatoDetect.Text = "Badvogato" Then
        txtBadvogatoDetect.Text = "otagovdaB"
    elsif txtBadvogatoDetect.Text = "otagovdaB" Then
        txtBadvogatoDetect.Text = "Badvogato"
    End If
End Sub

More than just more time, posted 14 Jun 2002 at 06:15 UTC by tk » (Observer)

Actually, anyone can learn to be a well-rounded programmer, too. It just takes more time.

On the contrary, I think being a well-rounded programmer requires a lot more than just "more time". Much of the `knowledge' that can be gleaned from other people's source code is implicit. For example, few people (if any) will write such things in their source code:

/*
* We use a binary tree instead of a linked list here because the number
* elements n is usually large, and the search time for a binary tree is
* in O(log n), while a linked list requires O(n).
*
* (then again, you should've known that...)
*/

If free software helps, it's in raising people's awareness that programming is a lot more than just CodeAndFix. But there must be a follow-up to this awareness for it to be useful.

check out the behind covered by BinaryTree trunk, posted 14 Jun 2002 at 13:11 UTC by badvogato » (Master)

i'm most impressed that the Chief remembers to 'logout' after issuing his 'damn!' or is it another trick that the guru hacker played on his boss with a hidden link? RTMF means Read The Male/Female parts First, you idiot!

Seriously, people, posted 14 Jun 2002 at 17:05 UTC by sja » (Journeyer)

Zhen grant you the freedom to talk the talk and walk the walk. Yet spectacular phenomena always happen in my part of the town . I have no theory but all your data are mine.

It's the skill set that wins, posted 15 Jun 2002 at 05:30 UTC by bytesplit » (Journeyer)

On the contrary, I think being a well-rounded programmer requires a lot more than just "more time".

I see the innocence from what tk is trying to say, but I don't think that being well-rounded is what most programmer-hiring employers are looking for. The programmers that I know of that were hired were not hired because they are "well rounded", but rather because they had a portfolio to show off and a firm grasp on a select language or two, almost always the language that the employer was hiring for.

And, the head of the computer department of every college that I have talked to has said that you'll have more marketability by knowing one or two languages really well, then by saying that you have programmed in every language under the sun, and then some.

Sometimes you have to bite the bullet and take the risk of focusing too much on the wrong language, with the hopes that the one you have a lot of experience in and in-depth knowledge of, will be the one that gets you the job.

specific skills considered harmful, posted 15 Jun 2002 at 17:42 UTC by bdodson » (Journeyer)

We've hired people for specific skills. Even following due diligence, this is a dangerous course. Sometimes it works out but once in a while you get a bozo who managed to get his MSCP in spite of his utter incompetence - or at the end of a project you're stuck with someone whose one skill is now obsolete.

Now when I'm involved in hiring someone, I look for foundation skills but beyond that I look for intelligence, and for the willingness and ability to learn. Those are the essential elements.

Prove your ability to learn by demonstrating deep knowledge of various topics, some of which are new. Then, as long as I understand those topics well enough to know whether or not I ought to be impressed, it doesn't matter whether those are the specific skills that I'm looking for.

Do They Program for Fun?, posted 15 Jun 2002 at 19:34 UTC by goingware » (Master)

One promising sign that I've usually looked for when considering whether to hire a programmer is whether the individual devotes significant time to programming his own projects outside of work.

It doesn't have to be an open source project although this is helpful as they will be more willing to show off the source code. But I think programming personal projects shows off an essential curiousity and drive to do better as a programmer.

There are still people I would hire who don't program on their own. I helped encourage a woman friend to work her way out of a low-paying job by learning to program, and now she's a senior engineer at her company and bought a house with money she earned as a programmer. I felt the best way for her to learn to program was to pursue her own projects, but she never would do that, and never seemed to see the point of it. But she would work very hard and do a very good job on her projects for school, and she took some very difficult courses like MIPS assembly programming. I would hire Regan in a flash.

I have also met Visual Basic programmers who I felt were pretty serious engineers. Maybe they're the exception, but I think it's possible to write good programs in any language, as long as one really comes to understand the fundamentals and how to wield ones tools in a powerful way.

Myself, when I was first learning to program the Macintosh, I wrote a simple graphics editor that was optimized to draw my "Circle Flower" patters such as the one I use for my business' logo. I only knew a little Unix and DOS command-line programming when I started, and learning to work with the Mac 512k's (!) GUI environment without anyone to help was pretty challenging. But I persisted and it eventually helped me get a real job as a Mac programmer - and I could bring my application and its source code with me to job interviews on a floppy disk.

Especially in the dot-com boom a lot of people got work as programmers who really had no deep interest in the art. They knew the money was good and many of them may well have known that they couldn't find a good job any other way. To the extent they persist in deepening their knowledge I think they're welcome in the community, but a lot of them are taking up hard-to-find job openings without providing any real value to their employers while keeping those who have paid their dues from being able to feed their families.

I heard this on a bus when I was working in San Francisco in December of 2000 - a couple of guys were discussing their friend who fancied himself to be a bad-ass gangsta while working as a web programmer for a dot-com: "You ain't no killer. You just program a little PHP."

<b>hit me right in the chest :)</b><p>, posted 15 Jun 2002 at 20:08 UTC by bytesplit » (Journeyer)

why? because i am one of those who find it very difficult to write something for myself. there is already such an abundance of software alternatives out there, albeit most of them being very sub-par quality, but they still work. i've had far more success, though limited, in writing stuff for family members and friends. that's just me, i guess :)

A more positive way to thing about things, posted 15 Jun 2002 at 23:38 UTC by Ilan » (Master)

Just because someone is a professional at writing bug free code that uses elegant algorithms and is ridiculously secure does not necessarily mean that they are a professional at writing software that is to be deployed for and used by non-programmers who have to get valuable work done quickly and in an efficient manner. In fact, if we took the criteria of being able to design/code a usable, consistent, non overly- complex user interface that jives with what we know about human psychology as the only criteria for being a professional programmer, we would hardly see any professional programmers in the open source community. IMHO, the ultimate measure of the success of a piece of software is the success of its users in getting their task done.

bytesplit, on one hand you might be intimidated by the extreme technical knolwedge and ability of many open source developers. But try thinking about it in a different, more positive way: if you're designing software that is usable by non-geeks (like your friends and family members), in one way you are already more of professional programmer than someone like Alan Cox or Linus Torvalds.

I think it be the audience, posted 16 Jun 2002 at 00:01 UTC by johnnyb » (Journeyer)

Although software usable by anyone without training is a worthy goal in some cases, I think it changes when you look at software as tools to be used effectively by experienced users.

For example, what is most important when designing a climbing harness? Ease of learning to use? Probably not, as you normally either do this a lot, and thus can spare the hours it takes to learn to put one on properly, or you do it with the help of an experienced climber. What you want the harness to do is not be easy for you to use the first time, or intuitive. You want it to hold you up.

In the same way, non-entertainment and non-home software should be developed in a similar way - optimized for use not for learning. Learning to use something takes a small amount of time compared with actually using it. Therefore, if you are gearing an application towards making it easy for someone without training rather than fast and effective for someone with training, you are wasting that person's time if they have to use your software often.

As I said, software optimized for the unskilled is definitely a niche, and as such should be designed for its niche. However, software used as a tool for a job should be optimized for skilled, not unskilled use.

That said, user-interface designers (not necessarily the same people as programmers) _should_ go over the user-interface and modify it where it is needlessly more difficult to use, or make it more efficient for skilled users.

Anyway, the following is my personal priority list for writing software.

a) works correctly b) works efficiently c) works easily

#c cannot always be obtained when working with complex issues. Software that glosses over the issues to make it "easy" does little benefit for the user, except to aim them for problems later.

UI design, posted 16 Jun 2002 at 03:51 UTC by tk » (Observer)

Ilan:

Designing a good UI is important in the game, but it definitely can't be the whole story. I've seen people who can come up with excellent UIs, but only on paper. Professional programmer?

The "extreme technical knowledge" of many free software developers is not beyond reach to most people, although it seems many colleges' curricula are filled with so much pedantic crud that most people think it is.

Re: I think it be the audience, posted 16 Jun 2002 at 19:47 UTC by goingware » (Master)

johnnyb, what you suggest the tools for the experienced should be designed to be effective rather than easy to use, has a lot to do with why I've been programming mostly in C++ for several years.

Before that I mostly programmed in C but did a fair amount of 68000 and PowerPC assembly code. My very first language was FORTRAN, run on an IBM 360 at the tender age of 12 when my father was a graduate student at the University of Idaho.

One reason I program in all these difficult languages is that despite the pain of learning them, the results one can get if one learns to work with them well are so excellent.

C++ gets a bad rap because it's a complex language, and when applied by people who don't understand it well, the results are unfathomable. I have an expression I use to describe this - "Object Oriented Beyond Recognition".

Java avoids or provides simple alternatives for many of the features that give people trouble in C or C++, and it provides some significant benefit to business and I think to the young programmer because one can begin to build production systems with it after spending only a short time studying the language. But I feel that Java ultimately limits the best one can hope to accomplish.

For example, people who have only worked with garbage collected languages will often have only a dim understanding of how memory allocation really works, and so will often fail to understand important issues that affect the efficiency of their programs. This results in such phenomena as lots of Java programs having memory leaks - yes really, memory leaks are a common problem in production Java systems. Just hang on to a reference to a single node in a DOM tree that you don't really intend to be using and you can keep megabytes hanging around in your heap that you don't really mean to use.

I think it is fine to program in Java, Perl, or even Visual Basic for many purposes, but I don't think anyone should be working as a programmer unless they've put some effort into understanding assembly code. No matter what language you write in it will ultimately be machine code that is executing on the iron and having an understanding of the effect that one's code has on the machine is of inestimable value. Assembly code may not suit your tastes but I think once having worked with it enough to be fluent it is then fine to move on to any language that does.

A friend who works as a Smalltalk, Java and Javascript programmer has argued with me extensively about this, asserting that things like development time and program correctness are much more important and easier to achieve in higher level languages, but I feel that one of the reason that this friend gets such good results in Smalltalk is that she spent a lot of time working in C, C++ and MIPS assembly code at UC Berkeley.

C++ is indeed a very difficult language. When I picked it up again in 1997, I read someone's assertion that three years of hard study were required to use it effectively. I was discouraged by this, but I disagreed with him and felt that I could learn to program well in it after only a few weeks. Three years later, I felt that this guy was right on.

One of the reasons for so much lousy C++ code is that people apply it to production programming without devoting the time needed to really getting to understand it.

In a situation like the dot-com boom where you've got to hire any warm body to fill your developer seats, it doesn't make sense to have them programming in C++. But I think if you want to make really ambitious, high performance and complex production systems, it is worthwhile to pay the price to find the people with experience, and hire the real pros who have paid their dues and learned to program in C++ really well.

C++ is not the only language a pro should use, by any means. The Linux kernel is written in C with a little assembly code. But C is deceptively easy to learn - it's frighteningly straightforward for someone to pick up in a few weeks and then make some really bad code. Things like the proper management of error conditions are much harder in C than in C++, and really it takes as long to learn to be a pro.

Re: I think it be the audience, posted 16 Jun 2002 at 19:47 UTC by goingware » (Master)

johnnyb, what you suggest the tools for the experienced should be designed to be effective rather than easy to use, has a lot to do with why I've been programming mostly in C++ for several years.

Before that I mostly programmed in C but did a fair amount of 68000 and PowerPC assembly code. My very first language was FORTRAN, run on an IBM 360 at the tender age of 12 when my father was a graduate student at the University of Idaho.

One reason I program in all these difficult languages is that despite the pain of learning them, the results one can get if one learns to work with them well are so excellent.

C++ gets a bad rap because it's a complex language, and when applied by people who don't understand it well, the results are unfathomable. I have an expression I use to describe this - "Object Oriented Beyond Recognition".

Java avoids or provides simple alternatives for many of the features that give people trouble in C or C++, and it provides some significant benefit to business and I think to the young programmer because one can begin to build production systems with it after spending only a short time studying the language. But I feel that Java ultimately limits the best one can hope to accomplish.

For example, people who have only worked with garbage collected languages will often have only a dim understanding of how memory allocation really works, and so will often fail to understand important issues that affect the efficiency of their programs. This results in such phenomena as lots of Java programs having memory leaks - yes really, memory leaks are a common problem in production Java systems. Just hang on to a reference to a single node in a DOM tree that you don't really intend to be using and you can keep megabytes hanging around in your heap that you don't really mean to use.

I think it is fine to program in Java, Perl, or even Visual Basic for many purposes, but I don't think anyone should be working as a programmer unless they've put some effort into understanding assembly code. No matter what language you write in it will ultimately be machine code that is executing on the iron and having an understanding of the effect that one's code has on the machine is of inestimable value. Assembly code may not suit your tastes but I think once having worked with it enough to be fluent it is then fine to move on to any language that does.

A friend who works as a Smalltalk, Java and Javascript programmer has argued with me extensively about this, asserting that things like development time and program correctness are much more important and easier to achieve in higher level languages, but I feel that one of the reason that this friend gets such good results in Smalltalk is that she spent a lot of time working in C, C++ and MIPS assembly code at UC Berkeley.

C++ is indeed a very difficult language. When I picked it up again in 1997, I read someone's assertion that three years of hard study were required to use it effectively. I was discouraged by this, but I disagreed with him and felt that I could learn to program well in it after only a few weeks. Three years later, I felt that this guy was right on.

One of the reasons for so much lousy C++ code is that people apply it to production programming without devoting the time needed to really getting to understand it.

In a situation like the dot-com boom where you've got to hire any warm body to fill your developer seats, it doesn't make sense to have them programming in C++. But I think if you want to make really ambitious, high performance and complex production systems, it is worthwhile to pay the price to find the people with experience, and hire the real pros who have paid their dues and learned to program in C++ really well.

C++ is not the only language a pro should use, by any means. The Linux kernel is written in C with a little assembly code. But C is deceptively easy to learn - it's frighteningly straightforward for someone to pick up in a few weeks and then make some really bad code. Things like the proper management of error conditions are much harder in C than in C++, and really it takes as long to learn to be a pro.

In a sense, I agree, posted 17 Jun 2002 at 02:36 UTC by johnnyb » (Journeyer)

I agree that one of the biggest problems with C++ is how poorly it is used. However, I do think that most of the big features in C++ are actually much better in other languages. For example, LISP's macros are much more powerful than templates, lambda expressions provide a powerful tool unmatched by anything I've seen. The amount of amazing yet useful stuff going into Python is great. Things like bound functions open up vast new ways of programming that is only achievable with great difficulty in C++.

I think my biggest problem with C++ is that it is hard to use correctly, and there are many other languages that are easier to use correctly which have more features to help me get my job done.

But I do agree that one of C++'s biggest problems are the stupid things people try to do with it.

That's the point precisely, posted 18 Jun 2002 at 14:17 UTC by Nygard » (Journeyer)

goingware, your point about C++ requiring study and diligent use is exactly the point of the article, and it's my number one frustration. You are clearly a professional. You regard your work as a craft to be studied and learned. In my opinion, that places you above 90% of everyone working in this industry.

I've been discovering that in most domains, there is no benefit to developing this level of skill. You'll always be surrounded by people who don't understand you, can't work at that level, and don't really give a damn. They'll get the same rewards and go home happy at 5:00 every day. It's like, once you achieve a base level of mediocrity, there's no benefit for further personal development.

Bah, there I go being bitter again. Maybe I just need to work in some other domain--one where skills count for something, and being good at your job is a benefit, not a hindrance. I'm sick of writing Address classes, anyway.

Programming is a Process, posted 20 Jun 2002 at 08:39 UTC by shlomif » (Master)

First of all, it was a good an enlightening article. Secondly, I would like to stress the fact that becoming a good programmer is a process, not a singular action. I considered myself a good programmer before I wrote Freecell Solver, but I am a much better programmer now. (but I still think I was a good programmer back then) Chen Shapira once told Hackers-IL that the rule of the thumb is that her code looks like junk to her after a few monthes time. I know someone who tries to study a new language or API every month. Some programmers don't understand this fact.

In any case, I believe many universities could make a better effort in producing better programmers. One of the modus operendi I encountered was the assumption that a student can get on with one programming language for his entire degree. (I saw someone who gave a pseudo-code in incorrect Java because that was all he learned). In the Technion, students learn about Data Structures and Algorithsm, intro to OOP concepts, Compiler Theory or whatever in C, despite the fact that most professional people would agree Perl (or Python or Ruby, etc) are much better candidates.

Sometimes, broken or deprecated tools are being taught in class, just so the courseware would not need to be made up-to-date. (C-Shell, PDP-11 assembler, if we take Technion stuff as example) Sometimes, important tools or breakthroughs are somethings that the faculty ignores or is completely unaware of.

Regarding the HR departments: I would not want to work in a company that would hire people based only on their strict experiences. I expect companies to accept the fact that good programmers can learn new methodolgies and tools, and still not be sub-standard programmers.

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!

X
Share this page