http://www.perlmonks.org?node_id=631284

Fellow monks,

  Yesterday my work contract was extended (yay) and I was asked by management to make a list of things I would like to learn in the coming six months.

I practice self-improvement (wrt knowledge) continuously towards subjects that interest me (MIT opencourseware is a godsend ;) ).

My question to the monk hive is this : What do you consider essential knowledge for any software developer, the language being programmed in notwithstanding? Since I come from a non-professional background I am always trying to fill in the gaps in my knowledge and this might help me see where to focus on.

Thanks for your time,

jkva

Edit : Moved from SoPW to Meditations.

  • Comment on Essential skills for any software developer

Replies are listed 'Best First'.
Re: Essential skills for any software developer
by citromatik (Curate) on Aug 08, 2007 at 12:50 UTC

    The more I know on programming, the more I like Tom Christiansen's cite:

    A programmer who hasn't been exposed to all four of the imperative, functional, objective, and logical programming styles has one or more conceptual blindspots. It's like knowing how to boil but not fry.

    -Tom Christiansen

    citromatik

      Similar but orthogonal: get exposure to some sort of event driven environment (like a GUI environment, or POE). Getting used to something outside your code dictating the sequence in which things happen provides more natural solutions for some problem domains.

        This may be somewhat Heretical, but POE is so complex and hard to get started with that I wouldn't recommend it as an intro to event-driven programming. Even Visual BASIC or some Java GUI thing would be a better choice.
      A programmer who hasn't been exposed to all four of the imperative, functional, objective, and logical programming styles has one or more conceptual blindspots. It's like knowing how to boil but not fry.

      -Tom Christiansen

      I did some research on this and thought that what I found my be of help to others:

      Examples of functional programming languages:
      * APL, Erlang, Haskell, Lisp, ML, Oz and Scheme.

      Examples of Imperative programming languages:
      * Fortran and Algol. Others include Pascal, C, and Ada, Perl.

      Examples of objective programming languages:
      * C++, ruby, python, perl.

      Examples of logical programming languages:
      * Prolog

      See also 34786.

      -- gam3
      A picture is worth a thousand words, but takes 200K.
Re: Essential skills for any software developer
by GrandFather (Saint) on Aug 08, 2007 at 12:13 UTC

    Refactoring techniques. :-D As is often the case Wikipedia gives a good starting point.


    DWIM is Perl's answer to Gödel
      1. Move to Bangalore
      2. Get some acid washed jeans from 1982 and pull them up to your bellybutton.
      3. Wear a pager and a cell phone (outdated) on your belt
      4. Sport a Nike shirt from like the Jordan days...
      5. Take a 94% paycut
      6. Then post on perlmonks so American programmers who have been laid off can write your code for you.

      Keep pouring your ideas into my curry!

      -Wouldn't you like to know
Re: Essential skills for any software developer
by perrin (Chancellor) on Aug 08, 2007 at 15:55 UTC
    Version control (how to use it effectively), some basic project management (time management, estimation), and maybe a little bit of UI design.
Re: Essential skills for any software developer
by smahesh (Pilgrim) on Aug 09, 2007 at 04:13 UTC

    I am going to answer this from a different point of view. What skills would I like the developers in my team to have? You have already mentioned about knowledge of the language essentials.

    • Debugging skills - more and more I feel this is becoming a lost art. 99% percent of the effort is locating the source of the defect - 1% of the effort is spent in fixing it. So, you need the skills to locate the problem asap.
    • Communication skills - very relevant these days thanks to multi-site and multi-cultural teams.
    • Hunger for learning - The desire to learn new stuff - technologies, programming paradigms, languages, tools, etc. A closely related desirable characteristic is ability to spread/share the learnings to other team members.
    • Core Fundamentals - This is basically Computer Science stuff - that is not specific to any language/implementation - e.g. Algorithms, etc
    • Team skills - Inter- and Intra-team interaction skills are essential
    • Design skills - I would like the more senior developers to be able to create/judge/review product designs
    • Domain Knowledge - In whatever field/business area you are developing the software, you need to learn the domain knowledge.
    • Know your tools - It doesn't matter what tool you use for coding/developing software - but be very familiar with the tools you use.

    Mahesh

Re: Essential skills for any software developer
by eyepopslikeamosquito (Archbishop) on Aug 08, 2007 at 21:42 UTC

    I recommend reading these books:

    These are all excellent works: well-written, entertaining and easy to read. And short.

      I liked Code Craft a lot, it is very readable and has good advice on a range of subjects related to being a software developer
Re: Essential skills for any software developer
by jdporter (Paladin) on Aug 08, 2007 at 13:24 UTC

    Discrete math, hands down.

    A word spoken in Mind will reach its own level, in the objective world, by its own weight
Re: Essential skills for any software developer
by andreas1234567 (Vicar) on Aug 09, 2007 at 08:04 UTC
    Writing testable code is one of my mantras. I was particularly impressed by this YAPC talk on Testing large software with Perl where 10000 unit tests where written in 3 years to test 320 000 lines of Perl code. (Disclaimer: I did not attend the conference, I just read the online material.) Perl Testing, a developer's notebook is a well written book on the subject.

    Do one thing, do it well from the Unix philosophy is another high up on my list. Eric Raymond's The Art of Unix Programming was an enlightening read for me.

    --
    Andreas
Re: Essential skills for any software developer
by bibliophile (Prior) on Aug 09, 2007 at 14:20 UTC
    Play around with a new language every couple of years... much can be learned from seeing how different languages do similar things.

    Of course, I always come back to Perl :-)

Re: Essential skills for any software developer
by Aim9b (Monk) on Aug 09, 2007 at 14:50 UTC
    I'd say that flexibility & persistance are the most important qualities. Find someone that has a passion for solving puzzles/problems, point them to the Monestary & turn them loose ;-)
    My own opinion - Hire the Attitude, you can always train the technical. A professor once told our class "Working in 4 person teams, Code 3 separate solutions to this problem, & then explain why each one is the best one." You'd be amazed at the results.
Re: Essential skills for any software developer
by johnlawrence (Monk) on Aug 09, 2007 at 10:01 UTC

    I find regular expressions are useful pretty much daily, and I'd certainly recommend Mastering Regular Expressions.

    Other than that, a good understanding of any tools you use every day will make everything run smoother. I'd also suggest The Art of Computer Programming

    As you mention the MIT opencourseware I'd also point out that other universities do similar see OCW Consortium and if you use iTunes, the iTunes store links to iTunesU which contains a lot of useful podcasts etc.

Re: Essential skills for any software developer
by DrHyde (Prior) on Aug 09, 2007 at 09:52 UTC
    I think the most important attributes for a programmer are a high degree of literacy so you can explain complex stuff to simple people; and patience, so you can explain complex stuff to simple people without wanting to beat them to death with the bloody ends of their own arms.
Re: Essential skills for any software developer
by b4swine (Pilgrim) on Aug 13, 2007 at 07:30 UTC

    While Discrete Math was mentioned, I would like to add more of CS Theory. In particular, at least Data Structures and Graph Theory, to start with.

    While in many cases, theory only allows you to do the same thing faster, and so is not that necessary, in many other cases the result of good theory can

    1. make an impossibly slow computation, into a possible solution.
    2. give you a simple way to look at an unusual problem by reducing it to a well known one.