Making Good Software

A blog by Alberto G (Alberto Gutierrez)

Written by Alberto Gutierrez

May 27th, 2010 at 4:29 am

Posted in Popular

10+1 things they never teach in college about programming.

with 58 comments

I still remember how naive I was just after I finished my studies. I was convinced that I was ready to join any software company and start shining as a top class developer. Obviously, no long after I started working, I realized how many things I didn’t know.

As I have been acquiring experience, I have been learning things the hard way, stuff which I was never taught, and which its understanding, is basic to become a good developer. This is my list of the 10 things I wish I had been taught.

1.- We’re always wrong.

Developers, among other non technical defects, have quite big egos, that´s why is very hard for us to recognize that we were wrong about something. I’ve seen many endless design discussions where developers will go on and on with their own ideas… well, guess what.. We are all wrong, the only difference between our positions is the degree of wrongness.

Is very important to understand and embrace this fact, only once that we do so we will be open to listen to others and use their own ideas to build a better solution.

2.- If something can break, it will break.

Aka “hope driven development“, if you are not sure about something, if you find yourself using the word “should”, then you are in trouble.

There is only one solution for this, do whatever is necessary to make sure that it doesn’t break, this could mean that you will have to write a test, debug, clarify the requirements…

3.- All code is crap.

After 10 years complaining about all the code that surrounds me, I have come to a brilliant conclusion, all code (including mine), is crap. Of course there are many degrees of crappy code, but even the best code I’ve ever seen is not easy to read.

This doesn’t mean that is not worthy trying to make your code better, all the opposite, there’s a huge difference between the best kind of code and the worst kind of code.

4.- There is always a bug.

ALWAYS! Is just a matter of how hard you look for it.

5.- The most important thing is the client.

Among many things the client doesn’t care are: the technologies you use in the project, how many more things that required the application does… or in general, if you use good practices.

And since I can imagine how much hate comments I will get if I only leave the previous paragraph, let me clarify what I want to say… We should never forget the client perspective, sometimes developers use technologies or insist in over engineering just for the sake of using best practices, but remember, if it doesn’t add any value for the client, drop it.

6.- Design on paper doesn’t work.

I used to believe that I could put my whole design in a paper upfront, and then just fill in the gaps, but it simply doesn’t work.

Software development is complex, is hard to see all the entities and their relationships until you don’t get the hands dirty. So keep planning and designing upfront, it is very helpful, just don’t try too hard, and don’t take the diagrams as contracts.

7.- Less is more.

Or as you probably know it better: “Keep it simple, stupid!” (KISS). So if is not necessary drop it, because remember: “If something can break, will break”.

8.- Coding is only 20% of what we do.

Be ready to spent 80% of your time thinking, debugging, testing, in meetings, conversations… And all of the other activities are very important, so you have to develop a wide range of skills, not only technical, to become a good software developer.

9.- The customer doesn’t know what he/she wants NEVER!.

Customers have a necessity, or an idea, but they don’t know the details… Software development is all about discovering the details and removing all the uncertainty and converting them into an application.

10.- Someone has done it before.

So don’t reinvent the wheel, use Google, or better yet, ask your colleagues, many times they may have done already the same or something very similar.

Bonus: Hey! Our job is cool!

On the bright side, programming is still cool!

Easy AdSense by Unreal

Related posts:

  1. How to prepare a programming job interview
  2. Programming, is it still fun for you?
  3. 5 Tips for creating good code every day; or how to become a good software developer
  4. The average Software Developer versus the good Software Developer.
  5. 3 non technical tips to be a better software developer

58 Responses to '10+1 things they never teach in college about programming.'

