Slashdot Mirror


Taking Your Programming Skills to the Next Level?

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?"

15 of 240 comments (clear)

  1. ASM by itwerx · · Score: 2, Interesting

    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.

    1. Re:ASM by www.sorehands.com · · Score: 2, Interesting

      Spending time doing assembler is good. Though you may not be programming it for a job, it improves the depth of understanding of the higher level languages and how the machine works. By understanding how the compiler converts the code, you can optimize your code to allow compilers to work more efficiently -- ie. i=2; if (x) i=5; Here, you only have one branch, not two and there is minimal cost to set a value.

      Knowing assembler language does help in debugging, especially when there is compiler bugs.

  2. Books? by prash_n_rao · · Score: 2, Interesting

    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.

    --
    This is not my sig.
  3. Similar Past by cmeans · · Score: 2, Interesting

    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.

  4. Re:Perhaps you should learn how to program? by W.+Justice+Black · · Score: 4, Interesting

    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.

    --
    "Time flies like an arrow; fruit flies like a banana." --Groucho Marx
  5. Go work in a crummy company by rocjoe71 · · Score: 5, Interesting

    ...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.

    --
    Height: 38U, Weight: 0 Newtons, Eyes: #0000FF, OS: Gray Matter 1.0 (Alpha)
    1. Re:Go work in a crummy company by Anonymous Coward · · Score: 1, Interesting

      Yeah, that is top-notch advice.

      I did the same.

      I was a researcher at a university here in Sweden, and my theoretical skills where second-to-none, but when I moved out into the real world I couldn't get a job because "I was too over qualified". Then I finally got a job without them knowing much about my background a skills, a complete crap company where nothing worked... and I mean nothing. Actually, the people there where very good at what they where doing but the PHB:s where really running the company (that they owned) into the ground.

      I had to solve stupid problems that management created, so I got to apply the theoretical knowledge that ACTUALLY worked and figured out what DID NOT. It was tiering, and I really dislike working with computers now, but from a work-oriented perspective it was very good indeed. So follow this guys advice, but jump ship when you feel that you never want to touch or see a computer at home.

  6. Re:It's not the eyes, but the brain by __aaclcg7560 · · Score: 2, Interesting

    Or create a website 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.

  7. how i am learning... by b1ufox · · Score: 2, Interesting
    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 kernel.I may not be the best of the kernel hackers but yes i have a passion for kernel.I work on an entirely different area at work, which is C++. But my inqusitiveness and quest to be a good software programmer has led me to realise one thing, you are on your own. Try to learn from your mistakes. More you make them, more you learn.And who knows down the line may be after a couple of years you can be a pretty good programmer.

    Working for a GPLed project is a good idea but you need certain level of expertise for it. And effort you put into your passion for programming will get you to that expertise. Once it is achieved you can choose a GPLed project of your choice and certainly you ll hone your skills for sure. Good luck :)

    --
    -- "Genius is 1% inspiration and 99% perspiration" - TAE --
  8. Modelling by Spiked_Three · · Score: 3, Interesting

    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.

    --
    slashdot troll = you make a compelling argument I do not like the implications of.
  9. Re:Programming self-improvement by Osty · · Score: 2, Interesting

    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 around with different table engines, SQL-language stored procedures, user-defined table and scalar functions, more compliant ANSI-standard language constructs, etc) you should have no problem picking up MySQL if a job or application requires it. However, learning on MySQL will lead to bad habits that will be difficult to break when you move to a proper relational database.

    Just because MySQL is used everywhere doesn't mean it's good. I would think Slashdotters would understand that, given the attitude towards Windows around here ... :)

  10. Re:Find a new job. by __aaclcg7560 · · Score: 2, 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.

  11. Re:Find a new job. by o2sd · · Score: 3, Interesting

    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 location.

    Now I am not recommending this approach for everyone, I'm just saying it works for me. More Risk == Better Programming

    YMMV

    --
    - Nothing to see hear.
  12. Re:It's not the eyes, but the brain by Aladrin · · Score: 4, Interesting

    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.)

    --
    "If you make people think they're thinking, they'll love you; But if you really make them think, they'll hate you." - DM
  13. Re:It's not the eyes, but the brain by indraneil · · Score: 2, Interesting

    I can only speak for myself and this is what happenned to me. 2 years into my job out of college, I got into a rut! Work was not really throwing up any challenges and I really was not progressing fast enough!
    I must have been mad, but I registered for Grad school and started attending classes while staying at my job!
    Man - was it hard!
    The good things that happenned were -
    - College really forced me to solve non-trivial problems under simulated circumstances.
    - College forced me to submit solutions in languages that I do not use at work
    - College forced me to study subjects that I would never be exposed to at my work place!
    - Also interestingly, I have more respect for software licenses now and rather than use cracked software (as do most college students in my part of the world), I stuck to hand coding (often without IDEs)
    - Often, I coded my problems on one OS (have to use windows at work) and was evaluated on a different one (mostly Linux). That made me more aware of platform dependencies, even in languages like Java etc.

    I have a supportive wife, and my office is accomodating enough, so I have survived thus far. But it is also true that the entire soup I got into has forced me to upgrade my skill sets. I would not recommend usage of my methods without caution, but it sure is doing wonders for me!