Stories
Slash Boxes
Comments

News for nerds, stuff that matters

Advice For Programmers Right Out of School

Posted by Hemos on Mon Dec 11, 2006 10:26 AM
from the words-of-advice-for-young-people dept.
ari1981 writes "I recently graduated from school with a CS degree, and several of my classes were very theoretical in nature. There was some programming, but it seems not as much as in other schools. I'm currently working at a company where I'm doing primarily c/c++ app development on unix. But as I read slashdot, and other tech sites / articles, and realize for some of the software being written nowadays, I would have absolutely NO IDEA how to even begin writing it. I remember first time I saw them, I thought console emulators were really cool. After my education, I have no idea how someone would begin writing one. With the work I'm doing now, it doesn't seem I'm going to be using (or creating) any of the really cool technology I hear about. How did everyone here begin learning / teaching themselves about different aspects of programming, that they initially had no clue about? How did you improve? Programming on your own? Through work?"
This discussion has been archived. No new comments can be posted.
Display Options Threshold:
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
(1) | 2 | 3
  • I'm just going to throw something out there about your attitude towards computer science. I thought console emulators were cool also but I never took the time to dive into how they worked. I did take the time to dive into some OSS projects (like Weka) and find out how they work.

    While this wasn't what pulled me into computing, it may be your addiction. Here's what I would suggest doing--take a well developed open source emulator (you know, like an NES emulator [sourceforge.net]) and pick apart the source tree. You might find that the code is obviously doing some low level translation of the ROM which essentially changes its executable language to be IA32 or some such thing. It may be that you don't understand the architecture of the NES itself and therefor you can't really develop this yourself. So there's some insider information you lack but it will still be a good learning experience and may prompt you to figure out how to A) dump ROMs and B) reverse engineer a console architecture. Even if these are fruitless searches, how far you're willing to go will be a good indicator of whether or not CS is for you. Yeah, I hate to say this but I know people with CS degrees that simply don't have the debugging mentality to be programmers. A simple test is to think back to the times you saw something neat. Did you ever have a strong internal urge to find out how it worked or to try and modify it to augment its task?

    But as I read slashdot, and other tech sites / articles, and realize for some of the software being written nowadays, I would have absolutely NO IDEA how to even begin writing it.
    Fear not your own ignorance. Only fear your acceptance of it. I am confident that if I wanted to build an emulator I could. I personally find other things more interesting but you just have to buckle down and really pick it apart and look for answers. As I said above, these emulators might have proprietary reverse engineering so these backwards black boxes might not be the best place to start as you may be met with frustration. On top of that, the newer consoles are now fighting a war & implementing encryption scheme which just makes the emulator all that more complicated. Why don't you pick a project like Firefox? Get the source, find out what the common developing environment is and step through the code when you visit a page. That's where it all starts.

    Most importantly, you don't need to do everything from the ground up. It helps to know everything that's going on below the abstractions you sit upon but you don't need to think about that every time you write code. Learn to use libraries & frameworks. To quote Salvador Dali: "Those who do not want to imitate anything, produce nothing." I couldn't start writing an emulater either. But if I looked at the source trees and structures of the more popular ones out there, I'm damn sure I could figure it out. That confidence I have in myself is infallible and that's important to me. Sorry to sound like Dr. Phil but you asked for my opinion.

    There are different tricks to different applications. Some are more simple than others. In my opinion, the less tricks you need to get started in a language, the better. Because we're not all world class magicians (although every language has some players that could rock your world in said language). This is why Java, while not as efficient as C, is probably taught to you first. There are very few tricks one needs to know in Java. But you know what? Java is still quite useful. Those responsible for implementing it did a decent job and now the web service programmer needs to know very little about them because configuring them has been abstracted and made easier by many UI & IDE tools out there. But web services are a very practical and widely accepted concept out there today. In fact, pay the bills by writing some very inane web se
  • digg around by jrwr00 (Score:2) Monday December 11 2006, @10:29AM
  • make things on your own by roman_mir (Score:2) Monday December 11 2006, @10:30AM
  • Write new code (Score:5, Insightful)

    by stibrian (848620) on Monday December 11 2006, @10:31AM (#17194702)
    If you want to be a coder...

    write more code of your own
    write more code
    read more code
    read LOTS of other people's code (DL a smallish OSS project at first, then larger ones).

    rinse, lather, repeat.

    If you're concerned that you're not learning "cool new things" on the job, learn them off the job. Your destiny is your own, as hokey as that sounds...

    love your work.
    • Re:Write new code by pjwhite (Score:3) Monday December 11 2006, @11:20AM
    • Re:Write new code (Score:4, Insightful)

      by Savage-Rabbit (308260) on Monday December 11 2006, @11:21AM (#17195514)
      If you want to be a coder...

      write more code of your own
      write more code
      read more code
      read LOTS of other people's code (DL a smallish OSS project at first, then larger ones).

      rinse, lather, repeat.

      If you're concerned that you're not learning "cool new things" on the job, learn them off the job. Your destiny is your own, as hokey as that sounds...

      love your work.


      That's pretty sound advice.

      • Personally I'd say that for the first few years you'd be better off picking jobs with companies where you are likely to pick up disciplined, professional development practices, marketable skills and knowledge than you will be chasing solely after the money. Also don't allow your self to become too specialized, you want a broad skill-set. Excessive specialization is leads to trouble.
      • Learn things you don't learn at work by setting up your own OSS project, joining one or if you absolutely can't stand doing something for no profit set up a shareware product of some sort to keep your self in practice. Half the jobs I have gotten I got because of knowledge I gained on my own time.
      • Another thing to keep in mind is that whether you are writing code at work or privately one of the best ways of learning about software design, as the parent post suggested, is to look at other people's code (think: sourceforge). Doing that also allows you to compare different approaches to solving design problems. For example writing a daemon in C vs. C++ vs. Java vs. Perl. Some approaches will be awful others more sensible but you can learn something from all of them. Even comparing the different approaches people take to solving the same problem in two projects that both use C++ can be interesting.
      ... and yeah it helps a lot if you love what you do for a living. In my experience some employers will actually consider hiring applicants with less experience if they are enthusiastic about their occupation.
      [ Parent ]
      • Re:Write new code (Score:5, Informative)

        by twiddlingbits (707452) on Monday December 11 2006, @12:12PM (#17196302)
        I got to disagree with this "Also don't allow your self to become too specialized, you want a broad skill-set. Excessive specialization is leads to trouble." This is EXACTLY what I have done in my 24 yrs in IT and Software by working at a number of places and a lot of contracts. What employers want now IS Specialization, say .NET with C# and SQL and Exchange, etc. or J2EE with a certain Java server and certain appplication types. I see a LOT less jobs for folks like me who know software, hardware, networks, Project Management, Sales, different methodologies, 25yrs of IT technologies and I also hold an Advanced degree. I suppose my downfall is I'm not a Java or .Net "pro" as I was in Management and Architecture when these technolgies were emerging and never practiced them. I would say find a solid progrgramming niche and MASTER it but beware of the things that are coming to replace what you know. Today's hot stuff is tomorrow's warmed over crap.
        [ Parent ]
    • Re:Write new code by thisIsNotMyName (Score:1) Monday December 11 2006, @11:23AM
    • Re:Write new code (Score:5, Interesting)

      by Xzzy (111297) <{sether} {at} {tru7h.org}> on Monday December 11 2006, @11:27AM (#17195622)
      (http://tru7h.org)
      read LOTS of other people's code (DL a smallish OSS project at first, then larger ones).

      Especially here: http://thedailywtf.com/ [thedailywtf.com]

      Learning what not to do can be as valuable as learning what you should do. The comments can be useful too, the problems get picked apart pretty extensively and can be quite educational. If anything you ever write never ends up on a site like that, you can't be that bad off.
      [ Parent ]
    • Re:Write new code by spirality (Score:3) Monday December 11 2006, @11:52AM
    • Re:Write new code by TTK Ciar (Score:2) Monday December 11 2006, @12:04PM
      • Books, Books, Books... and Notes. (Score:4, Insightful)

        by camperdave (969942) on Monday December 11 2006, @01:25PM (#17197434)
        (Last Journal: Tuesday January 16 2007, @10:33AM)
        One book you should definitely read is Writing Solid Code by Steve Maguire. It will help you train yourself to be aware of how bugs can creep into your programs, and what to do when you encounter them. Instead of just blundering ahead with a fix, you should be asking yourself "How could I have prevented this bug?" and "How could I have automatically detected this bug?".

        You may also want to read is The Elements of Programming Style by Kernighan and Plauger. I've only skimmed through it, but it talks about writing code so that its function is obvious to other programmers. (Trust me, few people can look back on code they wrote five years ago and remember why they wrote a particular routine that way.)

        Another book I would recommend is Structured Computer Organization by Andrew Tanenbaum. It will take you from circuits and logic gates, through how a CPU works, to how Operating Systems work.

        The only other recommendation I would make, is to become an organized note taker. The top programmer in one of the companies I worked for was such a person. If there was a question with the way something worked, he could pull out a notepad, flip through a few pages, and tell you what issues he was dealing with in the code, and why he made certain design choices. If he got an error message, he would write it down, and what steps he used to correct it.

        I'm sure others have mentioned continually educating and upgrading yourself, and that an IT career these days means having lots of short term jobs, rather than a single lifelong job, joining clubs and associations, etc. The only thing I would add to that is Practice, Practice, Practice. Write code until it is second nature to bang out high quality code.
        [ Parent ]
    • Re:Write new code (Score:5, Informative)

      by Creepy (93888) on Monday December 11 2006, @12:10PM (#17196260)
      (Last Journal: Monday October 22, @12:27PM)
      I think you missed two key points:
      Pick something with realistic goals for whatever sized team you have (or self) and set goals
      Design your work first

      If you don't do those, you'll probably never learn to finish code. Setting goals with a team usually needs to be done based on time and skill levels of members. If it's just you, set goals for yourself and stick with them as best as possible. Don't worry too much about missing a date as long as you made progress towards your goal (but make sure to set a new goal).

      Also don't be afraid to axe a project if you have to. I had a flight sim with some beautiful code in it (the blitter was fantastic... too bad blitters died with that era of hardware) and over a year of work and I killed the project even though completion was probably only a few months away. Why? because it had a problem at the core of the engine that was unfix-able and needed to be recoded from scratch to boost it to optimal framerates (specifically, I used virtuals at a low level not knowing that they have an expensive look-up table). I also had bought my first Voodoo card by that point and knew that was the future, not painter's algorithm and blitters. As sad as I was killing what I hoped would be a shareware quality flight sim, I learned so many lessons that it was worth the time spent.

      I can't tell you how many kids I've talked to that want to make a commercial quality MMORPG or a 3D shooter in a few months...
      [ Parent ]
    • Re:Write new code by tobiasly (Score:3) Monday December 11 2006, @12:35PM
    • Re:Write new code by Pete Brubaker (Score:1) Monday December 11 2006, @01:08PM
    • Re:Write new code by Maltheus (Score:2) Monday December 11 2006, @03:03PM
    • Re:Write new code by Metasquares (Score:2) Monday December 11 2006, @03:34PM
    • Re:Write new code by Bonobo_Unknown (Score:1) Monday December 11 2006, @11:01PM
    • Re:Don't spend too much time on IT. by hachete (Score:3) Monday December 11 2006, @11:32AM
    • Re:Don't spend too much time on IT. by mattgreen (Score:2) Monday December 11 2006, @12:28PM
    • Re:Don't spend too much time on IT. by MrAnnoyanceToYou (Score:2) Monday December 11 2006, @12:37PM
    • Re:Write new code by Metasquares (Score:2) Monday December 11 2006, @03:37PM
    • Re:Don't spend too much time on IT. by HeroreV (Score:1) Monday December 11 2006, @09:28PM
    • 3 replies beneath your current threshold.
  • Refund? (Score:4, Funny)

    by dazedNconfuzed (154242) on Monday December 11 2006, @10:32AM (#17194716)
    realize for some of the software being written nowadays, I would have absolutely NO IDEA how to even begin writing it.


    Sounds like you should ask your school for a refund.

    • Re:Refund? (Score:4, Funny)

      by TubeSteak (669689) on Monday December 11 2006, @10:43AM (#17194932)
      (Last Journal: Saturday February 25 2006, @11:02PM)
      Sounds like you should ask your school for a refund.
      Or he could apply to their PhD program :op
      [ Parent ]
      • Re:Refund? by EvilTwinSkippy (Score:3) Monday December 11 2006, @12:17PM
      • 1 reply beneath your current threshold.
    • seriously by Nasarius (Score:3) Monday December 11 2006, @10:50AM
    • Re:Refund? by Anonymous Coward (Score:1) Monday December 11 2006, @10:53AM
      • Speak for yourself by dazedNconfuzed (Score:2) Monday December 11 2006, @11:15AM
      • Re:Refund? by Millenniumman (Score:2) Monday December 11 2006, @06:32PM
    • Re:Refund? (Score:5, Insightful)

      by The_Wilschon (782534) on Monday December 11 2006, @11:19AM (#17195490)
      (http://www-cdf.fnal.gov/ | Last Journal: Wednesday June 13, @11:39AM)
      You DO realize that he got a Computer Science degree, right? Not a programming degree. I realize that the name CS is usually used today to tart up a programming degree and make it sound special, but a Real CS degree is much closer to a degree in Mathematics (and not applied math...) than it is to a degree in programming. It does sound like maybe what he was looking for was a programming degree, but it was his responsibility to figure out before he started whether his school offered CS or programming under the CS name. Asking for a refund would definitely not be appropriate here. Actually, if I went to a school that offered CS, and found I had a programming degree when all was said and done, I might ask for a refund then. But not when they say its CS and it turns out to actually be (gasp!) CS. That's like going for a Physics degree, and complaining when they don't teach you engineering. If my Physics profs tried to teach me engineering all the time, I'd be looking to transfer somewhere with a REAL Physics program. Not that there's anything wrong with engineering, but a) it isn't what I want to do, and b) it isn't Physics.
      [ Parent ]
      • Re:Refund? (Score:4, Insightful)

        by TheRaven64 (641858) on Monday December 11 2006, @11:55AM (#17196054)
        (http://theravensnest.org/ | Last Journal: Sunday October 07, @07:05AM)

        A real Computer Science degree should have taught him the principle of Turing-equivalence. It should have had at least some assignments expressing algorithms on Turing Machines, Unlimited Register Machines, Petri Nets, Lambda expressions, etc. The principles of converting between one universal mechanism for computation and another should be deeply ingrained. How do you prove that a model of computation is universal? You implement an emulator for an existing universal model of computation (typically a Turing Machine) in it.

        That covers the basic theory. Then you need to understand how a real computer works. Any half-decent CompSci programme should have explained the basics of a relatively modern architecture. From there, it's just a matter of learning the instruction set, memory layout, devices present and how to communicate with them; anyone who actually gets a CompSci degree should have the ability to read the relevant documentation and understand the architecture.

        Past the theory is implementation. The first bit of that is understanding how to parse an instruction stream. Any CompSci course that doesn't cover the automata theory required for this should be regarded with suspicion. Once you've parsed the instructions, and understand what they are meant to do, it's just a matter of implementing functions that handle them, which is time-consuming, but not conceptually difficult.

        Now, the emulator produced using these steps would be slow. I would estimate between 1% and 0.1% of the native CPU speed. Fortunately, on a modern CPU that is fast enough. If you want to get in to dynamic (JIT) recompilation and caching, it's a little bit harder, but the compilers course (plus some reading of the documentation for the target architecture) should provide the requisite knowledge.

        To me, it sounds like the original poster has sat through a Computer Science degree and managed to gain some of the knowledge but none of the understanding that it was meant to impart.

        [ Parent ]
        • Re:Refund? by COMON$ (Score:2) Monday December 11 2006, @12:59PM
          • Re:Refund? by iron-kurton (Score:1) Monday December 11 2006, @04:42PM
        • Re:Refund? by MagicAlex84 (Score:1) Monday December 11 2006, @04:58PM
        • Re:Refund? by bzipitidoo (Score:2) Tuesday December 12 2006, @12:54AM
        • Re:Refund? by dmhayden (Score:1) Tuesday December 12 2006, @07:23AM
          • Re:Refund? by TheRaven64 (Score:2) Tuesday December 12 2006, @09:25AM
          • Re:Refund? by COMON$ (Score:2) Tuesday December 12 2006, @12:40PM
      • Re:Refund? by tyme (Score:1) Monday December 11 2006, @04:08PM
        • Re:Refund? by The_Wilschon (Score:2) Monday December 11 2006, @11:27PM
      • Re:Refund? by kairu (Score:1) Tuesday December 12 2006, @06:09AM
      • 1 reply beneath your current threshold.
    • Reverse engineering a console != trivial by freejamesbrown (Score:1) Monday December 11 2006, @11:52AM
    • Re:Refund? (Score:5, Insightful)

      by Lord Ender (156273) on Monday December 11 2006, @01:07PM (#17197162)
      (http://127.31.33.7/)
      I got a recent degree and know exactly how to start writing an emulator.

      At most schools, Computer Science is mostly the study of algorithms. My school, however, had a degree called "Computer Science and Engineering." In this program, students learned not only algorithms, but also digital logic, electronics, and computer architecture. Students had to design an entire computer using basic digital logic components (by first building multiplexers, decoders from and/or/not gates). Then we had to write an emulator for a simple computer. Finally, we wrote a compiler/linker for the emulator.

      FYI, the BSCS&E is a significantly harder program than the B.Arts in CS program. While we were taking extra physics and EE courses, the CS people were taking French, Theatre, and other easy courses that had real, live girls in them. We got the better education, sure, but I'm not sure it was worth it :-)
      [ Parent ]
      • Re:Refund? by abradsn (Score:2) Monday December 11 2006, @02:06PM
        • Re:Refund? by Lord Ender (Score:2) Tuesday December 12 2006, @03:17PM
      • Re:Refund? by Ponga (Score:1) Monday December 11 2006, @03:21PM
        • Re:Refund? by Lord Ender (Score:2) Monday December 11 2006, @03:59PM
          • Re:Refund? by Ponga (Score:1) Monday December 11 2006, @04:11PM
            • 1 reply beneath your current threshold.
          • I can outgeek that by grahamsz (Score:2) Monday December 11 2006, @11:08PM
        • Re:Refund? by mackyrae (Score:1) Monday December 11 2006, @07:25PM
          • Re:Refund? by mackyrae (Score:1) Monday December 11 2006, @07:33PM
      • Re:Refund? by truespin2acid (Score:1) Monday December 11 2006, @04:28PM
        • Re:Refund? by Lord Ender (Score:2) Monday December 11 2006, @04:49PM
          • Re:Refund? by truespin2acid (Score:1) Tuesday December 12 2006, @04:59AM
            • Re:Refund? by Lord Ender (Score:2) Tuesday December 12 2006, @03:15PM
      • Re:Refund? by kolding (Score:1) Monday December 11 2006, @04:35PM
        • Re:Refund? by Lord Ender (Score:2) Monday December 11 2006, @05:05PM
      • BSCE by falconwolf (Score:2) Monday December 11 2006, @05:17PM
        • Re:BSCE by Lord Ender (Score:2) Monday December 11 2006, @05:22PM
      • Re:Refund? by PipsqueakOnAP133 (Score:1) Thursday December 21 2006, @04:32PM
    • Re:Refund? by jtara (Score:1) Monday December 11 2006, @01:33PM
      • Re:Refund? by abradsn (Score:2) Monday December 11 2006, @02:08PM
    • 1 reply beneath your current threshold.
  • My advice by wayward_son (Score:2) Monday December 11 2006, @10:32AM
  • Focus. by Elentari (Score:2) Monday December 11 2006, @10:32AM
  • Its all about your libraries by Steepe (Score:1) Monday December 11 2006, @10:32AM
  • Curiousity + google by bryz (Score:1) Monday December 11 2006, @10:32AM
    • by EraserMouseMan (847479) on Monday December 11 2006, @11:09AM (#17195330)
      The problem with getting your code off of internet tutorial sites is that that code is crap. It is good enough to serve an illustrative purpose. I can't tell you how many times I've been working with somebody else's code and thought to myself, "Boy, that's sure a lazy approach." Or, "What an awkward way to do that." I ask the developer and they just puff out their chest, "Well I got that idea from QuickAndEasyTutorials. And those guys are smart."

      Every website has different naming conventions for their code. Some have you use the IDE's designer a lot, some not at all. The resulting software is such a patchwork of Internet examples it makes me puke. And worst of all, the developer think's he's the stuff because he figured it all out without any professional training.

      The best thing I ever did was to work for a couple large companies that did cutting edge software development. They had a team of real engineers with many many years of experience. They understood the value of Best Practices. They had documented development standards. They forced us developers to follow the conventions. The software I write now is very much what I learned then. I own my own software dev company now and I absolutely love writing software. People who work with my code are thrilled by the consistant patterns and well-thought-out design.

      The best software is designed well by experienced engineer-minded professionals. Don't fall into the trap of thinking that you can learn much of value from Google. Google is only a basic starting point. People who cut their teeth on Google end up being self-taught hackers (as in, ugly, hacked up code). And it shows. Want to be a great developer? Work under highly-skilled and experienced professionals.
      [ Parent ]
  • Starting is HARD. (Score:5, Informative)

    by xtal (49134) on Monday December 11 2006, @10:33AM (#17194738)
    (http://www.xdesignlabs.com/)
    An open source project is a good idea as a starting point. Pick away at something that already works.

    Where that isn't an option; I've always turned to O'Reilly books, and online tutorials to learn some new skills. I've written some tutorials for people who are interested in getting started with embedded electronics, for example. It's not hard to do, but you need to know about a half dozen things before you can get started.

    I suspect you're either giving up too easy, or not looking online enough, or in the wrong places. For console emulation, there's a LOT of documentaion in the source code for MAME, and I am sure the others are similar.

    Most of the people who are doing complicated OS programming have 10, 15, or even 20+ years of hacking away. Spending thousands and thousands of hours in front of a computer helps. Unless it's spent playing WoW, maybe. :)
  • More education maybe? by Tanmi-Daiow (Score:1) Monday December 11 2006, @10:34AM
  • What school did you go to? by new death barbie (Score:1) Monday December 11 2006, @10:35AM
    • Re:What school did you go to? (Score:5, Informative)

      by mbrod (19122) on Monday December 11 2006, @10:53AM (#17195102)
      (http://harun.abd.assami.googlepages.com/ | Last Journal: Thursday November 25 2004, @12:07AM)

      I have to wonder about the quality of your degree..., seriously.
      I don't.

      What large software project doesn't already start with a huge number of the pieces being already written? Nearly all modern software is taking building blocks, tools, libraries that exist or are bought and then using them to get whatever task done.

      The vast majority of work is done this way so a program concentrating on that type of work would not be as relevant. Very little work is done actually starting from scratch on anything.

      Like others have pointed out the best way to learn these other areas is with OSS projects and you don't need to pay a college to teach you how to get involved with them. You can do them on your own time.
      [ Parent ]
    • Re:What school did you go to? by TheDreadSlashdotterD (Score:1) Monday December 11 2006, @10:56AM
    • Re:What school did you go to? by Oniko (Score:1) Monday December 11 2006, @11:12AM
  • I recently graduated from school with a CS degree, and several of my classes were very theoretical in nature. I remember first time I saw them, I thought console emulators were really cool. I have no idea how someone would begin writing one.

    Yes you do. You just don't know it yet. (Assuming your school wasn't out and out terrible.) There's a huge divide between theory and practice that every new programmer has to overcome. The best way to overcome it is to dive in and learn about the practical designs of today's technologies.

    For example, you want to write an emulator. Many of the early game consoles were based on the 6502 microprocessor. If that scares you, it shouldn't. Read this webpage:

    http://www.obelisk.demon.co.uk/6502/ [demon.co.uk]

    It will introduce you to 6502 assembly. It explains not only the text commands you can use, but also the hex codes that will be output by the assembler. You can get an assembler like DASM [atari2600.org] and try it out for yourself. Try writing a simple program like:

    clc
      lda #2
      adc #2
    Next, run it through the assembler. Open it in a hex editor [handshake.de] and you should be able to see the direct mappings between your code and the program output. If you target a specific platform like the Atari 2600, you can use an existing emulator with a debugger like Stella [sourceforge.net] to watch your code execute line by line.

    Remember, learning doesn't end when you exit school. It just begins. So start digging up everything from reverse engineered documentation to documents put out by standards commities like the IETF's RFCs, the W3C standards, and the ECMA standards. You'll gain a much greater appreciation for how things work after you take them apart and understand them. ;)
  • by Dystopian Rebel (714995) * on Monday December 11 2006, @10:37AM (#17194808)
    (Last Journal: Sunday November 06 2005, @05:24PM)
    Congratulations on earning your degree.

    An entire generation of creative software people who had great ideas and deaf employers grew sick of their cubicles and started the open-source software revolution. They wanted to learn stuff and do stuff, just like you do.

    Grab the code, read it, mess with it. Invest in yourself and assume no one else will.

    My experience has been that you MUST teach yourself... especially if you work for the big cubicle farms. Teach yourself so you become better, so you keep your skills current, so you energize your imagination, and so you can go elsewhere when your employer enters the BRED ("Beancounters Rule Every Decision") Stage Of Atrophy.

    BRED means that your employer is unlikely to pay for you to learn anything useful, especially not during the sunny hours when their BMWs and Porsches are in the parking lot. BRED means that good ideas die unless you happen to drink whisky with the CEO once a week.

    Cowardly employees and consitutionally cheerful employees are easier to flog and much less frightening and expensive than people who want their employer to invest in them. People who have the latest skills aren't chained heavily enough. And when the expenses grow and the balance-sheets and Powerpoint slides don't show the Beancounters at the top any benefit ("any chance of getting more stock options"), you can bet that your Red Swingline Stapler is going to Bangalore.
    • Re:Invest in yourself. Assume no one else will. by lixee (Score:2) Monday December 11 2006, @10:50AM
    • by mcrbids (148650) on Monday December 11 2006, @12:28PM (#17196544)
      My experience has been that you MUST teach yourself... especially if you work for the big cubicle farms. Teach yourself so you become better, so you keep your skills current, so you energize your imagination, and so you can go elsewhere when your employer enters the BRED ("Beancounters Rule Every Decision") Stage Of Atrophy.

      I don't know where the big cubicle farm comes into play, here. Working as an independent contractor has led me to the exact same conclusion. Always learn, ALWAYS teach yourself. It's pretty much ALWAYS worth it.

      And don't limit yourself to Comp Sci, either. For example, I'm currently training to be a private pilot. Why? I don't know, and never do. It's fun, I like to fly, and having more skills and experience has always paid me well. One of the best things you can do is to spend a few bux at the local Barnes and Nobles on a subject you know little about. B & N is a goldmine of business plans, technology information, and income opportunities!

      I've attended numerous business courses in salesmanship and capital investment. They've also served me well, and helped me identify a startup with real potential, and gave me the skills to sell my way into partial ownership of the company. (that's now growing by leaps and bounds)

      Another example - I did some research into using PHP as a scripting language for an SMTP daemon. I wanted to do some dynamic proxying that I didn't see elsewhere. I got it to work, using PHP as a script under xinet.d on Linux. Although that original business idea went nowhere, I used that very same software code to build a daemon that today transfers many gigabytes of data in a distributed software database, with about a thousand daily users.

      Having more saleable skills will always pay.
      [ Parent ]
    • Re:Invest in yourself. Assume no one else will. by Pete Brubaker (Score:1) Monday December 11 2006, @01:14PM
    • Calm down. I work in a cubicle as a programmer for a fortune 500. I completely agree with everything he said.

      > I guarantee I'm a much happier person than you. Oh, by the way, go fuck yourself asshole.

      That is by far the most contradictory statement I have ever read on slashdot. (and I've been coming here for many years)
      [ Parent ]
      • 1 reply beneath your current threshold.
    • Re:Invest in yourself. Assume no one else will. by jafac (Score:2) Monday December 11 2006, @12:34PM
    • Re:Invest in yourself. Assume no one else will. by jagdish (Score:2) Monday December 11 2006, @01:13PM
      • 1 reply beneath your current threshold.
    • Re:Invest in yourself. Assume no one else will. by jam244 (Score:1) Monday December 11 2006, @04:38PM
      • 1 reply beneath your current threshold.
    • Re:Invest in yourself. Assume no one else will. by siegesama (Score:1) Monday December 11 2006, @07:09PM
      • 1 reply beneath your current threshold.
    • 3 replies beneath your current threshold.
  • Copying, translating, teaching (Score:3, Insightful)

    by digitalhermit (113459) on Monday December 11 2006, @10:37AM (#17194814)
    (http://www.digitalhermit.com/)
    A few years ago I had to learn Perl in a hurry. There were some REXX based apps that needed to be moved and I got tasked with the job. In a few weeks I went from knowing that Perl was a useful scripting language to actually having to teach an introductory Perl course for the other team members. The translation process was extremely helpful. For one, it was doing useful stuff, not just what the textbook author thinks is appropriate. Second, it forced me to use "proper" methods if only because the REXX scripts were fairly mature and I needed equivalent stability.

    Teaching it was also useful because it made me convert awk, korn, bash and sed functionality *and* taught me that Perl wasn't the slowpoke I'd thought an interpreted language would be.
  • Follow Your Heart/Use The Force Luke by blueZhift (Score:2) Monday December 11 2006, @10:37AM
  • CO-OPs and Internships. by Anonymous Coward (Score:1) Monday December 11 2006, @10:37AM
  • Yoda advice (Score:4, Insightful)

    by Anonymous Coward on Monday December 11 2006, @10:38AM (#17194838)
    No. Try not. Do... or do not. There is no try
    • Re:Yoda advice by Bacon Bits (Score:3) Monday December 11 2006, @02:08PM
      • Re:Yoda advice by turgid (Score:2) Tuesday December 12 2006, @04:51PM
      • 1 reply beneath your current threshold.
    • Re:Yoda advice by Neoncow (Score:1) Monday December 11 2006, @07:38PM
    • Re:Yoda advice by jedidiah (Score:2) Monday December 11 2006, @01:37PM
      • 1 reply beneath your current threshold.
    • 1 reply beneath your current threshold.
  • Just start and be prepared to fail. (Score:5, Insightful)

    by jmagar.com (67146) on Monday December 11 2006, @10:41AM (#17194894)
    (http://www.jmagar.com/)
    It takes 10 years to gain 10 years of experience. No short cuts.

    You need to write a mountain of code before you reach the level where you can debate the finer points for or against C# / Java / Python / LISP... You will learn the most from your mistakes, so go forth and screw it up. Do it often. And then fix it. Each iteration will make you better, and remember it takes time.

  • Fear. (Score:5, Insightful)

    by Aladrin (926209) on Monday December 11 2006, @10:41AM (#17194896)
    " I would have absolutely NO IDEA how to even begin writing it. "

    That's called 'fear' in the world of programming. Instead of digging into an open source project, or just jumping in and seeing what you could do, you turned away, and asked others to make it easy for you. Learn to recognize your fear, and you can master it.

    All programmers feel it, some of the best just mastered it without ever thinking about it. None of us were handed this information on a silver platter. If you spent enough time in college to learn enough programming to be a master, you'd be retired when you were done.

    The fastest way to learn programming is to jump in, not to go to school.
    • Re:Fear. by rk (Score:2) Monday December 11 2006, @11:15AM
      • Re:Fear. by Maxo-Texas (Score:2) Monday December 11 2006, @11:46AM
    • Re:Fear. by nametaken (Score:2) Monday December 11 2006, @11:45AM
      • Re:Fear. by Aladrin (Score:2) Monday December 11 2006, @12:45PM
        • Re:Fear. by nametaken (Score:2) Tuesday December 12 2006, @02:19AM
    • Fear leads to anger... by Anonymous Coward (Score:2) Monday December 11 2006, @12:10PM
    • Re:Fear. by CrazyTalk (Score:2) Monday December 11 2006, @01:07PM
    • Re:Fear. by gorbachev (Score:2) Monday December 11 2006, @01:08PM
  • Reading and Writing , Arithmatic (Score:5, Insightful)

    by everphilski (877346) on Monday December 11 2006, @10:42AM (#17194908)
    (Last Journal: Tuesday June 06 2006, @01:50PM)
    1) Jump right back into school and get your masters. I did it. Zero regrets (Heading to my last final exam in a few hours... I haven't even graduated and the rewards are in plain sight, not to mention the rise in pay next review)

    2) Reading - get books. Educate yourself. Self-starters are valuable.
    3) Writing - don't just read, but practice by coding. It's the only way to learn. The more senses you invoke the more you comprehend.
    4) Arithmatic - (depending on your field, but for 99% of them...) keep up on your math skills. Sharp math skills will make your job easier ..
    I've been employed for a year, so I'm fairly fresh in the field but those are the things I've found and am taking to heart. They seem to work for me.
  • how about this: by MagicMerlin (Score:1) Monday December 11 2006, @10:42AM
  • for me, a Masters really helped by dioscaido (Score:2) Monday December 11 2006, @10:43AM
  • You want advice? Here's advice (Score:3, Insightful)

    by ColonelPanic (138077) <pmk@@@cray...com> on Monday December 11 2006, @10:43AM (#17194930)
    If you want to really learn the craft of programming, here are
    some tips. If you don't like them, stick to what you're doing
    and be happy.

    1) Learn assembly language. Play with it. Think in terms of
          what you can and cannot do with it. Read the -S output of
          your compiler and understand it in terms of your source.
    2) Play with algorithms. Can you code up a heapsort without
          referring to a book? Can you do it in assembly? Read Jon
          Bentley's "Programming Pearls".
    3) Know your platforms' hardware and software. Install a
          from-source Linux distro like Gentoo. Configure, build,
          and install kernels from source. Play with the kernel;
          even a simple thing like adding your name in a printk()
          can be exciting.
    4) Iterate. Keep current on the basics. Do you really know
          your programming language? If you don't know how something
          works, read up on it and read the sources. It's all just
          ones and zeros.
    5) Read "Hacker's Delight". Slowly. Enjoy it.
    6) When low-level stuff gets to not be fun, play with high
          level things. Write some Emacs Lisp. Learn Prolog.
          Play with Squeak. Think about how they're implemented.

    I have been doing this for a long time and I cannot emphasize
    strongly enough the importance of refreshing your basic skills.
    And play. Computers are fun. I have written compilers and
    kernels from scratch, worked on instruction set architectures,
    and a bunch of other stuff, and haven't yet exhausted the fun
    that computers can be.

    But they're not fun for everybody. If all this sounds dull to
    you, it probably will be, and maybe you should pursue some other
    hobby while pounding out C++ to pay the bills.
  • A website as an ongoing programming project... by creimer (Score:2) Monday December 11 2006, @10:43AM
  • Read before you write. by Ihlosi (Score:2) Monday December 11 2006, @10:44AM
  • Your work is your education by justanyone (Score:2) Monday December 11 2006, @10:44AM
  • Just my 2 cents by OpenSourced (Score:2) Monday December 11 2006, @10:44AM
    • 1 reply beneath your current threshold.
  • theory vs experience by seanadams.com (Score:2) Monday December 11 2006, @10:45AM
  • Jack of All Trades, or Master of One by ckotchey (Score:2) Monday December 11 2006, @10:46AM
  • College doesn't teach you a trade (Score:5, Insightful)

    by Weaselmancer (533834) on Monday December 11 2006, @10:46AM (#17194978)

    College teaches you how to learn. Once you realize that, your education truly begins.

  • Whatever works best for you by Deluxe_247 (Score:2) Monday December 11 2006, @10:46AM
  • Could be a problem... by Cereal Box (Score:2) Monday December 11 2006, @10:47AM
  • I know a site... (Score:5, Funny)

    by shadowcode (852856) on Monday December 11 2006, @10:48AM (#17195004)
    I know a site with lots of great snippets to learn from [thedailywtf.com]!
  • Hmmmmm (Score:4, Insightful)

    by Jerf (17166) on Monday December 11 2006, @10:49AM (#17195024)
    (Last Journal: Saturday August 18 2001, @11:04AM)
    If your education truly focused on theory, you ought to know more about writing an emulator than you think. An emulator is basically just an interpreter/compiler. Emulators often then use a whole bunch of tricks to speed things up, but at their core, all they are doing is taking in the memory image of a program and interpreting it in the context of a software implementation of the hardware. In theory, writing a console emulator starts out the same as writing any other interpreter, and while there may be special graphics or audio tricks you have to use, much of the rest of the optimization issues looks just like an optimizing compiler. Emulators have been doing Just-In-Time compilation for a long time now, for instance.

    There are many details in a real emulator, but then, there are many details in GCC, too. The fundamental structure is still there.

    If you missed compilers in your "theory heavy" education, that could be a problem. (I think compilers ought to still be a required course; the requisite skills form the basis of far, far more programs than just your C compiler. Almost every text to text converter is better written as a compiler than a series of regexes or some other such hack, and with proper tools and the understanding to use them it's usually easier, too.)

    While you may not quite know enough to correlate them, many other programs use fundamental constructs from computer science too.

    What you probably lack is experience, and there's only one way to get that. Fortunately, there's a large body of open source to study. As others have said, grab and interesting program and read it. As I haven't seen others say, after you've poked around for a bit, take the program and make a change to it. Emulators are probably not the best target here because at best you'll probably just degrade the performance, but who knows? Maybe SNES will let you plug in to their resolution upsampling framework easily and you can add your own interpolator or something. You'll find the first change is harder than you think, but this too is a valuable skill you'll use over and over again in real life; you will frequently be called on to make a change to a codebase you don't really understand. (One could argue that that is actually the general case....)
    • Re:Hmmmmm by tknd (Score:1) Monday December 11 2006, @04:27PM
  • There is no try. by Hushpuppy (Score:1) Monday December 11 2006, @10:49AM
  • The REAL value of university by Moggyboy (Score:2) Monday December 11 2006, @10:50AM
  • join a club... by bfields (Score:2) Monday December 11 2006, @10:50AM
  • What I have Learned..So far by Laoping (Score:1) Monday December 11 2006, @10:50AM
  • My advice: by Lord_Slepnir (Score:2) Monday December 11 2006, @10:51AM
    • Re:My advice: by Xemu (Score:2) Monday December 11 2006, @10:57AM
  • Divide and Conquer... by CharonX (Score:2) Monday December 11 2006, @10:52AM
  • Excuse me? by Morgahastu (Score:2) Monday December 11 2006, @10:52AM
  • jump into it by lawpoop (Score:2) Monday December 11 2006, @10:52AM
  • I got my BSCS from 19 years ago... by Richard Steiner (Score:2) Monday December 11 2006, @10:52AM
  • CS vs Programming (Score:5, Insightful)

    by grendel's mom (550034) on Monday December 11 2006, @10:52AM (#17195088)
    A few suggestions:

    1. Don't confuse "Computer Science" with commercial programming. They are NOT the same thing.

    2. You will soon realize that coding is a far smaller portion of your job then you expect. The coding portion decreases as you move up the food chain.

    3. Do not ignore the business/finance side of your job. The business side keeps you employed.

    4. As you learn more, you will realize how little you actually know.

    5. Your current position is nothing more than a software assembly line job. All of those "cool" technologies are being developed by more experienced engineers.

    6. "Engineering" software and "programming" are more different than you realize.

    7. Coding is the easy part. You can teach a cat to bang out code. It takes an artist to design good software.

    8. You have one of the best jobs in the world. Your technology base allows *you* the ability to build wondrous applications. Use it!

    9. Have fun coding. Make it a personal challenge. Reallize a job is just for paying the bills. Your much more free than you realize.

    Good luck.
    • Re:CS vs Programming by BokLM (Score:2) Monday December 11 2006, @11:20AM
    • Re:CS vs Programming (Score:5, Insightful)

      1. Don't confuse "Computer Science" with commercial programming. They are NOT the same thing.

      Especially these days. When I received my degree, all IT-related degrees were CS degrees at a fair number of schools, and one simply chose a specialized track (systems, scientific, business) after finishing the CS core, but that's not the approach used at many schools today.

      I liked the mix of practical and theoretical classes I took in the program I went through, though, since I think I've derived a lot of benefit from both types of classes over the years.

      2. You will soon realize that coding is a far smaller portion of your job then you expect. The coding portion decreases as you move up the food chain.

      Yes, unless you're a dedicated code monkey (something I've never personally encountered), you will be expected to do design work, create specifications, do support, talk to customers, help to coordinate tasks on complex projects, etc.

      3. Do not ignore the business/finance side of your job. The business side keeps you employed.

      Probably sound advice. In a large IT shop, you won't necessarily USE that type of knowledge in an overt manner, but it never hurts to be able to understand the business process and how it relates to your current position, and in future positions it could be tremendously helpful.

      4. As you learn more, you will realize how little you actually know.

      There's always someone else out there who's been doing it longer or better than you have. Or both. :-)

      Pay attention to them -- such people are valuable teachers and resources, and I've learned a lot from people like that myself. Some programming tricks might be as old as YOU are. :-)

      5. Your current position is nothing more than a software assembly line job. All of those "cool" technologies are being developed by more experienced engineers.

      In all the shops I've worked in over the years, we NEVER had folks who did software in an assembly-line manner. Even folks like me right out of school were doing (mentored) design work for the live system. Other shops may be different, obviously, but even the folks I've seen who were writing software from a func spec that someone else created had a certain amount of latitude in terms of its actual implementation (even if screens and inputs/outputs were all predefined, the internal structure was often left up to the coder).

      Don't be afraid of trying to create things on your own. I've seen folks right out of school make a huge difference by writing a little utility or by applying something they learned from another platform, and sometimes even something small can make a large difference. Experienced people are often very smart, but their tred-and-true experience (while often relevant) can also blind them to new approaches at times. I'm guilty of that as much as anyone at times. :-(

      6. "Engineering" software and "programming" are more different than you realize.

      Both should involve a formal process (although not all processes which people have in place are constructive or even useful). However, real "engineering" seems to rarely apply to software development. I still haven't decided if that's a good thing or a bad thing overall.

      7. Coding is the easy part. You can teach a cat to bang out code. It takes an artist to design good software.

      Absolutely. The top priority should be readable code that is easy for someone unfamiliar with the gory details to maintain. That means relevant comments in the source and (hopefully) a good set of programmer support documents written in parallel with the software. I've had the privilege to work in two shops where that was done quite well, but that's the exception, not the rule.

      My appro

      [ Parent ]
    • Re:CS vs Programming by syousef (Score:2) Tuesday December 12 2006, @12:14AM
    • 1 reply beneath your current threshold.
  • It's a craft after all (Score:3, Interesting)

    by hey! (33014) on Monday December 11 2006, @10:53AM (#17195098)
    (http://kamthaka.blogspot.com/ | Last Journal: Wednesday March 30 2005, @03:18PM)
    If you took a course in carpentry, you wouldn't be able to design and build a fine chest of drawers right away, although you could make dovetail joints and the like. You'd work under a master cabinet maker, who would start you off doing very menial things like rough sawing planks. Gradually he'd let you do some of the things you'd learned in school, like cutting mortise and tenon joints. Once you'd perfected these, you'd have absorbed a lot of other things like strategy; and he'd give you fewer tasks and more problems, e.g. affix this mirror to this vanity.

    The reason for this gradual approach is that there are multiple elements of craft: materials, patterns, tools and workplace practices. It takes at least ten years in any reasonably sophisticated craft for all these elements to fall into place.

    You could, right out of your vo-tech class, attempt a piece of fine furniture all on your own. And with enough determination, you would succeed. But you would not succeed fast enough to make a living at it. You'd waste a lot of material with trial and error. You'd waste a lot of time with the wrong tools, or unknowingly fritter it away because of a poorly organized workspace. All of your attention would be consumed by small problems of a single project, where a master craftsman may have several projects in various stages of completion.

    Speed, organization and economy are what set the master craftsman apart from the journeyman. You don't need mastery to do something original; but having it makes originality much more practical.

    Software is a somewhat different animal than carpentry. You may even have an idea that nobody has ever had before, one that is simple, yet original, that with journeyman skills you can bring to fruition. But you still have a decade or more of hard work ahead to achive your full potential.

    So -- separate out the meta problem from the problems at hand. If you have an idea for creating a console emulator -- that's a problem at hand, that even as a beginner you can make some progress upon. If, however, the problem is to become the kind of programmer that can create a console emulator, that's not a problem to be addressed by sitting down and writing one. It's one to be addressed by contributing to an existing project, under the guidance of somebody more experienced.
  • Why are you even asking? by goodtim (Score:1) Monday December 11 2006, @10:53AM
  • here's a nickel's worth of free advice by Aurisor (Score:2) Monday December 11 2006, @10:53AM
  • Starting an application is hard (Score:3, Insightful)

    by mveloso (325617) on Monday December 11 2006, @10:54AM (#17195110)
    Starting to write a piece of software, especially an application used by end users (or, horrors, the public) is incredibly difficult. They don't teach it in school because the number of written-from-scratch applications is small. It's complicated, error-prone, and you don't know if you made the right decisions until weeks, or months, later.

    It's exacerbated by the fact that you actually need to ship your product. You don't have the luxury, usually, of sitting around arguing the finer points of various architecures and algorithms. What toolset should you use? What framework? Libraries? Product dependencies? OS?

    All of those require tradeoffs, and incur costs that may not be known for weeks, months, or years.

    In fact, there are no right answers. There are things that make life easier or harder down the road. Unfortunately, those of us that have written multiple apps from scratch have a hard time explaining what the design choices were or even how to do it. Some things work, some things don't, and depending on your application, budget, and timeline you choose differently. If you're good, you keep up with the various technologies (on at least a passing basis) so you can learn new stuff/ideas/concepts that may help.

    What are some of the factors to consider? Some simple ones are:
    deployment - how do you deploy it?
    Maintenance - how do you maintain the applcation?
    How do you updates?
    Are there enough people who know what you're using to hire? If not, is it easy to learn?
    What features are requested, but not in this release? You can architect today for functionality tomorrow.
    Toolset: are there too many moving parts? How many moving parts is too many?
    Certain technologies, like J2EE, .NET, LAMP lock you in to a way of doing things. Is that OK?
    If you use new stuff, is it stable enough to actually use in real life?

    Then when you start writing your app, what do you start with? Again, it depends. Some people design and write from the inside out (internals to GUI), and some write from the outside in (GUI to internals). A user app should do the latter, since the capabilities of the UI have to be supported by the back-end. Blah blah blah.

    In short, you have to learn by doing, making mistakes, and doing it again. Learn from other programs, etc, by asking: why do they do things that way? You can see design decisions and how they impact the application everywhere.

    Yeah, it's rambling, but it's late for me.
  • 1st of all ! by kilimangaro (Score:1) Monday December 11 2006, @10:54AM
  • Don't chase taillights by foobarbaz (Score:1) Monday December 11 2006, @10:55AM
  • learn software engineering and design skills by Uksi (Score:2) Monday December 11 2006, @10:55AM
  • Pick something. Do it. by dazedNconfuzed (Score:2) Monday December 11 2006, @10:56AM
  • Greeting card by COMON$ (Score:2) Monday December 11 2006, @10:58AM
  • Thats the problem with colleges. no real learning by deiong (Score:1) Monday December 11 2006, @10:58AM
  • Re: Advice by James Gingerich (Score:1) Monday December 11 2006, @10:59AM
  • Upsell. by numbski (Score:2) Monday December 11 2006, @10:59AM
  • Write a screensaver by ewg (Score:2) Monday December 11 2006, @11:00AM
  • You should have a passion for programming by jbarr (Score:2) Monday December 11 2006, @11:02AM
  • Getting started by Doctor Memory (Score:2) Monday December 11 2006, @11:03AM
  • Console Emulator by tubs (Score:1) Monday December 11 2006, @11:03AM
  • Know your job. by IMarvinTPA (Score:2) Monday December 11 2006, @11:03AM
  • Read the Code... by corecaptain (Score:1) Monday December 11 2006, @11:04AM
  • What I did (long ago) by Greyzone (Score:1) Monday December 11 2006, @11:04AM
  • Fear Not by BioCS.Nerd (Score:2) Monday December 11 2006, @11:04AM
  • Throw yourself into the deep end with both feet. by GrizlyAdams (Score:1) Monday December 11 2006, @11:05AM
  • Programming is different than Technology by wrook (Score:2) Monday December 11 2006, @11:05AM
  • Learning to program is like learning to draw ... by boxlight (Score:2) Monday December 11 2006, @11:08AM
  • How I did it by ZP-Blight (Score:1) Monday December 11 2006, @11:10AM
  • Real-world advice. by Rufty (Score:2) Monday December 11 2006, @11:14AM
  • College does not make you smart!You make you smart by as400tek (Score:1) Monday December 11 2006, @11:14AM
  • For Me... by harrypelles (Score:1) Monday December 11 2006, @11:14AM
    • Re:For Me... by as400tek (Score:1) Monday December 11 2006, @02:35PM
  • Hell, I still don't know. by Benanov (Score:2) Monday December 11 2006, @11:16AM
  • Learn at work by LesPaul75 (Score:2) Monday December 11 2006, @11:17AM
  • Two Parts of Programming by Nom du Keyboard (Score:2) Monday December 11 2006, @11:19AM
  • Practice practice practice by dmsuperman (Score:1) Monday December 11 2006, @11:19AM
  • Mentor by ballsbot (Score:1) Monday December 11 2006, @11:21AM
  • My best advise... by chord.wav (Score:1) Monday December 11 2006, @11:22AM
  • Well you've made a start by Tony Hoyle (Score:2) Monday December 11 2006, @11:23AM
  • 9 Easy steps. by cabazorro (Score:2) Monday December 11 2006, @11:24AM
  • Trial By Fire by uglyhead69 (Score:1) Monday December 11 2006, @11:28AM
  • DIY by ruben.gutierrez (Score:1) Monday December 11 2006, @11:29AM
  • Yeah, we got yer advice right here! (Score:5, Informative)

    by inviolet (797804) <(moc.oohay) (ta) (rednimenip)> on Monday December 11 2006, @11:29AM (#17195662)
    (Last Journal: Tuesday February 20 2007, @11:21AM)

    As quickly as you can, get in a position of supporting your own code when it goes out into the world onto customer machines. This will teach you a profoundly important set of convictions that CS professors -- having never done the aforementioned -- are clueless about:

    • Calls outside your own module (OS APIs, etc.) always fail, and so your code should always expect as much. You can tell a novice programmer's code because it makes SDK calls without checking the return codes.
    • Error messages should be in plain Enlish and contain programmer-level diagnostic information and suggest to the user the most likely cause so that he can maybe fix it himself:
      • bad: "Error: operation failed."
      • bad: "Error 0x8009000b during update!"
      • good: "Error: the mailslot update failed, probably because the mailbox is locked by another process; please contact technical support. (COM synchronize call returned 0x8009000b)"
      Every low-quality error message equals ten calls to tech-support and probably two days of some support programmer's time and remaining hair pigmentation.
    • All of your programs should have a logger facility that can create round-the-clock logfiles for diagnosing those "It happens only at 3am, after it's been running 16 hours straight" problems.

    Most programmers never acquire these convictions, because they never retain ownership of their code long enough to see the patterns that occur during field support. Hopefully you will be different... because honestly, in the long run it's easier to write supportable code than it is to have to check under your car for bombs every morning.

  • Go Get Your Master's by Black-Man (Score:2) Monday December 11 2006, @11:33AM
  • Programmers vs. Developers vs. Architects by scgops (Score:1) Monday December 11 2006, @11:35AM
  • Use the source Luke by YGingras (Score:2) Monday December 11 2006, @11:38AM
  • by Maxo-Texas (864189) on Monday December 11 2006, @11:40AM (#17195848)
    If you absolutely love coding, read coding books to relax after hours, it's the center of your life, then you need to avoid big corporations unless their main business is selling a software product. The bureaucracy will smother out all your happy feelings. The funnest places to work are small.

    If you like coding, then your options are more open. Big companies often give you a shot at expensive training and new technologies.

    Take frequent breaks to save your hands. Get books on carpal tunnel and read them *NOW* before you develop problems.

    If you only "like" it, then learn about project management and when you get tired of programming you can move up instead of out.
  • Fun! For a time... by StoatBringer (Score:1) Monday December 11 2006, @11:45AM
  • A bachelors can't teach you everything by DoofusOfDeath (Score:2) Monday December 11 2006, @11:47AM
  • I didn't know either by Two9A (Score:1) Monday December 11 2006, @11:48AM
  • How well do you learn? by SlappyBastard (Score:2) Monday December 11 2006, @11:53AM
  • Evaluation board by KC1P (Score:1) Monday December 11 2006, @11:54AM
  • It's always like that by prozac79 (Score:2) Monday December 11 2006, @11:55AM
  • How to learn to code... by wtansill (Score:2) Monday December 11 2006, @11:55AM
  • The whole is merely the sum of its parts by Xentor (Score:2) Monday December 11 2006, @11:58AM
  • You got a crappy education (Score:4, Insightful)

    by Anthony Liguori (820979) on Monday December 11 2006, @11:59AM (#17196116)
    (http://tocm.blogspot.com/)
    Either you didn't pay attention or your school wasn't that good. Sorry.

    A "console emulator" can be a straight forward emulator in which case, you should know enough from just your basic architecture courses. Did you discuss instruction decoding and ISAs?

    Modern console emulators are probably Just In Time compilers. You should have had a compilers class and the prof should have at least mentioned binary translation. Even if they didn't, you should have spent a little time on JITs in an architecture class.

    A college education is not necessarily about knowing how to solve problems, but how to decompose a problem into a series of problems that you can then figure out how to solve. For a console emulator, that may mean that first you know you have to read about the architecture your emulation (what's the ISA, what are the components, etc.). Then you realize you have to parse the actual ROMs (here's where your automata/compiler background kicks in). Then either emulate each instruction (tedious) or do dynamic translation.

    If you wouldn't even know where to start, you didn't get the right education. I'd recommend trying to find a masters program or pick up some text books.
    • 1 reply beneath your current threshold.
  • Just one word of advice based on what you said ... by ubrgeek (Score:1) Monday December 11 2006, @12:00PM
  • Write a CHIP-8 Emulator by nogginthenog (Score:1) Monday December 11 2006, @12:03PM
  • Watch and learn from another geek (ShowMeDo) by ianOz (Score:2) Monday December 11 2006, @12:04PM
  • Look out for yourself / Be passionate by Anonymous Coward (Score:1) Monday December 11 2006, @12:05PM
  • YMMV by jafac (Score:2) Monday December 11 2006, @12:06PM
  • Managing Complexity by sofla (Score:1) Monday December 11 2006, @12:10PM
  • Emphasize Design by Llywelyn (Score:2) Monday December 11 2006, @12:10PM
  • If you want to hone your skills for WORK... by Opportunist (Score:2) Monday December 11 2006, @12:14PM
  • Read, read, read by kabdib (Score:2) Monday December 11 2006, @12:18PM
  • It's time to choose your fields... (Score:5, Insightful)

    by kinglink (195330) on Monday December 11 2006, @12:19PM (#17196418)
    The most important decision to make now is "what do I want to do". It's a hard one, but start by looking into what field you want to go after? Game programming? Any that give you lots of money? IT?

    Next thing you need to do after deciding that is start focusing on it. If you want to be a game programmer, start programming your own game. A company that hires you won't just look at your education, they'll look what else you've done, and a big bonus is "self starting". It doesn't matter if you don't know how to make a finished game or a finished project you can learn how to do the final stuff, and most of the time they don't care. What will matter is that you've designed something and worked towards it. In addition the code can show the employers "I know how to code".

    If you want to go into IT start looking for work now. Anything you do outside of the field isn't going to help you too much in the long run, but be sure to learn as much as you can about networks and hardware for it (routers and so on, not just lan adapters). Try to learn Linux as well for IT, that might not help you but it's good to know it so you can work with networking apps with out dealing with the BS that Microsoft gives developers (dear god, what ever you do don't expect CSocket to be all you need for networking experience).

    If you want to make money start networking. And I mean P2P.. Or rather that's person to person. Talk to people who can help you get jobs in major companies. You want a job in finance to make the most money the fastest.

    Overall it's important to take a direction and start working towards it. The biggest mistake you can make is think your goal is to radical to start working towards it (something I had to learn.. Now I work at a video game company. What I always wanted to do.)

    The second mistake you can make is undervaluing your skills. Don't take a job for 24K, even if they promise a pay raise in 3 monthes (finance, personal experience.) Demand 40K a year at the minimum. Short and simple that's the bare minimum you deserve and that's even low. If you're in a good job, you should be making more.

    Also always be willing to move, that'll give you many more options, and don't be afraid to seek out big name companies to apply to. Nothing is wrong with apply somewhere expecting relocation expense. They should be provided.

    Don't worry if you get into something and don't like it. You're still learning and no one expects you to be a good coder yet, school is to teach you the basics, they'll train you to be the programmer they want (or they arn't worth working for).
  • Education vs. Training by Alonzofox22 (Score:1) Monday December 11 2006, @12:20PM
  • Plastics. (Score:4, Insightful)

    by phliar (87116) on Monday December 11 2006, @12:22PM (#17196470)
    (http://www.drones.com/)

    I assume graduate school is not a consideration right now since you're working.

    Do you like tinkering? That is the essential skill/attitude. Everyone that I know who is happy and successful in software is a tinkerer. A hacker, in the old and honourable sense of the word. When we were kids (before computers, if you can believe that!) we amused ourselves with homebrew "chemistry experiments" and electronics and taking apart household appliances, especially clocks. Now we do the same thing but in software. (Most of us continue to hack in other fields as well, building airplanes and clocks and furniture.)

    The other vital skill is learning. Things keep changing. If you enjoy learning about cool new stuff you'll have no trouble staying employed. If you've written some non-trivial chunks of C/C++ and you have a CS degree from a decent school like Berkeley you'll do fine. Be good at your assigned tasks so you can get it done early and done well. (Try not to get involved in office politics if there is any.) This frees up time to think about cool stuff, whether that's free software or work-related extra credit.

    And don't forget there's life out there beyond software and work.

  • Wrong priorities (Score:3, Interesting)

    by mabu (178417) on Monday December 11 2006, @12:24PM (#17196494)
    A good programmer will start with a "problem" and then design a solution.

    It sounds to me like you are looking for a solution without identifying the problem. Because there are so many programmers like this, ones who feel compelled to create something for the sake of creating something, for their own ego or amusement, in lieu of any real world application, the industry is filled with crappy technology that doesn't serve any significant purpose. So let me be the first to discourage you path before you even start and add another dingleberry to the crop of mediocre technology that's out there that will fail.

    No disrespect, but you're going about it wrong. If you want to program a console emulator, hook up with the teams online involved in that. Oh you want to create your own? This kind of thinking won't get you anywhere. The real cool technology is what you learn from other people through experience both in coding and (most importantly) through an *understanding of the application and the market you're addressing*. So what you need to do before anything else is not whine about how you haven't created the next Halo, and figure out what field, in addition to programming, in which you're an authority, and what void in that field can you develop something that addresses a real need or solves a problem, and then and only then, should you be asking people how to develop such technology.

    The best software in the market will have always been created by people identifying a niche, a need, a problem, and then designing software to address it. Not the other way around.
  • I was in your shoes only two years ago by henrybg (Score:1) Monday December 11 2006, @12:28PM
  • What, college didn't teach you everything? by Alpha830RulZ (Score:1) Monday December 11 2006, @12:29PM
  • Practice and modular design (Score:5, Insightful)

    by SpinyNorman (33776) on Monday December 11 2006, @12:30PM (#17196588)
    Well, I've been programming professionally for over 25 years, so ...

    The real skill in programming is knowing how to break down a complex project into suitable pieces - top down modular design. The skill is not just being able to do this at all for arbitrarily complex projects, but being able to do it well - to select a breakdown that will be easy to develop and maintain, easy to debug, easy to modify and extend.

    I really don't think there's any substitute for experience in learning this, since that's the only way it's really going to sink in and become second nature. The best thing you can do therefore is to practice, and push yourself with new challenges all the time. At work push to get on the most demanding projects, and out of work do hobbyist projects that push yourself too. When you switch jobs, don't shy away from switching industries and into new areas. You'll become a stronger programmer by being a generalist rather than a specialist, as long as there's also plenty of depth (don't skip around *too* fast).

    What you're really learning via experience is a set of design patterns and approaches, so that when you look at new problems they will intuitively fall apart into "obvious" breakdowns. Nowadays it's fashionable to read books on design patterns, and that can maybe help, but I'd tend so suggest a more back to basics approach of just paying attention to the interfaces between your modules... A good modular breakdown is one that results in modules that may have a fair degree of internal complexity (but not too much - break it down further), but have simple/thin external interfaces. An overly complex module interface is often a sign of choosing a sub-optimal modular breakdown (you've drawn the dividing lines in the wrong place). Good modular design will also hide as much internal design as possible to keep things simple and flexible - if you've kept the interface simple and abstract, then you have more flexibility to change the implemenation.
  • Debugger by Darkforge (Score:2) Monday December 11 2006, @12:41PM
  • Advice by clawhound (Score:2) Monday December 11 2006, @12:42PM
  • Work is probably not the way by gatesvp (Score:1) Monday December 11 2006, @12:45PM
  • Theres more to it than how stuff works by Frankinmerth (Score:2) Monday December 11 2006, @12:46PM
  • how I did it by keithhackworth (Score:1) Monday December 11 2006, @12:52PM
  • Don't despair, and one piece of advice by inonit (Score:1) Monday December 11 2006, @12:58PM
  • Simple by Low Tide (Score:1) Monday December 11 2006, @12:59PM
  • Get Ready by Is0m0rph (Score:1) Monday December 11 2006, @01:00PM
  • One Step At A Time by shadowcabbit (Score:2) Monday December 11 2006, @01:04PM
  • Smaller tasks and knowing what you don't know. by Viv (Score:2) Monday December 11 2006, @01:04PM
  • One word: Deadlines (Score:3, Informative)

    by unfortunateson (527551) on Monday December 11 2006, @01:06PM (#17197146)
    (Last Journal: Tuesday May 18 2004, @03:35PM)
    You'll never get anything done "for real" until it's important. Whether it's a personal project like the console emulator you mentioned, or a for-hire piece of work, or a chunk of Mozilla you really care about, you'll do it when you have to.

    26 years ago, I did part-time work on a PDP-11-based system as I entered college. I found that in my classes, I'd write a 1000-line program that produced ten lines of code... and at work, I'd have a 1000-line program that produces 10,000 pages of output a month, on a much more constrained system. And my 1000 lines of code were equivalent to 3000-line versions by other students (and yes, I had documentation in my code)

    Constraints make you work better. Read 37Signals' blog [37signals.com] to find out how to work with less.

    Big projects happen in little steps. Take a project management class -- look at the Project Management Institute [pmi.org] to understand "work units" and "earned value" -- understand how to get work done and measure it.
  • One favor please by stonewolf (Score:2) Monday December 11 2006, @01:08PM
  • Open Source Is Your Friend, My Friend! by Maljin Jolt (Score:1) Monday December 11 2006, @01:13PM
  • Welcome to "the field"! by just fiddling around (Score:2) Monday December 11 2006, @01:15PM
  • Programming by systemeng (Score:1) Monday December 11 2006, @01:18PM
  • Fresh out of a technical college by Dasupalouie (Score:2) Monday December 11 2006, @01:19PM
  • Dont write code, design data structures... by FlyingGuy (Score:1) Monday December 11 2006, @01:28PM
  • Do your job well by snitmo (Score:1) Monday December 11 2006, @01:35PM
  • Start doing the cool stuff now. by E++99 (Score:2) Monday December 11 2006, @01:37PM
  • Open-source, safari, fundamentals, and flow by wikinerd (Score:2) Monday December 11 2006, @01:39PM
  • Experience will make the difference. by KillerBeeze (Score:1) Monday December 11 2006, @01:49PM
  • Some advices by rnd0110 (Score:2) Monday December 11 2006, @01:54PM
  • Step one: Start at the idea by NorbrookC (Score:2) Monday December 11 2006, @02:10PM
  • Learn to use what is already out there by sorak (Score:2) Monday December 11 2006, @02:12PM
  • Internship by Brandybuck (Score:2) Monday December 11 2006, @02:19PM
  • Telecommute by Baldrson (Score:2) Monday December 11 2006, @02:23PM
  • Research your school by blitzrage (Score:1) Monday December 11 2006, @02:28PM
  • Two words by CrazyTalk (Score:2) Monday December 11 2006, @02:38PM
  • Write Good Code by 1st Writing Bad Code by gov_coder (Score:1) Monday December 11 2006, @02:48PM
  • It's a tough road by dangitman (Score:2) Monday December 11 2006, @03:00PM
  • Start with a disassembler by codefrog (Score:1) Monday December 11 2006, @03:03PM
  • Be patient by iPaul (Score:2) Monday December 11 2006, @03:11PM
  • Theorie is the basis for long term understanding by Conficio (Score:1) Monday December 11 2006, @03:11PM
  • A few comments by Bluesman (Score:2) Monday December 11 2006, @03:20PM
  • Your school had a crappy CS curriculum by Wrangler (Score:2) Monday December 11 2006, @03:22PM
    • 1 reply beneath your current threshold.
  • CS != Programming by mattwarden (Score:2) Monday December 11 2006, @03:31PM
  • Didn't you have a computer architecture class? by Kymermosst (Score:2) Monday December 11 2006, @03:33PM
  • Where to start, at least where I did by jrmiller84 (Score:1) Monday December 11 2006, @03:40PM
  • whoops! by Anonymous Coward (Score:1) Monday December 11 2006, @03:55PM
  • Reading list by omibus (Score:2) Monday December 11 2006, @04:02PM
  • Find mentors... by Pedrito (Score:2) Monday December 11 2006, @04:03PM
  • Self motivation by halber_mensch (Score:2) Monday December 11 2006, @04:33PM
  • CS is exactly that....science by kurkpeterman (Score:1) Monday December 11 2006, @04:38PM
  • what good is a programmer? by briancnorton (Score:2) Monday December 11 2006, @04:44PM
  • Maybe it just's me, but ... by Kittenman (Score:1) Monday December 11 2006, @05:09PM
  • Know the feeling... by CptPicard (Score:1) Monday December 11 2006, @05:29PM
  • Create Change by sutekh137 (Score:1) Monday December 11 2006, @05:35PM
  • Art & Science by Tarinth (Score:1) Monday December 11 2006, @05:40PM
  • Open Source by bill_kress (Score:2) Monday December 11 2006, @05:53PM
  • Three words. by Shag (Score:2) Monday December 11 2006, @06:04PM
  • After you learn how to code, you'll have to debug by raygunz (Score:1) Monday December 11 2006, @06:28PM
  • Hence, the Joy of Hacking by cyberscan (Score:2) Monday December 11 2006, @07:11PM
  • How to write a ... by prefec2 (Score:1) Monday December 11 2006, @07:22PM
  • Excellent resource by illuminatedwax (Score:2) Monday December 11 2006, @08:21PM
  • Go get a dev board by xRelisH (Score:2) Monday December 11 2006, @09:01PM
  • building an emulator by martin-boundary (Score:2) Monday December 11 2006, @11:49PM
  • Programming isn't everything by seanellis (Score:2) Tuesday December 12 2006, @07:13AM
  • advice by ruslanv (Score:1) Friday December 22 2006, @03:28PM
  • Re:Blue Collar Programmer by symbolic (Score:2) Monday December 11 2006, @03:47PM
  • 35 replies beneath your current threshold.
(1) | 2 | 3