Subscribe to comments with RSS or TrackBack to '10+1 things they never teach in college about programming.'.

  1. [...] This post was mentioned on Twitter by Callixte, Bernard Notarianni and Manuel, Michael Hvizdos. Michael Hvizdos said: 10+1 things they never teach in college about #programming. http://bit.ly/9mpLd7 #softwaredevelopment [...]

  2. Nice post. The only thing I don’t agree with you is:

    “…keep planning and designing upfront, it is very helpful…”

    I have the opinion of every design upfront should be done in the sand or in toilet paper. Whit this I mean doing something that don’t last for more than 10 minutes.

    Upfront design is evil. It sucks time and always ALWAYS gets old the very minute after you start coding.

    Instead do temporal sketches, and notes using a pen over a paper you will throw away really soon.

  3. Hi Santiago!

    I’m myself not very kind on big design up front, but I still believe in spending some time, no more than 30 minutes, doing some very high level design.

    Thanks for your comment!

    Alberto Gutierrez

    27 May 10 at 7:51 am

  4. Hi Santiago!
    I also don’t agree with you about the planning. You know how TeX was written? Don Knuth had been designing it for 6 months on paper, he had not written any code in this time. After 6 months, he sat to computer and finished it without any further redesign. And since today it’s one of the best code ever ;) .
    Of course in “real life projects” no one would have the possibility to plan for such long time, but you know ;)

    assd

    27 May 10 at 8:12 am

  5. Great post! That’s what I face everyday. I think one of the hardest part is reading codes from others. Our brain may not be ready for that logic or whatever, but there’s no way if not understanding that and implement. Our profession goes beyond writing codes, it involves patience and flexibility.

    Thanks guy for the post.

    Gustavo Freitas

    27 May 10 at 5:56 pm

  6. The sixth topic, shows the great idea of using agile methodologies. It’s unanimous. You can ask any developer what he thinks about the “economy” of documents. I guarantee that 90% of the methodologies are approved. Except the developers of age “prehistoric”, still opt for the RUP methodology.

    Great post!

    Rafael Orágio

    27 May 10 at 7:19 pm

  7. Fantastic list, you really nailed it! I’d definately recommend this. Number 5 is by far the most important – a newbie developer doesnt realize the hardest part of development is not the coding, which can be damn frustrating, it’s the client management! Also #10 – you can waste your life and savings not having researched what’s already been done!

    Dathan

    27 May 10 at 11:48 pm

  8. “Among many things the client doesn’t care are: the technologies you use in the project”

    that’s not always true. enough clients made found out the hard way that the homegrown content management system in snafuscript wasn’t so great when they had to find someone else who would take care of the website. especially when it comes to web work, where a lot of work is done by unstable freelancers, cost of maintainability depends on the tech used; many of them are insisting on well known and (especially) open source technology nowadays.

    schnalle

    27 May 10 at 11:52 pm

  9. Hi Gustavo!

    I think you are definetely right, the challenge is not to write code, is to read it, hopefully more developers would understand that and it will be easy for us to maintain each other’s code.

    Thanks for your comment

    Alberto Gutierrez

    28 May 10 at 7:21 am

  10. Hi Schnalle!

    I think you are right, the technologies you use in the project sometimes are important for the customer, in these cases, obviously the decission for the technologies to use has to be agreed…

    Thanks for your comment!

    Alberto Gutierrez

    28 May 10 at 7:24 am

  11. [...] 本文翻譯自10+1 things they never teach in college about programming。 [...]

  12. see Joel Solsky Duct Tape Programmer

    http://www.joelonsoftware.com/items/2009/09/23.html

    Paul M

    28 May 10 at 9:21 am

  13. [...] artikkelen er løst basert på artikkel skrevet av Alberto Guiterrez fra Making Good [...]

  14. [...] 10+1 Things they Never Teach In College About Programming :: Making Good Software [...]

  15. This would make a good poster given proper typesetting.

    Jake Wharton

    28 May 10 at 12:19 pm

  16. The software I develop doesn’t have bugs, it just generates random features :P

    Chololo

    28 May 10 at 1:50 pm

  17. “All code is crap.”

    This is something they must teach in college… AS SOON AS YOU LEARN THIS, THE BETTER!!!

    I always wasted important time, on trying to write code that is not crap… I wasted important hours, days and weeks on this.. Trying not to write crappy code.. Until I realized.. All code, and every single character written in any programming language by any programmer is total crap. Period.

    Anyone trying to tell me otherwise, just doesn’t “get it” yet!

    Kjarri

    28 May 10 at 10:50 pm

  18. Your code will tend to crap if your up-front design is insufficient. I think there’s a lot of confusion over what constitutes design: what are the concerns you’re to be addressing and in general what you’re supposed to be doing. If you think design is high-level coding, then yes, that tends to be a waste of time. But design is not high-level coding.

    9 is also very important. A lot of developers starting out believe the client knows what they want. They don’t. They think the requirements should be complete. They won’t.

    The biggest thing missing from this list is estimating. Nowhere in college did they teach you how to estimate how long it was going to take to do something. I don’t even know of any accepted practice you could study post college. We’re all working in the dark here – and nowadays more than ever are being held to our estimates.

    Don Taylor

    29 May 10 at 6:41 am

  19. The more complex/critical the software system, the more the design must be done up front, e.g. flight control systems, power station management systems, life support systems etc.

    The main purpose of a design is to capture and document the properties and behaviour of the system, with respect to the requirements.

    A good software design is also necessary for dividing the work amongst development teams.

    Skimp on design, and failure tends to become inevitable.

    Kashif Baig

    29 May 10 at 8:16 am

  20. Way to improve the cred of Joe the Programmer.

    When my manager reads this, he’ll fire us all.

    john

    29 May 10 at 1:31 pm

  21. I laughed my way through this list, all of them are spot on, nice post.

    Surrey Web Design

    29 May 10 at 3:16 pm

  22. @assd you confuse Donald Knuth with us mere mortals. I would argue that the singular Knuth example proves the rule that big up front design doesn’t work.

    Mark Menard

    29 May 10 at 4:37 pm

  23. [...] 10+1 things they never teach in college about programming. | Making Good Software [...]

  24. Hi Kjarri!

    That’s exactly the point I was trying to make, I completely agree with you.

    Thanks for your comment!!

    Alberto Gutierrez

    30 May 10 at 1:03 pm

  25. Hi Don!

    I think you are completely right about estimating, it is something that I think it should have made into the list.

    Alberto Gutierrez

    30 May 10 at 1:05 pm

  26. [...] 10 (+1) Choses qu’ils n’ont pas appris à l’école à propos de la programmation [...]

  27. [...] source [...]

  28. [...] Alberto Gutierrez在自己的Blog上发布了篇名为“关于编程,大学没教的10+1件事”的文章。 [...]

  29. Great Post,

    I wish point 5 was true for me. Unfortunately I keep finding myself on projects where my managers allow the client to decide the tech and myself “just have to make it work”. You spend more time porting and trouble shooting the clients systems and environments than working on your own code, yet your code is blamed first for ANY issue. Not the best position to be in on a software project.

    Riaan Minne

    16 Jun 10 at 12:44 am

  30. [...] Deutsche Übersetzung von jaxcenter Quelle Original von: Making Good Software Dieser Beitrag wurde unter Allgemein abgelegt und mit software entwickler, uni verschlagwortet. [...]

  31. Not really, you should talk to Linus for a while. ;)

    zerolinesofcode

    24 May 11 at 10:04 pm

  32. [...] 原文:Alberto Gutierrez   翻译:敏捷翻译 - 张瑞霞 [...]

  33. [...]   原文:Alberto Gutierrez   翻译:敏捷翻译 – 张瑞霞 var jiathis_config = {"data_track_clickback":true}; ← Mysql工具集 [...]

  34. [...] 翻译:々たるgutierrezだった例句:敏捷だった答案—张瑞霞 [...]

  35. [...] 原文:Alberto Gutierrez 翻译:敏捷翻译 – 张瑞霞 [...]

  36. [...]   英文原文:10 things they never teach in college about programming [...]

  37. [...]   英文原文:10 things they never teach in college about programming [...]

  38. [...] 英文原文:10 things they never teach in college about programming [...]

  39. [...]   英文原文:10 things they never teach in college about programming [...]

  40. [...] 英文原文:10 things they never teach in college about programming [...]

  41. [...] 英文原文:10 things they never teach in college about programming [...]

  42. [...] 英文原文:10 things they never teach in college about programming [...]

  43. [...]   英文原文:10 things they never teach in college about programming [...]

  44. [...]   英文原文:10 things they never teach in college about programming [...]

  45. [...] 英文原文:10 things they never teach in college about programming 随机文章 [...]

  46. [...] 原文:Alberto Gutierrez   翻译:敏捷翻译 - 张瑞霞 [...]

  47. [...] 英文原文:10 things they never teach in college about programming [...]

  48. [...]   英文原文:10 things they never teach in college about programming [...]

  49. [...]   英文原文:10 things they never teach in college about programming [...]

  50. [...] 英文原文:10 things they never teach in college about programming [...]

  51. [...] 英文原文:10 things they never teach in college about programming [...]

  52. [...]   英文原文:10 things they never teach in college about programming [...]

  53. [...] 英文原文:10 things they never teach in college about programming [...]

  54. [...] 英文原文:10 things they never teach in college about programming [...]

  55. [...]   英文原文:10 things they never teach in college about programming [...]

  56. [...] straipsnis: 10+1 things they never teach in college about programming {lang: 'lt'} * * * Norite gauti Skaitykit.lt naujienas operatyviau? Prenumeruokite RSS [...]

  57. [...]   英文原文:10 things they never teach in college about programming [...]

  58. [...] 原文:Alberto Gutierrez   翻译:敏捷翻译 – 张瑞霞 [...]

Leave a Reply