GraceHopper-MorePowerful

Increasing your programming skill

This is an Ask a Geek Feminist question for our readers:

I’m a geek feminist trying to get into IT, specifically object-oriented programming and Flash/Actionscript. What I’m having the most problems with is practice – I’m taking some Continuing Ed courses because I have a totally different day job, but I still don’t feel like I’m gaining much skill in programming, probably also because I know exactly what I WANT to learn, but I haven’t found anything yet that covers it.

What I’m wondering is, for the typical programmer/developer job path, how do you figure out how to solve programming problems that aren’t covered in your classes? Do you just search through the language documentation (e.g. Java API) looking for relevant code?

This is in many ways closely related to an earlier AAGF question about finding newbie coding problems, but also a little broader: programmers, when you were learning, did you go to the puzzle sites, or work through language docs, or work on open source, or something else?

19 thoughts on “Increasing your programming skill

  1. Mackenzie

    Open source and personal projects are how I learned more. I definitely use Stack Overflow to find relevant code snippets to new things I’m trying out.

  2. Gaby

    Stack Overflow is amazing. And Google will be your best friend during your programming days. I learned a lot during my final project at university, and from then on I have always learned by doing: stuff at work, small personal projects, etc.

    1. Daniel Martin

      Double-plus recommend stack overflow, especially answering questions. Don’t know the answer? Try to find out. Don’t feel confident writing your answer down once you’ve found it? Don’t! You’ve learned something, which is the real goal.

  3. Jen

    I’m in a similar situation and have a follow up question – what do you do after this point? I’m back in school for CS, and I’m not sure how to break into the field from a completely different job path. (and still be able to pay my bills)

    1. Lindsey Kuper

      My first job in the field was a summer job as an instructor at a technology camp that offered courses on programming and web design. Most of the instructors are college students on summer break, so, although they’re expected to be reasonably intelligent and work hard, they aren’t expected to have loads of experience. It was a good way to get my foot in the door for my first “real” job after graduating.

      1. siveambrai

        I would have to say this… I have a degree in software design and the best thing I have found for sharpening my skills is teaching others in a classroom. You really end up having to figure out this stuff well and in a nice polished fashion if you are teaching it to someone else. Kludge will not work.

  4. Caroline

    I learned by reading existing code, mostly. I learned on the job, so there was a lot of existing code for the project I was working on. I guess looking at open source code would have the same effect. Anywhere you can access real-world code written to do real things.

    I also did a lot of googling for examples, hints, and tips. If you can find good documentation or tutorials for the language(s) you’re learning, they usually contain a lot of examples. Sometimes there will be websites with code snippets, or good, practical tutorial books with lots and lots of examples.

    I learned a lot more from reading other people’s code than I did in my formal C++ class.

  5. Elizabeth

    Ditto Mackenzie. Make something really small and manageable, but sufficiently cool to keep you interested. Make a Flash website for yourself! Try to reproduce X element of some ActionScript-based website, without looking at their code, and then compare yours to theirs! You might want to check out how Dreamwidth uses OOP (I know GF has talked about DW a lot, open source, totally female-friendly, great space to find code mentors) and see if that’s a project you want to bash on.

  6. imayer

    for the record, I learned how to code just about entirely in my classes — but it sounds like you have something very specific in mind you want to learn.

    So here’s what I would do:
    Go find a demo that does something a lot like what you want to learn how to do.
    Then pick a piece you want to change (and decide how you want to change it) and read through the code until you find the part that does that. And then change it until it does whatever you decided on. As Mackenzie mentioned, google for how to make those changes.

    Rinse and repeat until you know what all of the code in the demo does, and how to make changes to all of its interesting parts.

  7. Alan

    Identify something that motivates you (by personal desire, or someone will pay you) and try to write it! Documentation is nice, but it’s easy to overlook better solutions and generally is poor at teaching you the local idioms. The best supporting tool is someone friendly who is fluent in the language and tool’s you’re using. It sounds like you don’t have someone like that, in which case the internet isn’t a bad fallback. StackOverflow.com is a great resource; go often with even minor questions, the sort of questions you’d be comfortable chatting with a coworker about in the hallway. Some languages and tools have their own communities; if there is a good one it’s a good place to start. (Off the top of my head, Perl’s PerlMonks.org is good. Irrlicht’s forums weren’t bad either.)

    Some languages and tools do have good introductory books that teach the culture and idioms as well as the technical details. Learning Perl is where I cut my teeth. I’ve only briefly nosed into it, but Why’s (Poignant) Guide to Ruby has some promise. Someone fluent in the language or tool you’re interested in an probably help identify a good book.

  8. Cathy B.

    I’m someone who has both been a coder and hired coders for many years. This is what I’d suggest:

    1. Practice Critically. If you know what you want to learn, build it. Maybe you want to build an Mario emulator or a flash-based paint program or something. Whatever it is, start by break it down into small, little pieces and then breaking that down smaller and simpler until you have a piece that you can start with, and then force yourself to try to figure out the algorithms on your own. When you get stuck, only look up other people’s code when you know, beyond a shadow of a doubt, that you’ve tried your hardest to figure it out yourself first. When you get other people’s solutions, read through the code until you understand exactly how and why it works. If you can, look at a couple different solutions to the problem and try to understand the pros and cons of each. And then slowly add to it and refine it. You’ll probably have to rewrite things over time as you realize what you should have don’t the first time, but that’s normal.

    2. Learn Craftsmanship. Go out of your way to get a solid grounding in underlying concepts and good craftsmanship (things like information hiding and useful variable naming). I personally love Steve McConnell’s “Code Complete 2″. It’s pretty thick, but he writes well, and you can learn a chapter at a time rather than doing it all at once. If you look up the book or his site, he also has references to related info, so you can look up other resources if that doesn’t quite work for you. Usually in class, your focusing so much on either learning syntax (if it’s a language-focused class) or just getting things to work, that you don’t get a chance to learn how to do things well. Or even to recognize the difference between “not broken” and “maintainable” and “elegant.

    3. Look for ways to work with others. Look for a mentor. Maybe by posting on places like this or by seeing if your school has a program for mentoring or talking to your professors and seeing if they have any suggestions for someone to talk to. Look for another person in the same boat and bounce ideas off each other and do code reviews with each others work. Maybe one of your classmates would be interested or you can post online looking for other student-developers looking for someone to work with. Look for opportunities to work in collaborative efforts so you can get comfortable with real world situations where you have to work on other people’s code and have others work on yours and use tools to make it all practical.

    In terms of this as a job path, when I hire people who have just come out of school (regardless of age – I’ve hired a couple vets that are older than me), one of the things I’m most interested in seeing what they did and learned outside the classroom. I don’t pay too much attention to classes unless the person has a particular graduate specialty, because many of the best developers I know studied something else (like math or film or no college at all) and learned to program on their own. Developers need to be constantly learning, and if they can only learn when a teacher shows them, then they’re not going to do well. Having something you can point to and say “yes, I built that – that’s what I know how to code” will help you get hired.

    Good luck!

  9. Selene

    If you’re interested in game-like stuff with Actionscript, you might want to check out the Flixel and FlashPunk libraries. They’re both written fairly cleanly and use OOP. The FliNT particle system is another open-source AS project you might find interesting.

    Nowadays I mostly Google for concepts or code snippets when I’m learning a language or library. Unfortunately, Googling for Actionscript advice can be a bit of a crapshoot. ActionScript 2 was popular but is different in key ways from ActionScript 3, so you need to check the dates on forum posts. It’s also a popular enough search that a lot of parasitic search-engine-exploiting websites have sprung up that mirror forum results but bombard you with ads. Actionscripts.org, Kirupa, and FlashKit are the main newbie-friendly forums. StackOverflow is generally useful for programming but its Actionscript content is a bit lacking in comparison to, e.g. C#.

  10. Denise

    This is going to sound silly, but I taught myself a ton of programming concepts by learning to program in the MOO programming language, used on LambdaMOO and other installations of the LambdaMOO server core. There’s a ton of example code on most MOOs, and although most of the regular-language features don’t exist in the same way they can easily be abstracted from.

    I’m not sure how well it would work for someone starting now, since I got into MOO use in the mid-90s before the web had become synonymous with the internet in most people’s minds and most MOOs that existed back then have been shut down since. But I still do think it was a good — and fun — way to learn. :)

    If you have a social group hanging out on a MOO or MUSH (in my case it was for roleplaying, which gave us a ton of stuff that could be done to make the process easier, but even just a social hangout can tempt you to make fun toys) it may be a good place to start, especially since it’s very, very modular and you can work on things in small bites. LambdaMOO (lambda.moo.mud.org port 8888) is still up, and I used to be a wizard on RupertMOO (rupert.twyst.org, port 9040), which looks like it’s still there as well!

  11. Asheesh Laroia

    There are two major resources that I’d recommend — open source projects, which others have covered in part, and local programming communities.

    Local programming communities increasingly have newcomer-friendly days where experienced programmers are happy to help people with general or specific programming questions. In Boston Python, for example, we call it “Project night”. (In our case, this effort grew out of a gender outreach effort called the Boston Python Workshop for women and their friends.)

    Open source projects are also great; others have talked about how much they’ve learned reading code. I personally have also learned a lot by reading their mailing lists and hanging out on their IRC channels. If you want suggestions for a project to join, or practice with the tools of open source, try https://openhatch.org/ or our IRC channel, #openhatch on irc.freenode.net. (As a disclosure, I’m the project lead for OpenHatch!) (:

    OpenHatch doesn’t have any flash communities indexed at the moment, as far as I know, but languages like C# and Python which have object-oriented code do pop up a fair bit.

    Good luck!

  12. John

    For in-depth learning about coding (which inevitably requires investing quite a bit of time), I’d recommend picking an interpreted programming language with an open-source implementation, and learning your way around the implementation (which is typically in C, which it’s good to be able to read), including how it works generally, and how to add more “built-in” functions.

    This will not only teach you how a programming language works from the inside, but also expose you to a real-world sized programming project, which is a very different matter from the sizes of project that classes typically tackle.

    To use an automotive analogy, this takes you from being someone who can change a flat tire to someone who can strip and rebuild an engine — which will obviously look much better on your CV!

  13. Lindsey Kuper

    If you know exactly what you want to learn, have you tried looking for books on those topics? Ask more experienced programmers for book recommendations or just browse around at a technical bookstore until you see something that looks cool.

  14. Dorothea

    I’ll put in a plug for code cookbooks, especially for those just starting out in a new language. O’Reilly has a “[Language X] Cookbook” series that I’m quite fond of. The XSLT Cookbook saved my bacon a few times, when I had to solve a problem right then and didn’t have time to work out the recursion details on my own. Cookbooks can also sometimes be found online.

  15. slashy

    This thread is an excellent & exciting resource all on it’s own of how-to-learn-to-code tips! So many wonderful comments here, I will have to bookmark it and come back when I need new inspiration.

    I will echo many others with:
    1) Ask questions at Stack Overflow. Turn the act of asking good questions into a learning experience. Your future career in tech will involve asking a lot of questions. Being able to request help in a way that sets out the goal, the problem, the solutions you’ve tried, and any hypotheses you have formed, neatly, clearly and with functioning code examples, is a golden skill. Treat your questions like the precious resources they will be for newbies coming after you- ask a question that will help answer their question.
    2) Make projects that interest you, make them often, and make them being aware that the skills you learn in any one scripting/programming/markup language should be transferrable to others. Learn about good naming, good structure, good commenting, good versioning and so forth.
    3) Be aware that you will probably never stop learning how to code, unless you get bored of solving problems with code and leave the industry. There is no finishing point where you Know How It’s Done, there is only an increasing number of problems you know how to solve and an increasing bank of internal wisdom you can draw on for the best ways to solve them. This is a good thing.
    4) Do not let the macho posturing of the industry scare you into believing that there is some magical point that everyone else has reached where they Know How It’s Done, and that your not having reached this lofty summit means you are a lesser coder than they. Every single female programmer has a story about that moment where they caught some obvious problem generated by some idiot who was treating them like they didn’t know how to code. This will happen, don’t buy into it. It turns out that a person’s capacity to posture has nothing to do with their capacity to code. Also don’t buy into the other side of this, where the need to be correct all the time stops you from taking risks and being confidently wrong. If coding becomes your job, it will be your job to be wrong sometimes. Learning how to be graceful in the face of being wrong (instead of defensive, angry, or convinced that everyone believes you are therefor a terrible coder) is part of the job.

  16. @thorfi

    Perusing the standard language library is always useful, no matter the language. There’s usually open source extra stuff out there, but if you want to know how the “core” of a programming language works, looking at the standard libraries that come with it, how they’re documented, and how they’re intended to work, is very much the go.

    And yes, I’ve been doing software engineering professionally for nearly 20 years, and amateurly for about 10 before that, and nearly every single time I write something using a core library in whatever language, I look at the library documentation, or do some searching for possible existing solutions, and suchlike.

    If you stop doing that, you stop learning, and in this game, that means you’re out of touch, in about a year or two, or possibly less.

    That said, it’s very important to bring your own judgement, of course – just because it’s in the standard library, or is on stack overflow, or somewhere else, doesn’t mean it’s the best code, or the best way to solve the problem *you* have at hand. And “best” is highly contextual.

Comments are closed.