Slashdot Mirror


Making Software Suck Less, Pt. II

Not long ago, chromatic wrote about one aspect of the quest to create software that doesn't suck. This time he's back with a proposal that's simultaneously practical and idealistic. Namely: If you as a whiz at a certain language or other aspect of programming want the world of programming to be better, you can help other people become programmers, or better programmers, with well-considered instruction. I hope someone in the Computer Science department at a high school near chromatic gives him a call, because he outlines here something more important than a "learn to program" curriculum.

Making Software Suck Less, Pt. II Coders Code Whether You Like It Or Not The insidious thing about Free software, the really subversive part, is that it takes so little to start writing it. Anyone with a few tools, spare time, and the wherewithall to start hacking can. Witness the long listings of low-version-number IM clients and MP3 players on software announcement sites. People like to code.

Every new project represents a coder who wants to write free software, but chooses not to work with an existing project for whatever reason. How many more people would like to contribute but don't know where to start? Hundreds, even thousands of free software projects could use another coder, some testers, and someone -- anyone -- offering suggestions and attaboys. For each veteran programmer, battle-hardened and wizened by experience, a dozen novices spend evenings honing their skills.

Mentoring Beginning Programmers The obvious solution is to match availability with opportunity and enthusiasm with experience. The free software community can produce better programmers by giving new recruits mentors to emulate. It offers the possibility for programmers to learn by improving existing projects, instead of reinventing wheels. This doesn't require expert programmers. It takes people with practical experience, patience, and the willingness to invest time in another person's education.

Though this article draws from experience with free software, there's no reason similar procedures could not succeed in commercial settings. Computer science sophmores (and higher) would benefit from internship programs organized similarly.

The Usual Suspects Candidates for mentoring exhibit a combination of at least three different characteristics. These are expressable as three different archetypes: the self-taught hacker, the computer science student, and the new programmer. Individual personalities and experiences also come into play. These are gross generalizations, but serve the purpose of categorizing the types of information to present.

Self taught hackers learn by experimentation. They dissect existing code, copying and modifying implementations. Their technique gradually coalesces from dominant influences. Hackers often amass a library to improve their education. One danger for members of this class is that they may pick up questionable practices from questionable code ("cargo cult programming").

Computer science students learn theory and are expected to teach themselves various languages and implementations. (This category does not cover degrees like 'information services.') The education covers ideal solutions, often emphasising aesthetics and mathematical perfection. Students may not be exposed to practical issues in specific languages and techniques, focusing on working code.

New learners enter the world of coding with a strong sense of need. Management might pick a hapless victim for a project of undefined scope. A home user may just wish to do more with her computer. People in this category often don't know where to turn. They may not all grow into dedicated coders, but can fend for themselves with some guidance and direction.

Besides these categories, recruits may include artists, musicians, writers, and testers. Though direct mentoring from programmers may not awaken nascent coding abilities, these folks are certainly welcome. Even experienced programmers new to the idea of free software or to a class of software can benefit from directed guidance. (Many people in this position just need to see how to contribute.)

Course Requirements Mentoring must provide examples of secure, clean, and idiomatic programming. It should also include issues related to the practice of programming -- time management, software design, tools and classes of tools, and project leadership. Additionally, mentors should introduce their students to a network of peers, whether on IRC, through mailing lists, or in user groups.

Benefits of Mentoring Besides the warm glow of humanitarianism, being a mentor bestows personal benefits. Your project immediately gains an extra set of hands and eyes. Each new person brings a fresh point of view, with different expectations and stories for the code and unique experiences. At first, the additional overhead of explaining will slow progress; wise mentors invest slightly more time to turn these lessons into improved documentation and tutorials. After a short period of training, the project gains another person familiar with internals.

The discipline of explaining your personal technique, especially the more reflexive elements of your coding style, will also improve your skills. ("Why do I do it that way?") Describing system architecture and complex codes in words forces you to organize your thoughts. It can even clarify future design decisions. Your student must be free to ask questions and to challenge your assumptions. Either strengthen your arguments or discover a better alternative.

Leaving the Nest If you've mentored correctly, at some point you'll have taught every lesson you can. The student will have met the right people and will have tasted the fruit of hard work. Your example will still teach him, but he will make his own way. You will be peers.

Prepare for this from the beginning. Allow the student to lead subprojects with the freedom to make mistakes but the supervision to produce working results. Provide opportunities for personal growth. Your job is to remove obstacles from the path of enlightenment. Writing good software is hard, but teaching people to contribute is very rewarding.

