Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!

 



Forgot your password?
typodupeerror
×

Taking Your Programming Skills to the Next Level? 240

An anonymous reader asks: "About 6 years ago I graduated with a degree in Computer Science. Since that time I've been working on and off as a programmer, however I feel that my programming skills haven't really progressed to the next level as I had hoped. I guess part of the problem is that my work environment hasn't been especially technical or challenging, so I really need to try and improve my skills independently. What strategies did Slashdot readers use to improve their programming skills Which books are useful in this area?"
This discussion has been archived. No new comments can be posted.

Taking Your Programming Skills to the Next Level?

Comments Filter:
  • by Pig Hogger ( 10379 ) <pig.hogger@g[ ]l.com ['mai' in gap]> on Thursday October 26, 2006 @12:56AM (#16589292) Journal
    Reading books is one way, yes, but like muscles, the brain must be exercised.

    Practice. Learn a new language, just for fun. To do so, program a new application to do something useless that has been nagging you for months.

    • by eln ( 21727 ) * on Thursday October 26, 2006 @01:14AM (#16589414)
      I may be wrong, but the submitter doesn't seem like the type who's going to pick up another language or solve some useless problem "just for fun." That's okay though, because I'm the same way. I hear about people who program shit in their spare time just to solve trivial problems, and I just cant get into that. However, I am a fairly good programmer. In my case, the reason I became good is because I went to several different jobs, and in each job there was some sort of major problem that the company or team had been dealing with for a while, that I decided I could solve. The difference between that and solving useless problems in my spare time is that a.) it makes my job easier, and b.) I'm getting paid for it.

      I've made most of my money over the years (not that I'm a millionaire or anything but, hey, I'm still young) doing automation work. I see a manual process being used, decide it can be automated, and I automate it. That's the sort of programming that really gets me going: programming that makes life easier.

      So, I guess my advice for those unmotivated to do things on their own time would be this: Find a problem at work that can be solved through some sort of program. Solve it. This could be automation of a monotonous task, or it could be writing an application to replace some boneheaded spreadsheet that everyone has been using for years to track inventory.

      The upshot of all of this I guess is that I agree with you that practice makes you a better programmer. However, I would encourage people to look for problems in their work lives that can be solved through programming if they are too unmotivated or otherwise occupied to program in their spare time.
      • Re: (Score:3, Interesting)

        Or create a website [creimer.ws] as an ongoing programming project. Adding new features, maintaining current code, and rewriting code where necessary. There's nothing more horrifying than trying to figure out what you wrote six months to a year ago. I'm currently learning Python as a new language to know and figuring out if a Python-based web framework would be a good approach to building the admin backend that I was too lazy to write during the summer.
      • I have to admit many times I'm the same way. I have trouble finishing personal programs. Probably only about 1/4th my hobby programs end up completed. But it's not as bad as it sounds. Many times I'll just solve the difficult parts of a program and that'll be good enough for me. So for example, for many people the next step is dealing directly with hardware. Get some simple hardware like RC motors and get them to do some simple things. Don't worry about a complex program, just solve the problems you current
        • by Silver Sloth ( 770927 ) on Thursday October 26, 2006 @05:53AM (#16590786)
          I once read in Accidental Empires? [amazon.com] that there are three types of coders - and the terms are not mine
          1. Code bashers - these are people who bash out endless lines of cobol (probaly VB nowadays) with no real feel for the craft
          2. Hippies - Hippies write good code badly. Once the problem of how to code this task is resolved they lose interest so the actual transformation of the concept to the written code is poorly executed
          3. Nerds - Nerds write bad code very well. Nerds become obsessed with particular techniques and will use that techniqu whether it is relevant or not. However their attention to detail means that the code is well executed
          Looks like you, like me, are a hippie under these definitions.
          • by SomeoneGotMyNick ( 200685 ) on Thursday October 26, 2006 @08:35AM (#16591718) Journal
            3. Nerds - Nerds write bad code very well. Nerds become obsessed with particular techniques and will use that techniqu whether it is relevant or not. However their attention to detail means that the code is well executed

            Oh God!!!! That's ME!!!!! Why didn't anybody tell me this SOONER!!!! I feel so ASHAMED!!!! I need to re-program my Segway to lead me off of the edge of a bridge. I think I'll use a variant of the Medial Axis Transform of the city model to determine best path.

          • There are also artists, who try to solve the problem efficiently and in an elegant way. My goal is to reach that state.
      • I agree with your post 100%. It is most fun, educational, and rewarding when you solve a useful problem, because you take more from an experience where you know the solution was definitely a productive or beneficial one that you can apply to similar problems in the future, thus taking your skills to "the next level".

        I think it all boils down to feedback. When you write code to solve an actual problem, or to improve something, you KNOW you did something good, or even something wrong. In either case, you lear
      • by Aladrin ( 926209 ) on Thursday October 26, 2006 @07:26AM (#16591152)
        I think it's also quite a bit easier to 'take your skills to the next level' when you have outside pressure to do so. Doing projects in your free time is great, but there's no great push to overcome challenges like what you get while doing 'work' for a company.

        I'm one of those people that program for fun in their free time. For years, I resisted becoming a professional programmer because I didn't want to taint my hobby. I finally realized that I needed to do SOMETHING for a job, and got a 2 yr degree for the paper. 4.0 GPA because I already knew it all, having learned it myself over the previous 10-15 years. (Yeah, I started programming young.) In the last year at this company, my skills have progressed more quickly than the last 10. Having your boss say 'The entire system is down. We need a fix.' has motivation like nothing else. I've learned languages and concepts both. I'm a much better programmer than I was a year ago.

        So in the end, the answer is: No book will help you like a good job will. Programming projects in your spare time is better than a book, but not by much. (The 2 together can be useful, though.)
      • by SQLGuru ( 980662 ) on Thursday October 26, 2006 @09:05AM (#16592098) Homepage Journal
        The parent post is alreday +5 Insightful, but I'd like to add that another way to get better at programming is to find a mentor.....a good mentor. I made the biggest leap in my ability during my first job (which was rather fortunate). I was on a team of young guys, but we were all sharp. Where one of us lacked, the other was strong. After 5 years, I was a very well rounded programmer. I try to continue that by always having someone that I've taken under my wing to mentor as well. So, if you're in Austin and want a top notch database programmer (not a DBA) to be your mentor, look me up.

        Another area that will help you is breadth of knowledge. You don't have to be an expert in everything, but be aware of many fields (different tiers, different languages, different layers of the network model, what have you). This helps because you will quit fighting to put part of a solution in the wrong layer. If you can push it to the right layer, your solution will turn out better (easier to write, easier to maintain, more robust code, better overall design).

        Layne
      • Even though the OP's workplaces and tasks have not been terribly challenging or technical, this doesn't have to slow down your progress as a programmer.

        As the parent says, find tasks at work that can be automated, that will give you a certain amount of training. If you really want to improve your skills, shop around for books or websites that discuss programming techniques and strategies you are interested in, which you think would make you a better programmer, and seek to apply these techniques to prob

    • I don't know about books per se, but these links help:
      http://joel.reddit.com/ [reddit.com]
      http://programming.reddit.com/ [reddit.com]
      The design patterns book website with, as I understand it most if not all of the content for the book:
      http://lci.cs.ubbcluj.ro/~raduking/Books/Design%20 Patterns/ [ubbcluj.ro]

      The next three I keep the bookmarks to in a folder called "Practicing programming:
      http://www.devblog3000.com/archives/2-Practicing-P rogramming.html [devblog3000.com]
      http://butunclebob.com/ [butunclebob.com]
      http://www.objectmentor.com/resources/publishedArt icles.html [objectmentor.com]
    • I tend to do small exploratory projects to introduce myself to a topic or to try and solve a problem. For example, after testing the scalability of an application at work (which didn't scale badly) I did some research to try and figure out how I could reshape this app in the future to be maximally-scalable. I started a small project of a barebones webserver, and updated it as my knowledge grew. One can read all the tutorials and books in the world, but you don't really know something until you do it. So in
  • Yeah cuz programmers definitely need more hitpoints.
    • by Perseid ( 660451 ) on Thursday October 26, 2006 @02:36AM (#16589874)
      White programmer needs Dew badly.
    • I don't know about anyone else, but whenever I hit that compile button I always hear the FFVII won a battle theme and when I see the errors pop up it's like I've hit another random battle, that's just how I roll. . .
      • by miyako ( 632510 )
        Thanks very much, now that is going to happen to me from now on....although I think it might be more appropriate to hear the battle music while the compiler is running, then hear victory when you compile without errors (of course when your program segfaults that's like beating a boss then having your dog trip over the power cord and then you have to fight the boss again...)
  • Find a new job. (Score:5, Insightful)

    by Bitsy Boffin ( 110334 ) on Thursday October 26, 2006 @01:00AM (#16589320) Homepage
    If your current job isn't challenging you, then get out of it now. Do not delay.

    All you are doing is painting yourself into a corner skills-wise that is going to get harder and harder to get out of later. The longer you're doing this basic stuff, the rustier and rustier all the real actual knowledge you got out of your degree is becoming.

    Employers don't want rusty people, they want people with skills already.

    Get out now.
    • Re:Find a new job. (Score:5, Insightful)

      by The MAZZTer ( 911996 ) <.moc.liamg. .ta. .tzzagem.> on Thursday October 26, 2006 @01:12AM (#16589408) Homepage
      Err... ideally you'd want to find your new job BEFORE quitting your old one...
      • Re: (Score:3, Interesting)

        Why not? Spend six months on unemployment while hanging out at Starbucks with a laptop looking for jobs, learning a new programming language and working on an open source project. Maybe get lucky with the goth chick working behind the counter.

        Seriously, this can go either way. I've known people who were responsible enough to get a better paying job after their little vacation was over, and others who ended up working at 7-11 since they didn't do squat to improve their chances of getting another job.
        • by Barny ( 103770 )
          Hrmm, survival of the fittest job wise, works in nature, why not here? :)

          And besides, that goth chick does look hot ^_^
          • how hot do you think you'd look sitting in starbucks all day programming on your laptop? i don't think she'd be impressed. :p
        • Re: (Score:2, Insightful)

          by Anonymous Coward
          Why not? Spend six months on unemployment while hanging out at Starbucks with a laptop looking for jobs

          Becuase you don't get unemployment if you quit.

    • Re:Find a new job. (Score:5, Insightful)

      by PoderOmega ( 677170 ) on Thursday October 26, 2006 @01:18AM (#16589448)
      I don't have mod points, but I totally agree with this. I have been out of college for 5 years, and my first job took about 2 years to basically learn all the existing code and my job got to the point where it was too "boring", so I spent a year trying to take my skills to the next level. Well, I learned some stuff but switching jobs took me to the next level 10 times faster then me reading a book and playing around with stuff on my own. Working with bigger systems and more advanced programmers really brought me to the next level. Now I am to the point where it is getting boring again and I am not sure what I can do to keep learning without jumping ship for bigger brighter things.

      Do you work with other programmers? Are they content to spin their wheels all day? Competition can also be good thing, and its nice to have someone else really into coding.
      • Re: (Score:3, Interesting)

        by o2sd ( 1002888 )
        Agreed. My personal strategy that has worked very well for me so far is that if the programming is boring, then there is nothing at stake. The easiest way to make programming interesting AND take it to the next level is to find a job with a lot more risk involved. This usually involves either (1) Look for a company that is smaller by half (at least) than your current employer or (2) Be on the lookout for companies who are about to engage in something that would be considered too risky at your present locati
      • I wouldn't be so quick to dump a job just because it's boring. Are the people nice? And I'd certainly consider the economic climate. I've been in some very bad jobs, with lots of stress, impossible demands and schedules, and horrible incompetent backstabbing managers and coworkers who thought the way to run a program was lie, b.s., cover up, play people against one another, abuse or ignore underlings, and shift the blame. Those are reasons to quit a job. That kind of hell job had me wishing for a borin
  • by bunions ( 970377 ) on Thursday October 26, 2006 @01:01AM (#16589338)
    Typically, you have to rescue a kings daughter or defeat a marauding ogre that has been terrorizing the townsfolk. That's how I got to be a level 9 Programmer, although the +2 keyboard, +3 against fire elementals, does help. If I take it to the next level, I get an enchanted chair.
    • by Alsee ( 515537 )
      If I take it to the next level, I get an enchanted chair.

      He can go defeat a marauding ogre to get *his* enchanted chair, but for those amature-enchanter geeks looking for a good homebrew project I found a walkthrough website that ranks right up there with the best Do-It-Yourself home hardware projects featured on Slashot! Woohoo!

      Enchant it yourself! [hort.net]

      P.S.
      They also feature PC Case Mod projects, an Atari 2600 joystick hardware hack to add tactile response capabilities, and many more!

      -
    • Re: (Score:3, Funny)

      by 19061969 ( 939279 )
      Maybe the poster needs rescueing? It sounds like he/she is imprisonsed in a cubicle of doom and guarded by a boss with +5 pointy hair.
    • by Xyrus ( 755017 ) on Thursday October 26, 2006 @07:43AM (#16591220) Journal
      "That's how I got to be a level 9 Programmer, although the +2 keyboard, +3 against fire elementals does help."

      Amatuer.

      A more efficient way is to find the Wizard of 7-11. You will find many goods for your journey at his shop, such as the Chilidog of Power(+5 artery clogger), the Mentos Charm Disks(+2 charisma), and the Sack of Magical Poofy Cheese (+3 yellow). You must remember to pick up several Flasks of Mountain Dew, as this will give you a +5 haste.

      Soon after consuming the Chilidog of Power and the Sack of Magical Poofy Cheese, you will be endowed with new abilities, most notably the Chair Earthquake (good vs. earth elementals such as the troll-like Cowerkers) and the Cloud of Stench (+10 repulsion). Combined, these will make you a powerful adversary.

      Now drink several flasks of Mountain Dew. Your skills will multiply at an accelerated rate. When your Boss Templar comes around, quickly apply a Mentos Charm Disk for a charisma boost.

      IMPORTANT! DO NOT COMBINE THE MENTOS CHARM DISKS WITH THE FLASK OF MOUNTAIN DEW! This combination will cause much harm to even the strongest of warriors.

      One last word of wisdom. Avoid reading the Scrolls of Slashdot. Only trolls dwell there. No good will come of it.

      Sincerely,
      ~X~ Level 41 Code Warrior

      • by ardor ( 673957 )
        But what if the Boss has the CTO Cloak Of Invulnerability?
        The only thing I can think of is to cast Summon Chick to distract him...

        Now excuse me, I have only 7 HPs and desperately need a +5 Banana Of Healing.
  • by Anonymous Crowhead ( 577505 ) on Thursday October 26, 2006 @01:01AM (#16589340)
    To me, it sounds like you are not really that interested.
  • ASM (Score:3, Interesting)

    by itwerx ( 165526 ) on Thursday October 26, 2006 @01:07AM (#16589370) Homepage
    Learn assembly language and write a simple app like rudimentary text editor or line-art drawing tool, something that requires most of the basic IO functions. (Then try an application launching menu - yay memory management! :)

          This will give you a foundation that will apply to every other language in the world and damn-fine debugging skills as well.
  • by shoolz ( 752000 ) on Thursday October 26, 2006 @01:08AM (#16589382) Homepage
    I have a feeling that I'm going to be modded troll, but if you know how to program properly you can teach yourself any language without much difficulty and therefore tackle any challenge you place before yourself. Give yourself and insanely unrealistic task and then force yourself to follow through on it. If you can mentally build a road-map to making it happen, you're ok, if not, you may wish to try a new career or remedial programming courses.
    • by W. Justice Black ( 11445 ) on Thursday October 26, 2006 @01:28AM (#16589514) Homepage

      Re: Insane Programming Task

      This is a good idea, believe it or not. Many years ago, I had a case of hubris where I thought I could write an OS in pure assembly. I took a week off of work to give a go at jumpstarting the process. The OS I produced: Er, none. What I learned?

      • How DLLs, particularly linking/loading at compile- and run-time, work at a low level.
      • The innards of three filesystems.
      • Solutions to various bit manipulation problems in assembly.
      • General implementation of hardware-assisted task switching (i.e. saving/restoring registers, etc.)
      • ...and dozens of other esoteric (but later quite useful) topics I can't remember off the top of my head...

      Being a good programmer means challenging yourself--via coding competition (TopCoder, e.g.), weird language acquisition (Haskell seems to be a favorite nowadays), or outrageous tasks (as I did above).

      Picking a favorite OSS program and putting in extra bits is a good thing, too. I did that (though wasn't able to contribute back due to bureaucratic nonsense at my company) with PXELinux and the Linux loop.c driver, for example. Bummer that I could never release the changes, but at least I refreshed my x86 assembly (PXELinux) and learned some kernel driver basics (loop.c).

      Just make sure your company doesn't own your work produced on both on- and off-company time. Ugh.

      • Just make sure your company doesn't own your work produced on both on- and off-company time. Ugh.

        That is both abhorent and morally wrong. Unlucky to get caught out by a contract term like that - I hope you got paid a lot of money for it!
        • by 6031769 ( 829845 )
          When making improvements/modifications to open source code which you won't have rights to and won't be allowed to release, always make sure that you include your name and semi-permanent email address in the comments so that when the day comes that they need to change it again, you (having moved on) can offer to do the necessary for an outrageous fee and/or the mods being released to the public.
    • by teslar ( 706653 )

      Give yourself and insanely unrealistic task and then force yourself to follow through on it.

      Amen. Reminds me of that list of "nightmare exam questions" too... can't be bothered to look for it, but the Computer Science exam went something like this:

      Question 1:
      Develop a Fith Generation Programming Language [wikipedia.org]. Use this language to answer all other questions in this exam.

      And for the record, the first insane task I set myself, if I remember correctly, was to write a system for adding a proper pulldown menu system

  • Expand (Score:5, Informative)

    by illuminatedwax ( 537131 ) <stdrange@nOsPAm.alumni.uchicago.edu> on Thursday October 26, 2006 @01:10AM (#16589396) Journal
    Several suggestions:

    • Learn different programming languages. Perl, C++, Python, Ruby, and make sure to include functional ones like Lisp, Haskell, and ML. Build something useful or interesting in each of them.
    • Study algorithms. Get an algorithms textbook and learn about trees, linked lists, hashes, etc.
    • Study complexity theory. Learn how to find the big-O running time of an algorithm. Learn how to reduce an NP-complete problem so you can tell if the problem you are working on is intractible.
    • Study math. Learn cryptography, etc.
    • Read Knuth's Art of Computer Programming.
    • Complete all the tasks you can from the 2006 ICFP Contest [icfpcontest.org].
    • Re:Expand (Score:5, Informative)

      by AKAImBatman ( 238306 ) * <akaimbatman@gmaYEATSil.com minus poet> on Thursday October 26, 2006 @01:21AM (#16589468) Homepage Journal
      Learn different programming languages. Study algorithms. Study complexity theory. Study math. Learn cryptography, etc. Read Knuth's Art of Computer Programming.

      Funny. That sounds an awful lot like a CompSci degree.

      .

      .

      .

      .

      Just saying.
      • I think we've learned something here today :)
        • Mod parent up. When I was in a similar place to the submitter, I started by reading the usual recommended programming books and doing small projects to learn new languages, but what had a more positive impact was starting a CS or SE Master's program. Some courses are boring but others are amazing; I'm taking a course now that has weekly programming assignments, and I'm seeing benefits from putting new ideas into practice over and over again. The fast pace is stretching me and forcing me to improve; I kno
          • When I was in a similar place to the submitter, I started by reading the usual recommended programming books and doing small projects to learn new languages, but what had a more positive impact was starting a CS or SE Master's program

            I think you're missing the point of my post. The submitter claims to already have a CompSci degree. Which means that the items listed should be redundant. If they aren't (which they probably aren't), it says a lot about what he got out of his education. Whether that is his faul

      • Re:Expand (Score:5, Insightful)

        by RAMMS+EIN ( 578166 ) on Thursday October 26, 2006 @06:55AM (#16591002) Homepage Journal
        ``Funny. That sounds an awful lot like a CompSci degree.''

        I _wish_ CS degrees actually taught people different programming languages these days. And I don't mean mentioning them in passing and showing a few snippets of code, but _actually_ making people use the concepts of these languages and recognizing the value of these concepts.
        • by Slithe ( 894946 )
          From my limited experience with CompSci degrees (I am a Physics major), Computer Science is basically Applied Mathematics. A knowledge of algorithms, proofs, and a good helping of experience to understand the 'programmers mindset' are far more important than learning different languages. Nearly any problem can be solved with a Turing Complete language, so it hardly matters which one it is. In addition, most programmers will use the popular languages (like Java) in their jobs, so learning less popular langua
          • ``From my limited experience with CompSci degrees (I am a Physics major), Computer Science is basically Applied Mathematics.''

            I suppose you could say that, but I prefer to see computer science as a discipline on its own, which happens to involve some mathematics (as so many disciplines do). The overlap between mathematics and computer science is actually very limited: there are lots of things that are considered part of mathematics, and only a few of these are relevant to CS; conversely, there is a lot to C
    • Almost forgot - SICP [amazon.com] is indispensable. Read it and do the exercises (also teaches you Scheme!).
    • Re: (Score:3, Informative)

      Read Knuth's Art of Computer Programming.

      The benefits of reading this is twofold: 1) you can say that you've actually read it, and 2) you can refer to it in any programming related argument: "Look it up in Knuth!"

      Seriously speaking, the books I've found useful (more so than Knuth, anyway) in improving my programming or software engineering skills (in no special order):

      You'll notice that programming is

  • by LeonardsLiver ( 885268 ) on Thursday October 26, 2006 @01:15AM (#16589420)
    but have you considered helping on a open source project? Depending on the project (and yourself) you could learn a lot. It being a real project with a real team, etc, should sufficiently motivate you.

    As for books, pick up K&R & read it, work the execrises, repeat.

    Best of luck.
  • Find a project you're interested in, see what needs doing and get involved. Contribute patches, propose ideas, ask for feedback from more experienced people. You can practice a number of important skills this way both technical and social. A big part of working with others is that you get to start understanding how other people think--that will both grow your understand and help you understand where your natural boundaries are. You need both those things to grow.
  • Books? (Score:2, Interesting)

    by prash_n_rao ( 465747 )
    I would recommend volunteering for a GPLed project in a domain that you want to improve your skills in. The real-world issues you'll face will surely improve your skills in domains thet you are interested in. The books/material you would have to read will get driven by this project's needs.
    • While studying is all fine and good, you really need to code. The GPLed project is good for few reasons.

      1. It forces you to read other people's code and possibly interact with other coders. Depending on the project, your input might be restricted by other parts of the project or you'll spend time revising someone else's code. Common things in the workplace.

      2. Hopefully, you're adding value to a good GPLed project instead of a half-finished project that no one else will see. There's already plenty of those.

      3
  • Similar Past (Score:3, Interesting)

    by cmeans ( 81143 ) * <chris.a.meansNO@SPAMgmail.com> on Thursday October 26, 2006 @01:23AM (#16589484) Journal
    I had a job at a large corporation...not too much programming, but (eventually) lots of networking, support etc..

    I streached my wings and found places where I could do some programming to expand our capabilities, still within my job function.

    Eventually (after about 7.5 years at that company, which I started at straight out of college), I quit (lots of other reasons, but I was also just burned-out and not challenged enough). I took about 8 months off, learned C (only got Pascal and a smattering of other languages in college), and developed a variety of windows based utilities etc.. Not so much to sell, but as a learning experience. After that break, I slowly started back into the regular work-force, but aimed myself at a programming job (but now had lots of other experience behind me).

    Now I have a great programming job, working on a variety of projects, and lots of flexibility.

    I never had aspirations to be a game developer, business oriented applications and services are more my speed. Try to decide what area you want to develop in, then aim yourself via classes, books, etc. towards that goal.

  • by Animats ( 122034 ) on Thursday October 26, 2006 @01:25AM (#16589496) Homepage

    Six years out of school and "programming on and off" seems strange. What kind of programming do you want to do? GUI stuff? Graphics? Games? Algorithms? Databases? Real-time?

    One way to get better as a programmer is to do maintenance programming on code written by someone better than you. Learning to understand someone's thinking by reading their code can be a worthwhile exercise. It's also useful to be able to write in someone else's style.

    Right now, something worth getting good at is understanding how to write highly parallel programs that are reliable. Write something that has lots of intercommunicating threads and be confident the locking is correct. There aren't that many people who consistently get that right. You have a CS degree, so you have the theory for that. Put it into practice. The world is full of underutilized multiprocessors. Learning how to write safe concurrent code will definitely make you a better programmer. (It will also make you realize how bad most mainstream programming languages are for this.)

    On the language front, today I'd say that you should be good at either Java or C++ (C# if you're in Microsoft land), and either Perl or Python (VB if you're in Microsoft land). One strongly typed language that goes fast, and one weakly typed interpreter. Basic familiarity with the HTML/PHP/Javascript world is useful, but don't spend all your time on the details of that - that's for low-level programmers with two years of experience. Also, learn how and when to use a relational database, at least at the MySQL call level.

    • Re: (Score:2, Interesting)

      by Osty ( 16825 )

      Also, learn how and when to use a relational database, at least at the MySQL call level.

      I would suggest that if you're going to take the time to learn a relational database, pick one that will cover all of the core functionality without introducing its own idiosyncracies. PostgreSQL is free, SQL Server Express is free, and you can get trial versions of Oracle and DB2 for free as well. Once you've learned on a real database (with proper transactions and foreign key support without having to monkey arou

      • Re: (Score:3, Insightful)

        by fbjon ( 692006 )
        bad habits that will be difficult to break
        That sounds a bit exaggerated. It's not like moving from MySQL to PostgreSQL is like moving from BASIC to C or Java.
      • I'm curious about this, partly for the specifics and partly because I'm aware from other areas I know well that geeks picking up a new tool on their own can sometimes get the wrong idea.

        I've recently been developing a few databases for a local non-profit I work with, just things like simple financial record-keeping and the like, and hooking these into the organisation's web site. I've been using MySQL, as much because it was what was installed on our host's system as anything else. However, as far as I've

    • ``Right now, something worth getting good at is understanding how to write highly parallel programs that are reliable. Write something that has lots of intercommunicating threads and be confident the locking is correct. There aren't that many people who consistently get that right. You have a CS degree, so you have the theory for that. Put it into practice. The world is full of underutilized multiprocessors. Learning how to write safe concurrent code will definitely make you a better programmer. (It will al
    • ``On the language front, today I'd say that you should be good at either Java or C++ (C# if you're in Microsoft land), and either Perl or Python (VB if you're in Microsoft land). One strongly typed language that goes fast, and one weakly typed interpreter.''

      Meh. I see why you would want a fast language and a language that lets you write things concisely, but why not a language that has both features? OCaml, for example.

      In terms of languages that are worth learning for their concepts, you shouldn't stop at j
      • I see why you would want a fast language and a language that lets you write things concisely, but why not a language that has both features? OCaml, for example.

        Because there is such a thing as the right tool for the job, and often it's best to go with a specialised tool that does one thing very well, rather than a hybrid that does most things OK. To use your own example, OCaml can certainly be fast and obviously it supports a functional programming style, but how often do you see an example where it's d

        • Job boards are a notoriously inaccurate way of gauging which programming languages are actually useful or in demand

          Well, I can see "useful", but job boards pretty much define what languages are "in demand". After all, isn't that where the demands are made?

          I actually lucked into a "senior support" position, where I have to write interfaces to move data between systems. As long as it works, that's OK with my boss[1], so I have written stuff in C, Java, Ruby, Perl, and...well, there was that one in COBOL, bu

    • by Coryoth ( 254751 )

      Right now, something worth getting good at is understanding how to write highly parallel programs that are reliable. Write something that has lots of intercommunicating threads and be confident the locking is correct. There aren't that many people who consistently get that right.

      Then learn CSP [usingcsp.com] or CCS or a similar process calculus that will let you easily reason about vast numbers of processes and be sure you don't have deadlock or race conditions. You an convert that to code easily enough in a lot of cases:

  • Start doing some personal projects in a different language to the one you're exeperienced in.
    If you use an object oriented language, then learn Smalltalk [smalltalk.org], you'll definitely learn some stuff that you'll be able to apply to your main language.
  • by rocjoe71 ( 545053 ) on Thursday October 26, 2006 @01:33AM (#16589550) Homepage

    ...No seriously. If you join an IT department where you're the "big fish in a small pond" people will start to notice, they'll give you the tough jobs (note: NOT read as "fun" or "challenging") and because the rest of the IT department is crap they'll pile it on and I mean it. If you find the right place (i.e. the worst place) they'll stack it up and then slam you for not getting it all done sooner.

    Instead of sinking under all that work, it will become you're motivation to raise your game and plow on through. You'll find new techniques to get work done, you'll learn to identify the patterns that get work done in the department and you'll invent new processes out of those patterns. When you start to succeed, you'll master your job and maybe a programming language or two.

    Then when you're feeling confident about your skills, QUIT that job and go join a firm with a good reputation, knowing full well you're ready to play with the big boys.

    But seriously, don't go searching for a book or learning material. Search for MOTIVATION. It's through motivation that we test how much weight we can pull and it's motivation that will select the subjects that we want to study the most.

    • Excellent advice - I'm starting out in the design/development world as a web developer for a small agency, and there's nothing as good for learning your trade as being the guy that can get things done.

      Over the past week, I've done a huge variety of things, including working with an incredibly talented developer at our sister company to get a brochure generated from a product database that already existed. Sadly I didn't get home until 2am yesterday, but hey - it's all experience!
  • Download the Microsoft XNA framework and build a game!
  • how i am learning... (Score:2, Interesting)

    by b1ufox ( 987621 )
    Most of the programmers face this question in the working phase of their lives, sooner or later. The comparision is inevitable, afterall who doesnot want to be master or better and better in their working area.

    Being a programmer myself and looking for answers, finding most of them on my own and finding other on this thread :), i find some interesting observations.

    To be a good programmer you need practice for sure, but you need stimulating challenges to work on.As in my case i found that to be the Linux ke

  • Challenge yourself with something difficult. I don't mean writing a new Compiler or RPG. Something you actually need or would like to have.

    Projects I worked on included writing
    - a small RT OS for it to interface to my computer to perform maths routines faster, all programmed in assembler and later in C.
    - a multiuser 3D based engine (including all the 3D rendering and lighting routines - this was in the early 90s) in C and assembler
    - a python based server monitoring system with awk and perl agents
    - a neural
  • Minor? (Score:3, Insightful)

    by EEBaum ( 520514 ) on Thursday October 26, 2006 @01:55AM (#16589672) Homepage
    What was your minor in college? Sounds like someone needs a change of scenery.
  • by ghostunit ( 868434 ) on Thursday October 26, 2006 @01:56AM (#16589690)
    I recommend you the following essay (or any by Paul Graham for that matter):

    http://www.paulgraham.com/avg.html [paulgraham.com]

    If you have a boring programming job such as coding Java web apps (as I do) it is particularly important you turn away your attention from the mainstream (e.g. the framework of the week) or else you too may become yet another boring corporate drone.

    It is also very important to avoid fads (such as PHP) as well as stuff that gets a lot of attention but only because of the huge publicity behind it and the swarm of clueless people who fall for it (.NET, Windows whatever)

    Finally, it is essential that what you work on is interesting in itself (to you, of course), otherwise no matter how effective a way you find to make it, it will fail to inspire you and without inspiration your mind will deteriorate.
    • by Qbertino ( 265505 ) <moiraNO@SPAMmodparlor.com> on Thursday October 26, 2006 @07:55AM (#16591296)
      Someone calling 'Java Web Programming' boring and PHP a fad. [sarcasm]Gee wizz, what kind of person could that be?[/sarcasm]

      1) Neither Java or Webprogramming or both together are boring. It's jobs and projects that can be boring. If it isn't your thing, don't do it. And if the webstuff your doing in Java actually *is* boring, you might want to consider switching your framework? The current, somewhat justified hype is Rails but I'd actually suggest Symfony. Which, in second instance. is a PHP framework.

      2) Sorry to be raining on your parade, but you're talking out of your ass. PHP isn't a fad. It was an Open Source SSI template solution that scratched an itch ten years back that could be solved satisfactory with Perl alone. Now it has grown to number two in the server side game, moping the floor with Cold Fusion, ASP and a few failed, sad and sorry attempts at consistent Java webframe projects. It's easy to learn, has by far the largest amount of very mature and successfull OSS webprojects and scares the living piss out of BEA, Intersystems and the occasional MS web plattform division.

      PHP is a descendant of Perl and thus simularly crazy, no doubt - but calling it a fad puts you in the classic position of an anti-social, they're-all-holding-me-back Lisp/Ocaml/Eifel/[fill in rare academic PL here] crack that's actually best off *not* doing any stuff that requires frequent team interaction, such as - believe it or not - web projects. Ever considered doing exotic science stuff on large supercomputers or bio-IT or so? Chances are you'll feel like a bug in a rug in those fields.

      Real world programming is about learning to cope with the restrictions of the real world, called load distribution, wacky and stone-age database concepts (you call PHP a fad but don't lose a word on SQL - how am I supposed to take your opinion for granted?), inconsistent and/or non-existing developement pipelines in dire need of updating, shoestring budgets and the occasional boss/client poping in and overthrowing everything. Programming and IT is about helping the people along, raising your boss/client to be aware of the needs of solid IT and it's resulting advantages and, in the end - believe it or not - acually delivering marketable results. All together makes up the skill of a good programmer. Pick your technology - whatever it may be it doesn't matter, only OSS may be a prerequisite - and get on with becoming one.

      That's 2 cents from a client- and server-side web developer.
      • Grandparent probably still lives in academia and probably never has had a real job. Parent is right on.

        Lisp is fun to play around with, but Paul Graham's Viaweb wasn't aquired by Yahoo because of it. The idea behind Viaweb was new, and during the dot-com bubble it didn't matter if you wrote in C, Lisp or punch-card machine code: you'd make insane amounts of venture capital anyway.

  • Modelling (Score:4, Interesting)

    by Spiked_Three ( 626260 ) on Thursday October 26, 2006 @02:06AM (#16589746)
    Even though I have 29+ years of programming, I have never worked for a company that had its stuff together as far as product development. They all were poorly conceived, constant moving targets dictated by the sale's department's conversation of the day.

    As far as learning new languages go, that's fine - if you are not already there - I was at the point quite a long time ago where 'its just another language'.

    I finally forced myself to do some small projects in text book perfect approach - requirements - use cases - UML models (and appropriate design (not refactor) patterns - Test driven development. The results were some incredible complex multi-threaded x25 to tcp bridge code that worked first time and was a pleasure to enhance. Never before had I experienced that, and never again since either.

    Anyhow, that was a personal accomplishment / satisfaction. Now if I could only find a company that builds software this way.
    • Hear, hear.

      I find it doubly concerning that by-the-seat-of-the-pants development has been shown to be more costly, yet very few organizations strive to improve process.

      I believe that a group of developers founded on solid software engineering principles can run circles around the hack-and-patch crowd. However, the sales-and-marketing folks usually steer the boat and their motivations and thinking patterns are often orthogonal to the developers. Open source projects have a special attraction in this rega

  • WHICH next level? (Score:3, Insightful)

    by TheSHAD0W ( 258774 ) on Thursday October 26, 2006 @02:18AM (#16589810) Homepage
    There are many many sub-disciplines of computer science out there, and the "next level" you're looking for probably involves some degree of specialization. Data mining? 3D in gaming, or photorealism? UI concepts? P2P? I think you're looking for a focus.
  • Without knowing your exact skill level, it's difficult to give you advice. However, I can mention a number of things that I see a lot of coders doing wrong.

    1. Not knowing when to use gotos in c:
    Notice that I didn't say not to use gotos. Anyone who says that gotos are just "bad" hasn't programmed in c enough.

    Strictly speaking gotos should be used, and *only* should be used in exactly two classes of programming problems.

    1.1. Deeply nested loops that must be broken out of entirely on some condition of the inne
  • I would say the thing that served me best in enhancing my programming skills was the insane variety of different programming assignments I had through the years. I started on a satellite positioning and monitoring system in VAX Fortran, then immediately became a Smalltalk programmer coding an expert system for computer maintenance, then jumped into network monitoring using Unix, X Window and C, then went to another company where I did Bayesian analysis of text messages in C on Mac OS, then document scannin
  • by akuzi ( 583164 ) on Thursday October 26, 2006 @04:22AM (#16590398)
    I don't think improving your programming skills is really a worthy
    goal in itself.

    You can be the most skilled programmer in the world, but if you
    just spend your time working on private projects or Top Coder or
    whatever then you are no use to anyone.

    To many people programming is an overly academic exercise in
    self-improvement or entertainment, but really what is it is a valuable
    engineering skill that can be applied to make a positive difference in
    the world.

    If you work on projects you are passionate about the rest will come.
  • by clickclickdrone ( 964164 ) on Thursday October 26, 2006 @06:17AM (#16590868)
    To have enough spare time to do all the stuff people suggest here. Being married with a family, between commuting, working, doing chores, keeping wife happy, bring up children etc. I get maybe 30mins to an hour a week to myself and then I spend that working on website I sort of inherited after the previous editor bowed out. My commute could be used I guess to do a bit but that's the only time I get to listen to the news etc. on podcasts.
    I can't even imagine having time to learn a language or play with programming for the sake of it.
    To all those who have the time for this, enjoy it while you can and appreciate it.
  • What strategies did Slashdot readers use to improve their programming skills

    Try to think of some project you'd really want to do on your own, make sure it's challenging enough, and then use the ressources you need to succeed.

    That's how I went from just knowing some Pascal from college to learning C and DSP (Digital Signal Processing) on my own. I had a precise idea of the project I wanted to do, even tho I had no idea what it would really take to succeed, but with the help of comp.lang.c, comp.dsp and the

  • If you want to get better at writing correct code quickly, I recommend TopCoder. I spent enough years doing ACM and TopCoder competitions that a lot of techniques have become mechanical, and I no longer have to think hard about them to get the details right. (Perhaps I could have achieved the same effect more easily if I used higher-level languages, but I like to work on performance-sensitive problems which require mutable memory and lots of system calls.)

    If you want to design large software systems or cr
  • What worked for me (Score:4, Insightful)

    by mrjb ( 547783 ) on Thursday October 26, 2006 @07:51AM (#16591256)
    - So far, every time I have changed jobs, I've had to work hard to adapt to the new environment. New environments will keep you on your toes on different technologies, introducing you to new concepts which probably apply to various platforms. Once you've seen Oracle, MySQL, PostgreSQL and SQLServer, you'll likely know how to handle databases. Once you've seen PHP, JSP, ASP and CGI Perl scripts, you'll probably be familiar with the underlying concepts of server-side web programming. See a few flavors of everything and you'll readily adapt to new environments.

    - It's not just about learning new programming languages and platforms. Perhaps to you "The next level" means fewer bugs. Do you already consistently write unit tests? Document requirements? Perform regression testing? Have your code tested by collegue programmers? What about code reviews/code reading? Is your code maintainable? Readable? User-friendly? Well-documented? Bug free? How can you (automatically) prevent these bugs next time? How familiar are you with the infrastructure of your programming environment (version control, build servers, network, etc?)

    - Get familiar with 'new stuff'. I first heard about "Correctness by construction" here on Slashdot. Follow the white rabbit and find out what Spark Ada has to do with this.

    - Learn to do things by yourself, even just as hobby project. Although nowadays it is relatively useless to write your own file compressor/database engine/scripting language/GUI framework/chat program/network protocol/file system/operating system, doing so will give you massive insight in how these work in general.

    - Find someone with whom you can discuss better ways to do things. You will pull each other up. Show your code to each other and discuss improvements. Keep in mind that other programmers sometimes have an opposing view from yours. This doesn't mean that one is right and the other is wrong. (Example: What is better, a micro-kernel or a monolithic kernel? Answer: The truth is probably somewhere between those extremes.) The importance is in understanding the shades of gray between the black and white.

    - If you want to learn, first you must get rid of the strong ego that most programmers build up over the years. Most programmers with a strong ego don't deserve their arrogance anyway.
  • At the age of 14, Nadia Comaneci was the first gymnast ever to receive a perfect 10.0 score for a routine at the Olympics. A few years ago I heard a sports writer put a typical musty sportswriter question to her: How do you get a perfect 10.0 score? Comaneci's answer was anything but cliche: If you want to get a perfect score you have to try something difficult. While it seems like sticking with easy stuff is a good way avoid mistakes, it actually leads to more errors, because you aren't forced to achie
  • C++ Programming Style by T. Cargill

    Quite an old book, but it is great for learning how to identify dubiously structured code and then improve it.

    Advanced C++ Programming Styles and Idioms J. Coplien

    Again, quite an old book, but it covers "programming in the large" rather than than the nuts and bolts that many books describe.

    Design Patterns G. Booch, et al

    I was initially underwhelmed by this book, partly because the hype surrounding it was so great, and because I had already been using a number of

  • If you use that phrase in a sentence talking about anything other than video games, it's time to move from CS to an MBA.
  • 1) Be humble.
    2) Practice, practice, practice.
    3) Learn as many programming paradigms as you can stand.
    4) Stop writing programs, start writing libraries and frameworks (and tool kits).
    5) Learn to write programs that write programs.
    6) Some quick reading on AI doesn't hurt.
    7) Know your tool set! Only then will you be able to use it effectively and also its limits.
    8) Understand data, data modeling and relational databases. Without data, programs are useless (and even a mouse click is data).
    9) Understand what OO
  • Find something that utilizes your desired skills as a project for an off-ours hobby, coding a game, improving some website you runm, etc. Make sure it hit on the next level challenges you are going for. (it does not have to be grand to start, just somehting you think you can accomplish)

    Then do it. You only get some knowldge of the concept reading books and artricles, but you won't be skilled at anytrhing it until you do it yourself.

    And if you pick a project or it leads to something you haven't seen done e
  • Some of the language certification tests will push you. One of the things about working on the job is even a crummy company will usually put rules into place that prevent you from doing really ugly things. I mean, "__$_" is a perfectly valid variable name in Java, but I've never known anyone with enough brass to try and push something like that through a code review. Anyhow, I found the Java certification (and a C++ one back in the day) really pushed my understanding of the language itself. Worth doing,
  • by Tronster ( 25566 ) on Thursday October 26, 2006 @09:45AM (#16592586) Homepage
    For about a year I had "The C++ Programming Language" book by Stroustrup, but only used it for reference. Then when I had some free time, I got the idea of doing the problems in the end of each chapter. Not just the easy or hard problems... all of them.

    What I found out was a lot of problems that I thought were trivial, weren't. It really forced me to push ahead, learn STL and the Zen of pointers. The few times I got stuck, I'd send an e-mail to a few other geeky developers (like me) on my work team the next day at lunch, and had a good time trying to solve what appeared to be a simple problem.

    I found that at the end of a few weeks of going through the first few chapters, I just "knew" STL and C++ that much better.

    So my recommendation:
    1. Find a good book that ranked well in your area of interest
    2. Be sure the book has a set of solve-your-own problems at the end of them
    3. Solve them ;)
  • If you are a C++ programmer, I suggest reading Exceptional C++ [www.gotw.ca] and the other books in that series and the corresponding Guru of the Week [www.gotw.ca] archive. You can know a lot of C++ and not know much of what's in there. I found I had a much deeper understanding of C++ by reading it and my coding style has changed (for the better, I hope) as a result.
  • by esammer ( 309397 ) on Thursday October 26, 2006 @01:41PM (#16596674)
    Not having had the advantage of a formal education (I have a GED and otherwise I am self taught) I've had to resort to, in some cases, drastic means of career as well as technical information acquisition. I have found the following to be consistently true.

    1. You are rarely given additional responsibility (i.e. new projects, new technologies, "hard" stuff) at a job without first proving that you can do it. This usually involves doing things that "aren't my job" without getting paid for it for a certain amount of time and then being your own advocate after the fact. No one deserves anything on their own word. Find new things going on at work and put yourself square in the middle of it. Nothing interesting going on? Start analyzing the development process and environment and propose ways of making it better (and ofter to execute said plan).

    2. Read. A lot. I highly recommend O'Reilly's Safari Bookshelf thingie. Some people don't like to read on line and prefer "real" books. I think that's cool, but you can't let that be a reason why you don't read. If you can't afford to buy all the new tech books you want to read, get a library card. Live in some strange place with no libraries? Find a way. You will if you want it.

    3. Read non-technical articles and resources about the development process, software design and architecture, intergration methods. You know, "sciencey" type stuff. I find that I like certain authors more than others. For instance, Martin Fowler (http://www.martinfowler.com/) is the author of many excellent books and is known for his work in design patterns and architecture. If you read nothing else, read his work. Remember there's a much bigger world than writing guest book "scripts" 10,000 times (and thank insert-deity-here that's true).

    4. Talk to other people. Anyone. Everyone. Project managers, developers, system administrators, architects, analysts, QA folk, telco employees, and anyone else that will give you the time of day. Learn what they do, how they do it, why they do it that way, and how it effects what you do and why. You'll have a much better understanding of distributed computing if you understand network and security principals and how they apply (and you might just not open up yet another SQL inject bug because of it).

    5. Commit yourself to improving your craft by practicing it. Constantly. I find that being involved in open source development is 100% free peer reviewed experiance. Additionally, the open source work I've done in the past has won me a job or two. You never know when you might meet someone important to advancing your life.

    6. Consider everyone you meet a student who may benefit from you, but more importantly, a teacher no matter how much smarter you think you are. Discuss, debate, learn, integrate new knowledge, repeat.

    7. Find a mentor. Someone willing to take you under their wing (whether they know it or not) and soak information from them like a sponge. Don't know one? That's why I said *find* one. Very few people learn things themselves. Most people are taught by others, if by written or spoken word, code, IRC, or otherwise. I can't stress the mentor thing enough. Find two. Three is better. Find mentors that don't agree with one another and compare ideas. Learn from everyone.

    This is what has worked for me. I dropped out of high school, got a GED ("good enough diploma"), and got really lucky in meeting the people I did. I do software architecture and design for a living in addition to mentoring and "grooming" developers. I learn more from them in a single day than I learned from any book (give or take).

    Good luck. If you're trying to figure out why you aren't where you want to be or why you haven't attained what you want, you're already a step ahead of everyone else. You'll be fine.

Remember to say hello to your bank teller.

Working...