209 comments

  1. Coding Style by crazydsp · · Score: 1

    I think nobody teaches new programmers how to write their code so that other people can read it. This includes writing comments for everything you do, indenting correctly and creating variable names that actually make sense. Effective coding style makes it easier to debug and release code faster. I believe that you can easily judge how long a person has been coding (or how well he knows programming) by looking at a snippet of his code. MT

  2. Developer's Haiku by Art_XIV · · Score: 2

    Windows ruins all
    My kernel module won't load
    Stop and fill timesheet

    --
    The only thing that we learn from history is that nobody learns anything from history.
  3. Hey CmdrTaco! by Shoeboy · · Score: 5

    Rob,

    I'm willing to be you mentor.

    I've seen the database structure for slashcode. I know you need some help. I'm willing to offer it.

    Our first lesson will be on denormalization for better performance. I'll try to be a patient and dilligent instructor, but the fact that you fetch the sig from the users table for every comment rather than storing it in the comments table may render that impossible. It's quite possible that I may have to beat you. Particularly when I look at some of the 3 and 4 tabe joins you do for really common operations. I know Hope College isn't much of a school, but surely at some point they explained that joins were slower than single table selects, right?

    Anyway, I'm more than willing to help you with your database design and implementation problems.
    Drop me an email.

    --Shoeboy

    1. Re:Hey CmdrTaco! by denshi · · Score: 1
      PostgresSQL has actually improved a lot, but the pricey overhead for new connections makes it unsuitable for client-server environments.
      Why aren't you pooling your DB handles? The 90's are over, Shoeboy...
      And speaking of Postgres, are you running it on MS or a un*x? Many open-source projects make unix assumptions, ie, that fork is a lightweight operation -- that could be the case here.
      And if you're doing something besides an index search on a large table, stop.
      Maybe. Are you using a rule- or cost-based query planner? Does the DB have sufficient table analysis for accurate guesses? You need to answer both those questions if you hope to get excellent performance -- blindly indexing everything is just a bad, bad call.
      Actually, having a record company id is redundant data. Using the name as the primary key is the proper method. ID's are actually non-relational.
      I'm heartily agreeing with you on this count. Particularly with Oracle8, varchar keys can be near as fast as integer keys. And if you can't stomach that (lots of people can't), the next best solution would be mapping tables.
      I personally recommend Microsoft SQL server for this sort of application. It's simple, fast, full featured, highly tunable, quite stable (versions 7.0 and above, 6.5 and below is a stability nightmare)
      In general, you shouldn't have to worry about DB stability *AT ALL*. If you want to worry about deadlocks, sure, be my guest, use MSSQL/Sybase, but no matter your choice, stability should be primary. The DB needs to stay up for indefinite periods of time; serve data to all comers, and keep it consistent. Your userinfo page testifies to your skill as a DBA; I don't see why you would settle for 'quite'.
    2. Re:Hey CmdrTaco! by b100m · · Score: 1

      Amen.
      ___________________________________________ ______
      $which weed

    3. Re:Hey CmdrTaco! by 20000hitpoints · · Score: 1



      You moderate yourself up. Plus, you're obviously much smarter than the university professors with multiple PhD's who taught me to normalize data, and the ones who wrote the textbooks, etc. In fact, maybe you're God... can you please help me by telling me the answer to all of my problems?

      Slashdotters are so arrogant. Who do you think you are? I'm going to post something that will be a first on Slashdot -- hey everyone! Guess what! I'm not perfect, in fact, I make programming mistakes sometimes and there's a lot of stuff I don't know!

      You need to go back to school and take humility 101. What am I saying, you're probably just trolling in a very devious way. If you really are that arrogant, I feel sorry for you. I don't care if you have 20 more years of experience than I do. It doesn't matter -- I sincerely hope that I will keep learning my whole life, and never get to a point where I think I know everything about a certain subject. Because that's the beginning of the end.

      You know what I think about normalization? This is what I think: I don't know. It depends on the situation and the requirements. You'd have to test it. I'm not sure.

      --
      Don't post on slashdot. Get back to work.
    4. Re:Hey CmdrTaco! by scrytch · · Score: 2

      In other words /. should have all the comments posted to another database and implement a once-per-minute table swap with the table used to display comments.

      Agreed about splitting read and write tables, but why a swap? You'd have to synchronize the two tables in order to not lose comments, at which point there's not a lot of point in swapping them. Am I missing something?
      --

      --
      I've finally had it: until slashdot gets article moderation, I am not coming back.
    5. Re:Hey CmdrTaco! by Omnifarious · · Score: 1

      If you really knew anything about databases, you'd know that he's largely right. I was actually pretty impressed by his post.

      The problem with University professors is that many of them have not worked outside academia. 3rd normal form is the 'right' thing to do. It's clean and elegant. Sadly, it requires more joining than you'd really like to do, and that's the problem. Joins are slow.

      If you carefully denormalize after coming up with a normalized design first, you'll end up with a much faster database.

    6. Re:Hey CmdrTaco! by Pinball+Wizard · · Score: 1

      What I meant was that you would overwrite your read table once per minute with your write table, not actually swap them.

      --

      No, Thursday's out. How about never - is never good for you?

    7. Re:Hey CmdrTaco! by 20000hitpoints · · Score: 1



      Look, please think about what I'm saying -- take a second look at it. Reread it. I DIDN'T EVEN READ HIS POST. I didn't have to, because my point is not about whether he's right or wrong about databases, it has to do with the WAY he was talking about it. Sure, he may be right -- I do happen to work with databases a lot, and I've never had a problem with joins, but I won't rule out the possibility that someday I may have to denormalize in a way similar to how he describes.

      The real issue here is that I just get sick and tired of arrogant know-it-alls going around saying "actually, you're wrong/stupid, it's this way", correcting each other, etc. Computer programmers all tend to be like this -- I probably even do it too unconsiously to some extent. I just wish people had more respect for each other on /. I mean, you're anonymous here -- nobody knows who you are anyway, so why is everybody so concerned with how smart they appear? I'm more concerned about whether my boss thinks I'm smart than whether /. thinks I'm smart!

      One thing that, given my limited experience, seems to be often true with both database design and writing code is that sacrificing modularity for performance can make things less maintainable, harder to work with and debug, less extensible, and more specialized for one application/use. So this would mean in this case that making a data model less modular by denormalizing it might prevent you from using that database for anything other than its originally intended purpose. In other words, you optimize one query by making another query very inefficient. But of course that isn't a hard-and-fast rule, and I haven't worked in every kind of software development project in every industry, so of course there's zillions of situations I know nothing about. So, maybe denormalization is fine for what you're doing.

      BTW, I'd be willing to bet that most of those university professors are well aware that joins slow down database accesses, and in fact they can probably tell you exactly how and why they slow down database accesses, W/R/T the actual algorithms the databases are using to retrieve and process the data. Raghu Ramakrishnan's book (Database Management Systems) is really good for this, this is the text I used in my Databases class.

      Geez, another Friday night wasted posting messages to somebody I don't know. Every time this happens I tell myself I'm never reading /. again.

      --
      Don't post on slashdot. Get back to work.
    8. Re:Hey CmdrTaco! by f5426 · · Score: 1

      > versions 7.0 and above, 6.5 and below is a stability nightmare

      I know someone that worked as a DBA in the WPG-DBOPS group at Microsoft,
      He had an NT 3.51 system running MSSQL 4.21a.
      It ran flawlessly for over a year (including the DBMS) before finally crashing.

      Stop spreading your lies.

      Cheers,

      --fred

      --

      1 reply beneath your current threshold.

    9. Re:Hey CmdrTaco! by Pinball+Wizard · · Score: 2
      but surely at some point they explained that joins were slower than single table selects, right?

      I haven't looked really hard at the slashcode, but I have to take exception to this - in some cases. A select is slowed down by joins, true, but its also slowed down by the size of your tables. The whole purpose of normalization is to reduce the size of your database by eliminating redundant data. Reducing the size of the data searched will then speed up the selects.

      For example, if you are an online music store and you have 250,000 music titles in your database, but the vast majority of those titles comes from 7 different record companies, it doesn't make a whole lot of sense to repeat the record company name in each title row. I would join the little table to the big table and index the record company id in the title table itself. I do agree with your comments on the sig - that should just be written to the comment and then be done with.

      I think slashdots problems are more related to mySQL's locking mechanisms. I have to deal with this sort of thing myself. IMHO, if you have an online database at all, you should completely separate the "read" database from the "update" database. In other words /. should have all the comments posted to another database and implement a once-per-minute table swap with the table used to display comments.

      But please, tear apart my above statements to shreds and teach me something new. :>()

      --

      No, Thursday's out. How about never - is never good for you?

    10. Re:Hey CmdrTaco! by Shoeboy · · Score: 5

      A select is slowed down by joins, true, but its also slowed down by the size of your tables.
      That's more true for the length of your table then the width. As long as you're doing index scans rather than table scans, width isn't all that important. In fact, on systems that support page level locking but not row level locking, it's sometimes in your interest to widen columns.

      The whole purpose of normalization is to reduce the size of your database by eliminating redundant data. Reducing the size of the data searched will then speed up the selects.

      But (assuming that your database system uses b-trees to store and index the data) it won't speed index searches by much. And if you're doing something besides an index search on a large table, stop.

      For example, if you are an online music store and you have 250,000 music titles in your database, but the vast majority of those titles comes from 7 different record companies, it doesn't make a whole lot of sense to repeat the record company name in each title row. I would join the little table to the big table and index the record company id in the title table itself.
      Actually, having a record company id is redundant data. Using the name as the primary key is the proper method. ID's are actually non-relational. It all depends on how you query your database though. Data warehousing schemas and oltp schemas are very different beasts.

      I think slashdots problems are more related to mySQL's locking mechanisms. I have to deal with this sort of thing myself. IMHO, if you have an online database at all, you should completely separate the "read" database from the "update" database. In other words /. should have all the comments posted to another database and implement a once-per-minute table swap with the table used to display comments.

      Yeah, I've been made aware of this. I took a look through the MySQL manual, and I'm shocked that people describe it as a real database. It's barely more advanced than Access. I personally recommend Microsoft SQL server for this sort of application. It's simple, fast, full featured, highly tunable, quite stable (versions 7.0 and above, 6.5 and below is a stability nightmare) and scales very well up to 8 processors. On commodity intel hardware, it's the fastest database there is. (numa machines don't count) Once you outgrow the capacity of a 8-way proliant, it's time for DB2 or Oracle.

      It's a pity the free databases all suck so much. PostgresSQL has actually improved a lot, but the pricey overhead for new connections makes it unsuitable for client-server environments.

      --Shoeboy

    11. Re:Hey CmdrTaco! by Pinball+Wizard · · Score: 1
      if you're doing something besides an index search on a large table, stop
      ...
      6.5 and below is a stability nightmare

      As a side note, I came up with a program to create a full text index to search a SQL Server 6.5 database, because it didn't have one and doing keyword searches entailed using LIKE %keyword% clauses, forcing a table scan. Then, two weeks after I did that MS came out with SQL 7. I still like my way better because I can do things like stripping single quotes out of the keywords or whatever to match my search function.

      I appreciate your comments, you gave me a few ideas. If you go to my bookstore and do a search there are currently five joins being performed for each search. Its still fast, but I'm also always looking at improving things. Also, I've never really fully studied what tuning page-level & row level locking could do for me - I just use the defaults. Unfortunately for me, I've never had a DB guru to turn to - just books, trial & error, and the occassional online epiphany such as yours.

      --

      No, Thursday's out. How about never - is never good for you?

    12. Re:Hey CmdrTaco! by denshi · · Score: 1
      I think slashdots problems are more related to mySQL's locking mechanisms. I have to deal with this sort of thing myself. IMHO, if you have an online database at all, you should completely separate the "read" database from the "update" database. In other words /. should have all the comments posted to another database and implement a once-per-minute table swap with the table used to display comments.
      That just sounds like rewriting MVCC in the app. I'll stick with Oracle & Postgres - readers don't wait for writers, nor writers for readers. In case you aren't familiar with the concept; the idea is that clients read from versioned copies of the tables; a select that starts at 12:00:00 and finishes at 12:01:00 doesn't see a row update at 12:00:30. Conflicting updates take row locks. Writing your own version of this sounds like a fun way to get inconsistent reads. Why write the code that your DB vendor should have written for you?
    13. Re:Hey CmdrTaco! by Shoeboy · · Score: 5

      Hi,
      Your comment on denormalization demonstrates a lack of real world experience. Denormalization on databases where reads massively outnumber writes (which is slashdot) is a very useful thing.
      As far as making it difficult to make future modifications goes, this is complete B.S. As long as you encapsulate your data retrieval and manipulation through stored procedures (which slashcode doesn't do) all changes to the database schema are easy to make and very few modifications to front end or middleware code are ever required.
      The simple fact is that no perfomance critical system should ever run in 3rd normal form. Period.
      --Shoeboy

  4. Re:Suggestions for better software by Shotgun · · Score: 2

    Sir, you are undubitably correct. Undubitably I say.

    --
    Aah, change is good. -- Rafiki
    Yeah, but it ain't easy. -- Simba
  5. Re:Suggestions for better software by cats · · Score: 1

    Why not mention IE? IE seems to be stable and functional under Windows2k. I run Linux on one box and Win2k on another. They both have relatively similar uptimes. IE is by far the best browser available currently. Konqueror is nice, but I do not see too many plugins available for the linux platform. I use my linux box as a server and firewall. My Win2k box is my documentation/development box. Both work fine. I fail to see why everyone is so damn rabid about one or the other. I just use what ever works and gets my intended job done. I have no politcal ambitions, no hidden intents when I decide to pick up a piece of commercial software. I also have no "stick it to the man" ideology when I decide on using a piece of free software.

    I really fail to see where and why all this politcal b.s. got started. It is not "us" against "them." There is no us and there is no them.

    Regards,

    cats

  6. Re:You're mistaken about what itches by Lucretius · · Score: 2

    Another thing that big companies do, that open source developers often don't (flame gates are now opened, commencing in 5...4...3...2) is contributing resources completely and totally to bug fixing. Think about it this way, if a big company wants to use a program and they've commited themselves to it, they will lose a lot of productive time if their developers/users are held up by bugs. It is in their economic interest to hire people to squash these bugs so that their resources will be able to work w/o having to implement work arounds and things of that nature.

    To your average user, the program crashing every once in awhile isn't the biggest itch in the world (its a bit annoying, but we can live with it usually because what we are working on is more of a liesure quality than a life and death quality). A big company, on the other hand, is in more of a life and death situation, thus this is not just an "itch" perse, its more of an inflamed rash that would be rather nice to get rid of.

    Now, as far as contributing to mozilla, I guess that's a personal thing for each person... I could see it being a major world of suck if you had to download the entire source tree over a 56k connection (its not all that wonderful over DSL as it is), but that's the unfortunate fact about a product that is that big.

  7. Re:Some software has to suck... by Anonymous Coward · · Score: 1

    Let him know what you think is good and bad, sure, but for don't actually use the term "sucks" in your email ;) That'll turn most people off.

  8. Re:Programming has nothing to do with schooling by fizban · · Score: 1
    I will take my current company as an example. We, the developers, are given ample time to seriously think about our problems and develop robust solutions. This method of development actually came about because they did it the other way the first time around.

    My company went through the stage of "making it work" and ended up with software products that had to be constantly supported, patched, re-coded, etc., and it's costing them. So they decided to do it better the 2nd, 3rd,...,nth time around the track. Maybe companies do need to go through this stage to learn these things, a "trial by fire" sort of thing, but why waste the time and money on inadequate solutions when there's a better method just a few more steps down the road? My company realized it needed to spend more time developing better solutions, rather than spending less time developing any solution.

    I'm just saying that there are companies out there who know that the time spent in development is worth the cost, in the long run. Of course, if they only need to get something out there today and don't care if they exist 2 years down the road, that's fine also... I just won't work there.

    --

    --

    +1 Insightful, -1 Troll. What can I say, I'm an Insightful Troll.

  9. Re:To further what you are saying by Anonymous Coward · · Score: 1
    I started reading your comment, and when you said "document your program" I thought you meant to write an overview of how all the pieces of code interwork to make the whole work. i.e. line comments and block comments are not enough, there should be some structural documentation.

    Then I realized that this is not what you were saying, so can I add this in as well? ;)

  10. Some environments don't *have* a debugger. by Richard+Steiner · · Score: 1

    At least not a formal one.

    In the mainframe-based transaction environment that I work in (modified TIP/1100 environment on a Unisys 2200), for example, all we can do is put octal and character snaps in the code and generate a trace file when executing the transaction.
    --
    -Rich (OS/2 Warp 4 and Linux user in Eden Prairie MN)

    --
    Mainframe/UNIX Bit Twiddler and long time Windows/Linux Hobbyist.
    The Theorem Theorem: If If, Then Then.
  11. Re:One simple "trick" for not sucking by fizban · · Score: 1
    What the hell platform are you writing code on that doesn't have a debugger??? This is one of the most common tools in software development.

    --

    --

    +1 Insightful, -1 Troll. What can I say, I'm an Insightful Troll.

  12. Re:No debugger? by tjb · · Score: 1

    I'm an embedded/DSP guy and I'd kill for a debugger. The only thing I have for debugging are outputs and inputs. Everything else is a black-box, with no way to see interactions within or between processing units.

    Not everyone programs PC's, keep that in mind.

    -tjb

  13. Re:Don't teach them to program. by joecool12321 · · Score: 1
    I completely agree with the importance of "problem solving". I'm a "new learner" becoming "comp. sci. student" simply because, like chromatic says, "People in this [new learner] category often don't know where to turn." But one thing I can do -- I can algorithmicly solve just about every problem I've had to deal with. I've done some work with one of my friends, who is a Flash "programmer". I now know ActionScripting fairly well, but originally I would write the "psuedo code" and he'd implement it.

    All of that to say...it's not easy, or at least it wasn't for me, to find a mentor. I guess I still don't have a mentor, I just finess projects untill they're *relatively* bullet-proof. For example, I just did an infix-to-postfix lab, in which we had to use stack implementation. After finishing the program, I fed it it's own source code, and it didn't crash. Now, that's not *elite* or anything, but for those of us that "drift", it's the best we can do.

    It would be nice if there was a way to get in touch with people who want to mentor hungry students. If there is anyone who is interested, my e-mail is joecool12321@yahoo.com.

    --Joey

  14. Re:Also a great way to even out the "Classes" by MasterVidBoi · · Score: 2

    These kinds of programs are already out there.

    At my high school, last year I took part in a Cisco networking course, all about how to design, implement, and maintain networks (of course, using Cisco technology every step of the way), how TCP/IP works, structure of a packet, and other stuff.

    While I lost interest right about where it said "ISDN is the prefered method of adding high speed internet connections to homes, remote sites, etc" and "Some users who are willing to buy expensive modems have 33.3 connections, but not everyone will...." but a lot of other students found it extremely useful, and it got them interested these fields.

    (the other half of the class who decided it was just too hard for them and spent the rest of the year playing TetriNet)

    That Cisco class would have worked out quite well, had the information been more current, but as it stands, I still learned a lot, and I hear things are better this year.

    In short, it does work, and a lot of students are interested in taking advantage of Cisco's offer of $30,000/year right out of high school, or continuing to take Cisco sponsored coursework through college and earning more later on.

  15. Re:Suggestions for better software by Mr.+Slippery · · Score: 2
    Open Source software very rarely seems to go through a proper build, test, fix stage.

    Yes, but that's because software very rarely seems to go through a proper build, test, fix stage! B-(

    Tom Swiss | the infamous tms | http://www.infamous.net/

    --
    Tom Swiss | the infamous tms | my blog
    You cannot wash away blood with blood
  16. How to use a debugger by AntiFreeze · · Score: 3

    I think one major point which has been missed in the previous discussion was the aspect of debugging code.

    I know when I started out, I rarely used a debugger when coding. I'd print out hard copies of my code, go over it with a pen, show it to others, but never touch a debugger. I know many professional programmers who also don't know the value of a good debugger.

    My point is simple: teach aspiring programmers that no one can code perfectly, and show them how to debug their code appropriately. gdb is fine. ddd is better for beginners. There are other debuggers for other languages. I have no clue what can be used under windows or on a macintosh, but I'm sure there are good debuggers for them too.

    One of the tenets of being a good programmer is writing solid code and knowing it's limitiations. Stress testing extreme conditions, and not being afraid of sanity checks. I've seen professional apps die from OBOBs (off by one bugs), come on guys, that should never happen, it's so easy to test for.

    I know I've been babbling, so this is my last point. Teach people that just because a program compiles and runs without crashing, doesn't mean it always will.


    ---

    --

    ---
    "Of course, that's just my opinion. I could be wrong." --Dennis Miller

    1. Re:How to use a debugger by Amokscience · · Score: 2

      This is why every programmer should read a book like Code Complete. It teaches *agressive* defect catching in your code. Most programmers are too afraid of their code. They want it to run so badly that when it runs correctly once they are happy to sign off on it.

      That makes no sense. That's a horrible mentality and it's far too prevalent in the field. Anwyays, any new programmers should read the book, it explains things far better than I could.

      btw: Ironically, when I started programming all I ever did was use a debugger (Turbo Pascal 7 was excellent)... nowadays I prefer to read code. This avoids a problem I grew up with... hack and slash debugging. Often I would get an off by one error and do a quick fix and then run it through and it would pass. Often other bugs would slip by me or I'd forget to change affected variables, etc. By reading I am forced to take more time to verify the code integrity. Oh, and most studies show that code reading reveals about 3 times more bugs than does stress testing.

      Not disagreeing with you. Just adding to your comment.

      --
      Fsck cluebie moderators. I'll say what I want, offtopic or not. And fsck having to qualify every bloody statement just
  17. Re:One simple "trick" for not sucking by Amokscience · · Score: 1

    This is because most programmers hate testing. Programmers see testers the way sysadmins view the first level tech support staff. As a direct result testing rarely gets a lot of attention. One of the basic rules of testing is that the extreme odd cases are the most important to check (and often the simplest). One of the signs of a really good programmer is how well they debug and test their code. The very best have lots of neat debugging techniques (like this one).

    btw: Thanks for the breakpoint thingy. I usually check every branch but (as you discovered) the breakpoints will confirm test coverage. I expect similar results.

    ...and if you don't have a debugger put a unique print statement in each and check em off on paper until you hit em all.

    --
    Fsck cluebie moderators. I'll say what I want, offtopic or not. And fsck having to qualify every bloody statement just
  18. Re:Hey CmdrTaco! -- first lesson: by Shoeboy · · Score: 2

    Good point. MySQL is closer to access than it is to a real database. It'd be hard to do proper database development on MySQL just because of all the limitations. I wasn't aware that it didn't have the equivalent of page level or row level locking. That's awful.
    Why do people insist that it's a real database again?
    --Shoeboy

  19. Re:Software apprentices by cavemanf16 · · Score: 1

    That's cool. You can never be too careful in today's politically correct saturated society. :)

  20. Re:I'm akarma whore by Heidi+Wull · · Score: 1
    why? I've got plenty of room for them in my mouth!

    --
    I had sex with a camel!

  21. Re:Kids these days by v0x0j · · Score: 1
    FYI, auto_ptr does not implement neither gc, nor reference count. It may be good in simple situation where programmer knows its implementation, but fails in very simple situations. Look at this:

    #include <memory>
    #include <iostream>

    using namespace std;
    struct tst
    {

    int x;

    tst(int a): x(a){ cout<<"tst created[1]\n"; }
    tst(const tst& a): x(a.x){ cout<<"tst created[2]\n"; }
    operator int() { return x; }
    void print() { cout<<"x="<<x<<"\n"; }

    ~tst() { cout<<"tst deleted\n"; }

    };

    typedef auto_ptr<tst> p_tst;

    int test(p_tst x)
    {
    return *x;
    }

    void main()
    {
    p_tst my_tst(new tst(5));

    my_tst->print();
    test(my_tst);
    my_tst->print();
    }

    It would work with simple poiters, but will segfault with autopointers...

  22. Why the discrepancy? by AintTooProudToBeg · · Score: 1

    Hardware works. I've never had a problem with my processors, sound cards, network cards or any such hardware. And this is complex stuff!

    Software sucks. I've had constant problems with software... even complex ultra-popular stuff (MS). The worst are custom programs companies pay $50,000+ for (e.g. fancy warehouse stuff or some insurance billing database)... man that stuff really blows.

    Anyone go into a Pep Boys about 4 years ago? I sure hope they're not using it anymore, but their cash registers ran a win 3.1 VB application... complete with 150x150 pixel "CHANGE" and "RECEIPT" command buttons. BARF!

  23. Someone mentor me by buggy_throwback · · Score: 1

    Will someone mentor me on using OpenGL which I only started recently, I am on a Maths degree, I live in the uk and Im willing to do it by e-mail.

    Mail me

  24. Could mentoring turn into a guild or a union? by typical+geek · · Score: 2

    Do you think that if we got enough of a mentoring organization together, we could perhaps turn the programming field into a guild or a union?

    Now, rub your knees for a minute from jerking and hitting your desk bottom, don't think of union as a janitor's or autoworkers union, where most of the members work 2 hours a day, and pay a small fortune to the union bosses, but rather think of a group of like minded craftsmen, who only want to see their field prosper, who only want to pass along the best techniques to their journeymen and apprentices.

    Perhaps a Guild is a better image. We senior programmers could pass along good programming tips and technics, as well as a good sense of programming ethos to younger, more impressionable programmers. We could instill a much greater sense of professionalism in the field.

    Eventually, we could assert our power for the good of the field, perhaps modeling ourselves on the AMA. We could certify certain schools, and not allow programmers to be board certified if they didn't graduate from our chosen schools, and pass our chosen board tests. Really, you wouldn't let any quack operate on you, or any hack defend you in court, wouldn't you feel better knowing a professional, certified programmer was writing your web page?

    Thanks for reading this, and thinking about it.

    1. Re:Could mentoring turn into a guild or a union? by hta · · Score: 3

      Sure. Join the ACM.

    2. Re:Could mentoring turn into a guild or a union? by linzeal · · Score: 1
      Screw that join the wobblies at least they have some balls.

      Communications & Computer Workers IU 560, Local #23

  25. Re:Software Engineering will make software suck le by jallen02 · · Score: 1

    The paper means nothing...
    I am a software developer..
    I have no "paper" that says I know what I am doing, I just do know what I am doing.
    Let me put it this way, I have neded up training and babying and then firing guys five years my elder with CS degrees because they couldnt handle the work they said they could.

    I am 20 and I have proven myself through my work.

    I design large scale applications.. Do I need a piece of paper to do so if it works and people praise me for my work?

    Jeremy

  26. I agree with the analysis by wmulvihillDxR · · Score: 2

    I agree that there are so many projects out there that start because someone scratches their itch and then gets bogged down in finishing it and documenting it. Mentoring is a wonderful idea.

    I am a fairly good coder and have a couple of projects going on. I think I would certainly welcome any help on those projects and would easily be flattered and appreciative of beginners trying to contribute. I think the problem is that people think that they must be 1337 coders in order to contribute to projects. So I say to beginners out there, come to my projects (see sig)! Help out! I'm willing to train with the fairly good skills I have.

    --
    Check out Althea for a stable IMAP email client for X. Now with SSL!
  27. Re:Suggestions for better software by CyberDawg · · Score: 1

    Vanders wrote: "And no, outside of unit testing, the coder cannot teste their own code properly!"

    I'd take exception with your exception. In managing programmers, you should always have someone else review test cases, including unit tests. One of the most common reasons for malfunctioning code is programmers misunderstanding the requirements. I guarantee you, if they don't understand the requirements when they write the code, they won't understand when they write the test wrappers and/or stubs, either.

    It's good to have programmers write test code and devise test strategies. It makes them think. Having them do test code/specs for each other, too, makes them think even more.

    I'm sure, however, since Vanders does testing for a living, he (?) will agree that a professional fulltime tester brings yet another perpective, and will find problems the programmers don't find.

    The more testing methodologies you employ, the more problems you find.

    The earlier you start thinking about testing, the less problems there will be to find.

    The more problems you find in released code, the more there probably are still waiting to be found.

  28. Management and algebra problems by michaelmalak · · Score: 2
    Three obstacles with the suggestion of mentoring:
    1. Management has to be completely on board. Management often evaluates individual rather than team performance, and monthly rather than decade-long performance. Currently, potential mentors often get in trouble for mentoring.
    2. With job changes about every year or two, it becomes more difficult for employers to measure and reward the effectiveness of mentoring (unless some royalty or residual renumeration were set up).
    3. Finally, three women can't make a baby in three months. Saying "mentoring programming" is like saying "mentoring algebra". It takes time and practice on the part of the student to grok. Yes, it goes several times faster with a mentor, but there is an "aha!" that takes a while to acquire.
    Without addressing these obstacles, the suggestion is merely just a start of an idea (and one that frequently comes up anyway in researched software engineering "process" and "culture" literature).
  29. Re:The problem with bad code by BobRoss · · Score: 1

    My problem isn't with non-obvious code. Such code is often necessary to squeeze performance or flexibility out of a language or system. My problem is with non-obvious code that ISN'T COMMENTED or documented in some way. If the code isn't self-documenting or easy to follow, it is the responsibility of the developer to document what is going on.

    I think that the book _Code Complete_ by Steve McConnell should be required reading for everyone who calls themself a developer. Yes, the book is published by the evil Microsoft Press, but this book is truly noteworthy. It describes an approach to code-writing that is practical, efficient, and responsible. Get your hands on a copy if you can - you won't regret it.

    I seriously believe that there is a vast difference between a programmer and a software engineer. And I think that as time goes on, we will see programming become more like other engineering disciplines, because customers are becoming less tolerant of late, over-budget software projects that miss the mark.

    I think that many open source projects could use a bit more application of software engineering techniques, and less seat-of-the-pants coding sprees. Yes, the latter puts something out there sooner for people to bang on, but oftentimes that something is a big buggy pile o'crap. In the long run, software engineering techniques will deliver a higher-quality application that people will actually be able to use.

  30. Computer Science vs. Self Taught by lapointe · · Score: 2
    It seems like most people have missed the point of this article. It rightly asserts that the schooling the computer/software engineer/scientist has a big influence on the suckiness of software. As a software engineer who has been involved in recruiting at universities lately it is pretty tough to find good people.

    One problem with Computer Science is students get little education in physics or technology. The more often receive all their computer knowledge from university and have little breadth of experience. Engineers on the other hand generally get only 2 or 3 computer courses, but have broader experience and interesy both inside and outside of school which more than compensates. I would advocate the transfer of CS departments from Math faculties to engineering as a result (this seems to be a growing trend). Note that certification programs like MSCE, etc. carry zero weight with us and are almost a negative.

    The teaching of Java in school is particularly troubling. Students who mainly have background in Java often really don't have a depth of understanding on how the computer works. This results in bloated kludges in whatever language they work in.

    Example - anybody can put together an HTML web page. But, it requires a real depth of knowledge and breadth of experience to architect a commercial web application which doesn't suck. This 'big picture' view is what I try to hire for.

  31. Mentoring is Good- But Where? by ab · · Score: 1

    I am a mentor and have been for years. I worked under my own mentors before that. The problem is it has gotten increasingly hard to do this because of politics- and this is at a university, mind you. I can only imagine what it's like at places even more pound-foolish.

    I like to hire students to work for me when they're pretty fresh. Mostly because I want to keep them around for a few years, but also because I'm hoping they've picked up fewer bad habits already. The planned arc is I keep them for three years or so, then they graduate and either come on full-time or go make the big bucks elsewhere (usually the latter, as you'd guess).

    The problem is that people above me in the administration Don't Get It. They think it's a waste of resources to pay students who are a) busy enough with school that they can't work a lot of hours, b) only hang around a couple of years, and c) go take all our mojo and use it elsewhere.

    My usual response is ``Excuse me? I thought it said "university" on the front door. We're supposed to be filling up their heads and unleashing them on the world.''

    I then explain that you can't find people ready-made to work here, or I think as systems administrators or large project developers in general. They need to learn by doing it. It's that cycle people whine about, you can't get a job without experience, etc. Well, here's an in, folks. I'm just looking for people who are willing and able to learn.

    This is my third department and fifth set of higher ups. Fortunately the first set of which Got It, or I wouldn't have come up in a good environment myself. It's been an ongoing battle with the subsequent regimes to keep things going.

    I think the problem (like a lot of problems in computer related fields these days) is the public perception that because computers are commonplace (unlike fifteen years ago when I started), all things related to them are easy and competent workers are plentiful. Wrong and wrong, as slashdotters know.

    A similar problem is with the students themselves who tend to underestimate the scale of the problems or overestimate their abilities. That's nothing new, though- been there myself- and both of those are pretty easy to improve, given a good environment. If only I could really provide one. :-(

    Not to sound like the silverback hacker I am, but I fear for the future. If a university like this one can't provide a good breeding ground for technical people, who will?

    I haven't given up hope yet, but I'm getting close. Anyone got venture capital for setting up a geek incubator? If the university won't guide eager students, somebody else should. Set up shop near each of your major universities and you'd get first pick of each year's crop of disciples for feeding to headhunters or whatever other businesses you have.

    If it's cool and credible enough, people will work for you for peanuts (people offer to work here for free all the time). What're headhunters paying these days? Between that and pimping out whatever they're doing on the job to get experience, this could even make money.

    When you want a branch here, give me a call.

  32. Re:Suck Less by rw2 · · Score: 4
    Of course with most free software, since there is no one promised a product that withdraw their money if it doesn't happen there aren't many deadlines.


    Except that tons of software is written as a kind of modern day duel. Why else would someone write a message board when ten already exist? To scratch an itch? Partially, but that only explains why they write it, not why they gift it. They gift it in order to win the acclaim of their peers.

    In order to win said acclaim you must be current. The deadlines are therefore sometimes much more onerous because they are less tangible. More like a nightmare where you are terrified and running, but you don't necessarily know from what instead of a deadling where you are running, but it's only because your boss said so and he has no spine, no brain and no power. The worst he can do is fire you and then you'll just go somewhere else for more money.

    --

  33. Who wants another programmer? by Mark_MacRae · · Score: 1

    I guess I would have to put myself in the category of intermediate/advanced Java coder. And I've often thought that I could contribute to some free software project, but where? I guess from my perspective, it would be easier to start my own project than to try to decipher someone elses and start contributing to it.
    And with only a couple hours a week maximum to spend on it, how much help would I be?

    Did this post have a point?

  34. Re:Kids these days by ungerware · · Score: 1

    I don't think GC will be truly accepted in the hard-core, must-collect-manually community until it's predictable enough to be used in hard real-time applications.

    We need to be able to say, "Automatic GC will not prevent us from guaranteeing allocation and deallocation times, and we will not fail if there's still N bytes available (that is, we can make solid predictions about fragmentation)"

    Not to worry, we're working on it :)

    --

    -----
    Kvetch is Yiddish for "throw an exception" --Dr. Ron Cytron
  35. Re:Suck Less by kevlar · · Score: 2

    First of all, that wasn't a spelling error, it was a typo. Secondly, I never claimed I was "above" anyone or that I anyone is inferior. What I stated was that there are not enough competent people in the field, which is a fact. If this were not true, then there would not be such a demand for IT people. I respect people and I expect the same from others. My point however, was that software sucks because the competent people get stuck with ALL the work (which is an enormous amount), while the incompetent get paid the same and do nothing 90% of the time.

    Don't test me on this, I'm knee deep in it. And in the future, don't try to warp my words into me sounding like an asshole.

  36. How do you know so much about me? by g_bit · · Score: 1

    God I hate that.

  37. Re:another thing this does: by fizban · · Score: 1
    Basically a software development site for free software...

    So, does this mean we'll have a website with thousands of half-finished flowcharts? :-)

    --

    --

    +1 Insightful, -1 Troll. What can I say, I'm an Insightful Troll.

  38. I disagree. by Rotten168 · · Score: 1

    Problem solving is a piece of the equation, but it's a small part. A lot of sloppy code is written because people just don't have intimate knowledge of the language. Wasted resources is a major problem with today's applications.

    Consider Windows. It solves all of our problems, but it really doesn't do it that well. It has a GUI that one can use applications with, and an interface, but underneath all of that there are memory leaks and really buggy software problems.

    It's almost as if the coders followed your advice but then didn't take the requisate step to consider the potential problems their code might wreak upon systems (Windows seems to do it's worse when it has +30 apps installed on it.

    I've personally seen apps that "solve" the problem at hand, but bog down resources WAY more than they should. That "trivial" work is the most important work of it all, after all, a computer cares nothing for theories or algorithms, all it cares about is the array of instructions it needs to process.

  39. GET A DIFFERENT JOB by yerricde · · Score: 2

    Unisys

    Quit. Your. Job. Now.


    All your hallucinogen are belong to us.
    --
    Will I retire or break 10K?
  40. Re:Suggestions for better software by robert-porter · · Score: 1

    Mozilla is not yet at a 1.x release, thats why it sucks. Theres been a code freeze for quite a while. There just doing optimization and bug fixes now.

  41. Mmm by SexyAlexie · · Score: 1

    His head should roll for that!

    --
    I'm too sexy for you.
  42. printf() debugging by yerricde · · Score: 2

    What the hell platform are you writing code on that doesn't have a debugger???

    In some environments, the only debugger you have is printf() or the equivalent. How do you run GDB on an embedded system such as a cellphone or a game console? How do you debug a fullscreen application (game, media player, etc.) if you can't see GDB's window?


    All your hallucinogen are belong to us.
    --
    Will I retire or break 10K?
    1. Re:printf() debugging by err666 · · Score: 1

      On embedded systems, use a remote debugger. On a fullscreen application, use a debugger on a seperate console. What's the problem here?

      --
      reduce(lambda x,y:x+y,map(lambda x:chr(ord(x)^42),tuple('zS^BED\nX_FOY\x0b')))
  43. Suck Less by clinko · · Score: 3

    There's a deadline, and how much you're going to do. As time approaches deadline, the suckfactor goes up. It's a simple equation. :)

    And software is NEVER finished.

    1. Re:Suck Less by bluebomber · · Score: 2
      This increases the load on the competent while the incompetent weazle by managing the build and doing other such simple tasks.

      Do you really want the incompetent to be writing code?!? Seriously, though, not everyone can code. It's just a fact of life: I can't draw, some people can't write coherent sentences, some people can't spell (it's "weasel"), some people can't code. That's why we have job specializations like build management, release management, etc.

      Just because you see someone doing a job that you feel is "beneath you", ask yourself where you would be if that person wasn't in there in that support role. Thank those people! I, personally, am glad that we employ a janitor/maintenance/facilities person. That means that I don't have to change light bulbs, vacuum the floor, etc. And I don't give him any crap because he can't code!

      -bluebomber

    2. Re:Suck Less by kevlar · · Score: 2

      This is so true. This is the root of the suckness of software.

      On top of such suckiness is the competence of the coder. Not everyone in the industry is competent. In fact, I'd say that the vast majority are incompetent and that there is a select few who actually get the work done. This increases the load on the competent while the incompetent weazle by managing the build and doing other such simple tasks.

    3. Re:Suck Less by blindbat · · Score: 1

      I write free software but I don't go to great lengths adding parts to it that don't interest me personally. $$ helps me be interested. Donations to free software authors helps motivate them and cover expenses (like websites, tools, etc.)

    4. Re:Suck Less by cyber-vandal · · Score: 2

      That's OK if you can see at a glance what the application does. The current system I'm working on has the logic so obfuscated by programmers trying to protect their jobs that it's quicker to just put in hacks and workarounds than to rewrite it - even though it offends my sensibilities as a programmer. The reason code sucks in the commercial world is almost completely due to poor project managers and butt-kissing incompetents. Remove these from the industry and good code will flow from good coders. Easier said than done, but chromatic should at least focus on project manager education as well as this is a large part of the problem.

    5. Re:Suck Less by Cat+Mara · · Score: 1
      Why else would someone write a message board when ten already exist? To scratch an itch? Partially, but that only explains why they write it, not why they gift it. They gift it in order to win the acclaim of their peers.

      That's not necessarily the case. I reckon the biggest problem is the learning curve. Sure, libraries to do things like message boards are ten a penny from Freshmeat, but what you're left with after you've unpacked the tarball is a big chunk of code designed to a mental model that may or may not be in phase with yours. Digesting this code will be a problem. Even if it's well written, it'll take time. More likely than not-- coding style being a very personal thing-- you'll find some coding idiom that will make you cringe and slow down your absorption. When faced with this, is it any wonder that most people will throw their hands in the air, fire up their editor, and start coding from scratch?

      Something I've always wanted was a `time machine' for source code and other documents. Imagine some sort of super source code control system (perhaps integrated into the filesystem so you don't have to set anything up) fitted with a gizmo like a VCR shuttle control, so you can `rewind' the source code through earlier iterations. That way you can see the developer's mental model of the system evolving over time. I would kill for such a system. Well, maim anyway. (-:

    6. Re:Suck Less by sydb · · Score: 1
      yes, learning curve is a big problem.

      -- coding style being a very personal thing--

      But good coding style is a very impersonal thing. Code should communicate. Code done in a "personal style" is incomprehensible and IMHO often broken.

      The problem is, the people who write code in a "personal style" really don't care enough about their code to make it better.

      This is, of course, why things like Linux have style documentation.

      If only people who didn't care about their code would stop writing it.

      --
      Yours Sincerely, Michael.
    7. Re:Suck Less by bmongar · · Score: 2

      Of course with most free software, since there is no one promised a product that withdraw their money if it doesn't happen there aren't many deadlines.

      Suckfactor in free software is often due to inexperience or people not putting enough effort into it because they aren't getting paid.

      I get paid to program all day and I sometimes teach classes in programming in the evenings, when I get home I am not motivated to do program anylonger. Especially not for free.

      --
      As x approaches total apathy I couldn't care less.
    8. Re:Suck Less by Cat+Mara · · Score: 1
      But good coding style is a very impersonal thing. Code should communicate. Code done in a "personal style" is incomprehensible and IMHO often broken.

      When I talked about coding style, I wasn't just referring to badly-indented horrors knocked out by a student who thinks it's kewl to name all his variables after Star Wars characters. Even with coding standards in place, most code does have a "voice" or a "personality" because each developer favours a particular set of language idioms. For example, developer A might always couch his loop constructs in a `repeat while' idiom, while developer B prefers `repeat until' constructions. Things like that.

      But the learning curve is the biggest obstacle. Really grokking a program often involves figuring out what was left out, rather than understanding what the programmer put in. So much information is lost in the translation from the programmer's mental model to finished code. Using a production-quality, fully-debugged library is like being handed a chisel and a block of marble and being asked to produce Michelangelo's "David". Most people will want to start with Play-Doh and work their way up to marble eventually.

    9. Re:Suck Less by spudnic · · Score: 2

      I think your first paragraph pretty much summed it up. I've been asked many times to modify some existing in-house application to perform some new function. After barfing on the horrid spagetti code of "programmers" who came before me, I usually decide that it would take more time to figure out the mess than to start from scratch.

      We usually end up with a much tighter application that does a better job than the original did and with the added functionality they wanted. I even spend time doing ---documentation! Each incarnation improves on the previous.

      Of course, I wouldn't suggest throwing out a project consisting of a million lines of code (unless absolutely necessary ;) But for the size and scope of the apps that you mentioned, sometimes it's for the best.

      --
      load "linux",8,1
    10. Re:Suck Less by GreyLurk · · Score: 1

      My guess is that a lot of people write already existing programs from the ground up and release them because the previously existing programs don't have quite the functionality they are looking for, and adding the functionality to the exisiting programs would be more work than a fresh project.

      Of course, in the wild, one of them always rises above the others, and will be extended to envelop the functionality of the others...

      Another reason for the massive number of message boards and web-mail interfaces in the public domain, is because they are easy to write. They make a good "first time" project, becuase they are simple enough to allow one programmer to see them through from beginning to end. It's not so much a competition, as a tutorial.

    11. Re:Suck Less by rw2 · · Score: 2
      You seem to have focused on the 'scratch the itch part'. If it isn't acclaim (and, of course, I didn't invent this idea. ESR popularized it in our culture) that drives people the release as I claim, then what is it in your explaination?

      --

    12. Re:Suck Less by Mr.+Slippery · · Score: 3
      Why else would someone write a message board when ten already exist? To scratch an itch? Partially, but that only explains why they write it, not why they gift it. They gift it in order to win the acclaim of their peers.

      Sure, words of praise are nice, but that's hardly the only benefit from giving.

      If you've written mainly to "scratch an itch", there's little reason not to give it away. You can gift it, try to sell it, or keep it for yourself. Keeping gains you nothing (unless you've written The Program That Will Enable You To Take Over The World); and as for selling, the population of people who have the same itch and are willing to pay to have it scratched could be very small.

      When you've put time into something, you want it to be seen and used. I've spent years working on projects that never amounted to anything except a dusty tape on someone's shelf - that sucks.

      If you gift it, they will come - maybe only to snag parts for other program they're writing, maybe to take what you've written and keep it alive and growing. A program that only I ever use is like a poem that only I ever read...I don't share my poetry primarily for acclaim, I share it because I'm wired to delight in infecting others with my memes.

      Tom Swiss | the infamous tms | http://www.infamous.net/

      --
      Tom Swiss | the infamous tms | my blog
      You cannot wash away blood with blood
    13. Re:Suck Less by alprazolam · · Score: 1

      i think the problem is probably more related to the fact that there are a lot of stupid people writing software, and it only takes one stupid person on a team to make the end product crap. also in business software you have people buying software that their employees use. the managers don't use it though so they ignore bugs and buy based on features, then software companies compete based on features, and you have crap like mentor graphics stuff (well its not really crap but it could be better if it had less features and more stability).

    14. Re:Suck Less by billcopc · · Score: 1

      Sure we all need janitors and whatnot, but would you want a janitor going anywhere near your code ? Well just replace janitor with incompetent (not saying that janitors are incompetent though). I wouldn't want an incompetent fast-track college graduate MCSE idiot even touching a keyboard that's on the same workgroup as myself, because you know they'll find something creatively stupid to do with the build files. "Hey look, I made the Make script send us all email when the process fails" he says, then you fire up your mailreader and see 200 "make failed" messages while he was shotgun debugging his tweak. Yes, those morons.

      --
      -Billco, Fnarg.com
  44. Re:Programming has nothing to do with schooling by Mr.+Slippery · · Score: 2
    Most professional programmers that I know of have never taken a single computer class...In addition, many professional programmers have no time to write 'good' code.

    Gee, maybe if your friends took the time to learn about their chosen field, they'd come to realize that writing "good" code ultimately saves time.

    That's why you don't see too many comp sci people making the big bucks as professionals.
    Interesting...I've worked at companies like TRW, IBM, and Raytheon, and I think 95% of the professional programmers I worked with had CS degrees. (Yes, one can be a good programmer without a degree; however, without at least some classes, I'd say it's very very unlikely.)

    Where are all these "professional" programmers who've never taken a class working? I'd like to know so I can be sure to avoid their products...would you go to a dentist who proudly claimed he'd never taken a class? Or even a mechanic who bragged about never taking even auto shop?

    Tom Swiss | the infamous tms | http://www.infamous.net/

    --
    Tom Swiss | the infamous tms | my blog
    You cannot wash away blood with blood
  45. Re:Making VA suck less by Anonymous Coward · · Score: 1

    It never ceases to amaze me how the trolls, spammers and idiots around here can take ahold of something with moderate humor value and bludgeon it to a slow, bleeding, moaning death. It was slightly funny for one day, it was less funny the next, and now it is just about the most goddamned annoying thing I can think of.

    At least get creative with it, something along the lines of:

    All your Natalies are belong to us!
    What you say?
    Someone set up us the grits!! You are on the path to burned genitals!

  46. Those who can not....teach by gus+goose · · Score: 2
    It takes people with practical experience, patience, and the willingness to invest time in another person's education.

    To this you have to add that the person also has little else to do.

    So, this is the flaw with the above. In any environment (other than an academic envoronment), the people who an actually do the work best spend their time doing the work. This is why we have schools, colleges, and universities. That is where the people go to get the "practical experience, patience, and the willingness", and they get it because they pay.

    Mentoring is inefficient in a business environment because it reduces the productivity of two people to the average of the collective.(you have a 100% productive person and a 50% productive person producing at 75%. It is better to not have mentoring because your productivity doubles (150%))

    Thus, in a business perspective, if mentoring happens, it is quickly realised that the solution is to put the mentor back to work, and in extreme circumstances, to replace the 'trainee' with a person who does not need mentoring.

    Hard, cold, fact of life.

    --
    .. if only.
    1. Re:Those who can not....teach by smallstepforman · · Score: 1

      Initially yes, but once the trainee is up to scratch you're looking at 100%+100% = 200%. Much better than 150%, no?

      --
      Revolution = Evolution
    2. Re:Those who can not....teach by arbarbonif · · Score: 1

      The problem with the 150% theory is that commonly the bad coder doen't have a 50% efficiency, but rather a -25% efficiency. I have spent quite a bit of time redoing the code that someone who was in desperate need of mentoring did.

      If I could have mentored them to begin with we could have together written a good piece of code and I wouldn't need to fix his crap anymore. Thus the efficiency of the pair starts at about the same and rises to more than twice once the student becomes that master.

      As far as replacing the 'trainee' with a person that doesn't need mentoring, that is impossible on an existing project. The ramp-up period for even an experienced coder with an existing project is enough to make the benefit to replacement about the same as for mentoring, but it is MUCH more expensive. Experienced coders are not cheap.

    3. Re:Those who can not....teach by bmongar · · Score: 2

      I disagree on several accounts. First my company does consulting,mentoring, and education. The people who teach the classes also program and mentor. And the teaching pays better, so those who can teach at my company. Also the loss of productivity for mentoring may be like you described for a short period of time, but the person being mentored improves his effieiency, so there is an upfront hit in productivity but over the long run you gain as the student learns and no longer needs mentored.

      We have had a great deal of success with our mentoring program. We have gone in to many companies, helped design architecture, mentor the team on OO methods and Java, and help with the first iteration. Those companies usually have us back when the have new products because the projects we started were successful

      --
      As x approaches total apathy I couldn't care less.
  47. another thing this does: by perrin5 · · Score: 1

    If this is adopted widely (and I hope it is) there are two major effects I can see coming out of it:

    1) Programmers will have to have flowcharts for the little projects they're working on. It may cut down on the number of submissions to freshmeat, but the code will be better.

    2(and more interesting) A new website could come out of this: I am working on this, contact me for more information, a flowchart, and an area to work on....Basically a software development site for free software, with project managers and everything.

    AWESOME!!

    --
    hmmmm?
  48. Re:Suggestions for better software by schulzdogg · · Score: 3
    Have you tried to use Mozilla lately.

    Mozilla is A good web browser, not spectacular but decent. It is a spectacular architecture. the ability to write code for many different platforms, to expose that code to scripting languages so relative neophytes can code applications is extremely powerful.

    A brief explanation of XUL/XPCOM/JavaScript:

    Most of mozilla's core class's are built in XPCOM objects. Certain methods of these objects can be exported as scriptable, meaning they can be run from javascript code.

    XUL is a layout language, similiar to HTML, that uses CSS to define it's appearence. Javascript can be embeded in XUL.

    The result is an architecture that allows anyone to creat an application (chrome) as long as they can learn javascript and XUL. Heavy lifting can still be done in C++ behind the scenes and then exposed to Javascript. Dev time (once you get past the sizeable learning curve) is small. The resultant apps are cross platform and fully skinnable (because they're appearance is defined in stylesheets).

    Everyone should check out www.mozilla.org and learn about this. It's a much better rapid development enviornment than VB, and it's cross platform, and open source.

    I sound like a groupie, but mozilla is a beautiful thing....

  49. Writing good software is impossible... by Bug2000 · · Score: 3

    ... most of the time. Because there is not one person alone who can build a whole system, you need to do team work and dispatch responsibilities. You need some managers who usually are quite distant with technical realities (deadlines, budgets). You need techies who are quite distant with the real world (what do you need a GUI for ?). You need a nice working environment and what's more you need to communicate. Eventually, you need a customer who knows what he wants and have precise ways to describe what he wants. In addition, get me some heavy competition and so the problems start!

    There are already different methodologies to enhance the quality of the work like Rational Unified Process or Extreme Programming which correspond to different project scales. Mentoring is very good if good techies were no so contemptful with junior programmers. None of these techniques will be enough to counterweigh the human factor though. This is why I believe that writing good software all the time is impossible.

    Also, it is a complete misconception that good software is only a question of technique! A good software is a software which is widely used and that people are happy with. Customers, programmers, managers and marketing people are people before anything. And this is why I strongly believe that good software is much more a question of people and not of methodologies.

    Look, for the biggest majority of the users, Microsoft Office is a very good product. For the geeks community, Linux is a good software. The notion of "good" is sooo variable... :)

    --

    É que os desafinados também têm um coração
    1. Re:Writing good software is impossible... by Bug2000 · · Score: 1

      When you get more than 10 people working on the same project, it is very likely that you begin to need some sort of technical manager to keep focused on common objectives. The difference between open source and commercial projects is that open source programmers choose to work on open source projects, and that shows a level of involvement which is not the same for commercial. For small scale projects, you may not need managers but you'd better be damned organized to dispatch the responsibilities among the team. For bigger projects, I'm sorry but even in open source software, there are people who make decisions and who implicitely take the role of a manager. Most programmers (and people in general) are inclined to do the way that is good for them and not the way that is good for the team, especially in bigger structures where there's much more anonymity. Therefore, you have to admit that after a certain scale, you need managers.

      --

      É que os desafinados também têm um coração
    2. Re:Writing good software is impossible... by greenrd · · Score: 1
      You need some managers

      Sorry, I switched off after this point. Have you ever worked on an open source project? You do not need managers.

  50. Re:Kids these days by hding · · Score: 1

    Of course no one will deny that GC (as it exists currently) is not ideal for certain uses (e.g. real-time applications, as you mention). The problem is that there are so many things where the small potential penalty for using GC is far outweighed by its benefits, and yet it's still not popular for those things.

    Hopefully Java is beginning to open people's eyes to said benefits, though I'd still rather have people come around and work in Lisp and Smalltalk. That's a different war, though. :-)

  51. Re:Suggestions for better software by MikeFM · · Score: 2

    I'd have to say my experiences have been different. We've had repeated problems with IE not handling standard stuff in anything like a normal method and being forced to do frequent upgrades to fix these problems as quickly as possible as well as writing our code around the bugs. Stability has been somewhat of an issue in IE and Win2k also. Last week for example we had to completely reinstall Win2k Pro and all apps on a machine just to keep IE from crashing. These machines are brand new (from a good company) and have very clean installs of their software and run almost nothing besides Office 2000 and IE so they shouldn't have much to conflict with. Under any version of Windows I've tried IE has been fairly sucky.

    We also run MacOS 9 which has an entirely different set of IE problems but usually does somewhat better.

    Netscape is just as bad as IE and is full of bugs on Windows, MacOS, and on Linux. While it usually handles http/html stuff better than IE it has less conformance with newer standards and crashes more often.

    Konqueror is okay for a very light yet somewhat usable browser and may turn into something nice but so far I don't see it even counting.

    Opera is okay but doesn't seem worth the cost to me and I'm not going to look at ads.

    Mozilla is a little tricky as you still have to find a good build but there is plenty of community support for making this easier and usually it isn't that hard to find a good one that is recent. It is fairly full featured, standard compliant, fast, and stable on Windows, MacOS, and Linux. Even components such as Mail/News and the HTML Composser are shaping up really well. The fact that it is so cross-platform is also really good IMO. On the average day I work with Mozilla as my browser and mail program for around 10 hours and really beat the crap out of it and it rarely has any problem.

    I don't care about 'sticking it' to anyone but I like software that doesn't suck and my experience has been that all software sucks and with commercial software you are stuck up a creek without a paddle. With open source I can either fix it myself or get online and get a fix often within minutes or hours. It isn't often closed source software has that good of turn around. I just wish I could find an open sourced bandwidth provider (whatever that would mean) cus companies are a pain to work with. "Ughh well we can have it done sometime a month after we promised." Of course some companies are better than others and so is some software. :)

    --
    At what price learning? At what cost wisdom? The price is a man's peace of mind, and the cost is his life.
  52. Re:Be flexible by ClosedSource · · Score: 1

    "It often also *seems* easier to rewrite something than to learn how somebody else's code works."

    Rewriting IS easier sometimes while other times it only *seems* to be as you say. I think if a function or component is well designed, you don't even need to look at the code, you can just use it. However, if it relies on global variables or has other non-local effects, it's going to be difficult to interface with. Another problem is when a component has compound functionality and you only need a portion of it. In those situations, it may be faster to write your own version than to figure out the side effects.

    "It doesn't always turn out like this though - some projects are clearly "the" projects in their class, e.g. Apache, GIMP. I wonder why .. ?"

    I suspect that the successful projects have the benefit of good timing and knowledgeable implementers. I think it's also an advantage to limit the number of contributors until the project is well established.

  53. Re:Suggestions for better software by ahde · · Score: 1
    public static void PointerToAnObject = someReference;

    Java is worse.

  54. Re:Suggestions for better software by tbannist · · Score: 1

    I think the problem with Mozilla is that they implemented an 'ideal' architecture in terms of extensibility and cross-platform-ness, and made the decision that certain other things (conformity with the host interface, sparing use of resources, etc.) weren't important.

    I think the problem with Mozilla is that it is version 0.8. As for the originator of this thread, who says the you can't get acclaim for fixing noticeable bugs? I mean adding a new feature is kewl, but so is finding a good way to speed up the app, or fixing some annoying bug. YMMV.

    --
    Fanatically anti-fanatical
  55. Re:Kids these days by scrytch · · Score: 2

    > Garbage collection is for kids who haven't learned to reference count.

    C++ is for kids who haven't learned to do everything in asm

    asm is for kids who haven't learned how to do everything in s&k combinators
    --

    --
    I've finally had it: until slashdot gets article moderation, I am not coming back.
  56. Re:Suggestions for better software by kubrick · · Score: 1

    I think the problem with Mozilla is that it is version 0.8.

    I think that commercially, one of Netscape's problems is that it has taken them this long to put out what amounts to a v0.8. Consequence of the bloated API? Who knows. It ceased to matter after the AOL buyout, anyway...

    --
    deus does not exist but if he does
  57. Re:But that's not FUN by bluebomber · · Score: 1
    Of course its fun! You haven't spent enough time debugging/reverse engineering/redesigning hairy code. About 95% of my paid work is maintaining/extending/debugging other people's code. Mostly the crappy stuff -- IME, the good code doesn't need much maintenance. You do this for long enough, you start to like it. It's really just problem solving of a different sort. But instead of inventing something to solve a problem, you have to figure out why a problem occurs and fix an existing invention.

    It's like the BASF ads: "We don't make the things you use, we make the things you use better."

    -bluebomber

  58. Re:Suggestions for better software by Shotgun · · Score: 2

    Might there not be other reasons for not trying to pick-up and fix someone else's work? Have you not considered that trying to fix someone else's code is a lot more difficult that implementing a feature from scratch?

    I code professionally, and the hardest part of the job is trying to understand the mindset of the programmer who wrote this code originally. Most commercial code is worked on by a lot of hands, and it shows. You see the same problem solved in different ways in different places. Some of this may be because programmer B didn't know that programmer A had already implemented a function to handle the problem. It may be that programmer B did not like programmer A's implementation. How many times have you heard a programmer proclaim 'this code' sucks, only to replace it with something that is marginalling 'different'.

    Regardless of the reason, being programmer N, I pick up this morass of code, and think that the whole thing needs to be thrown out and re-implemented.

    With OS code, seeing as the programmers are volunteers, they get to work on what ever makes them feel good. What feels better, implementing a feature and actually making something work, or digging through someone else's obfuscated idea of code in order to fix an obscure bug?

    In my opinion, new programmers would be willing to work on bug fixing if UNIX programmers would use real names for variables.

    void *p = /*doesn't mean shit */

    --
    Aah, change is good. -- Rafiki
    Yeah, but it ain't easy. -- Simba
  59. Now I disagree by hawkear · · Score: 1

    No, problem solving is probably the biggest part of the equation. Sure, anyone can think up a brute force solution and code it up. It works, right? But if there is thought put into the algorithms, processors won't be bogged down, memory won't be taxed, everyone will be happy. I'm taking an algorithms class right now, and I'm surprised at how many problems can be solved simply, but even more surprised at how a nonintuitive (or more intuitive, depending on how you think) algorithm can produce a much more efficient solution. In other words, solving a problem is usually trivial. Solving a problem efficiently is a whole new problem altogether, and sometimes a more important one.

  60. "Writing Small and Fast Software" by cpeterso · · Score: 2

    Here's an interesting presentation by Felix von Leitner called "Writing Small and Fast Software" . Unfortunately, it's a PDF but it's worth reading. Felix is the author of the "diet" libc, a lowfat reimplementation of libc inspired by DJ Bernstein's minimalist C coding style (qmail, djbdns).

  61. How Fitting! by beernutz · · Score: 1

    The quote line at the bottom of this article happens (at this moment) to be:

    "The whole world is a scab. The point is to pick it constructively. -- Peter Beard "

    heh, quite the coincidence eh?

    --
    (stolen from DaBum) I am dyslexia of borg - your ass will be laminated.
  62. Re: IDs non-relational? by Omnifarious · · Score: 1

    You obviously know a lot about databases and database design, so I ask you... How are IDs non-relational?

    I tend to use them because I like to map relational models to an object model, and IDs are very useful for this purpose.

  63. Re:My own efforts to help other programmers by scrytch · · Score: 2

    Add this one to the list:
    A Garbage collector for C and C++

    Don't bother with manual memory management unless you're writing OS kernels or device drivers. A good gc *will* do it faster than you, especially in a multithreaded program. If you *are* a memory management guru who knows how to optimize it better than any gc, you've probably written your own gc anyway and don't need this link. Otherwise, just get it, use it, and #define free(x) from now on.
    --

    --
    I've finally had it: until slashdot gets article moderation, I am not coming back.
  64. ERR: IRRATIONAL INPUT -- PLEASE RE-XMIT by Richard+Steiner · · Score: 1

    There are a dozen folks on my programming team, and we get to code and maintain the software that literally runs the flight operations center for a major airline.

    It's fascinating work, the software has a lot of history (the application started being written in 1967), and the end result is used by a large number of very intelligent and appreciative users that we get to have first-hand contact with.

    No way. I wouldn't leave this job for the world.

    Besides, isn't everyone converting to PNG to get aware from CompuServe's proprietary format?
    --
    -Rich (OS/2 Warp 4 and Linux user in Eden Prairie MN)

    --
    Mainframe/UNIX Bit Twiddler and long time Windows/Linux Hobbyist.
    The Theorem Theorem: If If, Then Then.
  65. Re:Suggestions for better software by tswinzig · · Score: 2

    Have you tried to use Mozilla lately.

    Yes, have you?

    It's loaded with bloat and crappy features I'd never want to use

    Apparantly you are talking about the default distribution on mozilla.org?

    when it comes down to it, Mozilla is absolutely horrible as a web browser.

    I disagree completely, it's good and getting better as they progress.

    Everyone is seeking their own selfish gratification in being recognized for adding a new feature to a program, but no one is willing to try and make the existing features work properly.

    That's a load of shit. Yes, there are some people that only want to add new features, features they want or need. That's the nature of an OSS project.

    However, the VAST number of real engineers working on Mozilla are fixing bugs submitted by users and other developers. Take a look at Bugzilla if you don't believe me.

    I'd like to see this issue addressed more often in programming circles, because something desperately needs to be done.

    Herein lies the beauty. If you don't like the way Mozilla is being run, grab the source tree and branch off into your own group of coders that concentrate entirely on the current feature set, no bloat, and bug fixes only.


    --

    "And like that ... he's gone."
  66. Isn't that rewriting history? by Tablizer · · Score: 1

    Then any comments on signitures become orphins.

  67. Re:Programming has nothing to do with schooling by BeanThere · · Score: 2

    I think schooling can help a lot, if you are really serious about programming, then I think a well-schooled person generally grasps new concepts faster and adjusts more easily to different paradigms. Not to knock engineers, but I knew quite a few electronic engineers at university that were self-taught, and thought they could program really well, that they could program as well as the best comp sci students. After examining some of their code and their coding practices though, it becomes quite clear that their knowledge is not that broad (e.g. they'll say they know all about classes, when they don't really understand even virtual functions). The lack of schooling shows too; they will learn techniques slooowly, through trial and error, that are learned quickly when taught. I guess it depends on the individual though. I think some of the people I'm talking about were fairly arrogant, and would say stuff like "pah, computer science is such a joke, I don't need books and lessons to learn the stuff". Then their code shows that they haven't read books or taken lessons! But I guess if those same individuals were a bit more humble, and actually read some books first, then schooling wouldn't be so useful. So I guess if you *aren't* going to do a comp sci course, then at least adopt the right attitude :) Myself, the most useful things I learned at Univ. was NOT programming, but all the other things that I would not have had the initiative to pick up a book and teach myself, e.g. all the math, phsyics, electronics, AI etc. That stuff is pretty useful in my job.

  68. Re:The Way of the Bard by glv · · Score: 1

    If you believe (as I do) that programming is more a craft than it is an art or a science, then the apprenticeship model makes a lot of sense.

    --
    ---glv
  69. Don't teach them to program. by Black+Parrot · · Score: 5

    Don't teach them to program at all -- teach them to solve problems. After you have a sensible solution strategy, expressing it in the syntax of a given programming language is trivial (boring) work.

    The problem that I see over and over and over again, among both students and "professionals", is that they sit down and start throwing code at a problem without knowing a solution strategy for that problem. And for many of these people, if you try using the Socratic method to bring out their solution strategy you'll find that they not only don't know what strategy they're trying to encode, but that they also don't even want to talk about strategies -- they want to talk about the details of the incorrect code they've already written.

    I'm not against hacking, and I certainly don't think every program anyone writes needs to be supported by an engineering discipline, but I do feel, very strongly, that people need to think of programming languages as a tool for expressing a solution to a problem, not as being the solution itself.

    --

    --
    Sheesh, evil *and* a jerk. -- Jade
    1. Re:Don't teach them to program. by Baarrff · · Score: 2
      Finally someone who gets it!!

      Lines of code are no different in principle than the tools used to cut a beam that is used in a bridge to cross a stream.

      Really good software comes from people with problem solving skills, not coding skills!!.

      --
      "People need reset buttons"
    2. Re:Don't teach them to program. by Amokscience · · Score: 1

      See, I agree but this, like all CS departments I know, glosses over an *extremely* important point which I'm sure you're aware of but failed to mention:

      A crappy looking but correct solution to a problem isn't a good solution. One aspect of proper programming is using proper style, proper tools, and proper documentation. While problem solving skills vary drastically amongst people (face it, some people should never be 'programmers') you can at least enforce good practices in these things. Of course, it doesn't help worth crap when you lack both good problem solving and programming techniques.

      I've met countless intelligent people who could do circles around me at proofs and complex problem solving but whose actual code made sense to only one person.

      This is a huge weakness in both the high school and college education system.

      --
      Fsck cluebie moderators. I'll say what I want, offtopic or not. And fsck having to qualify every bloody statement just
  70. To further what you are saying by Sycraft-fu · · Score: 2

    I've noticed that not only do some people have a problem with documenting their code, but documenting their program, which in some ways is even more important. If you are writing your program just for you and maybe friends/coworkers, then you don't necessiarly need docs, since you can explain everything as needed. However, if you intend to release your program to the world, good documentation is a must. Prentend like your users are complete idiots (sometimes a valid assumption) and write your documentation accordingly. Throughly explain all the options, even if they seem a little obvious to you. If you have good documentation (as well as a generally intuitive interface) you'll find a lot more people using your program and a lot less requests for help with it.

  71. Re:I tried this with assembly coding, once by weasel · · Score: 1


    Heh, and he thought unaligned access was rough when it was slow... how about when it doesn't work, period? (odd addresses on MC68000)

  72. RTFM by Bug2000 · · Score: 1

    Also, when I started programming, I often asked stupid questions to good programmers who told me RTFM. I'm not talking about newsgroups, just working environment. A good mentoring practice could have been for example to tell me which manual to read (where to get the info) or to explain the important part of the manual and then tell me that if I want to know more, I should investigate myself. But no! RTFM...


    --

    É que os desafinados também têm um coração
  73. Re:I want it NOW! by Hiedi+Wall · · Score: 1

    You two sluts better stay away from cyber monkey His 2 inch dick is all MINE!!!!

    --
    Trust god and don't fuck your camel!
  74. Re: Posting messages to people you don't know by Omnifarious · · Score: 1
    Geez, another Friday night wasted posting messages to somebody I don't know. Every time this happens I tell myself I'm never reading /. again.

    Seems to me to be one of the myriad of ways of getting to know someone is by posting messages and seeing how they respond. :-)

  75. Kids these days by goingware · · Score: 2
    Use auto_ptr and other templates from the STL.

    Garbage collection is for kids who haven't learned to reference count.


    Mike

    --
    -- Could you use my software consulting serv
    1. Re:Kids these days by ungerware · · Score: 1

      Kids these days... Automatic register allocation isn't for real programmers!

      Seriously, auto_ptr and template tricks are great, but you still need either careful management or an automatic collector to handle reference cycles. Reference counting misses those.

      Admittedly, there are a lot of applications for which garbage collection in its current incarnations is inappropriate. However, there are even more applications for which it is. I also think it's quite likely that several years down the line we will look upon garbage collection the same way we look at register allocation now.

      When C was first being developed, assembly programmers were very resistent to the compiler doing registry allocation. That's why the register keyword was put in the spec. How many people use it now? Not many, because the compiler (after a few iterations) did a really good job of register allocation.

      Now that runtime systems (like Java) are being developed to do automatic garbage collection, C++ programmers are equally resistent. As runtime systems get better (and perhaps GC gets embedded in hardware, but that's a whole other debate), it's quite likely they will do a really good job.

      --

      -----
      Kvetch is Yiddish for "throw an exception" --Dr. Ron Cytron
    2. Re:Kids these days by hding · · Score: 1

      I'd say that most Lisp and Smalltalk (and many other) systems already do pretty good automatic garbage collection (and not the reference counting type that can cause memory leaks), and have done so for some time. Nor does using this type of strategy for memory management slow things down much (if at all) - that seems to be mostly a myth caused by the state of garbage collection decades ago. While no one will deny that there are places where manual memory management is necessary, I think that for most higher level applications it is not.

      A nice page of pointers to more information on this is at: Xanalys' Memory Management page

  76. Re:Better programmers? by El · · Score: 1

    Uh... you wouldn't happen to be a MICROSOFT developer, by any chance, would you?

    --

    "Freedom means freedom for everybody" -- Dick Cheney

  77. Re:Suggestions for better software by jandrese · · Score: 1

    I know I'll be modded down for this, but I have to say it:

    IMHO Mozilla is a perfect example of the "beauty" weakness in open source. Not all code is pretty, not all code SHOULD be pretty. I've seen lots of people (particularly academics) that focus a lot more on getting the most elegant or most technically correct solution instead of the one that works the best in real life. Mozilla has a beautifully designed interface system, that is scriptable and modifiabe...that takes a full 1/2 second to draw a menu on a PII 400 with 128MB of memory. I've not seen menus move this consistanly slow since my Mac LC (16 Mhz 68020 w/4MB of memory) days. In addition, Mozilla has taken approximatly forever to write (granted a web browser is a pretty compilcated thing to write).

    Yes, I know the mantra: put out (code) or shut up, but quite frankly, I'm only one man, I can't contribute code to the dozens of programs I use regularly (although I do file bug reports whenever I can get a good backtrace and reproducable crash).

    Beautiful code is one thing, fast and useful may not be be the same.

    Down that path lies madness. On the other hand, the road to hell is paved with melting snowballs.

    --

    I read the internet for the articles.
  78. Re:Right, now where do I find people to mentor? by puetzc · · Score: 1

    If you are looking for 'mentees', start with your local Linux Users Group (or Windows Users, or Mac Users (or Amiga BSD users if you like)). Especially with Linux, you are likely to find some imtermediate level users who are ready to learn new skills and move to a higher level of computer usage. If the group you find consists completely of college aged CS majors, encourage them to expand their membership, taking in some high school students, or technical professionals from local companies who are interested in improving their skills.

  79. Testing by El · · Score: 1

    Developers testing thier own code is unproductive, because any situation they can think of to test, they would have already handled in the code. The proper way to test is to provide input the developer wasn't expecting; naive users are much better at this than programmers, who have learned to limit the things they do with computers so as to prevent crashes. Hence the need for Alpha and Beta releases...

    --

    "Freedom means freedom for everybody" -- Dick Cheney

    1. Re:Testing by dynoman7 · · Score: 1

      I'm not implying that Alpha and Beta releases to users are a bad thing. I am saying that an independent test entity, which is involved in the overall development life cycle, is a very important piece to the puzzle of robust software. IMHO, going from Unit Test straight to Alpha is risky because of users and their expectations about releases. You wouldn't release a new motherboard with only testing the individual chips mounted on it, would you? There is an inherent complexity to these applications. Developers may glue those applications together, but Test determines the strength of the integration effort. You can't have robust systems without Test.

      -Dynoman7

      --
      Blarf.
  80. object oriented learning by kaije · · Score: 1

    Don't teach them to program at all--teach them to solve problems. After you have a sensible solution strategy, expressing it in the syntax of a given programming language is trivial (boring) work.

    Amen to that. What has repeatedly disgusted me about education in the US is the dependence on procedural modes of teaching. When I began learning HTML in 1996 I almost went out of my mind at the sheer amount of useless 'web secrets' sites that merely regurgitated secondhand 'do this...' information. I was fortunate enough to stumble upon zeldman.com, but years of procedural education prevented me from making the best use of his wonderful information.

    As redundant as it sounds, most of us need to focus on learning how to learn. Are there any books on object oriented thinking?

    A Student of/for Life,
    Ethan

  81. You're mistaken about what itches by steb · · Score: 1

    Open source is a terrible way to develop software, except when compared to all the others. While it's true that "big" contributors to open source software want to contribute a big feature, open source is largely about the ability to scratch an itch. Lack of big flashy features don't generally itch, problems with existing features I want to use do. I've contributed minor bug fix patches to a number of open source projects but I doubt I will ever contribute a patch to mozilla. Why? Bandwidth. Downloading and building the entire source for mozilla is a complete PITA. Here's an idea. Configure build environments so that individual source files (and maybe include files) can be downloaded from CVS, compiled locally and relinked into their appropriate shared libraries. A lot more small itches would get scratched that way.

  82. I agree... teach algorithims by zaius · · Score: 1
    I think what more programmers/hackers need to learn is algorithims. I don't mean they need to memorize search/sort/join algorithims (although they can if they want), but they need to get comfortable with writing out ALL the algorithims and function/control diagrams and data structures for a program before they write a single line of C or whatever they're using.

    I learned this myself a year or so ago, and since then all my programs have been [more] neat and tidy.

    1. Re:I agree... teach algorithims by affenmann · · Score: 1

      Not just: Teach them strategies how to construct algorithms.

  83. A travelling programmer came to the cubicle... by Jeremy+Lee · · Score: 2

    A travelling programmer came to the cubicle.
    "I seek Elegance" he said.
    "Why have you come here?" asked the Master.
    "Because I have read much of your code, and it is elegant. I have come to
    find the source of it, so that I may write good code also."
    "Then you have come to the wrong place." said the master.
    "But are you not the writer of the code?" said the programmer.
    "How did you know the code was elegant?" asked the master.
    The programmer was enlightened.

    --
    Jeremy Lee | Orinoco
  84. More helpful tips for you by goingware · · Score: 2
    While I was out for a while I thought of a few more things to post that should have been included in the above.

    While I don't think either of them were really overtly trying to mentor me, I owe a lot of credit for what I know and what I can do to a couple of brilliant programmers that I've had the privilege to work with. Both of these fellows are very kind, pleasant people and went out of their way to help me. They also both go out of their way to write correct code, as opposed to, say, just screwing around with it until it sort of works.

    I met Haim Zamir at Live Picture (now MGI Software) in 1997 where I really began my C++ effort in a serious way (I tried it in 1990 to write test tools at Apple but didn't really enjoy the experience). Have a look at Haim's Resume, particularly under "Skills" where he lists:

    Well grounded in disciplines of software engineering for correctness, robustness, performance, and longevity
    Haim can write the most difficult code, and it doesn't just work right, it is unquestionable.

    Another brilliant programmer is my friend Andrew Green. Andy spares no amount of effort to get his code just right - he devoted nine years to developing the ZooLib cross-platform application framework before releasing under the MIT License. (Not five years as I say on the page.)

    If you think being correct, as opposed to merely working ok isn't important, imagine trying to get platform-independent reference counted smart pointers to work in a multithreaded application framework. Andy did.

    For an archive of anecdotes of interesting, funny and sometimes tragic technology quality problems, please read:

    Reading Risks for many years is what has made me such a zealot for software quality. It has also made me tend to avoid using software for anything of real importance in my life, and to feel uneasy while flying aboard modern aircraft - even though, with a B.A. in Physics, I am very comfortable with the aerodynamic principles that hold airplanes up and used to enjoy flying as a kid.

    If you write software, another good investment (more important than your hardware investment), is buying and reading good books. As a software consultant I keep the canceled checks and receipts for my technical book purchases; in 1999 I deducted about $750 worth of technical books from my taxes and about $250 in 1998.

    But there are a lot of bad software books out there; much as there was a gold rush due to the Internet, there was a smaller-scale gold rush for technical book authors over the last couple years. A really good source of straight-talking book reviews by people who have good reason to know what they're talking about is maintainted by the Association of C and C++ Users at:

    The ACCU is interested in more than just C and C++ these days, if you program in those languages, Java or (dare I say it) C-sharp you should join. The mailing lists is pretty low traffic and has some of the best signal-to-noise ratio of any list I've seen (except Risks). The ACCU's technical journals, with articles written by the members, are a valuable source of information on such things as how to write exception-safe code.

    (Note to CowboyNeal - writing C-sharp with the pound sign set off the lameness filter, driving me damn near out of my skull. How about adding something to the preview to let us know which characters are lame, exactly?).

    And good news for those of you across the pond (but bad news for me), it's a British organization and holds regular technical conferences. I believe they also send observers to the ISO standards bodies.

    If you program in C++ you should read these two books by Scott Meyers and put them to practice in your code. Read each item one at a time and then go through your code from beginning to end to see how you can apply it:

    After reading Effective C++ and More Effective C++, if you're programming with g++ (or using gcc to compile ".cpp" files) then you should use the -Weffc++ option to g++ to warn you about style problems. From the GCC Online Manual:

    -Weffc++ (C++ only)
    Warn about violations of various style guidelines from Scott Meyers' Effective C++ books. If you use this option, you should be aware that the standard library headers do not obey all of these guidelines; you can use `grep -v' to filter out those warnings.
    Importantly, in any language, make sure your code compiles cleanly without warnings with all the warnings enabled in the compiler - use the -pedantic option in gcc.

    C++ is not the problem language it's often said to be if you follow Meyers' advice, but if you prefer C you certainly can have problems there too - and note that the preferred language for Gnome is C (while KDE is an extended C++), for C programmers you should read:

    People who write in any programming language, from assembler on through C and way out to prolog, really should go back to our roots and read the early book:

    Sadly, this book is out of print, but see the "E" Titles Section at ACCU for other Elements of Style books.

    Back to the topic of compiler warnings, remember reading about lint in Kernighan and Ritchey's The C Programming Language? When I started out in my first real programming job, doing Sun system administration and writing image processing software back in the late '80's, I learned to write "lint" targets in my Makefiles, and I'd type "make lint" after editing but before compiling to actual machine code. This made my code much easier to debug and quicker to develop.

    Much of lint's function is now available in the warnings of GCC (but I don't think all of it), but there are some proprietary products that will do extremely rigorous statis analysis of your source code. I haven't yet used either (although I plan to) but the two I know about are:

    Looks like I missed one when I spoke about Bounded Pointers for GCC, Spotlight, etc. in my previous post. Parasoft offers:

    But note that these products use patented algorithms - number 5,581,696 and 5,860,011.

    You can search by patent number here.

    And speaking of web programming, many Slashdot readers write web applications (Linux being a "server OS" as they say). How many of you validate the HTML that's generated by the web applications you write?

    Your HTML should work well in any browser and it should be well designed for easy usability. I don't mean attractive graphics. I mean it shouldn't suck. Two links on design:

    Finally, to make sure your HTML is valid, test it with the W3C HTML validation service. You have two choices of how to get your documents processed:

    Try this link for an example of running a popular web application through the W3C validator.


    Mike

    --
    -- Could you use my software consulting serv
  85. Re:Be flexible by BeanThere · · Score: 2

    I think the main reason that programmers start new projects instead of contributing to existing ones is simply that programmers naturally just want to rewrite everything. Its more fun. They would rather rewrite something than use somebody else's component. I think when one is trying to use someone else's stuff, one tends to often think "this is not exactly how I would have designed this" or "I would have named this function differently" or "I can write a better class than this" etc. It often also *seems* easier to rewrite something than to learn how somebody else's code works. This problem can be alleviated by teaching programmers to be disciplined about documenting their code nicely. But quite frankly it is usually more fun to write something yourself (the fun part is solving the problems) than wading through documentation learning how to use somebody else's existing solution.

    I believe the OSS world could benefit a lot from an attitude change, more people working together. Take a look at just how much effort is being duplicated just between KDE and gnome. So rather than having one good 3d modelling program that rivals 3DSMAX, we have 5 or 6 crummy ones. Rather than having one good development environment that rivals Visual Studio, we have about a dozen (ranging from crummy to mediocre). Rather than having one good DirectX-equivalent, we have about half a dozen (ranging from crummy to fair.) And I think it makes it that much harder for newcomers to join a project. For example, I'd like to contribute to building a Visual Studio equivalent, but quite frankly, I'm stuck in indecision as to which of the several contenders might succeed. It seems impossible to predict. Perhaps this also causes people to start new projects - they see that there are 5 or 6 *crummy* ones, so they think "we need a *good* one", and off they go starting yet another mediocre project. Gosh, I'm rambling now.

    It doesn't always turn out like this though - some projects are clearly "the" projects in their class, e.g. Apache, GIMP. I wonder why .. ?

  86. My own efforts to help other programmers by goingware · · Score: 5
    First, my effort to improve the quality of free software can be found at the Linux Quality Database. While the database hasn't started being written yet, I have started writing articles on the top of quality assurance and writing better free software. The first such article actually to be posted is Using Test Suites to Validate the Linux Kernel.

    For quite some time before that I have been writing GoingWare's Bag of Programming Tricks, a collection of articles on the business and practice of programming. Of most interest in learning how to program well would be:

    I worked on an article on C++ programming style that is not done yet, and has some errors in it. But I'll post the URL here with the understanding that you're to take is as a preview and not gospel truth:

    Finally, if you program in C or C++, you need to be using one of the following tools, appropriate to your development system and platform:

    If you use Java, you don't have to worry about dangling pointers, but you do have to worry about memory leaks (quiz: why do you in a garbage collected language?), deadlocks and so on. For that we have:

    Don't let another day pass without availing yourself of one of these tools. I know most aren't Free Software and some are very expensive. I want to tell you that the money I spent on Spotlight is some of the best money I have spent on anything in my life. I wouldn't dream of shipping a Mac application to my clients unless it tested completely cleanly under Spotlight; on the other hand, the first time I'm given a client's code to work on, Spotlight usually reveals a multitude of sins.


    Mike

    --
    -- Could you use my software consulting serv
  87. But that's not FUN by dissipative_struct · · Score: 3

    Presumably, people who write Open Source code are doing it for their own enjoyment, which means they will tend to concentrate on the things they enjoy (adding new features) not the things they dislike (debugging someone else's code, documentation). This is one area where I feel the Open Source methods can be weak... there's no real imperative for quality control, since everyone's doing it for the enjoyment. A prestigous project may be able to enforce some quality, but for smaller projects, I can't think of any way to induce people to concentrate on the necessary but boring tasks as opposed to the fun (and maybe not necessary) tasks.

    1. Re:But that's not FUN by GypC · · Score: 2

      This may be a weakness, true, but since the source is open if a truly useful program sucks in certain ways it will eventually get fixed by whatever hacker loses patience with it first :)

      The Bible is not my book, and Christianity is not my religion.

  88. hahahahahahahahahahahahahaha by Anonymous Coward · · Score: 1


    so true... but then the slashcoders would have to admit that they all know almost nothing about real database work...

    1. Re:hahahahahahahahahahahahahaha by Anonymous Coward · · Score: 2

      you assume they use a real database -- which they don't. MySQL is a real database like a Camaro is a real sports car.

  89. One simple "trick" for not sucking by Wordman · · Score: 4
    Most of you will read this suggestion and snicker at it. I know I did when I first heard it. I've since learned how blind I was.

    There is one simple thing you can do to make your code a lot better. It takes a bit of discipline, but once you do it for a while, it becomes second nature. It is this: whenever you write new code, make sure that you walk through every new line with a debugger. That's it.

    At first blush, this seems kind of like a "duh" sort of step. After all, most people run their code through a debugger to check it. The key to it, though is the phrase "every line". Put breakpoints in every branch of the code you write. When you get into that branch, remove the breakpoint. When you think you are done, check for any breakpoints that are left. I was extremely surprised the first time I did this. I thought I had been thourough, but I hadn't checked three different branches. And there were bugs in two of them.

    What I have learned after doing this for a number of years is that programmers pay more attention to the important part of a loop or branch and ignore the fringe cases. What ends up happening, then, is that the fringe cases contain a proportinally large number of the bugs. Worse, because they are fringe cases, they don't happen often, leading to bugs that are hard to reproduce.

    1. Re:One simple "trick" for not sucking by electric_penguin · · Score: 1

      Writing your own debugger for your language is left as an exercise for the reader.

  90. C.S. H.S. ? by SEWilco · · Score: 1
    "...Computer Science department at a high school..."

    That's quite a high school. Are the Computer Design, Semiconductor Physics, and Electronic Engineering departments nearby?

  91. Programming has nothing to do with schooling by NineNine · · Score: 1

    Most professional programmers that I know of have never taken a single computer class. Most good professional programmers are good because they work hard, learn what they need to know, and make the programs work.

    In addition, many professional programmers have no time to write 'good' code. Taking time to write something elegant or pretty is simply not an option if you want to stay employed, in many cases. In many professional projects, there's barely time to make code that works, never mind code that's 'great'. That's just a fact of life. Most college computer science kids never get this. That's why you don't see too many comp sci people making the big bucks as professionals. Being a successful programmer isn't about great code. It's about pragmatism.

    1. Re:Programming has nothing to do with schooling by Lt · · Score: 1

      While I will assert that great programmers are "born", what college gives the average programmers, is a sense of what had already been done, and what is imposible. Notice how many psuedo-random one-time pad generators are created every year, by people who didn't do the proper research. College at least forces you to have minimal exposer to say Big-O, Godel's Theorem [?], Data Abstraction, CPU and Memeory Architecture, etc. College is not a requirement for briliance (if your of the Good Will Hunting type, but for most of us it gives us an advantage.

    2. Re:Programming has nothing to do with schooling by NineNine · · Score: 1

      I've been a professional contract programmer for years, and I've never seen a company who'll let an employee take time to figure out the elegant way of solving a problem. It's just not realistic. Generally, if it works, it works. It's just not a luxury that most companies can give their employees (whether contract or 'permanent'). Gov't agencies and universities are good about this, but most programming projects that I've worked on focus on getting the project out of the door, ASAP. If I were to take an extended amount of time to solve a problem, generally, I'd be out the door.

    3. Re:Programming has nothing to do with schooling by Neumann · · Score: 1

      I admire the person who can sit down for two days, learn the essential elements needed for the task at hand, pound out a bunch of code and have it running fairly smoothly. I admire even more the person who spends a month researching all aspects of a topic, thinks about several different solutions to his problem, laboriously works through his code, tweaking it thoroughly, develops a beautiful structure, excellent documentation and clear, elegant code But who would you rather pay $100 a day to?

    4. Re:Programming has nothing to do with schooling by Lt · · Score: 1

      Make that link to Godel's Theorem, EveryThing2

    5. Re:Programming has nothing to do with schooling by sql*kitten · · Score: 2
      Interesting...I've worked at companies like TRW, IBM, and Raytheon, and I think 95% of the professional programmers I worked with had CS degrees.

      In my experience, engineering and math graduates make better programmers than computer science graduates. The problem is that CS types know a lot about "using a computer to solve a problem", but not so much about "solving a problem, then implementing that solution with a computer". It's the latter that's valuable in the industrial/commercial world.

      My $0.02, and YMMV.

    6. Re:Programming has nothing to do with schooling by fizban · · Score: 1
      Guess you didn't go to school, huh?

      Most computer science "kids" know better. They realize that programming is just one aspect of a bigger picture. They are being trained in the science of software engineering, not just programming. Some fail in this, but most come out of these programs with excellent training, especially if it's from a major University.

      The idea that we should program to "make it work" causes more problems in the software world than any other item. If we spent time analyzing our work, developing more elegant solutions and thinking about the future effects of our immediate development efforts, we'd have much stabler, faster, and overall better working software than our counterparts who just do it to get it done.

      I admire the person who can sit down for two days, learn the essential elements needed for the task at hand, pound out a bunch of code and have it running fairly smoothly. I admire even more the person who spends a month researching all aspects of a topic, thinks about several different solutions to his problem, laboriously works through his code, tweaking it thoroughly, develops a beautiful structure, excellent documentation and clear, elegant code.

      And to say that it's not possible to stay employed working in this manner is not true. It's only a problem if you work at a company who doesn't understand the realities of bad software development. And you've seen where most of those companies have gone in the past 6 months...

      --

      --

      +1 Insightful, -1 Troll. What can I say, I'm an Insightful Troll.

    7. Re:Programming has nothing to do with schooling by fizban · · Score: 1
      The one who spends time developing a better solution. The cost savings will be realized in the long term.

      --

      --

      +1 Insightful, -1 Troll. What can I say, I'm an Insightful Troll.

  92. Re:I tried this with assembly coding, once by Maserati · · Score: 1

    as a senior Mac tech, guys like that keep me in steak and whiskey

    --
    Veteran, Bermuda Triangle Expeditionary Force, 1992-1951
  93. And speaking of SIG's by MeowMeow+Jones · · Score: 1

    Why are they 120 characters instead of 128?

    --

    Trolls throughout history:
    Jonathan Swift

  94. That's just mismanagement by SnakeStu · · Score: 1
    This isn't a cold, hard fact of life, it's a cold, hard symptom of mismanagement. Any manager worth his/her position knows how to do the work, but does not do it because his/her knowledge is better applied strategically than tactically. The same can be said of the mentor in this case.

    Using your productivity percentages, you have two scenarios: The 100% productive person does or does not mentor the 50% productive person. If the mentoring does not take place, you're guaranteed a continuing productivity of 150%. If the mentoring does take place, you're stuck with a 75% (or less) productivity for the short term but a 200% productivity in the long run.

    If you "don't have time" to make strategic investments, you're simply mismanaging the situation. If you think you can bring on someone who needs no mentoring at all, you have one of two problems: a) It's true, because your situation is so bad that any Joe off the street with technical skills and no knowledge of your business can be 100% productive fixing technical flaws in your system, or b) It's not true but you're ignoring the mentoring that will be required to give the new person non-technical knowledge (i.e., the business background so they can understand how to apply their technical skills). The only people who truly need no mentoring (when there are not abundant, glaring flaws in whatever you're working on) are those people already working on the system.

    Given that non-technical business background knowledge can take a lot longer to acquire than some technical skills, there are certain positions (e.g., Web development) where I would rather take a non-technical person already in the business with all of the background knowledge in place and mentor them technically, than pull in a "tech-ready" new hire who has no clue about the business, the corporate culture, etc., and lacks internal contacts and such that augment the technical side of things. (This clearly doesn't apply in all areas -- for something like assembly programming for embedded systems I would probably take the opposite approach.)

    1. Re:That's just mismanagement by gus+goose · · Score: 1
      Quoting the controvercial is a /. "thing". Devil's advocate is useful at times to generate discussion.

      With 5 replies it is difficult to chose which to reply to.

      I have worked in contract positions in many companies, and have pretty much experienced the extremes of both sides when it comes to eomplyee training.

      It is easiest to see when you considder the differing management attitudes toward employees and contractors. With contractors it difficult to see the investment value of mentoring a contractor.

      With an employee, the attitude changes. In a number of cases I have been brought on with part of my contract being to "share" my knowledge. This is a direct investment by management in a mentoring program. Still, though, when the 11th hour strikes, and the project is behind, management invariable puts the mentoring on the back-burner, and sends everyone off to battle stations. Typically, that puts the "mentor" out of touch with the trainee.

      Thus, my argument that when time is a constraint, mentoring dissipates.

      --
      .. if only.
  95. http://www.programmingtutorials.com by The+Blackrat · · Score: 1

    great site for ultra newbies such as myself

  96. Right, now where do I find people to mentor? by Blackjax · · Score: 2

    I agree with the concept and began doing this last fall, however I have only been able to find one student. I've approached teachers at a local university about sending me people who might want some free tutoring, but I was met complete silence. Does anyone have any suggestions for good ways to connect mentors and students?

    If anyone out there in /. land is in the NYC Metro area and wants some help with Java, let me know.

  97. Be flexible by ClosedSource · · Score: 1

    "Every new project represents a coder who wants to write free software, but chooses not to work with an existing project for whatever reason."

    One of the reasons for choosing not to work on a project may be the rigidity of low-level coding standards. Naming conventions, indentation style, bracing style etc. may have more to do with our ego and our compulsion for order than it does with good programming practice.

    If a project lead is less anal about these rules, it encourages other programmers to participate since they don't have to follow arbitrary religious beliefs.

  98. Organization by sabaco · · Score: 1
    (Sorry if somebody posted about this already, but I browse at +4 and didn't see it... if its there before me, mod it up. :)

    Number one thing almost all OSS projects I've been with is lack of organization. Often times its hard to make heads or tails from the source. I never expect people to actually comment the code well (as well as they should anyway), but the organization of the code is really fairly bad.

    Often times there is a large section of code used repeatedly in a program, which is intended always to do the same thing (such as getting player info from an id number or something). Rather than writing a function (so that the code would always be in one place and its purpose obvious) they instead scatter the same code several times throughout the program. That way, without commented code clearly explaining what is happening, it may not even be obvious that the code is doing the same thing. Is there something special about this instance? Some detail that is different? No, just repeated code. Then suddenly someone needs to change it. Rather than simply going and fixing the one area that has the code, now you have to find every section all over the code and fix it.

    This same problem also reflects itself if you are trying port the program, for example from MySQL to PostgreSQL. Ideally the database layer would be mostly hidden from the program itself. Perhaps there is a section for db specific libraries or whatever, but usually the databases are accessed directly in the code. The explaination given is often "I'm using some features that other databases don't have". This is a pretty rediculous answer though, because that only makes it more important to isolate the database specific information. Often times the differences can be made up for programmatically, but its clearly going to be easier if the database code is seperated than if it is intermixed with unrelated code.

    Perhaps this should be called modularization, but I think that there are many other areas that could use organization as well. For example, the data structures are often totally disorganized. Classes have come a long way in helping that, but its still a problem in a lot of programs.

    Really, I suppose the key problem is that programmers often learn syntactically how to program, but not stylistically. Most of the newer programmers I talk to know all the functions, but they don't think algorithms and data structures are so important. Why should they since outside of a good CS class you almost never hear anything about them. We need ORGANIZATION and STYLE guides for newbie programmers most of all.

    --Braeus Sabaco

    --
    This is SO educational! -- Kintaro Oe
  99. Re:The problem with bad code by dmeiz · · Score: 1

    Currently I'm expanding upon a project that has a few thousand lines of code, and it's hardly documented.


    the question then becomes: are you adding the missing documentation? i bet you aren't. and neither would i.

  100. IDs are non-relational? by foxed · · Score: 1

    So, when the name of the record company changes from "CBS" to "Sony" we have to update thousands of records?

    An ID can remain unchanged forever. Ted Codd, the inventor of the relational model, thought IDs are so important he made them built-in, i.e. mandatory, in his book The Relational Model for Database Management Version 2 (Addison-Wesley, 1990). If he can't say what's relational, who can?

    In what way are IDs non-relational in your point of view?

  101. The Software Artist by bwilcutt · · Score: 1

    Software engineering is hard. Very hard. Did you know software people are considered to be #2 on the 'Smartest People' IQ list? (doctors being #1). The average software engineer IQ is 130 (source: www.mensa.com), which is well above average (108). Anyone can write a program, big deal. The vast ocean of Visual BASIC Programmers proves that (Beginners All-purpose Symbolic Instruction Code). But only a few can write software. Too bad none of them work at Microsoft. Bw

    1. Re:The Software Artist by supersnail · · Score: 1

      Profesional musicians (excluding drummers!) have much higher than average IQs as well, but, having a high IQ does not imply you will be a great musician.

      There is more to programing than being merely intelligent. Good programers have highly developed problem solving skills, pattern recognition skills, and, enormous short term memories among other attributes. In the stone age when I first started it was standard practice to give job applicants "aptitude" tests. These were a surprisingly accurate predictor of how well a person would perform as a programmer.

      Until people admit that a large part of what makes a good programmer is simply not teachable, a lot of time, effort and money will be wasted producing "highly qualified profesionals" who are loosy programers.

      --
      Old COBOL programmers never die. They just code in C.
  102. Re:Suggestions for better software by JamesOfTheDesert · · Score: 1

    Wow. Sounds almost exactly how IE is designed: a collection of scriptable objects. Of course, you can use any scripting language that understands COM, not just ECMAscript. Interesting coincidence.

    --

    Java is the blue pill
    Choose the red pill
  103. Re:No-nonsense SW Development Process, version 0.0 by matsh · · Score: 1

    "Make sure you buy or use open source" applies to in-house projects only, of course.

    And "make clean;make" was a recommendation, not a rule, just because of the reason you mention, since it can take too much time. We use make + Java, and it I'm not sure it works that well. Is Ant the solution?

    http://jakarta.apache.org/ant/index.html

  104. Hey Instructors/Professors! by guisar · · Score: 3

    I'd suggest all of you who teach at any level to encourage your students to contribute to an on-going open source application as their class project. I do this for my web enabled database development class for UMASS and I think if nothing else it's exposed a lot students to a cooperative method of developing software.

    If you take this route you'll be rewarded and they will also as their project will live on instead of being part of the academic waste heap.

    I also had my eyes opened- most of my students work in the "industry" but maybe 10% of them are aware of open source or what Linux, BSD et al are all about. If nothing else, you can use your classroom to spread the good word.

    Justin

  105. IQ by z00t · · Score: 1

    Average IQ = 108?

    I thought that by definition the average IQ was 100.

    ----
    Off topic aside: I once received a set of puzzles and 'mind' games published by Mensa as a gift. They didn't hold much interest for me, and shortly thereafter I moved. Moving always involves ridding oneself of detritus (like puzzles), so I scheduled a pick-up by the local charitable organization for my box of Stuff That Somebody Might Want.

    It was only as they drove off that I realized I'd just donated a collection of Mensa puzzles to the local Association of Retarded Citizens.

  106. A word on test by dynoman7 · · Score: 2

    I think we should be teaching kids how to be better independent testers as well as better programmers...it will cost everyone less time and money in the long run if there is a good plan for independent integration test, requirement verification test and system test. Just think of all the X.Y.Z releases we could avoid by having robust testing during the entire sdlc...Unit test is fine, but you can't think of everything yourself.

    Consider the quote from Vanders (found in Pt 1 of Making Software Suck Less)

    "...why is it that so little OSS software goes through any sort of structured testing phase?

    Most testing of OSS seems to be:
    Developer can compile & run code. Unit testing
    Developer releases code as an "Alpha". Component testing
    Fixes bugs, releases "Beta". System testing
    Fixes bugs, releases final build. Testing over!

    Sorry, that isn't a proper structured testing scheme. Beta & Alpha releases are no good other than for limited releases. If you don't know what uses your users are putting to software too, some features may never get tested until it is too late.

    Developers seem to view testing as a neccesary evil, but are happy to release fix, after fix, after fix for eternity, rather than writing & following a test plan. Honestly people, it saves time in the long run! "


    -Dynoman7

    --
    Blarf.
  107. Programming isn't Just About Functionality by The+Infamous+TommyD · · Score: 2

    Over and over, we see people talk about programming and how to improve the coding that's being done. One thing that the current system emphasizes is that code that just works is OK. i.e. given ok input, we get good output

    One problem I see is that we don't penalize people when they write something that takes bad output and produces unexpected results. i.e. how many of your programs can handle random input without crashing or worse? Got fixed length buffers? Ever think about what happens if the file your code depends on is suddenly changed by someone else?
    This is why systems crash. This is why security is so poor in software.

    The teaching system rewards code that works but doesn't try to penalize code that has extra unintended features.

    1. Re:Programming isn't Just About Functionality by mark_lybarger · · Score: 1

      This is so true!
      One of my first assignments out of school was to write a "reformatter" because a file format from the vendor was changing. It was a horrible mess of FORTRAN, but got the job done, for about a year anyway, until the format changed again. I quickly learned the power of perl, and put it to use.

    2. Re:Programming isn't Just About Functionality by john_many_jars · · Score: 3
      Excluding multi-process/multi-thread timing conditions, politics of design, promises made by salespeople, and ill-formed specifications, this is a reason why systems crash.

      My current project at work has a very fluid specification. I cannot tell you what is garbage and what is good for a particular module until the module is written and given for inspection to those who are designing the overall process to use the software. That means I have to make guesses about something I know nothing about so as to make a design that will work with something. All I have are guidelines. Should the guildelines change a week before delivery, in goes the fix--sans testing and sans rational design philosophy. In a word, I knowingly write shoddy code to fit political design decisions to meet deadlines set by ill-advised individuals who know not the first thing about how a computer operates.

      Quite possibly, the single biggest problem with coding is the concept of a deadline. The second, almost because of the deadline, is the "I'll figure that out later" philosophy. Without a full blueprint of an application or system, (hell, I'd be happy with an accurate spec once in a while) it is impossible to make sound decisions. Ergo, bad software.

      What you speak of are luxuries to your average code-for-a-living individual.

      PerES Encryption

  108. Software apprentices by cavemanf16 · · Score: 1

    Sounds like chromatic is describing the old system of apprenticeship as a means to developing good programmers as it has existed since the beginning of civilization. I for one, am all for this idea. The hacker approach can be sloppy for large projects if not done properly, while the theoretical learning from a comp. sci. student can sometimes not make sense in the real world when quick fixes are needed that can only be tackled with some quick and dirty code. Of course, everyone learns differently, but this is definitely a way of learning that I think is all too often overlooked as a positive option.

    1. Re:Software apprentices by chromatic · · Score: 2

      I tried to avoid the term 'apprenticeship' because it might bring to mind unpleasant connotations, and because it assumes that all people being mentored are less capable programmers than their mentors.

      Interestingly, the Perl 6 community has had a similar proposal since I wrote this article. The objective there is to get capable programmers familiar with Perl internals. It's possible to help out beginning programmers, too, but someone who already knows how to code fairly well could get into the guts of the regex engine or optimize pp_hot.c better with guidance from someone who's already been there.

      (OT Sig comment: If I could pick a guitar mentor, it would be Michael Roe.)

      --

  109. Re:Suggestions for better software by Vanders · · Score: 4
    For a troll, I have to agree with you. Open Source software very rarely seems to go through a proper build, test, fix stage. They just throw the software out to the users and let them find, and in a lot of cases fix, the bugs. This isn't good.

    I'm a software tester by trade, and I code in my spare time. There are some cardinal sins that any peice of software can commit. They tend to be:
    • Not having a clear set of features that you want in your code for at least version 1.0
    • Not writing proper specs before any code is written
    • Not having testers, or having testers and not listening to them
    • Not having a defined roadmap or plan. At a minimum, this should cover the planing, and upto the second build of your software
    Now on smaller projects, it's usually fine to sit down and start coding. With larger projects, you're going to be royally screwed about 50% ofthe way through your project, when you find you'll have to re-design part of your project to add functionality you didn't know you needed.

    If you don't have testers (And no, outside of unit testing, the coder cannot teste their own code properly!) your software will be full of bugs you just don't know are there, until your users start using the software under normal conditions. You'll then find you need to recode large parts of your software to fix even small bugs.

    Release early, release often, is good provided you have proper controls in place before your first release!
  110. Re:Suggestions for better software by Lucretius · · Score: 4

    The problem that you speak of is not new at all, and is definitly not confined to the realms of computer programming. When it comes right down to it, nobody wants to do the dirty work that is required to get a project done (i.e. bug squashing, documentation, general project managements) , they would rather go out and do the new and fun stuff (which in this case is adding new features).

    This is just a fundamental flaw in human nature. People want to get all the glory and credit and nobody wants to do the background work that is required to make something actually work. Look at politics... everybody wants to be president, nobody wants to be his aides that actually run around and get the shit done (well, some people do, but most don't).

    This was also a problem in ancient Rome, when you actually look at it. Everything used to be paid for by donations from the rich folk. However, everyone wanted their money to pay for something big and wonderful that everybody loved (such as theathers and circuses, etc), but nobody wanted to pay for the smaller bits of infrastructure that held everything together, as they wouldn't be remembered eternally if they gave money for the roads to be resurfaced or for general maintenance of the aquaducts.

    Its the same thing with programming. Nobody thinks they'll get any credit for the bug fixes that they work out that makes the product actually work, they want to be known for the feature which they implemented (even if nobody actually needs it or wants it in any way).

  111. Re:I tried this with assembly coding, once by hugg · · Score: 2

    Ha -- you thought you could instruct him in the ways of the Jedi, and he turned to the Dark Side. Shame shame :)

  112. Re:Hey CmdrTaco! -- first lesson: by heller · · Score: 2

    The first lesson I believe you should offer is the concept of "right tool for the job".

    For instance, when you have a database that's supposed to be receiving many inserts (as say, one that accepts lots of comments for posts or changes to user profiles) it's a very bad idea to use database software which does full table locks.

    Right tool for the job.

    ** Martin

  113. I Was an Apprentice by ec_hack · · Score: 3

    My first real job out of college was with a small startup doing a turnkey system for medical labs on PDP-11s. I was an Astronomy BA with a couple of coding classes (FORTRAN, APL and PL/I) under my belt and a couple of summers working in the DP shop (COBOL, RPG II, and PL/I) of a Fortune 500 company as an operator and programmer. I'd read a few classic books on programming and software engineering. In other words, I knew enough to be dangerous.

    I joined a team of 4 other programmers that were under tight deadlines to rewrite a medium-sized database and reporting system. Despite the time pressure, the lead programmer/architect made me do a several month long apprenticeship under him, where all my code was reviewed by him before released. All the programmers that joined the company, no matter their experience level, had to do one also. It made me a better programmer, and it had the side effect of forcing a common style on the entire programming staff, easing maintenance. As programming is essentially a craft, an apprenticeship is a good way to learn from a master. Just make sure you apprentice from a master and not a poseur.

  114. Re:Suggestions for better software by johnnyb · · Score: 2

    I think you're forgetting something. Who are the testers of open source projects? The _users_. That's why they let untested software out to the users, because they _are_ the testers. If you don't want untested software, either (a) use well-commended versions of software, or (b), test it yourself. You might say "Oh, a commercial organization shouldn't have to test software itself!" But then you would be living in a dream world. Every medium-to-large organization has to test its software. If you pay millions of dollars to Oracle to get the latest version of Oracle Applications, then you, yes you, will still have to put in a LARGE amount of work testing. In fact, some releases of Oracle Applications are completely non-functional. AND THIS IS WHAT THEY ACTUALLY SELL TO END-USERS! So, as the user, you have to test free software. And you have to test proprietary software, too. Which would you choose?

  115. No debugger? by dstone · · Score: 1

    That is the stupidest crap I have ever heard. What if you don't have a debugger?

    Ok... I'll bite... If you don't have a debugger, you have no business writing code.

    Maybe you have a future in technical writing or user training. Or marketing. ;-)

  116. The Way of the Bard by Ricdude · · Score: 5

    A more applicable model might be similar to the way of the bard:

    Seven years learning
    Seven years playing
    Seven years teaching
    Repeat.

    The idea is that the would-be bard spends some period of time under the apprenticeship of one learned in the art. After acquiring some basic skills (melody, harmony, scales, etc.), and some examples of how to combine those skills (a repertoire of songs), the bard is then sent off to earn a living in the world. While doing so, the bard experiments with new ideas, merging them with the body of knowledge acquired from the master. After some time, the bard takes on apprentices, and shows them what they've learned from their master, and from their own experimentation.

    All too often, what's lacking in the free software world of half finished IMs and mp3 front ends, is the "combinations" of those skills. A lot of these programmers barely understand pointers and event driven programming, yet they're building full GUI programs as a method of learning more about how to program. Frequently, they bite off more than they can chew...

    --
    How's my programming? Call 1-800-DEV-NULL
  117. "Computer Science" at my school is a joke. by jrcamp · · Score: 1
    My state (South Carolina) requires a "computer science" class to graduate. Guess what they define "computer science" as? Microsoft Windows and Office. My highschool doesn't offer *any* real classes pertaining to programming, but they think they're really on top of this technology stuff. Unfortunately, they don't realize that there are other aspects of computing other than "point 'n click." Hell, weren't public schools teaching Pascal 10 years ago? I'd settle for a class in that.

    In the past, they have offered Visual Basic as a course, but it never took off because not enough people signed up for it. I didn't even sign up for it because I knew that one of the ignorant Windows/Office teachers would end up teaching it and it'd just be a waste of time. Hell, this teacher can't even get a decent webpage together:

    http://www3.teleplex.net/dhs

    Next year is my senior year. It's too late to get some real computer science classes incorporated into the curriculum, but I'm going to try and inform those in charge of the curriculum what a horrid job they're doing in the area of computers so that people like me may have a chance in the future.

    1. Re:"Computer Science" at my school is a joke. by Requiem · · Score: 1

      When I was in high school, the junior course was QBasic, and the senior course was Pascal. The guy I had was really competant; of course, this meant that he was eventually hired away as a school board consultant, and the students after me were stuck with a really shitty teacher.

      In any case, yeah, Pascal's a good language to learn. However, as far as sheer power goes, not a whole lot can beat C. I'm not a huge fan of C, but I'll often use it, just because you can do some incredibly cool shit with it.

      As for C++, if I'm going to write OO code (which I prefer to do), then I'll use Eiffel or Java. Eiffel has an incredibly clean syntax, and is much nicer than, say, C++. Java's fun because Sun's compiler is really nice and helpful (as opposed to the ISE Eiffel compiler, which is the only one I've used).

      If you're going to teach OO programming in high school, I think that Eiffel is the way to go.

  118. Danger Will Robinson... by Gadgetmeister · · Score: 1

    I agree that this is a lofty, laudable goal. Maybe there always needs to be a drive in this direction.

    Unfortunately, there are human beings involved. Some of these human beings, both on the mentor and student side, may seem quite nice on casual observation. Indistinguishable from people that are what they say they are, that they care about quality and learning and doing the right thing. Some of these individuals will stab you in the back. Some are incapable of 'getting it'. Some are much more interested in what your project can do for their resume than in actually doing the work. Some are, in addition, good politicians. Better politicians than you are. You can wind up royally screwed.

    In summary, I'd recommend that you choose who you work with carefully.

  119. Hey CmdrTaco! -- second lesson: by shagster · · Score: 1
    The second lesson would be desgin around the process not around the tool (Okay, ties into the first, but it still is important). If you are picking the right tool then this will not really be a problem.


    Writing software to accomplish a process will almost always force you to use the right tools and allow you to switch easily to a differnt tool if need be.


    Coding around problems with your design choices is just a bad idea.

  120. Re:Suggestions for better software by roman_mir · · Score: 1

    "Not having testers, or having testers and not listening to them " - as extreme programers believe there is no need for testers if you do your junit right :)

  121. Some software has to suck... by 11thangel · · Score: 4

    There are too kinds of software that you'll find on download sites. Software that is intended to get the job done and software that is intended to help the programmer learn wtf he is doing. You'll very often find more of the latter than of the former, but each plays its own role in the programming community. If you see a piece of software that sucks, dont just delete it, email the author and tell him that it sucks. Let him know what you think is good and bad, so he can learn. Who knows, you may be helping out a future alan cox.

    --

    I am !amused.
    1. Re:Some software has to suck... by Claric · · Score: 1
      Surley the reason some software has to suck is that you need software that sucks to have software that's good. If all software was good how would we know if it was good ?! We'd have no frame of reference ! To quote Beavis and Butt-head "You need stuff that sucks to have stuff that's cool"

      There are ways or making good software but I'm keeping my ideas to myself for now. I need my uni end of year project to have some originality.

      rgds, Claric
      --

      --
      There's no problem that cannot be solved with a suitable amount of high explosives
  122. Mod this up! by goingware · · Score: 2
    It's not the troll you might think it is from the subject line. I think it merits at least "Insightful".


    Mike

    --
    -- Could you use my software consulting serv
  123. What the W3C Says About Slashcode's HTML by goingware · · Score: 2
    I'm not much of an expert on databases, so I can't really comment on your offer to mentor Rob, but let's have a look at what the W3C Validation Service has to say about the slashcode:

    Click here to validate:

    I think the situation could be improved a bit by adding a DOCTYPE declaration at the beginning (for a DTD). DTD validation, yeah right.

    If you're writing files by hand and prefer to upload them for validation from your local hard disk, try this form.


    Mike

    --
    -- Could you use my software consulting serv
  124. You first have to define "sucks" by Ukab+the+Great · · Score: 2

    before you can tackle the problem of sucky software.

    There are different criteria for sucking. Most of what the article goes into (which is what most of the Linux world is focused on) is suckiness that falls along the lines of security holes, crashing, bloated code, inefficient algorithms, etc. But there are other types of suckiness that exist

    For example, to people who simply want to get their work done in an easy and efficent manner, software with an ill-designed, illogical, and confusing graphical interface sucks. To people who don't want to spend hours on end mainting their computer and updating and reinstalling things, software that easily breaks other software or easily gets broken by other software sucks. To someone like a cashier, software that was written by a programmer who has never been a cashier and has never processed data the way a cashier does sucks (take my word for it. I've been a cashier who's had to deal with sucky software. It sucks).

    I think part of the thing that is really dogging open source on the desktop is that many of the people working on open source software have a very limited definition of "sucks". As long as software doesn't suck according to their personal criteria, the software doesn't suck. Maybe it's time that the open source world took a good long look at The People On The Other End Of The Software(tm) and incorporate some of their ideas of suckiness.

  125. Suggestions for better software by atrowe · · Score: 4
    I've got a suggestion that I believe will help improve the quality of software, especially open source software. It seems that whenever an open source project is out there, coders seem to be overly focused on adding new features rather than improving/fixing existing ones.

    Have you tried to use Mozilla lately. It's loaded with bloat and crappy features I'd never want to use, but when it comes down to it, Mozilla is absolutely horrible as a web browser. When the Mozilla project was begun, I thought that it was an noble idea, and was eager to start contributing code, but I soon realized that human nature goes against the open source model by seeking out self gratification and promotion, often against the benefit of the group as a whole. This is an inherent flaw in the open-source philosophy. Everyone is seeking their own selfish gratification in being recognized for adding a new feature to a program, but no one is willing to try and make the existing features work properly.

    I'd like to see this issue addressed more often in programming circles, because something desperately needs to be done.

    --

    -atrowe: Card-carrying Mensa member. I have no toleranse for stupidity.

    1. Re:Suggestions for better software by 11390036 · · Score: 1

      Look at OpenBSD.
      BR> I will agree with you that bloat is majorly problematic. There are renegade groups out there though that do not succumb to this level. Don't forget that.

    2. Re:Suggestions for better software by Vanders · · Score: 1
      You're right, the users are the testers. But my point was, that there is no structured testing done.

      If your users need to be your testers, you could at least supply some form of test plan and ask them to try and follow it and report back. That way:
      • You can be sure that the testing being done at least covers all the functionality of the software
      • You can track what has and hasn't been tested in your software, and if need be, carry out the remaining tests yourself
      Maybe it's just a pipe-dream, but its something that is sorely needed in a lot of Open Source projets.
    3. Re:Suggestions for better software by Grab · · Score: 2

      Bloatware city.

      "Skinnable" sounds a lovely idea. Then you find that it gives you no consistent way of using an application. Borrow a friend's PC, and the button which prints a page on your version may close his window, or bring up his favourite pr0n page.

      "Cross-platform" sounds a lovely idea. Then you find that every program you write runs like treacle. Cross-platform at _compile_ time is reasonable; at _run_ time is just plain ridiculous except for some ultra-specialised niches (eg. Web applets). Computer scientists have gone to the "cycles are cheap" model - ESR's coding guidelines explicitly say this. Back in the real world, performance is important! A 0.1s delay for a menu to open is acceptable, a 0.5s delay is not. A search taking 10s is acceptable, a search taking a minute or so isn't.

      And why these features? Bcos it's a "beautiful thing" for a _coder_. No mention ANYWHERE of the user. Most users WON'T change their app skins, WON'T run the application on 3 different platforms at once. Most users just want something that works. If they have to download it, they want it to be a fairly small code size. If they have to use it all the time, they want it to work at a reasonable speed. A typical computer scientist works at a university (student/postgrad/lecturer) and runs his programs on a mainframe, or works in business and runs his programs on the latest hardware; they're likely to have a hot PC at home too. A typical home user buys a low-end PC (maybe 300 MHz) with a small amount of RAM. It's not acceptable for the computer scientist to say "Well it works fine on mine". You end up with exactly the same problems of platform-dependency in that a percentage of users just can't run it; this time though, the dependency isn't on architecture/manufacturer but on how much you can afford to spend on your PC.

      This gives the odd situation of an "upper-class" program. Only those who are rich enough can run it; if you don't have the money to buy a high-spec machine, you get a definitely second-class performance out of the program. And it keeps the hardware manufacturers rubbing their hands with glee.

      Mozilla was intended to be a replacement to a buggy, bloated and over-featured browser. What's emerged is a buggy, bloated and over-featured browser. Tell me again why anyone bothered?

      Grab.

    4. Re:Suggestions for better software by kubrick · · Score: 1

      Mozilla was intended to be a replacement to a buggy, bloated and over-featured browser. What's emerged is a buggy, bloated and over-featured browser. Tell me again why anyone bothered?

      Ah, but Mozilla is "buggy, bloated and over-featured" on a *much* bigger scale than Communicator was -- just as all the things it does right are more impressive than Communicator.

      I think the problem with Mozilla is that they implemented an 'ideal' architecture in terms of extensibility and cross-platform-ness, and made the decision that certain other things (conformity with the host interface, sparing use of resources, etc.) weren't important.

      Hey, I can't argue -- I'm posting this from Mozilla 0.8, but then I *do* have a fast machine :/

      --
      deus does not exist but if he does
    5. Re:Suggestions for better software by update() · · Score: 2
      Everyone is seeking their own selfish gratification in being recognized for adding a new feature to a program, but no one is willing to try and make the existing features work properly. I'd like to see this issue addressed more often in programming circles, because something desperately needs to be done.

      I agree with you about the problem but there's no reason why debugging, usability improvements and documentation have to be considered less important contributions than adding new, marginally useful features. The celebrity-worshipping pecking order that's built up around free software makes that judgement. Slashdot raves about shaded transparent pull-down menus and the guy who added them - not about the person who translated the app into Japanese, wrote the documentation or made the interface more intuitive. If that situation were reversed, you'd see a lot more people doing translation and documentation and fewer stupid features like text preview in file manager icons.

      Everyone knows who Miguel is - how many people can name the heads of the KDE and Gnome documentation projects?

    6. Re:Suggestions for better software by Jason+Earl · · Score: 2

      You're right, the users are the testers. But my point was, that there is no structured testing done.

      Actually in almost every single Open Source project that I can think of there is the equivalent of the "unstable" and the "stable" branch. The unstable branch generally has some nifty new (but untested features). The users that actually need those features excercise them (often in real world conditions). When it looks like it works as advertised it gets rolled into the "stable" branch.

      There is no need for a more formal set of tests for the simple reason that the people testing the software are generally in close touch with the people writing the software (ie, there isn't a focus group in the middle). In other words the features generally get specified due to specific needs, and testing against these needs is very straightforward. If you have features that no one is willing to test, then you probably should consider removing those "features" for the good of the project. Clearly they aren't useful.

      Now, the best projects do have a set of regression tests. That way you can excercise the various components of your software individually and as a whole. This is quite helpful to make sure you aren't introducing any new bugs in your software.

  126. Software Engineering will make software suck less by duffbeer703 · · Score: 1

    The real problem isn't a particular methodology like XP (which does have good ideas in it), it's the complete lack of professionalism in the software industry.
    How many times have people heard of programmers with no degree working on or designing large-scale projects? It's insane. No one would hire an architect or mechanical engineer who didn't have at least a piece of paper from a college. But it happens all the time in software. The costs of the defective systems being turned out by untrained programmers is starting to matter.

    Even a CS degree really isn't a sufficient solution to the problem. Software Engineering is NOT computer science, just as Chemical Engineering is not Chemistry. You need knowledge of the latter to do the former, but there is a different skill set which must be learned. Unfortunately, I'm not aware of any school which is teaching it to potential software engineers. When they do, real software development can finally begin.

    --
    Conformity is the jailer of freedom and enemy of growth. -JFK
  127. Good examples by peer choice by mclemenc · · Score: 1

    Don Knuth (the author of TeX) once made a comment in one of his books that if I were an engineer it would be very easy for me to go out and study great buildings but it is very difficult to find "great code" which we can hold up as an example to budding programmers. There is an interesting exchange in one of Knuth's books (the literate programming one I think) where he creates a program for a task using his self documenting and logically ordered language. Another leading computer scientist was then asked to respond. he called it a "Faberge egg" of a programme. Exquisitely structured, beautiful to look at, but the same result could have been achieved using 3 unix commands and two pipes! For me, as a a teacher of programming, I would love to see a resource of great code I could refer to which had been peer judged as worthy of imitation.

  128. Re:The problem with bad code by gimbo · · Score: 1

    As Knuth says:

    "Premature optimisation is the root of all evil".

    Of course, he'd probably have said it with a z. :-)
    --

  129. Reality by srichman · · Score: 1
    I hope someone in the Computer Science department at a high school near chromatic gives him a call.

    High school CS department? DEPARTMENT? Where did Timothy go to school? Most high schools are lucky if they just have a programming class.

  130. Re:Also a great way to even out the "Classes" by elflord · · Score: 1
    I don't think your idealistic and stupid at all. I read an article in the NY Times about big companies setting up tech training programs in homeless shelters (!)

    BTW, I didn't have any skilled instructors in my school and I did OK. As long as computers are cheap (and cheap they are -- if you don't require the latest and greatest.) they will be accesible to those who want them.

  131. a guild... hmmm... by acmwallace · · Score: 1

    My current favorite thought about programming: Always code as if the person responsible for maintaining your code is a maniac serial killer who knows where you live. Too many coders forget that. I actually like the guild idea myself. Good programming is a bit of an art-form, a craft, so why not a guild?

  132. There's a "leap" that you just can't teach by dmorin · · Score: 1
    In all my years of coding, the best way I can sum up the experience of trying to teach people to code is that one day they make a leap at which time things become obvious. Sometimes they can't make that leap. You see it in their eyes. I fondly remember the experience of teaching a consultant a new proprietary app server. He stared at me with glossy eyes. The next morning he was waiting for me in my cube. "I get it!" he cried, with a spark in his eyes. And I knew that he did. He went on to be one of the best resources that team had. For every good story like that, I have a dozen not so good ones of people who have to be told the same thing over and over and over again and just never grok it. We as mentors can probe and prod that particular area of the student's brain that controls the leap, but I've always found it to truly be a quantum thing. They either make it or they don't.

    I'm in a position where I get handed problems after the team has pulled their hair out for days or longer. When I solve those problems, I send out an email detailing (or attempting to) my thinking process on solving the problem. It's weird, because on one hand I'm thinking "I'm writing down obvious things here, aren't I?" but obviously they're not. How do you teach that?

    A consultant that floated through my place of business used a term I don't hear that much -- "The ability to internalize the code." I like that. If they don't internalize it, they'll never generate quality code.

  133. I'm all three of these programmers... by drnomad · · Score: 2
    and I'm sure a lot of Slashdotters are.

    In my opinion, if you want people to be able to program, then you should think of your brother/sister or neighbour participating in the programming world. First the apprentice sees is the Presentation of the application, then it's the data they'll see, and lastly you could bother them with the algorithms used for the data-flow-processes. If they can handle this, bother them with quicksorts and hashtables. Can they handle that? Let them enter the world of Lex and Yacc.

    What you can see is that levels are going from up to down. Not everybody is able to program at deep levels, but everybody should be able to make themselves useful. In order to do this, I think certain programming model (i.e. based on n-tier systems) should be made. People can focus into the level they want, and hop upwards and downwards at their own will. Perhaps a new programming model should be designed for something like this, I'm not sure it's possible...

  134. The most important thing is Documentation by rebelcool · · Score: 3
    I wish that schools would teach how to properly document your code. All too often I download something from sourceforge, only to find it be a horrible mess of code that has perhaps 3 or 4 lines of documentation in the entire file.

    Without proper documentation, an idea or program is next to USELESS to future viewers.

    All the greatest ideas have been well documented..take the RFC documents as an example. They are very rigoursly reviewed and follow a very strict code of documentation. And they form the basis for all that the internet is today.

    Document your code!

    --

    -

  135. Re:The problem with bad code by Samrobb · · Score: 3
    ...they just write code that works, but don't worry about "elegant," algorithimically well thought out code.

    Hmm. There's can be a vast difference between "elegant" code and "code that works". I've seen beautifully written, well thought out code - written by incredibly knowledgeable folks with CS backgrounds - that did just plain damn stupid things when you considered the hardware or OS. Things that resulted in programs running about 10% as fast as required, or using about 10 times more memory then available... but boy, it was sweet code to review :-/

    OTOH, working code - code that does the job to spec (speed/memory), runs on the target hardware - can be just plain damn ugly. Not unused-variables-scattered-all-over-the-place and no-error-checking ugly, but convoluted, non-obvious, "we did it this way to squeeze a 2% performance increase out of the system" or "we did it this way to avoid an obscure error condition" type of ugly.

    There's a time and a place for both types of solution. Knowing when you have to do something ugly is as important as knowing when you need to put the thought in and come up with something elegant.

    --
    "Great men are not always wise: neither do the aged understand judgement." Job 32:9
  136. Hello Mentors! by 4eek · · Score: 1

    Are there any Mentors (Elves) out there willing to listen to the same old questions being made by some beginner?

    --
    Every problem has a better solution when you start thinking it differently than the normal way.[Steve Wozniak]
  137. The problem with bad code by Faizdog · · Score: 5

    Is partly due to the inexperience/naiveness of the coders. But another factor IMHO that i've noticed in my experience has been big is simply human laziness. So many coders I know don't document, "can't be bothered to", they just write code that works, but don't worry about "elegant," algorithimically well thought out code. You can never just sit down and begin to code. And please don't tell me you can, I can just sit down and crank out a buncha programs too, but I mean well thought out plans. ( I dont' mean the BS stuff like Requirement's Engineering, Software Architecture, etc. although that stuff is sometimes useful), but just to sit down and think about what you wanna do and what's the most efficient way to do it.

    I'm not trying to be troll at all, so please don't think that. I'm just saying something that I've noticed. Plus I can't emphasize the importance of documentation. Currently I'm expanding upon a project that has a few thousand lines of code, and it's hardly documented. Hacking the code and trying to figure out what it's doing is tedious. Please document, it doesn't mean you are a bad programmer, actually means you are a good one.

    --
    -"Those who fought today will die tommorow."-
    1. Re:The problem with bad code by tjb · · Score: 2

      Its usually pretty obvious when each style is appropriate.

      I mostly work on a DSP-style CISC processor that requires all pipelining to be handled in the firmware. Due to our whopping 1K of code space and 1K of data space, a compiled language is simply out of the question, everything is hand-tuned assembly. Now, I could make this code elegant and readable, but it would be absurd: at least 30% of the code would consist of no-ops doing it the way my CS professors told me was The Right Way (tm). So my code ends up being a horrible convuluted, out-of-order mess with weird dependencies, self-modifying parts, and comments that attempt to describe the indescribable (mostly we end up saying fsck it, and add "Do not change this chunk of code! Ever! Please!" :). But it fits and it works. Making it work is key here, the constraints are physical, not arbitrary.

      On the other hand, if I need to add a previously unused instruction to our assembler, which runs on a big-ass Sun with 4GB of RAM, I forcibly re-wire my brain and put it in there with intuitiveness, elegance, and comments that point out exactly what the code is doing so that someone else can maintain it. Again, making it work is key, but there are no physical constraints here, and while I'd like my code to assemble 10% faster, its just not worth losing proper functionality and ease of maintenance over.

      However, regardless of what I said about the former instance, the vast majority of free software doesn't have physical constraints to deal with. Any constraints the authors place on themselves are arbitrary, and when it comes to writing code, the arbitrary constraints should be ignored until it can be demonstrated to run properly (correct functionality, no memory leaks, etc). Then, after it works, go back to look at what the performance goals were, and decide which are worth pursuing.

      -tjb

  138. I tried this with assembly coding, once by kyz · · Score: 4

    I'm on several mailing lists, including ones regarding oldskool music ripping. One particular person had written a ripper in a high level language, and wanted to know more about assembler language so he could make it rip much faster. I quite happily offered to help teach him assembler.

    He understood most of the assembler instructions, by my comparing them to the high level constructs, and showing how they are built. However, the point he got really stuck on was optimisation (which is really the point of asm coding nowadays), particularly memory access. He didn't see why accessing unaligned data was bad. So I showed him how memory is logically addressed versus the physical bus requests the CPU has to put out. I think this was the straw that broke the camel's back. He said 'thanks, but I think that's too hard for me', and he's now a Visual Basic coder. (No, really. This isn't a joke.)

    --
    Does my bum look big in this?
  139. Also a great way to even out the "Classes" by Kostya · · Score: 3
    The haves and have-nots will become even more sharply divided in the years to come. Technology is quickly becoming a requirement for work experience. But how many lower income area schools can afford technology, let a lone instructors skilled in teaching that technology?

    I have had this idea for a while, but it is taking me longer to implement it.

    Enter a non-profit/profit company combo. It teaches, instructs, and mentors young under-privileged children in IT skills (specifically programming). It then turns around and seeks business support from the community: i.e. a local business has the company build their website for a cut rate, and the company uses the local kids exclusively for the project. Kids then get work experience and knowledge. The key focus being training the kids and getting them work experience--not necessarily profit. It wouldn't be the latest greatest way to make millions.

    Perhaps I am idealistic AND stupid, but this seems like an effective way to reverse the tide a little bit. Local programmers could volunteer time for instruction, whereas someone would have to work full-time for the company to take care of project management.

    --
    "Doubt your doubts and believe your beliefs." -- Switchfoot, Ode to Chin
  140. Re:I'm akarma whore by Hiedi+Wall · · Score: 1

    since I'm only 12 I am very open to almost anything

    --
    Trust god and don't fuck your camel!
  141. No-nonsense SW Development Process, version 0.01 by matsh · · Score: 3
    Here is my contribution to new programmers:

    No-nonsense SW Development Process, version 0.01

    By Mats Henricson

    Rule 0: Don't break a rule unless you have a very good reason for doing so.

    Rec: Make sure a project manager is dedicated to your project.
    Rec: Have regular project meetings, typically once a week, with all participants, where all kinds of project issues are discussed.
    Rec: Manage risks (by using the likelyhood * severity formula)
    Rule: Involve the user in the process. (This is the single most important reason why projects are successful).
    Rec: Select a set of tools that works well, document its use, and make it the default tools for the project.
    Rule: Use a version management tool, such as CVS, to handle your code and documentation.
    Rec: When checking in code, write meaningful descriptions for the changes.
    Rule: Before developing a completely new product, make sure you can't buy a similar product, or use an open source product.
    Rule: Use short release cycles.
    Rec: Create Use Cases (or stories) for how features are used by the customer.
    Rec: Let developers estimate their own tasks so that they are realistic.
    Rec: Use the Stories as the basis for writing test cases.
    Rec: Write test cases for new features before you implement the feature itself.
    Rec: Make sure test cases are easy to configure, run and automate.
    Rec: Automatically run the test suite after each build.
    Rec: Update the list of desired features after each release cycle.
    Rec: Write a Release Note after each release, where all known issues are listed.
    Rec: Use a programming standard.
    Rec: Use a code style standard.
    Rec: Review eachothers code.
    Rule: Don't leave commented out code in the files, unless you explain why it is there.
    Rule: Check in files in the correct order, so that the risk of corrupt intermediate checkouts by your coworkers are minimized.
    Rule: Make a diff on your changes before you check them in.
    Rec: A function should do one thing and one thing only.
    Rec: You should never make. You should always "make clean;make".
    Rec: If you've changed a file, don't ever close it until you've checked it in, since open files are a good way to remember which files you've edited and needs to be checked in.

  142. Planning, good design are key by b100m · · Score: 1

    I agree on the laziness factor, but I think that
    spending time on design is often overlooked. If you can't get a project done with a good design that can be verified by your peers in the time allotted, you're doing the wrong project.

    Secondly, document, document, document. I have adopted a saying that I heard long ago: "Not everything doing is worth doing well." Now that may appear to fly in the face of what I have been espousing, but a hack that works and is documented is much better than something brilliant that isn't easily maintainable.

    I just wish the developers in the early '80s who wrote this legacy app that I'm supporting had learned to plan, design and document. <grumble> Remember that what you write today may stick around for a long time. At least make it maintainable. You'll make junior coder's life a lot easier in the future. : )
    _______________________________________________ __
    $which weed

  143. I will say this... by jallen02 · · Score: 3

    The "network of peers" cant be expressed enough.

    ALmost every programming language and application out there has a community of some sort.

    Being involved in the community and being able to hands on talk with people who have been doing it a long time and have these gurus respond to you the little guy and see how they would do something can give a new programmer more insight in one email post than four chapters from a book.

    Learn about the thought process from a brilliant mind and how to analyze a situation rather than learn about a specific way a book says to do something and again you have just made huge leaps and bounds over where you previously were.

    Enthusiasm can take you a very long way, never giving up persistence and above all studying others works.

    Its just like at chess, if you always play people worse than you your not learning much, whereas if you play someone who beats you in three or four moves the first time you play them you must work that much harder and you will become a much better player as a result. Just like having a mini Linus Torvalds with you as you write a new kernel module the benefits are quite obvious..

    you will find that langauges and platforms with the etter communities can some of the time attract developers much easier than other language.

    :)

    Jeremy